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 01/88] 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 02/88] 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 03/88] 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 04/88] 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 05/88] 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 06/88] 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 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 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 07/88] 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 08/88] 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 09/88] 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 10/88] 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 11/88] 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 12/88] 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 13/88] 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 14/88] 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 15/88] 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 16/88] 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 17/88] 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 18/88] 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 19/88] 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 20/88] 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 21/88] 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 22/88] 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 23/88] 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 24/88] 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 25/88] 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 26/88] 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 27/88] 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 28/88] 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 29/88] 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 30/88] 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 31/88] 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 32/88] 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 33/88] 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 34/88] 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 35/88] 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 36/88] 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 37/88] 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 38/88] 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 39/88] 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 40/88] 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 41/88] 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 42/88] 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 43/88] 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 44/88] 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 45/88] 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 46/88] 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 47/88] 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 48/88] 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 49/88] 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 50/88] 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 51/88] 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 52/88] 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 53/88] 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 54/88] 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 55/88] 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 56/88] 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 57/88] 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 58/88] 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 59/88] 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 60/88] 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 61/88] 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 62/88] 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 63/88] 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 64/88] 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 65/88] 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 66/88] 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 67/88] 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 68/88] 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 69/88] 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 70/88] 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 71/88] 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 72/88] 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 73/88] 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 74/88] 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 75/88] 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 76/88] 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 77/88] 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 78/88] 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 79/88] 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 80/88] 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 81/88] 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 82/88] 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 83/88] 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 84/88] 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 85/88] 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 86/88] 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 87/88] 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 88/88] 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)