diff --git a/docs/.firebaserc b/docs/.firebaserc new file mode 100644 index 0000000..e16d547 --- /dev/null +++ b/docs/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "composable-docs" + } +} diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..b2d6de3 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..c84c77f --- /dev/null +++ b/docs/README.md @@ -0,0 +1,61 @@ +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. + + +## Via Nix + +## Serving a hot-reloading version of these docs + +To serve a hot-reloading version of these docs, simply run: + +```bash +nix run ".#docs-dev" +``` + +And open [http://localhost:3000](http://localhost:3000/) in your browser. + +Then, edit the sources in `docs/`, and see them update live in your browser! + +## Building a static copy + +If you want to build a static copy of these docs, run: + +```bash +nix build ".#docs-static" +``` + diff --git a/docs/babel.config.js b/docs/babel.config.js new file mode 100644 index 0000000..e00595d --- /dev/null +++ b/docs/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/banner.png b/docs/banner.png new file mode 100644 index 0000000..bc22994 --- /dev/null +++ b/docs/banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9909ec0994c195d188a86a76169e1b9315c74e83b74d962dabaaa96ac024b60 +size 2651410 diff --git a/docs/docs/concepts/definitions.md b/docs/docs/concepts/definitions.md new file mode 100644 index 0000000..a04f32f --- /dev/null +++ b/docs/docs/concepts/definitions.md @@ -0,0 +1,38 @@ +# Definitions + +### Actively Validated Services (AVSes) +A project or protocol that needs distributed validation and acquires said validation via restaking. Examples of AVSes are middleware services, layer 2 networks, bridges, data layers, and dApps. + +### Composable Virtual Machine (CVM) +An orchestration language and execution runtime for cross-chain program execution and intents settlement that operates, specifically over IBC. + +### Cross-Domain Maximal Extractible Value (MEV) +The maximum value that can be captured from arbitrage transactions executed in a specified order across multiple domains. See: Maximal Extractible Value. + +### Cryptoeconomic Security +A model for securing a network via economic incentives and cryptography. + +### Generalized Restaking +A mechanism for restaking an asset from a starting location on any chain, such that the cryptoeconomic security provided can be used by Actively Validated Services on any other chain. See: Actively Validated Services, Cryptoeconomic Security, and Restaking. + +### Inter-Blockchain Communication (IBC) Protocol +A cross-chain messaging protocol for trust-minimized communication between different blockchains; website here. + +### Light Clients +Lightweight, trustless mechanisms for verifying the state of the counterparty blockchain; these are essential for IBC communication. + +### Maximal Extractible Value (MEV) +The maximal value extractable between one or more blocks, given any arbitrary re-ordering, insertion or censorship of pending or existing transactions (as defined by Obadia et al., 2021). + +### Multichain-Agnostic Normalized Trust-Minimized Intent Settlement (MANTIS) +A vertically integrated, optimized intents settlement framework with expression, execution, and settlement. + +### Operators +Entities responsible for executing off-chain software logic restaked from an AVS. See: Actively Validated Services. + +### Restaking +A new primitive in crypto-economic security that enables the rehypothecation of a token on the consensus layer. + +### Sync Committee +A committee of 512 validators that is randomly selected every sync committee period (~1 day). While a validator is part of the currently active sync committee, they are expected to continually sign the block header that is the new head of the chain at each slot. + diff --git a/docs/docs/concepts/ibc.md b/docs/docs/concepts/ibc.md new file mode 100644 index 0000000..87c7603 --- /dev/null +++ b/docs/docs/concepts/ibc.md @@ -0,0 +1,113 @@ +# What is the IBC Protocol? + +Before delving into an understanding of the IBC protocol, it's crucial to comprehend why choosing IBC is important and why the existing bridging solutions won't suffice to bring DeFi to the masses. + +## Issues in cross-chain infrastructure + +The main objective of bridging infrastructure is to integrate the different blockchain asset and data markets to unify the fragmentation of liquidity. This integration is similar to how stock exchanges are connected through electronic trading to enable the transfer of capital. However, bridges are currently facing significant safety issues due to the reliance on various trust assumptions that custodial and multi-sig-based bridges carry. + +Over $2 billion has been lost due to hacks, with many of the most significant attacks occurring across multiple chains, where cross-chain bridges and CEX hot wallets accounted for over 52% of the total stolen funds in crypto. A trusted bridge is a connection between two blockchain networks that relies on a third party to facilitate the transfer of assets between the two networks. This third party is responsible for ensuring the security and reliability of the bridge, and users must trust this party to handle their transactions properly. + +If security is not prioritized, these risks will become even more widespread. + +During the market cycle of 2020-2021, as new ecosystems gained prominence, numerous bridging protocols emerged to address the growing need for liquidity. Most, if not all, of these bridges were built on optimistic, fraud-sensitive architectures, relying on trusted third parties, oracles, and multi-signatures. In addition to facilitating asset transfers, some of these bridges also supported message passing, which could serve as a foundational element for cross-chain applications. However, these bridges have proven to pose security risks to DeFi and are challenging to build protocols on top of due to the limited features offered by message passing. + +In a trusted bridging setup, we identify the following actors: + +- Relayer: pays for execution on the destination chain. +- Oracle: provides authorized mint and burn access to the contracts on origin and destination side. +- User: a contract, protocol or actual user directly interacting with the bridge. + +In this generic architecture, we choose to keep the relayer and oracle as separate actors, although in many actual implementations, these are the same entity. + +Designs used in Wormhole, Axelar and centralized exchanges use one or more accounts to determine the state of the origin chain, destination chain, and based on that co-sign a message to mint/unlock funds on the destination side. + +### Pessimistic & Optimistic bridges +**Pessimistic bridges** require the oracle to pre-validate withdrawals, assuming that relayers will commit fraud as soon as they can. + +The oracle assumes multiple responsibilities here: + +1. It ensures that the event data is correct. +2. It ensures that the event data is final. + +For many chains, including Ethereum, the second responsibility cannot yet be ensured, and thus the oracle service is taking on a large risk. Usually this is reduced by waiting for a number of confirmations (blocks built on top of the current block). + +From the on-chain perspective, funds are managed assuming that the oracle is honest about both responsibilities. Fraud, hacks or misconfigurations can lead to the oracle's authority being used to incorrectly release funds, as occured in Wormhole. + +Different protocols attempt to reduce this risk by sharding the private key using multi party computation (MPC), or simply using a multisig. + +For a secure bridging operation, the transaction time $t$ is given by: + +$$ t := t_{finality} + t_{submission} $$ + +where $t_{finality}$ is the average duration for block finality, and $t_{submission}$ the length of time of block inclusion on the destination side. + +**Optimistic bridges** assume that the relayer is usually honest, and fraud rarely occurs. The relayer/oracle algorithm is relatively identical to the algorithm. On the contract side however, the mint/unlock action is delayed, ensuring that fishermen have sufficient time to dispute the message. + +Message acceptance is incredibly simple, for example: + +``` +\begin{algorithm}[H] +\SetAlgoLined +\BlankLine +\If{message is from relayer}{ + store(message) +} +\caption{Message acceptance protocol for optimistic trusted bridges} +\end{algorithm} +``` + +However, actually enacting the message, which leads to mints and unlocks, there is a time delay, referred to as the dispute window. +``` +\begin{algorithm}[H] +\SetAlgoLined +\BlankLine +\If{message received time is above wait threshold}{ + If{message is undisputed} { + enact(message) + } +} +\caption{Unlock protocol for optimistic trusted bridges} +\end{algorithm} +``` +Optimistic bridging trades in some advantages over pessimistic bridging, such as faster transaction times, in favour for more decentralized security. + +For a secure bridging operation, the transaction time $t$ is given by: + +$$ t := t_{finality} + t_{submission} + t_{dispute window} $$ + +where $t_{finality}$ is the average duration for block finality, $t_{submission}$ the length of time of block inclusion on the destination side, and $t_{dispute window}$ the amount of time that the relayed transaction may be disputed on the destination side. + +Relayers can choose to combine $t_{finality}$ and $t_ {dispute window}$, at the risk of needing to dispute their own submissions. This improves UX but brings in a significant risk to the relayer, and in practise is not performed. + +### Economic Risks in Trusted Bridging + +Bridging introduces security risks, both technically and economically. A wrapped token essentially represents a debt obligation between the bridging protocol and the token holder. This guarantees that upon redemption of the wrapped token, the original token will be returned. The value of the wrapped token is determined by the underlying asset value minus the risk associated with the bridging protocol failing to fulfill the debt. Presently, the market often misprices wrapped tokens, valuing them at the same level as the underlying asset. Consequently, when a trusted bridge fails to honor the debt, such as in the event of a hack resulting in the loss of the underlying asset, the economic impact is significant. + +For protocols dependent on a trusted bridge, addressing this underlying economic risk involves pricing wrapped tokens differently. While this approach helps mitigate economic consequences, it adversely affects liquidity and user experience. Furthermore, it diminishes the utility of cross-chain protocols, as the actual cost of utilizing a trusted bridge includes both the fee and the premium on wrapped tokens. + +The IBC protocol solves the issue of secure cross-chain communication, but it was originally only implemented for Cosmos SDK chain. The problem is that it needs to be implemented on non-Cosmos SDK chains. + +**Picasso fixes this.** + +## IBC Protocol - a trust-minimized standard for cross-ecosystem communication + +In pursuit of its core mission, significant strides have been made in developing trust-minimised bridges to facilitate decentralised and non-custodial cross-chain transactions powered by Picasso. The approach involves pioneering the extension of the IBC protocol and thus establish the framework as the industry standard for cross-ecosystem communication. Picasso's innovation is not limited to Cosmos but rather actively leveraging and extending the IBC protocol beyond Cosmos, pushing its boundaries beyond its original scope. + +The IBC protocol is an open-source and permissionless protocol designed to facilitate the authentication and transport of data, including message passing, tokens, NFTs, and more, between two networks and the applications within them. IBC is adaptable and can be implemented across different blockchains, networks, or state machines. Its requirements are not restrictive in terms of the type of consensus algorithm, allowing it to connect various types of blockchains, such as those based on Cosmos typically powered by Tendermint/CometBFT, Ethereum-like networks, and Solana as well. + +:::info +The IBC protocol is maintained by the [Interchain Foundation](https://interchain.io/) and currently boasts three mainstream implementations: one written in [Golang](https://github.com/cosmos/ibc-go), another in [Rust](https://github.com/cosmos/ibc-go) and the third in Solidity. Currently, Picasso is the only mainnet chain operating with the Rust and Solidity implementations in production. +::: + +Introduced in 2019, IBC was integrated into the Cosmos SDK in 2021. Presently, over 107 chains are interconnected, with IBC facilitating a volume of more than 5 billion USD as of December 2023, and [over 5 million token](https://mapofzones.com/home?columnKey=ibcVolume&period=24h) transfers between IBC-connected chains. These statistics underscore IBC's resilience over time and its ability to adapt and evolve its protocol to meet the needs of users and application chains. Its widespread adoption and continued relevance within the Cosmos ecosystem have also garnered attention in the broader crypto community. + +IBC supports asset transfers (fungible tokens, non-fungible tokens), generic message passing, cross-chain contract calls, cross-chain fee payments, interchain collateralization and more in a trustless manner. The trustless condition of IBC is due to the fact it is: + +- built upon light clients that communicate with each other and updates the state of a counterparty chain. These are lightweight versions of blockchain nodes that can verify specific information on counterparty chains without downloading the entire blockchain history. This allows for trustless verification of data and state on external blockchains. +- typically used by Proof of Stake (PoS) blockchains which provide a high level of security, reducing the need to trust a single entity or centralized authority +- utilising on-chain verification of transactions and messages. This means that the counterparty chain can independently validate the correctness of incoming messages and transactions using its own consensus rules, eliminating the need to trust external sources +- able to upgrade the state of a chain through sending finality proofs, other types of transactions and packets that can be verified +- employs mechanisms to prevent double-spending of assets across blockchains + +For a more detailed technical explanation, please refer to the [IBC section](../technology/ibc.md). \ No newline at end of file diff --git a/docs/docs/concepts/picasso.md b/docs/docs/concepts/picasso.md new file mode 100644 index 0000000..3fdc6e5 --- /dev/null +++ b/docs/docs/concepts/picasso.md @@ -0,0 +1,45 @@ +# What is Picasso? + +Picasso is a DeFi infrastructure-focused Layer 1 protocol that leads the industry in building the trust-minimized interoperability solution -**Cross-Ecosystem IBC**. Complementary to the interoperability work, Picasso is building the first **Generalized Restaking Layer** starting with deployment on Solana, and expand support for all IBC connected ecosystems. + +In short, Picasso is the **first censorship-resistant, trust-minimized interoperability solution (Cross-Ecosystem IBC Hub), and also a platform for the first Generalized Restaking Layer.** + +Picasso is built using the [Cosmos SDK](https://v1.cosmos.network/sdk) framework and acts as an [Inter-Blockchain Communication (IBC)](https://www.ibcprotocol.dev/) Protocol hub between Cosmos and non-Cosmos IBC-enabled chains. Picasso’s Generalized Restaking Layer, paired with IBC, can utilize any economically valuable assets to secure any use cases that require temporary or permanent security. Through this infrastructure, Picasso will deliver native protocol level security and permissionless interoperability for all Decentralized Finance (DeFi) users, and allow a diverse set of assets across all major ecosystems to be used as security for any blockchain services and [Proof of Stake (PoS)](https://blog.cosmos.network/understanding-the-basics-of-a-proof-of-stake-security-model-de3b3e160710) based protocols. + +## Security & Consensus + +Picasso is on mainnet deployment as a Cosmos SDK chain with 48 validators and runs the [CometBFT](https://cometbft.com/) consensus. The validators secure Picasso through (1) Picasso (PICA) token staking, (2) Picasso Generalized Restaking Layer detailed in a subsequent section, and (3) a collaboration with [Ethos](https://ethosstake.com/) bringing [EigenLayer](https://www.eigenlayer.xyz/) security to Cosmos. + +There are plans to modify the consensus of Picasso to Kauri, a Byzantine Fault Tolerant (BFT) communication abstraction that leverages dissemination/aggregation trees for load balancing and scalability. The Composable Research team is working to make Kauri Tendermint-enabled, as described [here](https://research.composable.finance/t/rfp-5-a-fast-consensus-for-cosmos-sdk-chains/304). Thus, Kauri will be able to operate with IBC. + +## Key Features + +### Cross-Ecosystem IBC + +The IBC Protocol is used for trust-minimized communication between different blockchain networks/ecosystems. It relies on security at the consensus level of the two transacting chains, and this is a large reason why IBC was selected as a cornerstone of Picasso's efforts to connect ecosystems, in addition to its performance and standardization. + +Originally, IBC was tailored for native connections between Cosmos SDK chains. Extending this to include more networks required significant development effort. In fact, IBC on Solana, Ethereum, Polkadot and Kusama all require respective customization from implementation of light client to achieving state proof (finality), in order to not rely on any centralized intermediary and uphold the IBC standards and values of censorship resistance. + +These connections allow the transfer of both fungible (e.g Tokens) and non-fungible tokens (NFTs), generic message passing, cross-chain contract calls, cross-chain fee payments, and cross-ecosystem collateralization, all executed in a natively secured environment. + +### Generalized Restaking Layer + +Restaking enables users to provide blockchain security through collateralizing the economic value of their liquid staked tokens and yield-bearing assets, in exchange for validating PoS protocols and services, also called Actively Validated Services (AVSes) that seek security. + +Picasso expands upon the concept of restaking popularized by [Eigenlayer](https://docs.eigenlayer.xyz/eigenlayer/overview/) to deliver Generalized Restaking: restaking of assets on multiple PoS networks to establish **cross-ecosystem pooled security**. This is made possible by Picasso’s IBC connections and the flexible architecture of Generalized Restaking Layer on Picasso. + +We believe that all assets that have underlying utility, community, and liquidity, given long enough horizon, will have various level of economic value that can be used to enhance security guarantees for many use-cases (interoperability, oracles, sequencers and more) built upon the Proof of Stake consensus mechanism. + +## Staking PICA + +A portion of the bridging fees generated by each new IBC connection implemented via Picasso will be allocated to stakers of PICA. Currently, stakers receive rewards from the Polkadot-Cosmos and the Ethereum IBC implementation, with fees from Solana activity to be included upon launch. + +To handle fees collected in the form of the bridged token, a mechanism will be implemented to use these fees to buy back PICA from the market and distribute them to stakers as rewards. For instance, if ETH is bridged from Ethereum mainnet to Solana, 20% of the fees collected from this transfer will be used to buy back PICA and distribute it to PICA stakers. This process will be standardized for all tokens transferred across the bridge. + +PICA is essential for securing Picasso. To participate in governance activities, PICA must be staked on the network. Governance decisions on Picasso will include determining AVS and Operator onboarding, as well as adding new liquid staked assets to the restaking layer. + +The Generalized Restaking Layer will ensure the security of launches and activities of various Actively Validated Services (AVS), boosting revenue generation for PICA stakers. Specifically, 20% of the revenue will be allocated to PICA stakers. The initial AVS to be launched will be the AVS for Solana IBC. + +:::tip +Follow [this guide](https://docs.composable.finance/user-guides/pica-staking) for staking PICA on Picasso to take part in governance and earn rewards through various protocol revenue streams. +::: diff --git a/docs/docs/concepts/restaking.md b/docs/docs/concepts/restaking.md new file mode 100644 index 0000000..582820b --- /dev/null +++ b/docs/docs/concepts/restaking.md @@ -0,0 +1,18 @@ +# What is Restaking? + +Restaking has been described as a new primitive in crypto-economic security that enables the rehypothecation of a token on the consensus layer. With Picasso’s Generalized Restaking layer, the process of restaking involves a user staking a layer 1 (L1) chain’s native asset with a liquid staked derivative provider (e.g. a protocol that provides a liquid staked token or LST representing the user’s stake), they then “restake” this LST in another vault for restaking, which pools security from all the LSTs deposited. This pooled security can then be used by Actively Validated Services (AVSes), which are protocols and projects tapping into this type of security. + +As a result, restaking enables users to multiply the crypto-economic security (and the yield) of yield-bearing assets, as they are essentially able to stake the same assets twice, receiving yield and supporting PoS validation both times. Compared to staking alone, using the same amount of initial assets, restaking thus not only increases a user’s yield, but also enhances total security by providing security to both the L1 and AVSes. + +Restaking has been pioneered and popularized by EigenLayer, which is a protocol for restaking Ether (ETH) on Ethereum. In particular, users staking ETH are able to opt into EigenLayer’s smart contracts for restaking their ETH and thus extending the crypto-economic security to additional applications. EigenLayer’s total value locked (TVL) at the time of writing is over $9.2 billion, indicating that there is a clear demand for restaking. + +Despite the benefits of restaking, this concept has largely not yet expanded beyond the Ethereum ecosystem. However, there is a huge potential for restaking on other chains. This is particularly true on Solana, where there is a massive amount of staking occurring, with many prominent staking protocols already offering liquid staking tokens (LSTs) and receipt tokens that can be used for various purposes while a user’s original assets remain staked. In fact, at the time of writing, over 390 million SOL are staked, representing a staking market capitalization of over $43 billion dollars. This is over 88% of the total circulating supply of SOL. Therefore, there is an incredibly large market for restaking these assets that are already staked in Solana. + +A critical part of Picasso is thus the Restaking Layer; for all chains that are interoperable with IBC, we intend to facilitate restaking by connecting our Restaking Layer to IBC. Our first use of this Restaking Layer is for Solana IBC, introducing restaking to Solana for the first time. + +## Key features: + +- **Cross-Chain Backed Assets Restaking**: While Eigenlayer exists as a Restaking layer on Ethereum for ETH and ETH LSTs, Generalised Restaking supports native assets from multiple ecosystems, including Solana, Cosmos, Polkadot, Ethereum, and more. UX is abstracted away from users via CVM. +- **Flexible parameters for AVSes**: AVSes can be integrated into the system as needed, with the ability to onboard and offboard at will. AVS builders possess the flexibility to define slashing conditions and customize decentralization parameters according to specific requirements. +- **Emissions and Revenue Sharing**: Users will be earning a fixed yield and additional share of the revenue generated from AVSes on Picasso by restaking their assets. Additionally, PICA stakers will be earning a portion of the yield as well. +- **Permissionless onboarding**: PICA governance on Picasso Cosmos cast votes to decide whether to onboard an AVS, and they have visibility into the amount they intend to reward for security purposes. \ No newline at end of file diff --git a/docs/docs/develop/codespaces.md b/docs/docs/develop/codespaces.md new file mode 100644 index 0000000..de3c84e --- /dev/null +++ b/docs/docs/develop/codespaces.md @@ -0,0 +1,20 @@ +# Remote developer environment (Codespaces) + +[Codespaces](https://github.com/features/codespaces) provides +**cloud developer environments.** This means that we all use the same +Dockerized devcontainer environment. It moves all of the resource-intensive processing +such as code compilation and analysis to the cloud, while the UI is rendered locally, providing a +**fast, responsive, and consistent user experience**. + +This gives us the following advantages: + +- All configuration of developer tooling is already done for you and shared with your team. If something works for one + person, it works for everyone. This ensures that you can instantly start coding. No more "It works on my machine." +- You leverage fast (`16-core CPU`, `32GB RAM`) machines to compile and run your code. Which speeds up your compilation + times, and saves you resources on your main machine. +- You don't have to worry about using the wrong versions of dependencies, build systems, or other tools, since everyone + uses the same dependencies that have been defined in code, and are identical to the ones used in our CI pipelines. +- If you come up with an improvement to our development experience, you can open a PR for it and then the entire team +- can take advantage of it. + +Let's [get started with Codespaces!](./codespaces/getting-started.md) diff --git a/docs/docs/develop/collator-guide.md b/docs/docs/develop/collator-guide.md new file mode 100644 index 0000000..cb3e0ba --- /dev/null +++ b/docs/docs/develop/collator-guide.md @@ -0,0 +1,141 @@ +# Collator Set-up Guide + + +This guide will show you how to set up a collator for Picasso. Please follow the steps below to complete the setup. + +### Select (virtual) hardware + +To run a collator, Composable recommends a minimum of 2 CPUs, 6 GB of memory, and 600GB of storage (will increase over time). + +### Generate a new node key + +First, you need to generate a temporary file containing both the node identity and node key. + +```sh +sudo docker run --rm -ti -u$(id -u):$(id -g) parity/subkey generate-node-key > /tmp/tmp_not_a_real_key +``` + +Now retrieve the node identity. It will look something like "12D3KooWLUrUPDD93kTTdk4tFDrZmYLqnT5Ch9aG9A9gj6C7pv5M". + +```sh +head -1 /tmp/tmp_not_a_real_key +``` + +The following command will split the node key to a separate file ( /tmp/not_a_real_key ). + +```sh +tail -1 /tmp/tmp_not_a_real_key >/tmp/not_a_real_key +``` + +Copy the key file to the machine that will run the collator and place it in a safe location (In the example we use, the location is /home/composable/node-key). + +### Run the collator + +Use the following Docker Compose file to run the application. + +```yml +services: + composable_node: + image: composablefi/composable:${COMPOSABLE_VERSION} + container_name: composable_node + volumes: + - /var/lib/composable-data:/data + - /home/composable/node-key:/node-key + ports: + - 9933:9933 + - 9944:9944 + - 30334:30334 + - 30333:30333 + - 9615:9615 + restart: unless-stopped + command: > + /bin/composable ${COMPOSABLE_FLAGS} + networks: + - composable_network + + + +networks: + composable_network: + name: composable_network + driver: bridge + +``` + +An environment file can be used to pass in the two variables above (COMPOSABLE_FLAGS and COMPOSABLE_VERSION). Alternatively, the values can be placed directly in the file. + + +```yaml +COMPOSABLE_FLAGS="--chain=picasso --name=partner-collator --listen-addr=/ip4/0.0.0.0/tcp/30334 --prometheus-external --prometheus-port 9615 --base-path /data --execution=wasm --collator --pruning=archive --node-key-file=/node-key -- --execution=wasm --listen-addr=/ip4/0.0.0.0/tcp/30333 " +COMPOSABLE_VERSION="v2.10009.0" +``` + +:::note +Please ensure that you modify the "name" parameter to a unique value that is specific to you. +::: + +With the compose information in “docker-compose.yml” and the environment information in a file called “environment”, run the following command to start the application: + +```sh +sudo apt-get install -y docker-compose +sudo docker-compose --env-file environment up -d +``` + +To see logs, run: + +```sh +sudo docker logs -f $(sudo docker ps |grep composable|awk '{print $1}') +``` + +The latest version of the application can be found at [Docker hub] or [Composable releases]. + +[Docker hub]: https://hub.docker.com/r/composablefi/composable/tags + +[Composable releases]: (https://github.com/ComposableFi/composable/releases/) + +This configuration will pass the key into the Composable application at startup. Verify that it is being used by checking the log for: + +```sh +[Parachain] 🏷 Local node identity is: 12D3KooWLp9aJBC7Jury1EgBYT4prqThmKPyB1Fm2fpBPUok1tKb +``` + +### Verify that the node is running and catching up +Go to [Polkadot Telemetry](https://telemetry.polkadot.io/#list/0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc). On Picasso's page, you should be able to see your node (based on the name you assigned it above), and verify that it is catching up. + +### Verify that the http RPC port is available + +```sh +curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "rpc_methods"}' http://127.0.0.1:9933/ +``` + +If this does not return anything, you may need to temporarily enable a few flags. + +```yaml +--rpc-external \ +--unsafe-rpc-external \ +--rpc-methods=unsafe \ +``` + +### Get collator session key + +On each new collator, run: + +```sh +curl -H "Content-Type: application/json" -d '{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys" }' http://127.0.0.1:9933/ +``` + +Use the resulting session key in the final step. + +### Link node(s) to wallet(s) + +On Polkadotjs, at https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpicasso-rpc.composable.finance#/explorer. + +Head to "Extrinsics" in the Developer tab. As the wallet account, run session setKeys(). Use the result from above as the Key and for the proof, enter "0x" as depicted in the example image below. + +![polkadotjs_collator](./polkadotjs-collator.png) + +:::note +Make sure you are running your node in collator mode, then provide the Public address of your collator wallet to Composable so it can be added as an approved collator. + +If you encounter difficulties during the setup process, please feel free to create a ticket on our Discord server for assistance. +::: diff --git a/docs/docs/develop/composable-asset-list.md b/docs/docs/develop/composable-asset-list.md new file mode 100644 index 0000000..acd54a5 --- /dev/null +++ b/docs/docs/develop/composable-asset-list.md @@ -0,0 +1,16 @@ +# Composable Asset List + +The following is a current list of assets available on the Composable Parachain. The metadata for assets is stored in the `assetsRegistry` pallet and amounts are stored in the `tokens` (ORML) pallet. + +| Asset | Symbol | Asset ID | Decimals | +| -------------------- | ------- | ----------------------------- | -------- | +| Picasso | PICA | 79228162514264337593543950337 | 12 | +| Polkadot | DOT | 79228162514264337593543950342 | 10 | +| Kusama | KSM | 79228162514264337593543950340 | 12 | +| Kusama AssetHub USDT | USDT | 79228162514264337593543950466 | 6 | +| BNC Polkadot | BNC DOT | 79228162514264337593543950369 | 10 | +| Voucher DOT | vDOT | 79228162514264337593543950370 | 10 | +| Equilibrium USD | EQD | 79228162514264337593543950463 | 9 | +| Astar | ASTR | 79228162514264337593543952342 | 18 | +| Equilibrium | EQ | 79228162514264337593543952347 | 9 | + diff --git a/docs/docs/develop/composable-cosmos.md b/docs/docs/develop/composable-cosmos.md new file mode 100644 index 0000000..5df4d07 --- /dev/null +++ b/docs/docs/develop/composable-cosmos.md @@ -0,0 +1,77 @@ +# Composable Cosmos Mainnet + +## Information +- Network information: https://github.com/ComposableFi/composable-cosmos +- Chain ID: centauri-1 +- Genesis: https://github.com/notional-labs/composable-networks/blob/main/mainnet/genesis.json +- Binary: https://github.com/ComposableFi/composable-cosmos/releases/tag/v6.3.1 +- Current version: v6.3.1 (check the repository for the latest release) +- Public Notional endpoints: + - RPC: https://composable-rpc.polkachu.com/ (1) https://api-composable-ia.cosmosia.notional.ventures (2) +- Block Explorer: https://ping.pub/composable (1) https://explorer.nodestake.top/composable/ (2) +- Faucet: **The gas fees for Composable Cosmos is zero.** +- IBC Channels: https://polkachu.com/ibcs?network=composable + +## Hardware recommendation +``` +Quad core or larger amd64 CPU +64GB+ RAM +1TB+ NVMe Storage +``` +## Binary + +Mainnet launch version: v2.3.5, precompiled binary for linux-amd64 could be found here: https://github.com/ComposableFi/composable-cosmos/releases/tag/v2.3.5 + +``` +git clone https://github.com/ComposableFi/composable-cosmos +cd composable-centauri +git checkout v5.2.2 +make install +``` +:::note +Ensure you are running the latest release, head to the [repository](https://github.com/ComposableFi/composable-cosmos) for the Composable Cosmos chain for assurance. +::: + +## Genesis +Final mainnet genesis: https://raw.githubusercontent.com/notional-labs/composable-networks/main/mainnet/genesis.json +``` +banksyd tendermint unsafe-reset-all +wget -O ~/.banksy/config/genesis.json https://raw.githubusercontent.com/notional-labs/composable-networks/main/mainnet/genesis.json +``` + +## P2P connection +You can set the peers/seeds in `config.toml`: +``` +sed -i.bak -E "s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1"'"c7f52f81ee1b1f7107fc78ca2de476c730e00be9@65.109.80.150:2635"'"|" ~/.banksy/config/config.toml +``` + +*Seeds:* +``` +c7f52f81ee1b1f7107fc78ca2de476c730e00be9@65.109.80.150:2635 +``` + +*Persistent peers:* +``` +4cb008db9c8ae2eb5c751006b977d6910e990c5d@65.108.71.163:2630,63559b939442512ed82d2ded46d02ab1021ea29a@95.214.55.138:53656 +``` + +## Explorer + +Nodestake: https://explorer.nodestake.top/composable/ + +Ping Pub: https://ping.pub/composable + +## Snapshots +Fresh state synced snapshots and other mainnet materials could be found here: https://polkachu.com/networks/composable +Thanks to Polkachu. + +## Creating the Validator + +After getting your node synced and token ready, submit this transaction to create your validator: +``` +centaurid tx staking create-validator --pubkey=$(centaurid tendermint show-validator) --moniker VAL_NAME --details="XXXX" --identity XXXX --security-contact XXXX --website XXXX --commission-max-rate 0.1 --commission-max-change-rate 0.05 --commission-rate 0.05 --min-self-delegation 1 --from YOUR_KEY --amount=1000000000000ppica --chain-id centauri-1 +``` + +:::caution +Remember to back up your `priv_validator_key.json` in ~/.centauri/config/ alongside with the seed phrases to your wallet. +::: \ No newline at end of file diff --git a/docs/docs/develop/composable-testnet-4.md b/docs/docs/develop/composable-testnet-4.md new file mode 100644 index 0000000..40a29dc --- /dev/null +++ b/docs/docs/develop/composable-testnet-4.md @@ -0,0 +1,104 @@ +# Composable Cosmos Testnet 4 + +Composable Cosmos Testnet 4 serves the following purposes: + +- Testing chain upgrades before mainnet releases. +- Connecting Ethereum Goerli to the first Cosmos chain via IBC. +- An environment for developers and users to test the functionalities of CVM and MANTIS on a Cosmos-only blockchain. + +## Information +- Network information: https://github.com/notional-labs/composable-networks/tree/main/banksy-testnet-4 +- Chain ID: banksy-testnet-4 +- Genesis: https://raw.githubusercontent.com/notional-labs/composable-networks/main/banksy-testnet-4/genesis.json +- Binary: https://github.com/notional-labs/composable-centauri/releases/tag/v5.2.5-testnet4 +- Current version: v5.2.5-testnet4 +- Peers: a89d3d9fc0465615aa1100dcf53172814aa2b8cf@168.119.91.22:2260 +- Public Notional endpoints: + - RPC: https://rpc-banksy4.notional.ventures:443 + - API: https://api-banksy4.notional.ventures:443 + - gRPC: http://168.119.91.22:2263 +- Block Explorer: https://explorer.stavr.tech/Composable-Testnet4 +- Faucet: [Composable Discord](https://discord.com/invite/composable) + +## Setup Instruction + +**1. Building the binary** + +There are two ways of setting up the `centaurid` binary, building from source or installing from binary URL, which is mentioned in the install script in the next section. + +To build the binary from source, run these commands: + +``` +#mkdir $HOME/go/bin # ignore this command if you already have $HOME/go/bin folder +export PATH=$PATH:$HOME/go/bin +cd $HOME +git clone https://github.com/notional-labs/composable-centauri +cd composable-centauri +git checkout v5.2.5-testnet4 # Using v5.2.5-testnet4 +make install +centaurid version # v5.2.5-testnet4 +``` + +**2. Joining testnet** + +Here is a full script to install `centaurid binary` and run the node with state sync. This script should be run with administration privileges by running `sudo script.sh`: + +``` +# script.sh +centaurid init --chain-id banksy-testnet-4 +wget https://raw.githubusercontent.com/notional-labs/composable-networks/main/banksy-testnet-4/genesis.json -O $HOME/.banksy/config/genesis.json + + +# state sync +## downloading wasm snapshot first +curl -o - -L https://composable.wasmt4.stavr.tech/wasm-composable.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.banksy --strip-components 2 + +SNAP_RPC="https://rpc-banksy4.notional.ventures:443" +LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ +BLOCK_HEIGHT=$((LATEST_HEIGHT - 2000)); \ +TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) +sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \ +s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \ +s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \ +s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" $HOME/.banksy/config/config.toml + +# run node +centaurid start --p2p.seeds a89d3d9fc0465615aa1100dcf53172814aa2b8cf@168.119.91.22:2260 +``` + +**3. Join testnet as a validator** +To join `banksy-testnet-4` as a validator, you should setup a running node as in step 1 above and wait for it to be fully synced, and then setup validator: + +- Create a key: +``` +centaurid keys add # generate a new key, or use `--recover` to recover an existed key with mnemonic +``` + +- For testnet tokens, head to ethibc-testnet-faucet channel on the Composable discord and send the following message with your address included: + +``` +$request
composable +``` + +- To see the current balance of the address, run the following command: + +``` +$balance
composable +``` + +- Create validator: +``` +centaurid tx staking create-validator --amount=1000000000000ppica --moniker="" --chain-id=banksy-testnet-4 --commission-rate="0.05" --commission-max-change-rate="0.01" --commission-max-rate="0.20" --from= --node=https://rpc-banksy4.notional.ventures:443 --gas=auto --min-self-delegation 10 --pubkey=$(centaurid tendermint show-validator) +``` + +To add validator info: + +``` +centaurid tx staking edit-validator \ + --website="" \ # URL to validator website + --identity="" \ # keybase.io identity + --details="" \ # Additional detail + --security-contact="" \ # security email + --from= \ + --node="https://rpc-banksy4.notional.ventures:443" +``` diff --git a/docs/docs/develop/cosmwasm-cli.md b/docs/docs/develop/cosmwasm-cli.md new file mode 100644 index 0000000..f336e44 --- /dev/null +++ b/docs/docs/develop/cosmwasm-cli.md @@ -0,0 +1,100 @@ +# Composable CosmWasm CLI + +Composable Cosmwasm CLI is a CLI tool to quickly get started with the ecosystem and interact with a chain that runs `pallet-cosmwasm`. In this guide, we will show you how to run the CLI on a local Picasso network and Picasso Rococo. + +:::info +Picasso Rococo is a testnet (test network) for [Picasso](../networks/picasso-parachain-overview.md). It allows developers to experiment, test runtime module deployment, and refine their applications to ensure the stability and compatibility of new features before deploying on Picasso mainnet by interacting with the [Rococo Relay Chain](https://polkadot.network/blog/rococo-revamp-becoming-a-community-parachain-testbed/). +::: + +## Setting up the development environemnt + +The process of setting up a development environment for deploying CosmWasm contracts, both a local Picasso netork and on Picasso Rococo, follows the same procedure. There is a distinction in the RPC endpoint mentioned in the CLI commands to upload, instantiate and execute contracts. To interact with a local Picasso network, you will utilize `ws://127.0.0.1:9988` whereas to deploy on Picasso Rococo, you will employ `wss://picasso-rococo-rpc-lb.composablenodes.tech:443`. Additionally, please note that the "-n alice" sudo key will be substituted with your seed phrase when entering the commands. + +Nix is a requirement to set up and start a local development environment with Composable's code. We recommend using the [Zero-to-Nix installer](https://zero-to-nix.com/start/install) to install Nix. Refer to our [docs](../nix.md) for more information. + +### Installing `ccw` + +To install the `ccw-vm`, run the following command using Nix: + +``` +nix run github:ComposableFi/composable/release-v9.10038.2#ccw --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +``` + +:::note + +Make sure to include the most recent release tag, which can be located on the Composable [releases page](https://github.com/ComposableFi/composable/releases). +::: +### Setting up the DevNet + +To run a local network with Alice sudo key and start the development environment, run the following command: + +``` +nix run github:ComposableFi/composable/release-v9.10038.2#devnet-picasso --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +``` + +This will take time at first but since it is cached, it will be almost instant afterward. But note that your node will be rebuilt if the commit hash changes. If you would like to avoid this, you can always use a specific commit hash like this example: + +``` +nix run "github:ComposableFi/composable/d2845fc731bc3ee418a17cf528336d50f4b39924#devnet-picasso" +``` + +### Setting up the environment to deploy on a local network of Picasso + +Once your node is set up on local from the previous step, open the Polkadot-Js explorer to view activity changes on your local network by heading to the development section with the custom endpoint linked [here](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9988#/explorer). If Polkadot-JS fails to load your local network after running the node, it is possible that there was an error during the build process, resulting in the failure to load it correctly. + +### Setting up the environment to deploy on Picasso Rococo + +Once you have completed the setup of your development environment, you can proceed to the [PolkadotJS explorer](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpicasso-rococo-rpc-lb.composablenodes.tech#/explorer) dedicated to Picasso Rococo. This explorer allows you to monitor real-time events and also interact with `ccw` without the need to interact with the CLI. + +To deploy contracts on Picasso Rococo, you will need PICA tokens for testing. To assist with this, we have established a [faucet](https://matrix.to/#/#picasso-rococo-faucet:matrix.org) on the Matrix platform. It enables developers to receive PICA tokens specifically for the Picasso Rococo network. To retrieve your address, you can visit the [Accounts page](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpicasso-rococo-rpc-lb.composablenodes.tech#/accounts) in PolkadotJS. For detailed instructions on creating a PolkadotJS wallet, please refer to [this guide](../user-guides/polkadotjs-extension-create-account.md) we have published. Additionally, make sure you have updated to the latest metadata and have enabled the 'Allow use on any chain' option within the PolkadotJS plugin. + +A useful resource for interacting with PolkadotJS is their [developer documentation](https://polkadot.js.org/docs/). + +## Interacting with the CLI + +### Upload a CosmWasm contract + +For interacting with `cosmwasm`, the `substrate` subcommand is used. To be able +to call your contracts, you need to upload them to the chain first. The difference between running on a local devnet and on Picasso Rococo is to replace '-n Alice' with your seed phrase in the commands and the RPC endpoints, an example is provided below during the upload of a local contract binary. + +There are several sources to upload your contracts: + +#### 1. Upload a local contract binary + +You need to specify the file path and the signer to be able to upload a contract +from the file path. Extrinsics must be called by a signed entity in `pallet-cosmwasm`. + +``` +cd path/to/file +``` + +```sh +# On Picasso local +ccw substrate -c ws://127.0.0.1:9988 -n alice tx upload --file-path .path/to/file +``` + +```sh +# On Picasso Rococo +ccw substrate -c wss://picasso-rococo-rpc-lb.composablenodes.tech:443 --seed "" tx upload --file-path .path/to/file +``` + +#### 2. Upload a contract from a running chain + +If a Cosmos chain provides an RPC endpoint, you can use it to load the contracts +to `ccw`. All you need to know is the RPC endpoint to fetch the +contract from, and either the contract address that uses the contract code +or code ID that identifies the contract code. + +Fetch using the contract address: +```sh +ccw substrate -n alice tx upload --cosmos-rpc https://juno-api.polkachu.com --contract juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf +``` + +Fetch using the code ID: +```sh +ccw substrate -n alice tx upload --cosmos-rpc https://juno-api.polkachu.com --code-id 1 +``` + +## Interact with contracts + +For examples of interacting with the contract, go to the [walkthrough](./cosmwasm/walkthrough.md). diff --git a/docs/docs/develop/cosmwasm-orchestrate.md b/docs/docs/develop/cosmwasm-orchestrate.md new file mode 100644 index 0000000..ad4270d --- /dev/null +++ b/docs/docs/develop/cosmwasm-orchestrate.md @@ -0,0 +1,95 @@ +# Introduction + +CosmWasm Orchestrate is a tool for simulating and testing CosmWasm contracts on a virtual machine. Although this is the first version of the tool, it already provides a very close simulation experience to running your contracts on an actual chain. + +## Why use this? + +- **Complete simulation on a VM**: Your contracts do not run in a mock environment but actually in a complete VM, therefor your `CosmosMsg`'s, queries, and sub-messages run properly. + +- **IBC capable**: You don't need to spin up a few chains to simulate IBC. You can just start a few VM instances on our framework and run IBC contracts in memory. This means that you will be able to test your IBC contracts really fast and correctly. + +- **Easy to use**: Talking about VMs might sound frustrating but there is almost no setup necessary to run a test. Just provide the wasm contract that you want to test and call the entry point that you wanna test. + +- **Flexible**: The framework is also very flexible and lets you define your own mechanism to handle custom messages, handle different address formats and even implement your own host functions and VM. + + +## A Quick Example + +Enough talking and let's check out a very basic usage of our framework. Here you can see we execute a `cw20-base` contract. The exact steps are: + +1. Fetch the wasm binary of the contract with the address `juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf`. +2. Instantiate the `cw20-base` contract. +3. Execute a transfer. +4. Query the contract to see if the transfer is done correctly. + +All in just a few lines. + +```rust +// Fetch the wasm binary of the given contract from a remote chain. +let code = CosmosFetcher::from_contract_addr( + "https://juno-api.polkachu.com", + "juno19rqljkh95gh40s7qdx40ksx3zq5tm4qsmsrdz9smw668x9zdr3lqtg33mf", +) +.await +.unwrap(); + +// Generate a Juno compatible address +let sender = Account::generate_from_seed::("sender").unwrap(); + +// Create a VM state by providing the codes that will be executed. +let mut state = StateBuilder::new().add_code(&code).build(); + +let info = info(&sender); + +// Instantiate the cw20 contract +let (contract, _) = ::instantiate( + &mut state, + 1, + None, + block(), + None, + info.clone(), + 100_000_000, + InstantiateMsg { + name: "Picasso".into(), + symbol: "PICA".into(), + decimals: 12, + initial_balances: vec![Cw20Coin { + amount: 10000000_u128.into(), + address: sender.into(), + }], + mint: None, + marketing: None, + }, +) +.unwrap(); + +// Transfer 10_000 PICA to the "receiver" +let _ = ::execute( + &mut state, + env(&contract), + info, + 100_000_000, + ExecuteMsg::Transfer { + recipient: Account::generate_from_seed::("receiver") + .unwrap() + .into(), + amount: 10_000_u128.into(), + }, +) +.unwrap(); + +// Read the balance by using query. Note that the raw storage can be read here as well. +let balance_response: BalanceResponse = JunoApi::::query( + &mut state, + env(&contract), + QueryMsg::Balance { + address: Account::generate_from_seed::("receiver") + .unwrap() + .into(), + }, +) +.unwrap(); + +assert_eq!(Into::::into(balance_response.balance), 10_000_u128); +``` \ No newline at end of file diff --git a/docs/docs/develop/cosmwasm/cw-cli.png b/docs/docs/develop/cosmwasm/cw-cli.png new file mode 100644 index 0000000..a36f8e5 --- /dev/null +++ b/docs/docs/develop/cosmwasm/cw-cli.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f80ad2fdd1e301c945c78f55bf31537dac6c9fccd7b35bbb4632c9cb93e50539 +size 315251 diff --git a/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/address-handlers.md b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/address-handlers.md new file mode 100644 index 0000000..6475ce0 --- /dev/null +++ b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/address-handlers.md @@ -0,0 +1,80 @@ +# Address Handlers + +Throughout this documentation, you see that we always use `JunoApi`. But there are a +few other APIs as well like `WasmApi`, `SubstrateApi`, etc. The only difference between +these APIs is how they handle address generation, validation, and canonicalization. + +For example, Cosmos APIs like `JunoApi` or `WasmApi` use `Bech32` encoding and `JunoApi` uses +`juno` as the prefix and `WasmApi` uses `wasm` as the prefix. + +## Creating your own Cosmos address handler + +Cosmos address handlers are implementing the `CosmosAddressHandler` trait which +handles the `Bech32` stuff under the hood. The only thing that you want to specify +is the `PREFIX` constant which is the prefix value in `Bech32` encoding. + +Let's create an Address Handler for `CoolChain` where the prefix is `cool`: + +```rust +pub struct CoolAddressHandler; + +impl CosmosAddressHandler for CoolAddressHandler { + const PREFIX: &'static str = "cool"; +} +``` + +For ease of use, you can also define this API: + +```rust +pub type CoolApi<'a, E = Dispatch> = Api< + 'a, + E, + CoolAddressHandler, + State<(), CoolAddressHandler>, + Context<'a, (), CoolAddressHandler>, +>; +``` + +From now on, you can generate account addresses by using `CoolAddressHandler`: + +```rust +Account::generate_from_seed::("sender").unwrap(); +``` + +And you will use the `CoolApi` for API calls: + +```rust +::instantiate(..); +``` + +## Implementing an address handler from scratch + +You can also implement an address handler from scratch by implementing `AddressHandler` trait. + +Let's implement a dummy address handler that works with `String` addresses without any restrictions. + +```rust +struct DummyAddressHandler; + +impl AddressHandler for DummyAddressHandler { + fn addr_canonicalize(input: &str) -> Result, VmError> { + // We just convert the address into binary + Ok(input.as_bytes().into()) + } + + fn addr_humanize(addr: &[u8]) -> Result { + String::from_utf8(addr.into()).map_err(|_| VmError::InvalidAddress) + } + + fn addr_generate<'a, I: IntoIterator>(iter: I) -> Result { + // Just hash the inputs + let mut hash = Sha256::new(); + for data in iter { + hash = hash.chain_update(data); + } + Self::addr_humanize(hash.finalize().as_ref()) + } +} +``` + +Then follow the above steps to use it in your tests and that's all. diff --git a/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/concepts.md b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/concepts.md new file mode 100644 index 0000000..0415636 --- /dev/null +++ b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/concepts.md @@ -0,0 +1,9 @@ +# Concepts + +There are a few concepts that are good for a user to know, these are: + +* [`Direct` and `Dispatch` execution types](./direct-dispatch.md): Explains the behaviors of `Direct` +and `Dispatch` execution types and their use cases. +* [Address handlers](./address-handlers.md): Explains why we have different APIs and how you can +implement your address handler based on your needs. +* [Custom message/query handler](./custom-handler.md): Explains how a user can enable handling of `CosmosMsg::Custom` and `QueryRequest::Custom`. \ No newline at end of file diff --git a/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/custom-handler.md b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/custom-handler.md new file mode 100644 index 0000000..db1f288 --- /dev/null +++ b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/custom-handler.md @@ -0,0 +1,71 @@ +# Custom Message Handler + +`CustomMsg` calls result in `NotSupported` error in the default implementation. But our +framework is flexible enough to let you define your own custom message logic. + + +## Implementing a custom message handler + +If your chain supports `CosmosMsg::Custom`, you can simply implement the `CustomHandler` +trait in our framework and handle custom messages and queries. Note that your `CustomHandler` +type needs to implement `Clone` because it will get reverted if the transaction fails. + +```rust +/// Type that implements the CustomHandler +#[derive(Default, Clone)] +pub struct MyCustomHandler {} + +/// Custom message type +#[derive(Debug, Deserialize)] +pub struct MyCustomMessage; + +/// Custom query type +#[derive(Debug, Deserialize)] +pub struct MyCustomQuery; + +impl CustomHandler for MyCustomHandler { + type QueryCustom = MyCustomQuery; + type MessageCustom = MyCustomMessage; + + fn handle_message( + vm: &mut Context, + message: MyCustomMessage, + _event_handler: &mut dyn FnMut(Event), + ) -> Result, VmError> { + vm.state + .db + .custom_handler + .do_something_with_message(message); + Ok(None) + } + + fn handle_query( + vm: &mut Context, + query: MyCustomQuery, + ) -> Result, VmError> { + vm.state.db.custom_handler.do_something_with_query(query); + Ok(SystemResult::Ok(CosmwasmQueryResult::Ok(vec![].into()))) + } +} +``` + +Then you again need to create an `Api` type which uses `MyCustomHandler`. + +```rust +pub type CustomJunoApi<'a, E = Dispatch> = Api< + 'a, + E, + JunoAddressHandler, + State, + Context<'a, MyCustomHandler, JunoAddressHandler>, +>; +``` + +One more thing is, you need to provide `MyCustomHandler` to the `StateBuilder`. + +```rust +let mut state = StateBuilder::::new() + .add_code(&code) + .set_custom_handler(MyCustomHandler {}) + .build(); +``` \ No newline at end of file diff --git a/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/direct-dispatch.md b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/direct-dispatch.md new file mode 100644 index 0000000..61e7f68 --- /dev/null +++ b/docs/docs/develop/cosmwasm/cw-orchestrate/concepts/direct-dispatch.md @@ -0,0 +1,42 @@ +# `Direct` and `Dispatch` APIs + +Sometimes, it might be not required to do a complete simulation of an entry point. +For example, you might wanna execute `instantiate` entry point but you might just want to +get the `instantiate` functions result and not proceed to sub-message execution. +Therefore, there are two execution types that handle exactly this: `Direct` and `Dispatch`. + + +## Dispatch + +When you want to simulate a complete execution like how a transaction is handled in a real environment, `Dispatch` is used. +`Dispatch` executes the entry point you call and also handles the sub-messages. It commits the transaction +changes when the execution succeeds and aborts it when the execution fails. + +Note that the same error-handling mechanism is valid here as well. In the case of an error in the top-level contract, +the transaction will be reverted, otherwise, the behavior will be up to the user (catching errors with `Reply`). + +`Dispatch` is the default execution type of `API`s. So you don't need to specify `Dispatch` +like `JunoApi::::..`. But note that, because of the limitations of rust's type +inference, you can't do `JunoApi::instantiate`, but need to use it like `::instantiate` for +Rust to infer the generic types for you. + + +## Direct + +Some entry points like `query` are not meant to be `Dispatch` and also sometimes you might just +run an entry point and get the `Response` without running sub-messages or creating a transaction. +`Direct` is used in this case. Running a dispatchable entry point(eg. `instantiate`) with `Direct` is like a unit test. + +But the notable thing is some entry points like `instantiate` might modify the storage. And since they are not +handled like `Dispatch`, the changes won't get reverted if the execution fails. It is not a big deal since +you will probably want to abort the test in case of failure anyways. But if for some reason you want to call +a dispatchable entry point and make sure that the storage modifications are not persisted, you can just create +a separate state for each run. + +You can set the execution type to `Direct` by specifying it during the call: + +```rust +JunoApi::::instantiate(); +// or +>::instantiate(); +``` diff --git a/docs/docs/develop/cosmwasm/cw-orchestrate/tutorial-dex.md b/docs/docs/develop/cosmwasm/cw-orchestrate/tutorial-dex.md new file mode 100644 index 0000000..84165da --- /dev/null +++ b/docs/docs/develop/cosmwasm/cw-orchestrate/tutorial-dex.md @@ -0,0 +1,421 @@ +# Tutorial: Testing a DEX + +Let's see a real-world example by testing `wasmswap`. We are going to swap the native token `cosm` +with the Cw20 token `pica`. + +## Setting up + +We are using a slightly modified version of `wasmswap`. The only difference is our VM doesn't alter +the `data` field because it is supposed to be up to user to use any data in any format. So we chose +to follow the spec there. Let's clone the template for our tutorial: + +```sh +git clone https://github.com/ComposableFi/cw-toolkit +cd cw-toolkit +git checkout tags/wasmswap-template +cd orchestrate-tutorial +``` + +Add the latest `cosmwasm-orchestrate` as a `dev-dependency`: + +```toml +# In Cargo.toml + +[dev-dependencies] +cosmwasm-orchestrate = { git = "https://github.com/ComposableFi/cosmwasm-vm" } +``` + +And let's create a file for the integration tests: + +```bash +mkdir tests +touch tests/integration.rs +``` + +## Setting up the state for the test + +### Code + +```rust +// In `integration.rs` + +use cosmwasm_orchestrate::{ + block, + cosmwasm_std::{Coin, MessageInfo}, + env, info, + vm::*, + Direct, JunoApi, StateBuilder, WasmLoader, +}; +use cosmwasm_std::{Addr, Decimal, Uint128}; +use cw20::{BalanceResponse, Cw20Coin, Cw20ExecuteMsg, Cw20QueryMsg, Denom}; +use cw20_base::msg::InstantiateMsg as Cw20InstantiateMsg; +use wasmswap::msg::{ExecuteMsg, InstantiateMsg, TokenSelect}; + +#[test] +fn swap_works() { + // Compile and load the wasmswap contract + let wasmswap_code = WasmLoader::new(env!("CARGO_PKG_NAME")).load().unwrap(); + let cw20_code = include_bytes!("../scripts/cw20_base.wasm"); + // Create a VM state by providing the codes that will be executed. + let mut state = StateBuilder::new() + .add_code(&wasmswap_code) + .add_code(cw20_code) + .build(); +} +``` + +If you were to build your test right now, it will fail but we'll shortly make it work, no worries. + +### Analyze + +```rust +let cw20_code = include_bytes!("../scripts/cw20_base.wasm"); +``` +For loading `cw20_base` contract, we just used `include_bytes` because we have the binary locally. +But if you need to get this binary from a (reliable) remote source, you could also use: +* `CosmosFetcher`: To fetch the code from a Cosmos chain. +* `FileFetcher`: To fetch the code from a server. (Like using `wget`) + +--- + +```rust +let wasmswap_code = WasmLoader::new(env!("CARGO_PKG_NAME")).load().unwrap(); +``` +For the wasmswap contract, we used a special type of loader which is `WasmLoader`. The thing is +our VM works with wasm binaries just like any other chain. So we need to make sure that we are +feeding the VM with the latest compiled wasm binary every time we run the tests. We could manually +compile the binary and just do `include_bytes` but believe me, you will forget to do it very often +and get confused. + +`WasmLoader` gets the package name and compiles and loads the contract for you. Note that the default +configuration assumes the rust package name is the same as the contract name. So `wasmswap` as the package +name means that the contract's name is also `wasmswap` and the full name will be `wasmswap.wasm`. +The second assumption of the default loader is the target directory is `target/wasm32-unknown-unknown/release`. +The good thing is you can configure any of those, even the command that will be used to build your +contract. + +--- + +```rust +let mut state = StateBuilder::new() + .add_code(&wasmswap_code) // code_id = 1 + .add_code(cw20_code) // code_id = 2 + .build(); +``` +Finally, we need to create a `State` for the VM which will contain the wasm binaries. Note that +code id's that we are gonna use later on will be in the same order as how it is given to the `StateBuilder`. +So in this case, `code_id` for `wasmswap_code` will be `1` and `2` for `cw20_code`. + +## Instantiating the token + +Let's instantiate the `cw20` contract for `PICA`. + +### Code +```rust + let sender = Account::generate_from_seed::("sender").unwrap(); + + // Instantiate the cw20 contract + let (cw20_address, _) = ::instantiate( + &mut state, + 2, // Code ID of cw20_base is 2 + None, + block(), + None, + info(&sender), + 100_000_000_000, + Cw20InstantiateMsg { + name: "Picasso".into(), + symbol: "PICA".into(), + decimals: 10, + initial_balances: vec![Cw20Coin { + address: sender.clone().into(), + amount: Uint128::new(100_000_000_000_000), + }], + mint: None, + marketing: None, + }, + ) + .unwrap(); +``` + +To run, use: +```rust +cargo test --test integration +``` + +### Analyze + +```rust +let sender = Account::generate_from_seed::("sender").unwrap(); +``` + +We need to create a valid address which we are gonna use to call the contracts. Which is the +`sender` field in `MessageInfo`. For that, we are using `Account` type with `JunoAddressHandler`. +This will create a `bech32` encoded address with `juno` prefix. + +--- + +```rust +let (cw20_address, _) = ::instantiate( + &mut state, + 2, // Code ID of cw20_base is 2 + None, + block(), + None, + info(&sender), + 100_000_000_000, // We don't care about the gas + Cw20InstantiateMsg { + name: "Picasso".into(), + symbol: "PICA".into(), + decimals: 10, + initial_balances: vec![Cw20Coin { + address: sender.clone().into(), + amount: Uint128::new(100_000_000_000_000), + }], + mint: None, + marketing: None, + }, +) +.unwrap(); +``` + +And then we are instantiating the `cw20` contract. The first notable thing is we are using `JunoApi` because +we have used the `JunoAddressHandler`. `JunoApi` will use `JunoAddressHandler` as the address handler. + +Note that we are giving the instantiate message as is without doing any JSON encoding. This is because +`instantiate` function gets any JSON-serializable type and serializes it under the hood. But if you +have no access to message type and you don't want to define them yourself, you can use `instantiate_raw` +function and provide the JSON-encoded message. + +Finally, note that we do `info(&sender)` which creates a `MessageInfo` and sets the `sender` field to +the given account's address. + +## Instantiating the swap + +Next thing is to instantiate the swap with the token we just created. + +```rust + let (contract_addr, _) = ::instantiate( + &mut state, + 1, // Code ID for wasmswap is 1 + None, + block(), + None, + info(&sender), + 100_000_000_000, + InstantiateMsg { + token1_denom: Denom::Native("cosm".into()), + token2_denom: Denom::Cw20(Addr::unchecked(cw20_address.clone())), + lp_token_code_id: 2, + owner: None, + protocol_fee_recipient: sender.clone().into(), + protocol_fee_percent: Decimal::zero(), + lp_fee_percent: Decimal::zero(), + }, + ) + .unwrap(); +``` + +Just as we instantiated the `cw20` token, we instantiated the swap. Note that `cw20_address` that +we got from the previous token instantiation is given to the swap contract as the `cw20` token. + +And also, `lp_token_code_id` is set to `2` which is the code id for `cw20_base`. + +## Increasing allowance + +Before executing the swap, we need to make sure that the swap contract has the allowance to transfer tokens +from the account that does the swap. So let's create a second account and increase the allowance for the +swap contract. + +```rust + // Create the second account which will do the swap + let swapper = Account::generate_from_seed::("swapper").unwrap(); + + let _ = ::execute( + &mut state, + env(&cw20_address), + info(&sender), + 100_000_000_000, + Cw20ExecuteMsg::IncreaseAllowance { + spender: contract_addr.clone().into(), + amount: Uint128::new(100_000_000_000), + expires: Some(cw0::Expiration::Never {}), + }, + ) + .unwrap(); +``` + +Note that we have given `cw20_address` to the `env` function. This will create an `Env` and set +`contract.address` field to the given address and this contract will be executed. + +## Adding liquidity to the swap + +We also need to have enough liquidity to be able to do the swap. So let's add some juice. + +```rust + let _ = ::execute( + &mut state, + env(&contract_addr), + MessageInfo { + sender: sender.clone().into(), + funds: vec![Coin::new(400_000_000, "cosm")], + }, + 100_000_000_000, + ExecuteMsg::AddLiquidity { + token1_amount: 400_000_000u128.into(), + min_liquidity: 50_000u128.into(), + max_token2: 300_000_000u128.into(), + expiration: None, + }, + ) + .unwrap(); +``` + +And when we execute it: +```sh +thread 'works' panicked at 'called `Result::unwrap()` on an `Err` value: BankError(InsufficientBalance)', tests/orchestrate.rs:109:6 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace +``` + +WHAT THE HELL? + +No worries, it is intended to show you how to easily understand what went wrong. Our VM logs too many +great things about the execution flow which includes the error messages. So let's enable logs to see +all that yummy logs. + +```toml +# In Cargo.toml +env_logger = "0.10" +``` + +```rust +// In integration.rs + +fn initialize() { + use std::sync::Once; + static INIT: Once = Once::new(); + INIT.call_once(|| { + env_logger::init(); + }); +} + +#[test] +fn swap_works() { + initialize(); +} + +``` + +And then let's execute the test once more with enabling the logs. + +```rust +RUST_LOG=debug cargo test --test integration +``` + +Before going into the reason for failure, take your time to read the logs and see how much useful information +there is. You can see the host functions that are running, responses from the executions, and +sub-messages that are dispatched. + +Now let's see what went wrong: +``` +[2022-12-11T20:10:53Z DEBUG cosmwasm_orchestrate::vm] Transfer: + Account(Addr("juno1pgm8hyk0pvphmlvfjc8wsvk4daluz5tgrw6pu5mfpemk74uxnx9qwm56ug")) + -> Account(Addr("juno1ptl22cw3jth6ue4ruhgef2s5gfz23tt57vlrmydqu7vxk5xhn4gse7s6fe")) + [Coin { denom: "cosm", amount: Uint128(400000000) }] + +[2022-12-11T20:10:53Z DEBUG cosmwasm_orchestrate::vm] < Transaction abort: 0 +``` + +The VM is trying to transfer `400_000_000cosm` and then it aborts the transaction with `BankError(InsufficientBalance)`. + +The problem is obvious. See that we needed to transfer some funds to the contract to be able to add the +liquidity by properly setting `funds` field in the `MessageInfo`. But the `sender` account does not have +any `cosm` balance at all. So, the VM tried to transfer the given funds to the contract before execution +and failed. + +Let's add some balance to the `sender` account in the `StateBuilder`. + +```rust + // Change the `StateBuilder` to: + let mut state = StateBuilder::new() + .add_code(&wasmswap_code) + .add_balance(sender.clone(), Coin::new(100_000_000_000_000, "cosm")) + .add_code(cw20_code) + .build(); + +``` + +Now that we have enough balance, let's re-run again and see the lovely green `ok` message. + +## `cosmwasm_std` vs. `cosmwasm_orchestrate::cosmwasm_std` + +You might have already noticed it but we are using `Coin` and `MessageInfo` from `cosmwasm_orchestrate::cosmwasm_std` +instead of using them directly from `cosmwasm_std`. This is a temporary thing that we hope to resolve +soon. The problem is our VM is `no_std` but `cosmwasm_std` is originally only `std`. We created a PR +for this and until it gets merged, `cosmwasm-orchestrate` will be using our fork, hence `Cargo` thinks +that `cosmwasm_std::Coin` is not the same thing as `cosmwasm_orchestrate::cosmwasm_std::Coin`. Until the +merge, for any type/function that is given to `cosmwasm-orchestrate`, use `cosmwasm_orchestrate::cosmwasm_std`. +You will get a type mismatch error if you do it wrong, so beware of that. + +## Executing the swap +```rust + // Change the `StateBuilder` to: + let mut state = StateBuilder::new() + .add_code(&wasmswap_code) + .add_balance(sender.clone(), Coin::new(100_000_000_000_000, "cosm")) + .add_balance(swapper.clone(), Coin::new(120_000_000, "cosm")) + .add_code(cw20_code) + .build(); + + let _ = ::execute( + &mut state, + env(&contract_addr), + MessageInfo { + sender: swapper.clone().into(), + funds: vec![Coin::new(120_000_000, "cosm")], + }, + 100_000_000_000, + ExecuteMsg::Swap { + input_token: TokenSelect::Token1, + input_amount: Uint128::new(120_000_000), + min_output: Uint128::zero(), + expiration: None, + }, + ) + .unwrap(); +``` + +Note that we add balance to `swapper` account as well to be able to send funds to the swap contract. +And finally, we can swap `120_000_000cosm`. The final thing to do is verify the swap worked. + +## Verifying the swap + +We will check `swapper`'s `pica` balance to verify the swap. To do that, we need to query the `cw20` token. + +```rust + let query_res: BalanceResponse = >::query( + &mut state, + env(&cw20_address), + Cw20QueryMsg::Balance { + address: swapper.clone().into(), + }, + ) + .unwrap(); + + assert_eq!( + query_res.balance, + Uint128::new((120_000_000 * 300_000_000) / (400_000_000 + 120_000_000)) + ); +``` + +Note that we used `>` this time instead of ``. This is because the execution +type for `query` can only be `Direct`. See previous sections to learn more about this. + +And here we verified the whole execution. + +One final note is if you were to verify the native balances also, you could directly use the bank module +to see the balances: + +```rust +state.db.bank.balance(&swapper, "cosm"); +``` \ No newline at end of file diff --git a/docs/docs/develop/cosmwasm/walkthrough.md b/docs/docs/develop/cosmwasm/walkthrough.md new file mode 100644 index 0000000..b14efa1 --- /dev/null +++ b/docs/docs/develop/cosmwasm/walkthrough.md @@ -0,0 +1,191 @@ +# Walkthrough: cw20_base + +In this walkthrough, we will upload and interact with a `cw20_base` contract on a local Picasso network by: + +* Fetching the contract binary from a running Cosmos chain and upload it to our chain. +* Instantiating the contract. +* Executing a transfer. + +:::note +Ensure that you have followed the guide to setup your development environment as outlined in the [first section](https://docs.composable.finance/developer-guides/cosmwasm-cli). +::: + +## Running `pallet-cosmwasm` on Picasso locally + +**When running Picasso Rococo on a local development network versus on the Picasso Rococo mainnet, the only difference is that you need to replace '-n Alice' with your seed phrase in the commands and change the RPC endpoints. It is also required to add your port after the Rococo RPC endpoint, e.g. `wss://picasso-rococo-rpc-lb.composablenodes.tech:`.** + +### Uploading the contract + +Let's say that we want to upload the `v1.0.1` release of `cw20_base`. We can directly use the download link from the [release page](https://github.com/CosmWasm/cw-plus/releases). + +```sh +ccw substrate -c ws://127.0.0.1:9988 -n alice tx upload --url https://github.com/CosmWasm/cw-plus/releases/download/v1.0.1/cw20_base.wasm +``` + +Output: + +``` +[ + ] Contract uploaded. + - Code Hash: 0x12f7…1f73 + - Code ID: 1 +``` + +### Getting JSON output instead of plain text + +Sometimes it is easy to get the output in JSON to automize the process. You can do that by using `--output-type` parameter. + +```sh +ccw substrate --output-type json COMMAND +``` + +### Instantiating the contract + +The next step is to instantiate the contract so that we have an instance of the contract that we can execute and query. The upload command returned a code ID. This code ID is used to identify the wasm binary (compiled CosmWasm contract). We will use this code ID to instantiate the contract from. + +We want to use the following configurations to instantiate the contract: + +- Code ID: `1` which is returned from the previous upload command. +- Salt: Just a random salt. +- Label: Let's say that it is "our-fancy-cw20base-contract". +- Maximum gas: We don't care, let's set it to `10000000000` +- Instantiate message: Let's instantiate a PICA token and give some initial balance to Bob's account +```json +{ + "name": "Picasso", + "symbol": "PICA", + "decimals": 6, + "initial_balances": [ + { + "amount": "1000000000000", + "address": "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48" + } + ] +} +``` + +Note that in the instantiate message, we used a hexadecimal address. That is the hexadecimal representation of the ordinary SS58 public key. We will soon +make use of SS58 representations in the contracts as well, but for now, this is how we do it. + +So the command will be: +```sh +ccw substrate -c ws://127.0.0.1:9988 -n alice \ + tx instantiate \ + -c 1 \ + -s random-salt \ + -l our-fancy-cw20base-contract \ + -g 10000000000 \ + -m '{"name":"Picasso","symbol":"PICA","decimals":6,"initial_balances":[{"amount":"1000000000000","address":"0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48"}]}' +``` + +Note that apart from the address of the contract that is instantiated, we also get the raw CosmWasm events. + +Output: +``` +[ + ] Contract instantiated. + - Contract address: 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX +- Event: instantiate + - Contract: 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX + - Attributes: + - _contract_address: 0x7c888b21f31f0cec5149830bb0f8f20b949e2b589c240d223625f53df694ca49 + - code_id: 1 +``` + +### Execute a transfer + +Let's transfer some amount from `Bob` to `Charlie`. + +Note that as the signer, we need to use `bob` instead of `alice` because the signer here will be both the `signer` of the extrinsic, and the `sender` +of the contract message. Since we want to transfer from `bob`, `bob` needs to be the caller of the `execute` call. + +Also, the contract address used here is `5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX` which should be the same for you as well since the algorithm for the address +generation that we use is based on the instantiate parameters that we provide, not on some random values or chain state. But if for some reason, you get a different +address, use that address to execute the contract. + +```sh +ccw substrate -c ws://127.0.0.1:9988 -n bob \ + tx execute \ + -c 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX \ + -g 10000000000 \ + -m '{"transfer":{"amount":"1000","recipient":"0xd64439add16b49b6b68ac74e1b28a73a8491501ab7e0e829716f580947a4bd7e"}}' +``` + +Output: +``` +[ + ] Contract executed. +- Event: execute + - Contract: 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX + - Attributes: + - _contract_address: 0x7c888b21f31f0cec5149830bb0f8f20b949e2b589c240d223625f53df694ca49 +- Event: wasm + - Contract: 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX + - Attributes: + - action: transfer + - from: 0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 + - to: 0xd64439add16b49b6b68ac74e1b28a73a8491501ab7e0e829716f580947a4bd7e + - amount: 1000 + - _contract_address: 0x7c888b21f31f0cec5149830bb0f8f20b949e2b589c240d223625f53df694ca49 +``` + + +### Query the balance + +Although you can see that the events clearly show the transfer happened. Let's query the contract to check out our balance to make sure. Since the query is not a transaction +but an RPC call, we'll use the subcommand `rpc` instead of `tx`. + +Note that we are using a different protocol and port for the RPC endpoint. + +``` +ccw substrate -c http://127.0.0.1:32200 \ + rpc query \ + -c 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX \ + -g 10000000000 \ + -q '{"balance":{"address":"0xd64439add16b49b6b68ac74e1b28a73a8491501ab7e0e829716f580947a4bd7e"}}' +``` + +Output: +``` +ccw substrate -c http://127.0.0.1:32200 \ + rpc query \ + -c 5EszMeNDPmy4orcLEHRLiJawAt5xAvfK5VH7REV8bpB1jtjX \ + -g 100000000 \ + -q '{"balance":{"address":"0xd64439add16b49b6b68ac74e1b28a73a8491501ab7e0e829716f580947a4bd7e"}}' +``` + +## Running `pallet-cosmwasm` on Picasso Rococo + +This is a specific example guide to upload, initialize and execute cw20 contracts on Picasso Rococo. The previous walkthough can also be applied to Picasso Rococo too, however, we have added another example specific to Rococo. + + +```sh +# Download the contract +curl --location https://github.com/CosmWasm/cw-plus/releases/download/v1.0.1/cw20_base.wasm > cw20_base.wasm` +``` +```sh +# Upload the contract +cargo run substrate -c wss://picasso-rococo-rpc-lb.composablenodes.tech:443 --seed "" tx upload --file-path ./cw20_base.wasm +``` +```sh +# Instantiate the contract* +cargo run substrate -c wss://picasso-rococo-rpc-lb.composablenodes.tech:443 --seed "" tx instantiate --code-id 1 --salt 0x1234 --label 0x4321 --gas 10000000000 --message '{ "decimals" : 18, "initial_balances": [], "name" : "SHIB", "symbol" : "SHIB", "mint": {"minter" : "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL"} }' +``` +```sh +# Execute the contract +cargo run substrate -c wss://picasso-rococo-rpc-lb.composablenodes.tech:443 --seed "" tx execute --contract "5CntM2NFn4Vkyu77tMDm5TRosKd9qskYpafh8L6Lz2FGP2rD" --gas 10000000000 --message '{ "mint" : { "amount" : "123456789", "recipient" : "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL" }}' +``` +```sh +# Query the contract +cargo run substrate -c wss://picasso-rococo-rpc-lb.composablenodes.tech:443 rpc query --contract "5CntM2NFn4Vkyu77tMDm5TRosKd9qskYpafh8L6Lz2FGP2rD" --gas 10000000000 --query '{"balance": {"address": "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL"}}' +``` + +*After uploading the contract, please note that the "contract address" provided in the example of instantiating the contract may differ. It is possible that someone has already tested this smart contract on Picasso Rococo and uploaded it to the chain. As a result, you won't be able to upload the same contract again. + +If you are running this contract locally, follow these steps: + +1. Go to the 'Chain state' section within the 'Developer' tab. +2. Change the 'selected state query' to 'cosmwasm'. +3. Modify the dropdown option from 'codeHashTold' to 'contractToInfo'. +4. Toggle the 'include option' off. +5. This will retrieve the correct contract address. Refer to the image below as an example. + +![polkadot_js1](./cw-cli.png) +Please ensure you follow these instructions to obtain the accurate contract address when running the contract locally. diff --git a/docs/docs/develop/local-picasso-guide.md b/docs/docs/develop/local-picasso-guide.md new file mode 100644 index 0000000..5042715 --- /dev/null +++ b/docs/docs/develop/local-picasso-guide.md @@ -0,0 +1,7 @@ +# Picasso Kusama DevNet + +To run a local network of Picasso Kusama with the Alice sudo key, run the following command: + +```shell +nix run .#devnet-picasso +``` \ No newline at end of file diff --git a/docs/docs/develop/nix.md b/docs/docs/develop/nix.md new file mode 100644 index 0000000..759f6b3 --- /dev/null +++ b/docs/docs/develop/nix.md @@ -0,0 +1,193 @@ + +# Nix + +Assuming you followed official guidance to install Nix with Flakes enabled. + +Reference in your flake: + +```nix +inputs = { + composable = { + url = "github:ComposableFi/composable"; + inputs.nixpkgs.follows = "nixpkgs"; + }; +}; +``` + + +Shell into dev env: + +```bash +nix develop --impure +``` + +Format all: + +```bash +nix run ".#fmt" +``` + +Check/lint all: + +```bash +nix run ".#check" +``` + +Ask GPT or search internet (or just Github) for any issues and debugging. + +# Long + +Nix is a requirement to set up and start a local development environment with Composable's code. We recommend using the Zero-to-Nix installer. Refer to our docs for how to [install and configure Nix](nix/install.md). + +After configuration, familiarize yourself with the following commands: + +`nix run "composable#devnet-picasso"` to run local devnet for Polkadot CosmWasm development. + +`nix run "composable#fmt"` format all files. + +`nix build "composable#unit-tests"` check unit tests. + + +### Per commit examples + + +```shell +# run Composable node +nix run "github:ComposableFi/composable/" --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +```` + +```shell +# run local Picasso DevNet (for CosmWasm development) +nix run "github:ComposableFi/composable/#devnet-picasso" --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +``` + +```shell +# CosmWasm on Substrate CLI tool +nix run "github:ComposableFi/composable/#ccw" --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +``` + +```shell +# run cross chain devnet with Dotsama and Cosmos nodes +nix run "github:ComposableFi/composable/#devnet-xc-fresh" --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +# or same with docker +nix build "github:ComposableFi/composable/#devnet-xc-image" --allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed \ +&& docker load --input result && docker run -it --entrypoint bash devnet-xc:latest -c /bin/devnet-xc-fresh +``` + +# Install Nix + +## Installing Nix + +Once you have determined which one you want to use, [follow the official Nix +installation instructions](https://zero-to-nix.com/start/install). + + +## Configuring your Nix install + +### On NixOS + +In your Nix system config (`/etc/nixos/configuration.nix` by default), configure `nix` like this: + +```nix +{ + nix = { + useSandbox = "relaxed"; + extraOptions = '' + experimental-features = nix-command flakes + allow-import-from-derivation = true + ''; + sandbox = "relaxed"; + }; +} +``` + +### On non-NixOS + +Set the contents of `~/.config/nix/nix.conf` to this: + +```nix +experimental-features = nix-command flakes +sandbox = relaxed +allow-import-from-derivation = true +``` + +Append to `/etc/nix/nix.conf`: +```ini +trusted-users = +``` + +### Using flags + +If you cannot edit these config files, then you can pass the following flags to `nix`. + +```shell +--allow-import-from-derivation --extra-experimental-features "flakes nix-command" --no-sandbox --accept-flake-config --option sandbox relaxed +``` + +--- + +You are now ready to start [running packages](./run-packages)! + + +# Running Nix packages + +*Locations and packages* + +Before trying to run Nix packages, make sure you have git installed. +You can use `which git` to check for a git installation or run `sudo apt install git` to install it. + +Now you can run Nix packages! In order to run one, you need both a **location** and a **package**. + +## Locations + +Locations are the source of a `git` repository containing a Nix flake (such as [ours](https://github.com/ComposableFi/composable)). For example, a **location** can be: + +- `.` for your current directory. +- `github:ComposableFi/composable` for the latest commit on branch main. +- `github:ComposableFi/composable/67b4df903bf8dc2ab0634f9adf9988203a93af27` for commit `67b4df903bf8dc2ab0634f9adf9988203a93af27`. + +Note that for the `github:` locations, you do not need to clone the repository. For `.` you need to clone the repository and `cd` into it. + +## Packages + +Packages are defined in a repository's `flake.nix`. For example, a **package** can be: + +- `composable-book` which builds this book (so meta!). + +If you want to see all packages defined by a repository's flake, run `nix flake show "LOCATION"`, for example: `nix flake show "github:ComposableFi/composable"`. + +Once you know which **location** and **package** you want, simply run: + +```bash +nix run "location#package" +``` + +```bash +nix run "github:ComposableFi/composable#devnet-picasso" +``` + +In case of error, append `--print-build-logs --show-trace --debug --keep-derivations --keep-outputs` to command. + +## Running in Docker + +If you do not have access to `nix`, but you do have access to `docker`, then you can run nix packages within docker as follows: + + +### Creating a `nix` cache volume +In order to save time on subsequent builds, we create a volume that caches `nix` artifacts: + +```bash +docker volume create nix +``` + +### Running your `location#package` + +Make sure you replace `location#package` with your desired **location** and **package**. + +```bash +docker run -v /var/run/docker.sock:/var/run/docker.sock -v nix:/nix -p 9988:9988 -it nixos/nix bash -c "nix-env -iA nixpkgs.cachix && cachix use composable && nix run location#package --print-build-logs --extra-experimental-features nix-command --extra-experimental-features flakes" --no-sandbox" +``` + +--- + +Now that you are able to run all packages, let's [set up your declarative development environment](./development-environments)! diff --git a/docs/docs/develop/oracle-set-up-guide.md b/docs/docs/develop/oracle-set-up-guide.md new file mode 100644 index 0000000..cdd7c5f --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide.md @@ -0,0 +1,378 @@ +# Apollo Oracle Set-up Guide + + +## Overview + +[Apollo](../technology/apollo-overview.md) is an oracle for submitting prices on-chain. +We plan to upgrade it and allow everyone to stream arbitrary third party data in the future. +By taking part in Apollo and becoming an oracle operator, +you will be securing the price of assets on-chain and help the network become more resilient in a decentralized manner. +Participants receive tokens as rewards for their work, +but it is important to note that the on-chain algorithm also allows for slashing based on bad behavior, +which is defined as submitting prices out of a certain threshold range from a pivot price calculated on all submitted prices. + +Apollo consists of four key components: + +- The On-chain pallet that decides when a price is requested. +- An Off-Chain worker that monitors when a price has been requested and if so, submits a price for the request. +- An oracle node where the offchain worker is running. +- A Price-Feed (we provide a reference implementation for this component) that fetches the prices from a CEX/DEX +and caches them, such that the Off-Chain worker is able to query those prices and stream them by submitting a transaction. You are open to use a price-feed of your choice. + +The following diagram provides a high-level architecture of how these three components interact with each other. + +## High level architecture + + +![oracle_architecture](./oracle-set-up-guide/oracle-architecture.jpg) + + +1. Apollo off-chain worker monitors on-chain price requests. +2. Once a price request for an asset has been detected, the off-chain worker does an http GET to the price-feed server and gets the latest price. +3. If and only if the latest cached price (on the price-feed server) is recent enough (in seconds, configurable via the price-feed CLI), the off-chain worker submits a transaction containing the asset price. + + +## Setting up a node + +[Setup a node by following the collator guide](../develop/collator-guide.md) + +## Using PolkadotJS Web Interface + +To see the block explorer of your collator and run extrinsics, the PolkadotJS web interface needs to be connected. + +* Go to polkadot js →[https://polkadot.js.org/apps/#/explorer](https://polkadot.js.org/apps/#/explorer) +* Add custom endpoint + +:::note +Connection should be established to the port 9988 of the IP address that is running your collator, for connecting to node running locally: ws://127.0.0.1:9988. +::: + +Make sure you have connected to the right port. + +![polkadotjs_web_interface](./oracle-set-up-guide/polkadotjs-web-interface.png) + +You should see the block explorer: + +![block_explorer](./oracle-set-up-guide/block-explorer.png) + +In this web UI we will run extrinsics & RPCs, to attach the price feed to the node. + +## Setting up the price feed (reference implementation) + +Composable provides a reference implementation for the price-feed server. It can be found + +at the following address, in the +[Composable GitHub repository](https://github.com/ComposableFi/composable/tree/main/utils/price-feed). +The implementation is general enough and allows any fork to implement a new feed easily. +By default, the prices are fetched from the +[Binance public websocket API](https://docs.binance.org/api-reference/dex-api/ws-streams.html#4-trades). + +### Setup + +In this step, we will set up a rust compiler, a toolchain and build a node. \ + \ +**Setup required libraries** + +Run the following command: + +```bash +sudo apt update && sudo apt install -y git clang curl libssl-dev llvm libudev-dev pkg-config protobuf-compiler libprotobuf-dev +``` + +**Get the project and build the price-feed** + +Run the following commands: + +```bash +git clone --depth 1 --branch release-v9.10035.5 https://github.com/ComposableFi/composable.git composable-oracle-10035 && \ +cd composable-oracle-10035/code && \ +cargo build --release --package price-feed +``` + +### Start Price-feed + +You can try running the server with \ + +```bash +RUST_LOG=debug ./target/release/price-feed +``` + +The server will start indexing a list of predefined assets (hardcoded). + +To make sure the price-feed is working correctly one should go to the browser. + +By default, price-feed runs on localhost, port 3001. + +Currently, the only assets supported for retrieving prices is KSM & DOT (corresponding to asset id's of 4 & 6 respectively), which can be accessed using the following link. + +KSM: [http://127.0.0.1:3001/price/4](http://127.0.0.1:3001/price/4) + +DOT: [http://127.0.0.1:3001/price/6](http://127.0.0.1:3001/price/6) + + +![price_feed_output](./oracle-set-up-guide/price-feed-output.png) + + +price-feed output should look like this. + +```markdown +[2022-06-09T19:08:25Z DEBUG price_feed::backend] notification received: Started { feed: Binance } +[2022-06-09T19:08:25Z INFO price_feed::backend] Binance started successfully +[2022-06-09T19:08:25Z DEBUG price_feed::backend] notification received: AssetOpened { feed: Binance, asset: KSM } +[2022-06-09T19:08:25Z INFO price_feed::backend] Binance has opened a channel for KSM +[2022-06-09T19:08:25Z DEBUG price_feed::feed::binance] connecting to binance +[2022-06-09T19:08:25Z DEBUG tungstenite::client] Trying to contact wss://stream.binance.com:9443/stream?streams=ksmusdt@aggTrade at 13.114.11.14:9443... +[2022-06-09T19:08:26Z DEBUG tungstenite::handshake::client] Client handshake done. +[2022-06-09T19:08:26Z DEBUG price_feed::feed::binance] running event loop +[2022-06-09T19:08:31Z DEBUG price_feed::backend] notification received: AssetPriceUpdated { feed: Binance, asset: KSM, price: TimeStamped { value: (Price(6659), Exponent(2)), timestamp: TimeStamp(1654801711) } } +[2022-06-09T19:08:36Z DEBUG price_feed::backend] notification received: AssetPriceUpdated { feed: Binance, asset: KSM, price: TimeStamped { value: (Price(6659), Exponent(2)), timestamp: TimeStamp(1654801716) } } +``` + +The default URL is: + +```markdown +localhost:3001/price/${ ASSET_ID }/ +``` + +### CLI Options + +Run the following command: + +```bash +./target/release/price-feed --help +``` + +For a list of CLI options. + + +```markdown +ubuntu@oracle-test:~/price_feed/target/release$ ./price-feed --help +price-feed 1.0 +Composable + +USAGE: + price-feed [OPTIONS] + +OPTIONS: + -c, --cache-duration + Duration, in seconds, before a price is evicted from the cache [default: 10] + + -e, --expected-exponent + Price will be normalized to this exponent [default: 12] + + -h, --help + Print help information + + -l, --listening-address + Listening address for the frontend [default: 127.0.0.1:3001] + + -p, --pythd-host + Host address of the pythd server [default: http://127.0.0.1:8910] + + -q, --quote-asset + Asset to be used as quote for pricing [default: USDT] + + -V, --version + Print version information +``` + +## Setting up Apollo (becoming an Oracle) + +In order for a Collator to become an Apollo Oracle, you need to make sure that you deployed a price-feed server along +your node. + +Once you have node and price-feed setup and running, the following steps will be required to bind your price-feed to the +node. + +These are the wallet details for the Alice developer wallet. + +It’s required for registering the offchain worker. + +```markdown +name: "Alice" +Address (public key): "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL" +Mnemonic(seed): "bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice" +``` + +The following steps are required to complete the setup of becoming an oracle: + +1. Register price feed URL +2. Register offchain worker +3. Set signer (for local testing) +4. Create an oracle for the asset + +**Register price feed URL** + +Register your price-feed url in the local storage,` kind` must be **PERSISTENT**, the key is **ocw-url,** and the value +is **[http://localhost:3001/price/](http://my-price-feed.com/prices/)** + +JavaScript: + +```JavaScript +api.rpc.offchain.localStorageSet("PERSISTENT", stringToHex("ocw-url"), stringToHex("http://localhost:3001/price/")); +``` + +To do this go to: + +_Developer menu -> RPC calls -> offchain -> **localStorageSet**_ \ + + +![manual_register_price_feed](./oracle-set-up-guide/manual-register-price-feed.png) + + +**Register offchain worker** + +To do this go to: + +_Developer menu -> RPC calls -> author -> **insertKey**_ + +And enter the details above, as seen in the screenshot and press: “Submit RPC call”. + + +![register_offchain_worker](./oracle-set-up-guide/register-offchain-worker.png) + + +## Further Steps + +Once these steps are complete, send us your collator node's public key, controller key, and signer key. You must have at least 200k PICA on your controller address and then we can onboard you as a oracle which results in 200k PICA staked. To submit prices for 2 or more assets, you will need to stake an additional 1k PICA for each asset you provide an oracle for on your controller address. **To increase your stake, add more PICA to your controller addrress and call `oracle.addStake` extrinsic on PolkadotJS.** + + +:::tip +The distribution of rewards is based on the proportions of amount staked, therefore, the more PICA you stake, the more rewards you earn. +::: + +### Setting up DevNet Oracle + +For development mode, polkalaunch scripts should be used. + +It sets up a local network with 4 collators with predefined keys and addresses. + +**Setup required prerequisites** + +A **Debian** based Linux system is required, we recommend Debian, Ubuntu or Linux Mint. + +1. Set up required packages + +Run the following command: + + +```bash +sudo apt update && sudo apt install -y git clang curl libssl-dev llvm libudev-dev pkg-config wget +``` + +2. Setup Rust binary and Toolchain + +Run the following commands: + + +```bash +RUST_C="nightly-2021-11-07" +curl https://sh.rustup.rs -sSf | sh -s -- -y && \ +export PATH="$PATH:$HOME/.cargo/bin" && \ +rustup toolchain uninstall $(rustup toolchain list) && \ +rustup toolchain install $RUST_C && \ +rustup target add wasm32-unknown-unknown --toolchain $RUST_C && \ +rustup default $RUST_C && \ +rustup show +``` + +And wait for the installation process to finish. + +3. Setup Nodejs & Yarn + +Run the following commands: + +```bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ +export NVM_DIR="$HOME/.nvm" && \ +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ +nvm install v16.15.0 && \ +nvm use v16.15.0 && \ +npm install --global yarn +``` + +**Run devnet** + +```bash +nix run .#devnet-picasso +``` + +This means your node has started. + +Nodes are writing logs here: + +```markdown +ubuntu@oracle-test:~/composable/scripts/polkadot-launch$ ls +9988.log 9997.log alice.log charlie.log composable_and_basilisk.json ferdie.log node_modules rococo-local-raw.json yarn.lock +9996.log README.md bob.log composable.json dave.log + +ubuntu@oracle-test:~/composable/scripts/polkadot-launch$ tail -f 9988.log +2022-05-23 10:23:24 [Parachain] PoV size { header: 0.1787109375kb, extrinsics: 2.4931640625kb, storage_proof: 5.80078125kb } +2022-05-23 10:23:24 [Parachain] Compressed PoV size: 7.423828125kb +2022-05-23 10:23:24 [Parachain] Produced proof-of-validity candidate. block_hash=0x67087d9d563ecbe2f13ab63d4280f003f80a4189be3f800c12adc82361463a2d +2022-05-23 10:23:25 [Relaychain] 💤 Idle (7 peers), best: #113 (0xb71b…7e30), finalized #110 (0x0ffc…245c), ⬇ 5.7kiB/s ⬆ 6.0kiB/s +2022-05-23 10:23:25 [Parachain] 💤 Idle (2 peers), best: #44 (0x88ff…32ad), finalized #42 (0xc49f…12c0), ⬇ 0.1kiB/s ⬆ 1.4kiB/s +2022-05-23 10:23:30 [Relaychain] ✨ Imported #114 (0x496f…c871) +2022-05-23 10:23:30 [Relaychain] ♻️ Reorg on #114,0x496f…c871 to #114,0x9970…5f18, common ancestor #113,0xb71b…7e30 +2022-05-23 10:23:30 [Relaychain] ✨ Imported #114 (0x9970…5f18) +2022-05-23 10:23:30 [Relaychain] 💤 Idle (7 peers), best: #114 (0x9970…5f18), finalized #110 (0x0ffc…245c), ⬇ 4.5kiB/s ⬆ 4.0kiB/s +2022-05-23 10:23:30 [Parachain] 💤 Idle (2 peers), best: #44 (0x88ff…32ad), finalized #42 (0xc49f…12c0), ⬇ 24 B/s ⬆ 24 B/s +2022-05-23 10:23:34 [Relaychain] 👴 Applying authority set change scheduled at block #111 +``` + +**Setting signer (for local testing)** + +Bond the controller account by submitting a set_signer transaction (tie the Signer to the Controller). This transaction +**must** be sent by the controller. The controller **must have the necessary bond amount** as it will be transferred to +the signer and put on hold (reserved). + +JavaScript: + +```JavaScript +api.tx.sudo.sudo(api.tx.oracle.setSigner(controller, signer)) +``` + +Setting the signer automatically adds a small amount of funds to the oracle stake of this wallet. These are required for +submitting prices. + +_Developer -> extrinsics -> Oracle -> setSinger_ + + +![manual_set_signer](./oracle-set-up-guide/manual-set-signer.png) + + +**Create oracle for asset** + +We can create an oracle for an asset by using the extrinsic _oracle.addAssetAndInfo(...)_ and calling it using +administrative rights. To call this extrinsic as an administrator go to: + +_Developer -> Sudo -> Oracle **-> addAssetAndInfo **_ + +**Parameters**: + +* assetId: 4 (DOT), 6 (KSM) +* threshold: 3% +* minAnswers: 7 +* maxAnswers: 12 +* blockInterval: 6 +* reward: 10000 +* slash: 1000000000000000 (1,000 PICA) + +![create_oracle_for_asset](./oracle-set-up-guide/create-oracle-for-asset.png) + + +![authorize_transaction](./oracle-set-up-guide/authorize-transaction.png) + + +After successfully following these steps, you should see the blockchain successfully getting prices submitted, every few +blocks. + + +![successful_price_submitted](./oracle-set-up-guide/successful-price-submitted.png) + + +____ + +External Link + +[Polkadotjs API](https://polkadot.js.org/docs/) diff --git a/docs/docs/develop/oracle-set-up-guide/authorize-transaction.png b/docs/docs/develop/oracle-set-up-guide/authorize-transaction.png new file mode 100644 index 0000000..009eb70 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/authorize-transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f265dd207e86821867991d662d165f9c685662212cead569370b38618a744d28 +size 88845 diff --git a/docs/docs/develop/oracle-set-up-guide/block-explorer.png b/docs/docs/develop/oracle-set-up-guide/block-explorer.png new file mode 100644 index 0000000..6576298 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/block-explorer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee17b9e07ce78b1abad97d67d304b70f7f43d910897cf39abbe6905e9fcd376c +size 341976 diff --git a/docs/docs/develop/oracle-set-up-guide/create-oracle-for-asset.png b/docs/docs/develop/oracle-set-up-guide/create-oracle-for-asset.png new file mode 100644 index 0000000..6049987 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/create-oracle-for-asset.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0e5841cc8fee9745841cc447e45f25929b3df663f80ddeef0dd78e7e0d19f5d +size 76538 diff --git a/docs/docs/develop/oracle-set-up-guide/manual-register-price-feed.png b/docs/docs/develop/oracle-set-up-guide/manual-register-price-feed.png new file mode 100644 index 0000000..d4fb505 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/manual-register-price-feed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae22078ffb6a1aba6dafc34107a36e32c6fed3e58e1e4853b537f1f8b7b57384 +size 67282 diff --git a/docs/docs/develop/oracle-set-up-guide/manual-set-signer.png b/docs/docs/develop/oracle-set-up-guide/manual-set-signer.png new file mode 100644 index 0000000..7aae95d --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/manual-set-signer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd7a37b8a000ec817665d8d2c2f5968bffa3b49933f8b664fafce27c2f266b10 +size 69625 diff --git a/docs/docs/develop/oracle-set-up-guide/oracle-architecture.jpg b/docs/docs/develop/oracle-set-up-guide/oracle-architecture.jpg new file mode 100644 index 0000000..e95f738 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/oracle-architecture.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5a29da644f630fb229729a00b1ebb90e659a4330c1825ff14ec85ffe658af7a +size 48466 diff --git a/docs/docs/develop/oracle-set-up-guide/polkadotjs-web-interface.png b/docs/docs/develop/oracle-set-up-guide/polkadotjs-web-interface.png new file mode 100644 index 0000000..fbbaebf --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/polkadotjs-web-interface.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:412936a6f9f8c1ec8b18713c4b140bcbdc3743e97798f0c1398c75d1628ab8b6 +size 653447 diff --git a/docs/docs/develop/oracle-set-up-guide/price-feed-output.png b/docs/docs/develop/oracle-set-up-guide/price-feed-output.png new file mode 100644 index 0000000..ecdef62 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/price-feed-output.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58d8742f1afc2dffdef6cda71bcc1da00ba881f58a6b2cd642ef7d470dfaa274 +size 12085 diff --git a/docs/docs/develop/oracle-set-up-guide/register-offchain-worker.png b/docs/docs/develop/oracle-set-up-guide/register-offchain-worker.png new file mode 100644 index 0000000..29f2836 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/register-offchain-worker.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56ec9507c0e5c7cf0c5fa99906a857d2f62989817730b80764173c0482c270e8 +size 60986 diff --git a/docs/docs/develop/oracle-set-up-guide/successful-price-submitted.png b/docs/docs/develop/oracle-set-up-guide/successful-price-submitted.png new file mode 100644 index 0000000..9eeb906 --- /dev/null +++ b/docs/docs/develop/oracle-set-up-guide/successful-price-submitted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd156914a77044a42ca59a46c7cfb0ac225f430c0b9b6946d63a4878e33a8575 +size 138928 diff --git a/docs/docs/develop/pallet-integrations.png b/docs/docs/develop/pallet-integrations.png new file mode 100644 index 0000000..95beefa --- /dev/null +++ b/docs/docs/develop/pallet-integrations.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5fd47e7275d5949b6bc534bec8070300db7878023ad57b419ecb09e4a55233b +size 15730 diff --git a/docs/docs/develop/pallets-overview.md b/docs/docs/develop/pallets-overview.md new file mode 100644 index 0000000..1fb70c9 --- /dev/null +++ b/docs/docs/develop/pallets-overview.md @@ -0,0 +1,52 @@ +# Pallet Overviews + +*Please note; the pallets presented are in active development and may not be production ready.* + +# Pallets & Integration + +The world of DeFi (primitives, core and applications) continues to edge towards interoperability +and Polkadot comfortably sits at the epicenter of this natural progression. +To natively deploy dApps in the DotSama ecosystem, developers need pallets. +Substrate-based pallets are modular frameworks that enable anyone to create +purpose-built blockchains (as well as dApps) by composing custom or pre-built components. +Think of pallets as stackable building blocks that any developer can use to easily build protocols and dApps. + +In general, pallets provide a robust and powerful framework to help propel more creativity from developers +looking to build the future of DeFi’s primitive, core and application functions. +Given that our parachains are the foundational layer that powers our ecosystem, +we decided to initially adopt a pallet-centric approach to adding products directly in the runtime of our parachains +before launching the Composable CVM where developers will be able to deploy their applications utilizing cross-chain +smart contracts. + +Developers and projects hold the ability to deploy as pallets on our chain, +with governance having the ability to upgrade these pallets into the runtime of our chains: + + +![pallet_integrations](./pallet-integrations.png) + + +## Advantages: + +**Higher performance**: The cost of calling a pallet extrinsic is known beforehand through bench-marking. + +**Larger set of capabilities**: Pallets may interact with each other, +and can hook into different life-cycles of the block production, +and can launch off-chain workers to handle computation or make HTTP requests. + +**It is important to note that projects deployed from ETH that want to become natively cross-chain can deploy as Pallets +on Picasso.** + +Pallet Developers on Picasso - What are the Benefits? + +Picasso is the cornerstone of Composable Finance’s robust tech stack: +Pioneered to meet pallet developers’ needs, +with Picasso, instead of having to use time and resources +to procure one of the highly sought after parachain slots on Kusama or Polkadot, +pallet developers can simply launch their projects on Picasso. +But securing the spot is not the only pain point developers have to overcome. +The entire set of pallets launched on Picasso will be able to work together — +resulting in seamlessly interoperable dApps with hardened security. + +Our aim is to supply dApp developers on Picasso with all the necessary tools to build seamlessly interoperable financial +applications ranging from simple to sophisticated. Hence this section of the developer documentation portrays the +pallets and corresponding integration guides that we have developed and built into the runtime of Picasso. \ No newline at end of file diff --git a/docs/docs/develop/picasso-asset-list.md b/docs/docs/develop/picasso-asset-list.md new file mode 100644 index 0000000..011bead --- /dev/null +++ b/docs/docs/develop/picasso-asset-list.md @@ -0,0 +1,45 @@ +# Asset List + +The following is a current list of assets available on Picasso. The metadata for assets is stored in the `assetsRegistry` pallet and amounts are stored in the `tokens` (ORML) pallet. + + +| Asset | Symbol | Asset ID | Decimals | +| --------------------- | ------- | -------- | -------- | +| Picasso | PICA | 1 | 12 | +| Polkadot | DOT | 6 | 10 | +| Kusama | KSM | 4 | 12 | +| Cosmos Hub | ATOM | 7 | 6 | +| Kusama asset Hub USDT | USDT | 130 | 6 | +| Osmosis | OSMO | 8 | 6 | +| Stride | STRD | 9 | 6 | +| Staked ATOM | stATOM | 10 | 6 | +| Stargaze | STARS | 11 | 6 | +| Neutron | NTRN | 12 | 6 | +| Crescent | CRE | 13 | 6 | +| Bonded Crescent | bCRE | 14 | 6 | +| Secret Network | SCRT | 15 | 6 | +| Umee | UMEE | 17 | 6 | +| Agoric | BLD | 18 | 6 | +| BNC Kusama | BNC KSM | 31 | 12 | +| Voucher KSM | vKSM | 32 | 12 | +| BNC Polkadot | BNC DOT | 33 | 10 | +| Voucher DOT | vDOT | 34 | 10 | +| Equilibrium USD | EQD | 127 | 9 | +| Chihuahua | HUAHUA | 420 | 6 | +| Shiden | SDN | 2007 | 18 | +| Astar | ASTR | 2006 | 18 | +| Equilibrium | EQ | 2011 | 9 | +| Tinkernet | TNKR | 2125 | 12 | +| SILK | SILK | 16 | 6 | +| Celestia | TIA | 19 | 6 | +| Inter Stable Token | IST | 25 | 6 | +| Kujira | KUJI | 28 | 6 | +| USK | USK | 26 | 6 | +| Injective | INJ | 24 | 18 | +| Quicksilver | QCK | 29 | 6 | +| Moonriver | MOVR | 23 | 18 | +| Moonbeam | GLMR | 40 | 18 | +| Polkadot asset hub USDT | USDT | 149 | 6 | +| Polkadot asset hub USDC | USDC | 150 | 6 | + + diff --git a/docs/docs/develop/picasso-banner.png b/docs/docs/develop/picasso-banner.png new file mode 100644 index 0000000..bb0ffd4 --- /dev/null +++ b/docs/docs/develop/picasso-banner.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeadb309e2c5bb5c29a9d90ab0ed5b92179f0d873c65c4eb17d9e64138a8d373 +size 411259 diff --git a/docs/docs/develop/polkadotjs-collator.png b/docs/docs/develop/polkadotjs-collator.png new file mode 100644 index 0000000..eb2fa66 --- /dev/null +++ b/docs/docs/develop/polkadotjs-collator.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e85b15e4b65ec030de7fd527c4f4508d98561216ac7f02038efe8a269e8d2af3 +size 153981 diff --git a/docs/docs/develop/solana-avs-testnet.md b/docs/docs/develop/solana-avs-testnet.md new file mode 100644 index 0000000..712a529 --- /dev/null +++ b/docs/docs/develop/solana-avs-testnet.md @@ -0,0 +1,50 @@ +# Solana AVS Testnet Guide + +:::info +This document serves as a guide for onboarding as an operatior of the AVS for Solana IBC AVS powered by the Picasso Restaking layer. Operators of this AVS are essentially validators of the previously known 'Guest Blockchain'. Additional information can be found [here](../technology/restaking/sol-ibc-avs.md). +::: + +### Operator Security Model +The operator set of the AVS will be directed by majority where it is the responsibility of active validators to maintain uptime and sign corresponding payloads of transactions. + +### Bonding + +Joining as a validator will require a bonded stake to keep participation gated from malicious actors easily onboarding. The size of the bond will be 25 SOL. + +### (Re) Staking +The validator set will be able to utilize liquid staked derivatives of SOL, such as jitoSOL, mSOL, bSOL, LST and edgevanaSOL. + +### Oracles +The Pyth oracle will be used to access price feeds for LST assets staked to the platform. + +### Slashing +Slashing functionality will not be included during the initial launch stage. It will be implemented after the network is fully operational and IBC is live in production on Solana. + +## Validator Setup + +1. Install the validator CLI using the following command (From `validator-testing` branch) +``` +cargo install --git https://github.com/composableFi/emulated-light-client#validator-testing +``` +2. Check if the validator CLI is installed using the following command. The current version should be returned as a value indicating successful installation. +``` +validator --version +> 0.0.1 +``` +3. Set up the rpc url with validator keypair using the command below (note that the program ID is already added). Try to use custom +rpc since the solana public rpc is not good enough to send transactions and will usually be dropped frequently. You can get the rpc +from helius, quicknode or triton. Keypair path is the path to your keypair json file. [For Example](https://github.com/ComposableFi/emulated-light-client/blob/2313bbd4c1f838ce36b894e781ede5eb63b7c698/solana/solana-ibc/keypair.json) +``` +validator init --rpc-url --ws-url --program-id 7uvnkZxh7Z1wwVFMQ1ak7u4LXWx9f8tkgUnMMyiZrSZb --keypair-path +``` +4. Once the config file is set, run the validator. +``` +validator run +``` +:::note +You can even pass any of the arguments which would override the default config set in previous step. These arguments are +optional and has higher preference than the default config file. Any of the arguments can be passes and its not neccessary to pass +all of them. +``` +validator run --rpc-url --ws-url --program-id 7uvnkZxh7Z1wwVFMQ1ak7u4LXWx9f8tkgUnMMyiZrSZb --keypair-path +::: diff --git a/docs/docs/ecosystem/audits-bug-bounty.md b/docs/docs/ecosystem/audits-bug-bounty.md new file mode 100644 index 0000000..a26ba9d --- /dev/null +++ b/docs/docs/ecosystem/audits-bug-bounty.md @@ -0,0 +1,80 @@ +# Audit Results and Remediations + +Composable Finance coding is regularly audited by renowned security auditing firms. + +**Code fixes, audit reports and subsequent fixes are available [here](https://github.com/ComposableFi/composable/tree/main/audits) on our GitHub.** + + +# Immunefi Bug Bounty Program + +As a part of Composable’s ongoing commitment to security, +we are proud to announce the renewal of our bug bounty program in collaboration with Immunefi. +Immunefi is the blockchain industry’s leading bug bounty program, having secured more than $60 billion in user funds. +There have been some adjustments to the scope and rewards of this program which will be outlined in this article. + +## Program details +Immunefi classifies bugs based on a [5-level scale] ranging from: none, low, medium, high, and critical. +In addition, Immunefi has separate scales for websites/apps, smart contracts, and blockchain/DLT. +As a team building infrastructure across 2 parachains in the form of pallets, +which are incorporated directly into the runtime of our blockchains, +we are primarily concerned with blockchain/DLT related bugs. +Critical vulnerabilities in other areas will be considered by the Composable team, +but are not within the scope of this bounty program. + +[5-level scale]: https://immunefi.com/immunefi-vulnerability-severity-classification-system-v2-2/ + +### Assets in Scope +The [Picasso parachain] is the primary focus of this bounty program. You can find a link to our GitHub [here], +but keep in mind that blockchain/DLT related bugs will be prioritized for the purpose of this program. +Rewards will be provided for medium, high, and critical vulnerabilities. +A breakdown of this reward structure can be found below: + +[Picasso parachain]: https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fpicasso-rpc.composable.finance#/explorer +[here]: https://github.com/ComposableFi + +#### Blockchain/DLT bounties +Critical ($30,000 - up to $500,000) +- Network not being able to confirm new transactions (Total network shutdown) +- Unintended permanent chain split requiring hard fork (Network partition requiring hard fork) +- Direct loss of funds +- Permanent freezing of funds (fix requires hardfork) +- RPC API crash that causes severe or total disruption +- Ability to halt the chain or alter block productions / the network by providing bad input data + +High ($5,000 - up to $30,000) +- Unintended chain split (Network partition) +- Transient consensus failures +- +Medium ($500 - up to $5,000) +- High compute consumption by validator/mining nodes +- Attacks against thin clients + +All Critical and High Blockchain/DLT bug reports must come with a PoC +with an end-effect impacting an asset-in-scope in order to be considered for a reward. +Explanations and statements are not accepted as PoC and code is required. + +Reward maximums vary case-by-case with direct regard to the impact of the threat presented +and scoped as determined by Composable Finance personnel. +Composable Finance offers varying guaranteed minimum payouts for all levels of vulnerabilities with an accompanying PoC. +Reward maximums will not exceed $500,000. + +Composable Finance requires KYC to be done for all bug bounty hunters submitting a report and wanting a reward. +The information needed are usually 2 forms of Photo Identification and Proof of Address. +The collection of this information is done by the project team. + +## Prohibited activities +As mentioned previously, +any vulnerabilities regarding smart contracts or web applications are excluded from the scope of this program. +In addition, the following activities are prohibited by this program: + +- Any testing with mainnet or public testnet contracts; all testing should be done on private testnets +- Attacks that the reporter has already exploited themselves, leading to damage +- Attacks requiring access to leaked keys/credentials +- Attacks requiring access to privileged addresses (governance, strategist) +- Any testing with pricing oracles or third party smart contracts +- Attempting phishing or other social engineering attacks against our personnel and/or customers +- Any testing with third party systems and applications (e.g. browser extensions) as well as websites (e.g. SSO + providers, advertising networks) +- Any denial of service attacks +- Automated testing of services that generates significant amounts of traffic +- Public disclosure of an unpatched vulnerability in an embargoed bounty diff --git a/docs/docs/ecosystem/composable-ecosystem.md b/docs/docs/ecosystem/composable-ecosystem.md new file mode 100644 index 0000000..1d47177 --- /dev/null +++ b/docs/docs/ecosystem/composable-ecosystem.md @@ -0,0 +1,95 @@ +# Composable Ecosystem + +Composable believes that a path towards a completely interoperable DeFi space involves close industry collaboration. Thankfulness is extended to all the companies, projects, individuals, and other entities collaborating with us to transform our vision for a unified DeFi industry into a reality. + +## Infrastructure Providers +The Composable ecosystem is powered by over 100 infrastructure providers to promote decentralization and security, some of them include: + +- [Bware Labs](https://bwarelabs.com/) +- [Validatrium](https://validatrium.com/) +- [Validatus](https://validatus.com/) +- [Infstones](https://infstones.com/) +- [Polkachu](https://polkachu.com/) +- [Citadel one](https://citadel.one/) +- [Notional](https://notional.ventures/) +- [Luganodes](https://www.luganodes.com/) +- [Brightlystake](http://brightlystake.com) +- [Forbole](https://www.forbole.com/) +- [Lucky Friday](https://luckyfriday.io/) +- [Masternode24](https://masternode24.de/) +- [Moonlet](http://moonlet.io) +- [Restake](https://www.restake.net/) +- [Iceberg Nodes](https://icebergnodes.com/) +- [The Milky Way Gang](https://themilkywaygang.com/) +- [Polkadotters](https://polkadotters.medium.com/) +- [Lavender Five](https://www.lavenderfive.com/) + +## Wallets +Wallets supported in the Composable ecosystem currently include: + +- Metamask +- [Talisman](https://www.talisman.xyz/) +- [Keplr](https://www.keplr.app/) +- [Leap Wallet](https://www.leapwallet.io/) +- [Polkadot.js](https://polkadot.js.org/) +- [Nova Wallet](https://novawallet.io/) + +## dApps +The following apps leverage/interface with the Composable ecosystem: +- [Astroport](https://astroport.fi/) +- [ShadeSwap](https://shadeprotocol.io/blog/shadeswap-stableswap-for-the-cosmos) +- [Osmosis](https://www.osmosis.org/) +- [Levana](https://www.levana.finance/) +- [Pablo](https://www.pablo.finance/) +- [Trustless.zone](https://www.trustless.zone/) + +## Blockchains +The Composable ecosystem connects to the following blockchains: +- [Ethereum](https://ethereum.org/nl/) (soon) +- [NEAR](https://near.org/) (soon) +- [Solana](https://solana.com/) (soon) +- [TRON](https://tron.network/) (soon) +- [Cosmos Hub](https://cosmos.network/) +- [Polkadot](https://www.polkadot.network/) +- [Kusama](https://kusama.network/) +- [Osmosis](https://osmosis.zone/) +- [Stride](https://www.stride.zone/) +- [Secret](https://scrt.network/) +- [Umee](https://umee.cc/) +- [Agoric](https://agoric.com/) +- [Kujira](https://kujira.network/) +- [Stargaze](https://www.stargaze.zone/) +- [Chihuahua](https://www.chihuahua.wtf/) +- [Crescent](https://crescent.network/) +- [Neutron](https://neutron.org/) +- [Phala](https://phala.network/) +- [Moonbeam](https://moonbeam.network/) +- [Moonriver](https://moonbeam.network/networks/moonriver/) +- [Bifrost](https://www.bifrostnetwork.com/) +- [Astar](https://astar.network/) +- [Shiden](https://shiden.astar.network/) +- [InvArch](https://invarch.network/) + +## Collaborations +Composable aims to bridge the gap between DeFi and other industries, such as FinTech and TradFi. Current collaborations include [INESC Lisboa](https://www.inesclx.pt/). + +INESC Lisboa is a research consortium based out of Lisbon, Portugal. Composable is collaborating with [INESC-ID](https://www.inesc-id.pt/), a subset of INESC Lisboa that focuses on research, development, and innovation (R&D+i) in computer science and electrical and computer engineering. It specifically promotes collaboration between academia and industry. Composable is working with [Professor Miguel Matos](https://www.cienciavitae.pt/CD1F-6851-B224) and his team at INESC-ID to research and develop a number of cutting edge technologies, such as a mechanism for enabling chains without light clients to connect to the Inter-Blockchain Communication (IBC) protocol. + +## Supporters +We are incredibly grateful to all of the supporters of our funding rounds, including: + +- [Longhash Ventures](https://www.longhash.vc/) +- [Fundamental Labs](https://www.cth.group/what_we_do/fundamental_labs/) +- [Spartan Group](https://www.spartangroup.io/) +- [Coinbase Ventures](https://www.coinbase.com/ventures) +- [GSR](https://www.gsr.io/) +- [SOSV](https://sosv.com/) +- [Figment Capital](https://www.figmentcapital.io/) +- [Jump Capital](https://jumpcap.com/) +- [DFG](https://www.dfg.group/) +- [Maven 11](https://www.maven11.com/) +- [Hash CIB](https://hashcib.com/) +- [Advanced Blockchain AG](https://www.advancedblockchain.com/) +- [Rarestone Capital](https://www.rarestone.ventures/) +- [NGC Ventures](https://ngc.fund/) +- [New Form Capital](https://www.newformcap.com/) \ No newline at end of file diff --git a/docs/docs/ecosystem/composable-research.md b/docs/docs/ecosystem/composable-research.md new file mode 100644 index 0000000..1a5c386 --- /dev/null +++ b/docs/docs/ecosystem/composable-research.md @@ -0,0 +1,21 @@ +# Composable Research + +Since its inception, Composable has fostered innovative research-based solutions. As a result, allowing the development of value-added DeFi primitives and products due to the incorporation of in-depth research to uncover hidden opportunities and inefficiencies within the building approach. Composable Research is a research arm dedicated to working towards advancing innovative ideas, identifying market trends, and discovering untapped potential. + +## Areas of Focus + +Composable Research aims to accelerate and improve the process of building, educating, and promoting Web3. In addition to building, a core focus is to maximise the value output as an organization and ecosystem partner by contributing and collaborating in research on Web3 adoption and improvement. + +As an organization, Composable Research aims to focus on medium- and long-term critical issues that will have a profound impact on the sustainability of DeFi. Some challenges the blockchain space faces cannot be cracked immediately but warrant investigation through intellectual rigor. + +In hindsight, these may seem like clear linear developments but instead require the overlap of diverse expertise and contributions. Many features of DeFi that are considered normative today, like L2 rollups as a scaling solution, were not within DeFi’s zeitgeist years ago. They were developed through years of extensive research, theory, and continuous iterations on the challenges of scaling the sector. + +Composable Research demonstrates resolve as a sustainable solution pathfinder with cross-domain expertise in Mathematics, Cryptography, and Blockchains. Composable Research’s work will inform Composable’s future roadmap and help ensure it remains at the forefront of innovations addressing consumer needs. + +Some of the present foci at Composable Research include: +- Cross-domain MEV extraction and optimization +- Transaction intent settlement cross-chain in an optimized manner +- Retail adoption of crypto + - Mass adoption by users + - TradFi/FinTech integrations/collaborations + - Solutions for geographic regions with financial/economic instability diff --git a/docs/docs/ecosystem/press-kit.md b/docs/docs/ecosystem/press-kit.md new file mode 100644 index 0000000..ff44f70 --- /dev/null +++ b/docs/docs/ecosystem/press-kit.md @@ -0,0 +1,3 @@ +# Press Kit + +Please use the official [Media Kit](https://drive.google.com/drive/folders/1t9iMewvNbRJTUwTHEcVNNGFGDagwp3-t) for any press on Composable Finance and Picasso. \ No newline at end of file diff --git a/docs/docs/ecosystem/request-for-proposals.md b/docs/docs/ecosystem/request-for-proposals.md new file mode 100644 index 0000000..e4371eb --- /dev/null +++ b/docs/docs/ecosystem/request-for-proposals.md @@ -0,0 +1,48 @@ +# Request for Proposals +Composable is aware that the DeFi community is made up of incredibly innovative people and projects. To promote collaboration with others to deliver the best products and services to users and the industry at large, the following requests for proposals (RFPs) are open to the public: + +## RFP : Canonical Stable Coin Design and Integration + +### Introduction: + +Composable Finance is seeking proposals from qualified blockchain developers +to design and integrate a **Proof-of-Concept** for a custom stablecoin for multi-chain usage +using our proprietary [Composable Virtual Machine(CVM)]. +The goal of this project is to allow projects to create and maintain mint and burn privileges +for issuing truly canonical stablecoins across different chains. + +[Composable Virtual Machine(CVM)]: https://docs.composable.finance/products/cvm + +### Requirements & Scope of Work: + +The purpose of this RFP is to build a **proof of concept** for a CVM-powered stablecoin for multi-chain usage. +Requirements for creating a custom CVM-powered stablecoin for multi-chain use are as follows: +- Design and develop a custom stablecoin for multi-chain usage using our technology stack, specifically the CVM +- A minting contract must be on each chain that you want to mint your coin on +- An CVM contract must be on the chain of your choice in order to control mint and burn + via [Inter-Blockchain Communication (IBC)] Protocol messages between chains + - This will handle the actual accounting of the stablecoin + +[Inter-Blockchain Communication (IBC)]: https://ibcprotocol.org/ + +### Evaluation Criteria: + +Proposals will be evaluated based on the following criteria: + +- Quality of past work and experience with similar projects +- Understanding of the project scope and ability to meet project requirements +- Proven ability to deliver projects on time and within budget +- Quality and clarity of the proposal +- Cost + +### Submission Requirements: + +Please submit the following materials as part of your proposal: + +- A detailed project plan outlining your approach to the stablecoin design and integration project, + including timeline and deliverables +- A detailed cost breakdown, including any additional fees or expenses + +### Contact Information: + +If you have any questions about the RFP or the project, please contact us at outreach@composable.finance diff --git a/docs/docs/ecosystem/the-composable-team.md b/docs/docs/ecosystem/the-composable-team.md new file mode 100644 index 0000000..9cf103a --- /dev/null +++ b/docs/docs/ecosystem/the-composable-team.md @@ -0,0 +1,63 @@ +# The Composable Team + +The [Composable Foundation](https://www.composablefoundation.com/) serves as the underlying organisational structure to drive forward the Picasso and Composable Protocols. The Foundation and its members will support the core protocols in ecosystem development, research and engineering efforts to continue advancing the Composable ecosystem to new heights. + +The Composable team consists of approximately 30 individuals, with 15 members dedicated to Engineering, Infrastructure, and Research, while 11 others are focused on Product, Design, Marketing, and Business Development. The remaining four individuals are assigned to Legal, Finance, and HR roles. Biographies of select core members are provided below. + +## Henry Love | Board Member and the Executive Director +Henry Love is a seasoned Founder and Executive. Prior to joining the Composable Foundation, Henry held the position of Managing Partner and the Head of US operation for Fundamental Labs, a leading crypto-focused venture fund based in Singapore. Before joining Fundamental Labs, Henry co-founded a crypto corporate venture studio, YGC, and its spin out company Executive Council Network (ECN). He joined the crypto industry by stepping in as the Chief Investment Officer at a crypto-focused family office who pioneered the industry after leaving Facebook as a top performer in the marketing, e-commerce, & strategy division. + +## 0xbrainjar | Founder & Research Director + +Omar is a seasoned researcher and innovator in the blockchain industry. His deep understanding of the space complemented by an encompassing perspective on the vision of cross-chain DeFi has established him as a thought leader and valuable pioneer. His current focus entails the investigation and research of blockchain infrastructure and trends, providing valuable insights that guide Composable's development. Brainjar writes about the R&D at Composable on [Twitter](https://twitter.com/0xbrainjar) and [Medium](https://medium.com/@0xbrainjar). + +## Blas Rodriguez Irizar | Co-Founder & CTO + +Blas has 8 years of experience as a Software Engineer. He started his blockchain experience at LayerTwo, moving to Consensys where he worked on building zk-rollups. Blas has expertise in building high performance systems and working with different blockchains like Solana, Ethereum, and Bitcoin. He holds a Bachelor’s Degree in Science and a Masters Degree in Finance. In his role at Composable, Blas oversees the Research and Engineering departments with the critical responsibility of creating the technology strategy behind Composable’s products. [Twitter](https://mobile.twitter.com/blasrodri) + +## Miguel Santefé | Co-Founder & Head of Design + +Formerly identified as 0xslenderman, Miguel started his career in technology consultancy. Given his passion for aesthetics and design, he became an entrepreneur founding a creative consultancy company. Since then, he obtained 7 years of experience in creative direction. He has been in crypto since 2014 and has been designing applications since 2018. Previous to joining Composable, he led the creative strategy at various DeFi projects. Miguel has a background in IT Engineering and Computer Science, which enables him to turn complex and tech-heavy concepts into seamless and user-friendly experiences. [Twitter](https://twitter.com/0xslenderman) + +## Eoin Whelan | Chief Finance Officer + +Eoin has extensive experience operating, scaling, and raising capital in the Traditional and Decentralized Finance sectors. He had an early career as an international tax and M&A accountant with Price Waterhouse Coopers (PwC). He held leadership roles at BDO advising international corporate clients, and at EY leading the finance transformation team and successfully growing the business tenfold. Eoin had over 5 years as a C-level executive for a number of DeFi, NFT, and blockchain-related projects. He holds an undergraduate degree in accounting and a Master’s degree in business and finance. In his role, Eoin focuses on delivering excellence in finances to accelerate the company’s journey towards expansion and sustainable growth. + +## Jeffrey Smith | Global GC, Chief Compliance & Risk Officer + +Jeffrey has specialized experience spanning the different dimensions of finance across securities law, financial regulation, digital assets, DeFi, compliance, risk, mergers & acquisitions, taxation, anti-money laundering, and more than 23 years of deep experience in the law covering all aspects of business and finance. Jeffrey has advised a range of clients across the different dimensions of DeFi, such as liquidity management, smart contracts, regulatory compliance, initial coin offerings (ICOs), DAOs, and more. [Twitter](https://twitter.com/JeffreyAPIs). + +## Ahmad Wehbi | Chief Operations Officer + +Ahmad has 11 years of experience and spent most of his career advising institutions on strategy, operations, and organizational topics. Ahmad is focused on the operational side of Composable and holds a B.B.A. in Entrepreneurial Studies and an MBA from INSEAD. At McKinsey & Company, he helped organizations design and orchestrate ecosystems at scale. At Composable, Ahmad is responsible for overseeing the day-to-day operations and ensuring that business processes are efficient, effective, and aligned with the overall strategy. [Twitter](https://twitter.com/wehbix) + +## Joseph DeTommasso | Head of Strategy + +Joe possesses extensive experience in both the crypto and traditional finance (TradFi) sectors, having contributed to the Bitcoin network as an independent node operator in 2011 and working with top hedge funds where he was focused on statistical arbitrage between international ETFs. Joe worked with leading crypto funds like FalconX and CMS Holdings, managing relationships and strategic partnerships with trading partners and liquidity providers. At Composable, Joe focuses on tokenomics, driving strategic direction and goals, and crafting plans to achieve business objectives. [Twitter](https://twitter.com/__Swurve__) + +## Kostya Kastsevich | Parachain Lead + +After graduating from UC Berkeley, Kostya worked on analyzing financial data and supporting storage infrastructure for various IT companies. In 2020, he joined a blockchain startup, where he developed both the front-end and back-end of a Web 3 application. Later on, Kostya shifted his focus to Substrate and Rust. Currently, Kostya is responsible for overseeing the technical aspects and delivery of innovative solutions on Composable's parachains, Picasso and Composable. + +## Dzmitry Lahoda | Staff Software Engineer +Dzmitry is a seasoned software developer with 20 years of experience, specializing in blockchain and cryptocurrency. With 95% of his assets in crypto and a net-zero trading portfolio, he is deeply committed to the crypto ecosystem. Currently, he's contributing to the Composable project, focusing on practical applications for cross-chain interoperability. For Dzmitry, code is not just a tool, but a language for shaping the future. + +## Vladislav Marshukin | Bridging Lead + +Vlad is a skilled software engineer with experience in blockchain technology and programming languages like Rust, Java, C++, and Android development. He currently works as the Bridging Lead, focusing on developing several Centauri connections. In the past, he has delivered successful projects at companies like Soramitsu, Bitfury, and Paymon Inc. Vlad has a particular interest in functional programming, formal verification, and embedded systems, which he applies to internal projects and helps the team succeed. + +## Michal Nazarewicz | Senior Researcher +Michal Nazarewicz is a skilled programmer proficient in languages like C, C++, Rust, and Python, with extensive experience in GNU/Linux systems and cloud infrastructure management. They've contributed significantly as a Senior Software Engineer at NEAR, optimized low-latency solutions at Hudson River Trading, and played key roles at Google, including Site Reliability Engineer and Software Engineer, while also making substantial contributions to the Linux kernel during their tenure at Samsung Electronics. + + +## Sydney Sweck | Lead Research Associate +Sydney has broad experience encompassing academia, writing, research, and blockchain. She has previously worked as a university lecture professor, lab specialist, and researcher in biology and the life sciences. She has also participated in the blockchain and DeFi industries for over 6 years, bringing her skills in writing, education, and research to these fields. This includes her present role as the Lead Research Associate at Composable, where she leads the organization, documentation, and dissemination of the company’s research efforts. + + +## Jafar Azam | Developer Relations + +Jafar is a versatile professional with expertise in foreign exchange trading, cross-border payment and regulatory landscapes. He holds a BSc in Economics and actively explores reading in Cryptography, Psychology, and Philosophy. After a wealth of experience working for Ethereum-based protocols, Jafar now focuses on fostering productive relationships for business development and ecosystem growth at Composable. + +## Patrick Kondek | Marketing Lead + +Patrick, a marketeer with a strong background in business analysis, is equipped with a diverse and growth hacking skill set. Fueled by a passion for scalable businesses and a keen interest in blockchain technology, Patrick excels in his role as Marketing Lead at Composable where he spearheads the company's marketing endeavors by crafting content and implementing robust growth strategies. \ No newline at end of file diff --git a/docs/docs/editing-runtime-tests.png b/docs/docs/editing-runtime-tests.png new file mode 100644 index 0000000..ff1ed9a --- /dev/null +++ b/docs/docs/editing-runtime-tests.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7bfeb2fc0c5b854f69020d494122fce48b9cf37a0102966b91648b5c2b702fd +size 2991410 diff --git a/docs/docs/faqs/disclaimers-disclosures-for-composable-tokens.md b/docs/docs/faqs/disclaimers-disclosures-for-composable-tokens.md new file mode 100644 index 0000000..effaaae --- /dev/null +++ b/docs/docs/faqs/disclaimers-disclosures-for-composable-tokens.md @@ -0,0 +1,210 @@ +# Specific Disclaimers and Disclosures for the Composable Tokens + +As of December 21, 2022 + +This Specific Disclaimers and Disclosures for the Composable Tokens (“Disclaimer”) relates to the PICA tokens, +MANTIS tokens, lsDOT and other tokens or products (the “Composable Tokens”) issued or +developed by Composable Foundation (the “Company”) that is found within the Ethereum, Polkadot, Kusama and Cosmos blockchain ecosystem. +The Disclaimers shall also apply, including without limitation, to the Company’s agents, representatives, +beneficial owners, directors, officers, employees, contractors, affiliates, and related persons. + +You must read and understand this Disclaimer in full before: +(i) accessing, reading, referencing, relying upon or otherwise making use of any and all information available in the +website of the Company at https://www.composable.finance/ or https://picasso.xyz/ (the “Website”) or such other sites, +webpages, posts, and published materials of the Company regarding the Composable Tokens (the “Materials”), +(ii) participating in any token sale or token generation event involving the Composable Tokens, +(iii) acquiring, utilizing, purchasing, selling, or trading the Composable Tokens through whatever mode or means, and +(iv) interacting or communicating with the Picasso parachain or participating in its ecosystem in any manner whatsoever +(collectively, “Covered Activities”). + +This Disclaimer may be updated from time to time. +It is your responsibility to read the latest available information prior to engaging in any of the Covered Activities. + +### 1. Specific Disclaimers + +#### a. Not a Security or Investment Contract + +The Composable Tokens are not shares or securities of any type +and they do not entitle you to any ownership or interest in the Company. +They are merely a means +by which you may be able to utilize certain services in a network or platform to be operated by the Company(the “Project”). +These services, however, are not fully assured and extreme events and similar circumstances may prevent their realization. + +To this extent, by engaging in any of the Covered Activities, you agree that you have no recourse, +claim, action, judgment or remedy against the Company in relation to the utility of Composable Tokens. + +Should you be uncertain as to any information in the Materials or to your participation in the Covered Activities, +or if you are not prepared to lose all funds, assets or value that you transferred in acquiring the Composable Tokens, +we strongly encourage and urge you not to engage in the Covered Activities. +You may lose all the funds, assets or value that you transferred in exchange for the Composable Tokens. + +#### b. Not an Offering + +Any information in the Materials, especially as they relate to the Composable Tokens, does not constitute an offer to +sell or a solicitation of an offer to purchase securities, assets, including digital assets, or financial instruments +by the Company, or to enter into a transaction involving any such security or financial instrument. +Such an offer can only be done through a registered or licensed offering or subject to an exemption. +The recipient should not rely upon anything within this information in making a decision to participate in any of +the Covered Activities. +Any information provided in the Materials is not intended for distribution to or use by any person or entity in any +jurisdiction or country where such distribution or use would be contrary to law or regulation +or which would subject us to any registration requirement within such jurisdiction or country. +Accordingly, those persons who choose to access the Materials from other locations do so on their own initiative +and are solely responsible for compliance with local laws, if and to the extent local laws are applicable. + +#### c. Legal and Regulatory Considerations + +The Composable Tokens may only be acquired in jurisdictions in which their marketing, +legality, holding, and distribution are authorized, +and any violation of the laws of any jurisdiction shall be your exclusive and sole responsibility. +As such, it is possible that the Company’s Composable Tokens may be considered as a security in your jurisdiction, +or that any token sale or token generation event may be considered as offering of a security by the Company therein +and, as such, possibly be deemed as a regulated or prohibited activity. +If such is the case, the Company shall not be held liable or responsible for the violation of any securities laws whatsoever. + +You are not eligible to acquire any Composable Tokens in the if you are a citizen, resident (tax or otherwise) +or green card holder of a Restricted Jurisdiction such as, but not limited to: +(a) the United States of America, (b) the People’s Republic of China, (c) South Korea, (d) Vietnam, +and other jurisdictions with similar regulatory restrictions on the acquisition of Composable Tokens +(as may be determined by the Company from time to time). +This ineligibility shall also apply if you are “Restricted Person” which shall refers to any firm, company, partnership, +trust, corporation, entity, government, state or agency of a state or any other incorporated or unincorporated body +or association, association or partnership (whether or not having separate legal personality) that is established and/or +lawfully existing under the laws of a Restricted Jurisdiction. + +No regulatory authority has examined or approved of any of the Materials and no such action has been or will be taken +under the laws, regulatory requirements or rules of any jurisdiction. +There is no representation or warranty that the applicable laws, +regulatory requirements or rules have been complied with by the Company’s publication, +distribution or dissemination of the Materials. +In this regard, you are strongly urged to take independent legal advice with respect to the legality in your +jurisdiction of your engagement in any of the Covered Activities. + +### 2. Limitation of Liability + +The Company or any of its affiliates, employees or agents +(including developers, auditors, contractors, shareholders, directors or founders), +with respect to the Composable Tokens and the Project, shall not be liable for any incidental, special, exemplary or +consequential damages, or damages for lost profits, lost revenues, lost savings, lost business opportunity, loss of data +or goodwill, service interruption, computer damage or system failure or the cost of substitute activities of any kind +arising out of or in connection with the following (collectively, “Excluded Liability Matters”): + +(a) the Covered Activities or your participation in, or inability to participate in relation thereto, whether based on +warranty, contract, tort (including negligence), product liability or any other legal theory, and whether or not +the Company or any of its affiliates, employees or agents +(including developers, auditors, contractors, shareholders, directors or founders) has been informed of the possibility +of such damage, even if a limited remedy set forth herein is found to have failed of its essential purpose; + +(b) any loss or damage whatsoever caused in reliance upon any information in the Materials; + +(c) any losses incurred as a result of receiving, trading or otherwise using the Composable Tokens; + +(d) your failure to follow all the instructions provided by the Company; + +(e) accuracy, completeness, or suitability of the Composable Tokens and the Project; + +(f) your failure to implement reasonable measures to secure the wallet or any other wallet, +vault or other storage mechanism used to receive or hold the Composable Tokens or any relevant access credentials; + +(g) any loss of or unauthorized use of any relevant access credentials; + +(h) any intentional or unintentional misuse of your distribution wallet address; + +(i) any loss or destruction of your private keys; + +(j) any access to the private keys associated with your wallet by any third party; + +(k) any correspondence relative to past, +present or future performance or the outcomes or results of the Composable Tokens and the Project; + +(l) any inaccuracies, errors or flaws in the code, ecosystem, +platform and any other proposed Company operations or in any wallet or program +that you use to interact with the Company and the Composable Tokens; + +(m) any attempt to project future conditions by the Company; + +(n) any expectation promise representation or warranty arising (or purportedly arising) from the Materials; + +(o) the volatility in pricing of tokens in any countries and/or on any exchange or market +(regulated, unregulated, primary, secondary or otherwise); + +(p) any loss of access to Company’s private keys or data breach or data loss; + +(q) the purchase, use. sale resale, redemption or otherwise of the tokens; and + +(r) any information contained in or omitted from the Materials. + +In the event +that the applicable law does not allow all or any part of the above limitation of liability to apply to you, +the limitations will apply to you only to the maximum extent permitted by applicable law. + +The Company or any of its affiliates, employees or agents +(including developers, auditors, contractors, shareholders, directors or founders) +shall not be liable to you, and you shall indemnify, defend and hold harmless the Company and its affiliates, employees +or agents (including developers, auditors, contractors, shareholders, directors or founders), and the successors and +assigns, from and against, any or all causes of action, claims, liabilities, losses, costs, damages and expenses +(including, without limitation, attorneys’ fees and expenses) for damages to or loss of property arising out of or +resulting from the Excluded Liability Matters, whether arising out of or related to breach of contract, tort or otherwise. + +In the event that any provision of this Disclaimer is for any reason held to be invalid, illegal, or unenforceable, +in any respect, or in the event that any provision of this Disclaimer operates or would prospectively operate +to invalidate this Disclaimer and in any such event, such provision(s) only will be deemed null and void and +will not affect the remainder of this Disclaimer and the remaining provisions of this Disclaimer +will remain operative and in full force and effect and will not be affected, prejudiced, or disturbed thereby. + +### 3. Not Professional Advice + +Any information in the Materials shall not be deemed, in any manner, +as a recommendation or suggestion that any particular cryptocurrency, portfolio of cryptocurrencies, +transaction or investment strategy is suitable for any specific person. +Any information in the White Paper or in the Website is not intended to advise you personally concerning the nature, +potential, value or suitability of any particular cryptocurrency, +portfolio of cryptocurrencies, transaction, investment strategy or other matter. + +The Company is not a registered broker, analyst or investment advisor +and all information provided by the Company is purely for guidance and informational purposes. +Nothing herein is or should be construed as legal, financial or tax advice to you. +You are strongly urged to consult an independent advisor with respect to consequences, +if there are any, in participating in any of the Covered Activities. + +Due to the nature of the utility of the PICA token and the Project, +it is highly recommended that before engaging in any of the Covered Activities, you should seek legal, +financial, tax and other professional advice with respect to its legality in your jurisdiction. +Please do not participate on your own +or without adequately seeking advice of an independent advisor as all digital assets, including the Composable Tokens, +are highly speculative and risky. + +### 4. No Representations or Warranties + +No representation or warranty, express or implied, +is made as to the fairness, accuracy or completeness of the information, +opinions and conclusions contained in the Materials in connection with the Company, +the Composable Tokens and the Project. +The Company may amend any official Material from time to time as the Company deems necessary. + +The Company does not make any warranty whatsoever with respect to the Composable Tokens such as: +(a) warranty of merchantability; (b) warranty of suitability or fitness for a particular purpose; (c) warranty of title; +(d) warranty against infringement of intellectual property rights of a third party; (e) warranty of usage; +(f) warranty of purpose; and (g) warranty of workmanship or technical coding or the absence of any defects therein, +whether latent or patent; whether arising by law, course of dealing, course of performance, usage of trade, or otherwise. +You agree +that you have not relied upon any representation or warranty made by the Company or any other person on its behalf. + +The Company cannot and does not represent or warrant that the Composable Tokens and the Project are reliable, +current or error-free, meet your requirements, or that defects in the Composable Tokens and the Project will be corrected. +The Company cannot and does not represent or warrant that the Composable Tokens or the delivery mechanism for the +Composable Tokens are free of any flaws or viruses or other harmful components. + +### 5. Forward-Looking Statements +Statements that mention or make reference to the Composable Tokens which is preceded by, followed by or which include +words and expressions similar to “believes,” “expects,” “plans,” “does not expect,” “is expected,” “targets,” “outlook,” +“ETA,” “scheduled,” “estimates,” “forecasts,” "intends", “anticipates,” or “does not anticipate” and +all descriptions of the Company and the Composable Tokens in the Material are forward-looking statements, +and due to risks, uncertainties, and future events and plans, whether discussed in those documents and materials or not, +and may not occur as the Company expects, or at all. +You agree not to place any reliance on any forward-looking statements in any documents or materials of the Company. + +### 6. Acceptance +By participating or engaging in any of the Covered Activities, +you hereby acknowledge all the foregoing disclaimers and disclosures and accept all of the corresponding obligations, +whether express or implied. \ No newline at end of file diff --git a/docs/docs/faqs/risk-factors.md b/docs/docs/faqs/risk-factors.md new file mode 100644 index 0000000..fb5c1fa --- /dev/null +++ b/docs/docs/faqs/risk-factors.md @@ -0,0 +1,78 @@ +# Risk Factors + +As of December 21, 2022 + +Without limiting the generality of the factors enumerated below, you are hereby informed and made aware of all the +potential risks and liabilities relating to the PICA tokens, MANTIS tokens, lsDOT and other tokens or products (the “Composable Tokens”) issued or developed by Composable Foundation (the “Company”) that is found within the Ethereum, Polkadot, Kusama and Cosmos blockchain ecosystem. + +In this regard, you assume, among others, +the following potential risks and liabilities with respect to the Composable Tokens, its performance or utility, +and the Company’s operations within the Picasso parachain and all the projects built or established within its ecosystem, +to wit: + +1. **General commercial risks.** +There is no guarantee that the Company's goals or objectives in relation to the Composable Tokens or its projects +will be achieved. +The development or deployment of the Composable Token or its intended utility may fail, be abandoned +or be delayed for a number of reasons, including lack of funding, lack of commercial success or prospects, +or lack of use by advertisers, publishers, and/or users. + +1. **Regulatory risks.** +Cryptocurrencies are the subject of regulatory scrutiny by government authorities and other regulatory bodies worldwide, +and the Company could be adversely affected by one or more enquiries or actions. + +1. **No intrinsic Value.** +The Composable Token has no intrinsic value and is not collateralized. +You should be aware that you may not be able to recover any amount or value that you exchange to acquire it. +All forms of participation in cryptocurrencies involve a substantial risk of loss and are not suitable for everyone. + +1. **No guarantee on utility.** +Expectations regarding the form and functionality of the Composable Tokens or its intended functionality and utility, +may not be met upon its release for any number of reasons, including a change in the design and implementation of plans, +or delays or differences upon execution. + +1. **Delay.** +The full functionality and utility of the Composable Tokens is not yet complete, +and no assurance that such can be completed in a timely manner or be completed at all. +The intended functionality and utility of the Composable Tokens is complex +and will require enhancements and product support over time, and full functionality may take longer than expected. + +1. **Not an investment.** +The Composable Token, like all digital assets, are highly speculative and risky; +they should not be considered as an investment vehicle or a financial instrument in any way. + +1. **Reliability of information.** +Neither the Company, nor any related third party, provides any absolute guarantee as to the accuracy, +completeness, or suitability of the information and materials published relating to the Composable Tokens. +While the Company makes a conscious effort in providing only updated information. + +1. **Security risks.** +The Company plans on implementing security measures; +however, the Company cannot predict the success of any security precautions. +For instance, the Company may lose access to its private keys or be subject to data breach or data loss. +In such a case, the Company does not accept any liability for any loss or damage whatsoever +caused by the lost access to the private keys or due to data breach or data loss. + +1. **Advances in hacking capabilities.** +Advances in code cracking, or technical advances such as the development of quantum computing, +may present risks to cryptocurrencies and the Company, which could result in the theft or loss of Composable Tokens. + +1. **Irreversibility.** +Transactions involving Composable Tokens are not, from an administrative perspective, +reversible without the consent and active participation of the recipient of the transaction or, +in theory, control or consent of a majority of the processing power on the relevant blockchain. +Once a transaction has been verified and recorded in a block that is added to the blockchain, +an incorrect transfer of Composable Tokens will not be reversible, +and there may be no compensation for any such transfer or theft. +Such loss could adversely affect the value of the Composable Tokens. + +1. **Market disruptions.** +Market events such as those that occurred during October of 1987 and on September 11, 2001, +could have a global material effect on general conditions and market liquidity +which could result in substantial losses or total loss of value of the Composable Tokens. + +1. **No control.** +The Composable Tokens are not securities or shares and do not represent any stake in the Company. +All decisions regarding the management and affairs of the Company will be made exclusively by the Company. +You will have no right or power to take part in the management, direction or control of the Company, +which may affect the rights, utility or value of the Composable Tokens that you may own or hold. diff --git a/docs/docs/faqs/terms-of-use.md b/docs/docs/faqs/terms-of-use.md new file mode 100644 index 0000000..17740eb --- /dev/null +++ b/docs/docs/faqs/terms-of-use.md @@ -0,0 +1,392 @@ +# Terms of Use +As of January 18, 2023 + +These Terms of Use (“Terms”) constitute a binding and enforceable legal contract between Composable Foundation +and its affiliates (“Composable,” “we,” “us,” or the “Company”) and you, an end user of the services (“you” or “User”) +at https://www.composable.finance, https://picasso.xyz, https://games.mantis.app/ and https://app.pablo.finance/ (the “Services”). +These Terms also include any guidelines, announcements, additional terms, policies, and disclaimers made available +or issued by us from time to time. +By accessing, using or clicking on our website (and all related subdomains) or its mobile applications (the “Site”) or +accessing, using or attempting to use the Services, you agree that you have read, understood, +and are bound by these Terms and that you shall comply with the requirements listed herein. +If you do not agree to any of these Terms or comply with the requirements herein, +please do not access or use the Site or the Services. + +We reserve the right, in our sole discretion, to make changes or modifications to the Site and these Terms at any time +and for any reason. You will be subject to, and will be deemed to have been made aware of and to have accepted, +any such changes by your continued use of the Site. + +1. Eligibility + +The Site is intended for users who are at least eighteen (18) years of age. All users who are minors in the +jurisdiction in which they reside (generally under the age of 18) must have the permission of, +and be directly supervised by, their parent or guardian to use the Site. +If you are a minor, you must have your parent or guardian read and agree to these Terms prior to you using the Site. + +The information provided on the Site is not intended for distribution to or use by any person or entity in any +jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject +us to any registration requirement within such jurisdiction or country. +Accordingly, those persons who choose to access the Site from other locations do so on their own initiative +and are solely responsible for compliance with local laws, if and to the extent local laws are applicable. + +Additionally, you also represent and warrant that you are not a citizen or resident of a state, country, territory +or other jurisdiction that is embargoed by the United States or where your use of the Site or the Services would be +illegal or otherwise violate any applicable law. Specifically, you represent that you are not located in, organized in, +or a resident of Cuba, Iran, Syria, North Korea, Russia, Crimea, Donetsk, Luhansk, Afghanistan, Balkans, Belarus, +Burman, Central African Republic, Congo, Ethiopia, Hong Kong, Iraq, Libya, Lebanon, Nicaragua, Somalia, Sudan and +Darfur, South Sudan, Ukraine, Venezuela, Yemen, Zimbabwe or any other jurisdiction where the applicable law prohibits +you from accessing or using the Services; and you represent that you are not named in the Office of Foreign Asset +Control of the U.S. Department of the Treasury’s Specially Designated and Blocked Persons List. +By accessing or using the Site, you agree that you are solely and entirely responsible for compliance with all laws and +regulations that may apply to you. + +2. Informational Resource + +All information, including graphs, charts, tokenomics, projections, and other data, provided in connection with your +access of the Site and the Services are for general informational purposes only and subject to change at the sole +discretion of Composable. Composable provides resources about the fundamentals of the Composable protocol or system, +which seeks to build a trustless infrastructure for DeFi. This information is not intended to be comprehensive or +address all aspects of the protocol. You should not take, or refrain from taking, any action based on any information +contained on the Site or any other information that we make available at any time, including blog posts, data, articles, +links to third-party content, news feeds, tutorials, tweets, and videos. + +The materials appearing in the Site could include technical, typographical, or photographic errors. +Composable does not warrant that any of the materials on its website are accurate, complete or current. + +3. Intellectual Property Rights + +Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, +software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and +the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, +and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition +laws of the applicable jurisdiction, international copyright laws, and international conventions. +The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. +Except as expressly provided in these Terms, no part of the Site and no Content or Marks may be copied, reproduced, +aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, +licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission. + +4. Third-Party Website and Content + +The Site may contain (or you may be sent via the Site) links to other websites (“Third-Party Websites”) as well as +articles, photographs, text, graphics, pictures, designs, music, sound, video, information, applications, software, a +nd other content or items belonging to or originating from third parties (“Third-Party Content”). Such Third-Party +Websites and Third-Party Content are not investigated, monitored, or checked for accuracy, appropriateness, +or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any +Third-Party Content posted on, available through, or installed from the Site, including the content, accuracy, +offensiveness, opinions, reliability, privacy practices, or other policies of or contained in the Third-Party +Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any +Third-Party Websites or any Third-Party Content does not imply approval or endorsement there of by us. +If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, +you do so at your own risk, and you should be aware that these Terms no longer govern. +You agree and acknowledge that we do not endorse the products or services offered on Third-Party Websites and you +shall hold us harmless from any losses or injury caused by your purchase of such products or services. +Additionally, you shall hold us harmless from any losses sustained by you or harm caused to you relating to or +resulting in any way from any Third-Party Content or any contact with Third-Party Websites. + +5. Unacceptable Use or Conduct + +As a condition to accessing or using the Site or the Services, you will not: + +a. Violate any applicable law, including, without limitation, any relevant and applicable anti-money laundering and +anti-terrorist financing laws, such as the Bank Secrecy Act, each as may be amended; + +b. Infringe on or misappropriate any contract, intellectual property or other third-party right, +or commit a tort while using the Site or the Services; + +c. Use the Site or Services in any manner that could interfere with, disrupt, negatively affect, +or inhibit other users from fully enjoying the Site or Services, or that could damage, disable, overburden, or impair +the functioning of the Site or Services in any manner; + +d. Attempt to circumvent any content filtering techniques or security measures that Composable employs on the Site, +or attempt to access any service or area of the Site or the Services that you are not authorized to access; + +e. Use the Services to pay for, support, or otherwise engage in any illegal gambling activities, fraud, +money-laundering, or terrorist activities, or other illegal activities; + +f. Use any robot, spider, crawler, scraper, or other automated means or interface not provided by us, +to access the Services or to extract data; + +g. Introduce any malware, virus, Trojan horse, worm, logic bomb, drop-dead device, backdoor, shutdown mechanism +or other harmful material into the Site or the Services; + +h. Provide false, inaccurate, or misleading information; + +i. Post content or communications on the Site that are, in our sole discretion, libelous, defamatory, profane, obscene, +pornographic, sexually explicit, indecent, lewd, vulgar, suggestive, harassing, hateful, threatening, offensive, +discriminatory, bigoted, abusive, inflammatory, fraudulent, deceptive or otherwise objectionable + +j. Post content on the Site containing unsolicited promotions, political campaigning, +or commercial messages or any chain messages or user content designed to deceive or trick the user of the Services; or + +k. Use the Site or the Services from a jurisdiction that we have, in our sole discretion, +or a relevant governmental authority has determined is a jurisdiction where the use of the Site or the Services is prohibited. + +6. Forward-Looking Statements + +This information contains “forward-looking statements. ” These statements, identified by words such as “plan,” +“anticipate,” “believe,” “estimate,” “should,” “expect,” “will,” “can,” and similar future-looking expressions include +our expectations and objectives regarding our future operating results and business strategy. +Forward-looking statements involve known and unknown risks, uncertainties, assumptions and other factors that may cause +the actual results, performance or achievements of Composable and its affiliated entities or related projects to be +materially different from any future results, performance or achievements expressed or implied by the forward-looking statements. +Such factors include, among others, general business, economic, competitive, political and social uncertainties; +dependence on commercial product interest; as well as regulatory or legal changes and uncertainty. +Forward-looking statements are based on a number of material factors and assumptions, economic conditions in the near +to medium future, the average cost of the Company’s offerings compared to traditional offerings, fluctuations or +changes to the tax and other regulatory requirements regarding DeFi and the industry as a whole. +While the Company considers these facts and assumptions to be reasonably based on information currently available to it, +these assumptions may prove to be incorrect. +Actual results may vary from such forward-looking information for a variety of reasons, +including but not limited to risks and uncertainties known and unknown by the Company. +Because forward-looking statements relate to the future, they are subject to inherent uncertainties, +risks and changes in circumstances that are difficult to predict and many of which are outside of our control. +The Company’s actual results and conditions may differ materially from those indicated in the forward-looking statements. +Therefore, you should not rely on any of these forward-looking statements. + +7. Use Cases + +Use cases are provided for illustration purposes only and the Company neither supports nor condones any such uses. +Any such uses should be done at the risk of the person making the utilization of the technology and any user agrees to +hold harmless and indemnify the Company from and against any losses that may occur as a result of any such uses. + +8. Not an Offering + +Any information in this Site does not constitute an offer to sell or a solicitation of an offer to purchase securities, +assets, including digital assets, or financial instruments by the Company, or to enter into a transaction involving any +such security or financial instrument. Such an offer can only be done through a registered or licensed offering or +subject to an exemption. The recipient should not rely upon anything within this information in making a decision to +participate in the Company’s issuances or to utilize the Company’s technology. +The Company is not required to update the information provided and the information is only current as of the date of +its release and is subject to change over time. + +Any information provided in this Site is not intended for distribution to or use by any person or entity in any +jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject +us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access +the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, +if and to the extent local laws are applicable. + +9. Not Professional Advice + +All information provided by the Site or Services is for informational purposes only and should not be construed as +professional advice. You should not take, or refrain from taking, any action based on any information contained in +the Site or Services. Before you make any financial, legal, or other decisions involving the Site or Services, +you should seek independent professional advice from an individual who is licensed and qualified in the area, +subject matter and jurisdiction for which such advice would be appropriate. Composable is not your broker, lawyer, +intermediary, agent, or advisor and has no fiduciary relationship or obligation to you regarding any decisions or +activities that you have undertaken or will be undertaking when using the Site or the Services. +Neither our communications nor any information that we provide to you is intended as, +or shall be considered or construed as advice. + +10. Assumption of Risks + +You represent and warrant that you: + +a. Have the necessary technical expertise and ability to review and evaluate the security, integrity and operation of +any transactions that you engage in through the Site or Services; + +b. Have the knowledge, experience, understanding, +professional advice and information to make your own evaluation of the merits, risks and applicable compliance +requirements under applicable law of engaging in transactions through the Site or Services; + +c. Understand the inherent risks associated with using cryptographic and blockchain-based systems which are independent +public peer-to-peer networks and are not subject to regulation or control by any authority, +and that you have a working knowledge of the usage and intricacies of digital assets and digital tokens; + +d. Understand that the markets for these digital assets are highly volatile due to factors +including (but not limited to) adoption, speculation, technology, security, and regulation; + +e. Acknowledge that Composable’s +underlying software and software application are still in an early development stage and unproven. +There is an inherent risk that the software could contain weaknesses, vulnerabilities, or bugs causing, inter alia, +the complete loss of digital assets and tokens. + +f. Understand and acknowledge that any loans or investments made in digital assets or related technologies +are subject to significant risks of losses and past performance is no guarantee of future results; + +g. Acknowledge and accept the risk that your digital assets may lose some or all of their value while they are supplied +to the Services, you may suffer large and immediate financial loss due to the fluctuation of prices of tokens +in a trading pair or liquidity pool, and may experience price slippage and cost. +Thus, you should not hold value you cannot afford to lose in digital assets; + +h. Confirm and accept that under certain market conditions, +it may be difficult or impossible to liquidate a position quickly at a reasonable price. +This may occur when the market for a particular digital asset suddenly drops, +or if trading is halted due to recent news events, or there are changes in the underlying digital asset system; + +i. Understand that anyone can create a token, +including fake versions of existing tokens and tokens that falsely claim to represent projects, +and acknowledge and accept the risk that you may mistakenly trade those or other tokens; + +j. Understand that digital assets and tokens may be subject to expropriation and/or theft by hackers or +other malicious groups by obstructing the token smart contract which creates the tokens in a variety of ways, +including, but not limited to, malware attacks, denial of service attacks, +consensus-based attacks, Sybil attacks, smurfing and spoofing. + +k. Confirm and accept that when you interact with any Angular smart contracts, you retain control over +your digital assets and private keys at all times and you alone are responsible for securing any of your private keys. + +l. Acknowledge and accept that the cost and speed of transacting with cryptographic and blockchain-based systems +are variable and may increase at any time; + +m. Confirm and accept that there are risks associated with the use of the Site and Services that Composable cannot +anticipate. Such risks may appear as unanticipated variations or combinations of the risks discussed above. + +n. Assume, and agree that Composable will have no responsibility or liability for any and all the risks associated +with the use of the Site and Services, including, but not limited to the above +and you hereby irrevocably waive, release and discharge all claims, whether known or unknown to you, against Composable, +its affiliates and their respective shareholders, members, directors, officers, employees, agents and representatives +related to any of the risks set forth herein + +11. No Warranties + +THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. +YOU AGREE THAT YOUR USE OFTHE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. +TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, +IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, ANDNON-INFRINGEMENT. +WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT, MATERIALS, +AND INFORMATION OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY +FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT,INFORMATION, AND/OR MATERIALS, (2) PERSONAL INJURY OR PROPERTY +DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE,(3) ANY UNAUTHORIZED ACCESS TO OR USE OF +OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, +(4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, +OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS +IN ANY CONTENT AND MATERIALS ORFOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, +TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DONOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY +FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, +OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN +ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTYPROVIDERS OF PRODUCTS OR SERVICES. +AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT +AND EXERCISE CAUTION WHERE APPROPRIATE. + +12. Limitation of Liability + +Under no circumstances shall Composable or any of its officers, directors, employees, contractors, agents, affiliates, +or subsidiaries be liable for any indirect, punitive, incidental, special, consequential, or exemplary damages, +including(but not limited to) damages for loss of profits, goodwill, use, data, or other intangible property, +arising out of or relating to any access or use of the Site, nor will Composable be responsible for any damage, +loss, or injury resulting from hacking, tampering, +or other unauthorized access or use of the Site or the information contained within it. +Composable assumes no liability or responsibility for any: (a) errors, mistakes, or inaccuracies of content; +(b) personal injury or property damage, of any nature whatsoever, resulting from any access or use of the Site; +(c) unauthorized access or use of any secure server or database in our control, +or the use of any information or data stored therein; (d) interruption or cessation of function related to the Site; +(e)bugs, viruses, trojan horses, or the like that may be transmitted to or through the Site; +(f) errors or omissions in, or loss or damage incurred as a result of the use of, +any content made available through the Site; and (g) the defamatory, offensive, or illegal conduct of any third party. +Under no circumstances shall Composable or any of its officers, directors, employees, contractors, agents, affiliates, +or subsidiaries be liable to you for any claims, proceedings, liabilities, obligations, damages, losses, or costs +in an amount exceeding the amount you paid to us in exchange for access to and use of the Site, +or USD$50.00, whichever is greater. +This limitation of liability applies regardless of +whether the alleged liability is based on contract, tort, negligence, strict liability, or any other basis, and even if +we have been advised of the possibility of such liability. Some jurisdictions do not allow the exclusion of certain +warranties or the limitation or exclusion of certain liabilities and damages. Accordingly, some of the disclaimers +and limitations set forth in these Terms may not apply to you. This limitation of liability shall apply to the fullest +extent permitted by law. + +13. Indemnification and Full Release + +You agree to hold harmless, release, defend, and indemnify Composable and its officers, directors, employees, +contractors, agents, affiliates, and subsidiaries from and against all claims, damages, obligations, losses, +liabilities, costs, and expenses arising from: (a) your access and use of the Site; (b) your violation of any term or +condition of these Terms, the right of any third party, or any other applicable law, rule, or regulation; and (c) any +other party's access and use of the Site with your assistance or using any device or account that you own or control. +You likewise expressly agree that you assume all risks in connection with your access and use or interaction with the +Site, our Services, and/or the Composable protocols, as applicable. You further expressly waive and release us from any +and all liability, claims, causes of action, or damages arising from or in any way relating to your use of or +interaction with the Site, our Services, and/or the Composable protocols. + +14. Dispute Resolution + +Please read this section carefully: it may significantly affect your legal rights, including your right to file a +lawsuit in court and to have a jury hear your claims. It contains procedures for mandatory binding arbitration and a class action waiver. + +Good Faith Negotiations + +Prior to commencing any legal proceeding against us of any kind, including an arbitration as set forth below, +you and we agree that we will attempt to resolve any dispute, claim, or controversy between us arising out of or +relating to these Terms, the Site, and the Services (each, a “Dispute” and, collectively, “Disputes”) by engaging +in good faith negotiations. For any Dispute you have against Composable, you agree to first contact Composable and +attempt to resolve the claim informally by sending a written notice of your claim (“Notice”)to Composable by email at +legal@composable.finance or by certified mail addressed to Fort gate Offshore Investment and Legal Services Ltd., +Ground Floor, The Sotheby Building, Rodney Village, Rodney Bay, Gros-Islet, Saint Lucia. The Notice must (a) include +your name, residence address, email address, and telephone number; (b) describe the nature and basis of the Dispute; +and (c) set forth the specific relief sought. Our notice to you will be similar in form to that described above. +The party receiving such notice shall have thirty (30) days to respond to the notice. Within sixty (60) days after the +aggrieved party sent the initial notice, the parties shall meet and confer in good faith by videoconference, +or by telephone, to try to resolve the dispute. If the parties are unable to resolve the Dispute within ninety (90) +days after the aggrieved party sent the initial notice, the parties may agree to mediate their Dispute, +or either party may submit the Dispute to arbitration as set forth below. + +No Representative Actions + +You and Composable agree that any Dispute arising out of or related to these Terms, including access and use of the +Site and Services, are personal to you and Composable and that any Dispute will be resolved solely through individual +action, and will not be brought as a class arbitration, class action or any other type of representative proceeding. + +Agreement to Arbitrate + +You and we are each waiving the right to a trial by jury and to have any Dispute/s resolved in court. +You and we agree that any Dispute that cannot be resolved through the procedures set forth above will be resolved +through binding arbitration in accordance with the International Arbitration Rules of the International Centre for +Dispute Resolution. The place of arbitration shall be in St. Lucia. The language of the arbitration shall be English. +The arbitrator(s) shall have experience adjudicating matters involving internet technology, software applications, +financial transactions and, ideally, blockchain technology. The prevailing party will be entitled to an award of their +reasonable attorney’s fees and costs. Except as may be required by law, neither a party nor its representatives may +disclose the existence, content, or results of any arbitration hereunder without the prior written consent of both parties. +Opting Out You have the right to opt out of binding arbitration within fifteen (15) days after the expiry of the +90-day period for good faith negotiations and the parties are unable to resolve the Dispute by mailing an opt-out +notice to Composable at Fortgate Offshore Investment and Legal Services Ltd., Ground Floor, The Sotheby Building, +Rodney Village, Rodney Bay, Gros-Islet, Saint Lucia. In order to be effective, the opt-out notice must include your +full name and address and clearly indicate your intent to opt out of binding arbitration. +By opting out of binding arbitration, you are agreeing to resolve the Dispute in accordance with the provisions on +governing law and venue provided in these Terms. + +15. Indemnification + +You hereby agree to defend, indemnify, and hold Composable harmless from and against any loss, damage, liability, claim, +or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: +(a) your access and use of the Site and Services; (b) your breach or alleged breach of these Terms; +(c) any breach of your representations and warranties set forth in these Terms; (d) anything you contribute to the +Services (e) your misuse of the Services, or any smart contract and/or script related thereto, +(f) your violation of the rights of a third party, including but not limited to intellectual property rights, publicity, +confidentiality, property, or privacy rights (g) any overt harmful act toward any other user of the Services with whom +you connected via the Services; or (h) your violation of any laws, rules, regulations, codes, statutes, ordinances, or +orders of any governmental or quasi-governmental authorities. Notwithstanding the foregoing, we reserve the right, at +your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and +you agree to cooperate, at your expense, with our defense of such claims. You will not in any event settle any claim +without our prior written consent. + +16. Reserved Rights + +Composable reserves the following rights: (a) with or without notice to you, to modify, substitute, +eliminate or add to the Site; (b) to review, modify, filter, disable, delete and remove any and all content and +information from the Site; and (c) to cooperate with any law enforcement, court or government investigation or order +or third party requesting or directing that we disclose information or content or information that you provide. + +17. Assignment + +These Terms may be assigned without your prior consent to any of Composable’s affiliates and its successors in the +interest of any business associated with the Services provided by us. You may not assign or transfer any rights or +obligations under this agreement without our prior written consent. + + +18. Governing Law and Venue + +These Terms and any separate agreements whereby we provide you Services shall be governed by and construed in +accordance with the laws of the SaintLucia. Any dispute between the Parties that is not subject to arbitration +will be resolved in Saint Lucia. + +19. Entire Agreement + +These Terms and any policies or operating rules posted by us on theServices constitute the entire agreement and +understanding between you and us and govern your access and use of the Site and Services, superseding any prior +or contemporaneous agreements, communications, and proposals, whether oral or written, between you and us +(including, but not limited to, any prior versions of these Terms). Any failure by us to exercise or enforce any +right or provision of these Terms shall not constitute a waiver of such right or provision. + +20. Access and Acceptance + +By accessing or interacting with this Site, our Services, and/or any of the Composable protocols, +you hereby acknowledge and accept the foregoing obligations and conditions outlined in these Terms. \ No newline at end of file diff --git a/docs/docs/fonts/SOURCE-CODE-PRO-LICENSE.txt b/docs/docs/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 0000000..366206f --- /dev/null +++ b/docs/docs/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/docs/docs/fonts/roboto-v29-latin-100.eot b/docs/docs/fonts/roboto-v29-latin-100.eot new file mode 100644 index 0000000..7741f6e Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-100.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-100.svg b/docs/docs/fonts/roboto-v29-latin-100.svg new file mode 100644 index 0000000..2f389e5 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-100.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26275512bbdd53156733b534b8a93f926663074bd15b32aebc92387ec877e30e +size 49675 diff --git a/docs/docs/fonts/roboto-v29-latin-100.ttf b/docs/docs/fonts/roboto-v29-latin-100.ttf new file mode 100644 index 0000000..9c3d71b --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-100.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33e11a792cdd9d4aecd5b676d1a0dc9e7385975e35080e540b9639203a7e8052 +size 37144 diff --git a/docs/docs/fonts/roboto-v29-latin-100.woff b/docs/docs/fonts/roboto-v29-latin-100.woff new file mode 100644 index 0000000..8983756 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-100.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-100.woff2 b/docs/docs/fonts/roboto-v29-latin-100.woff2 new file mode 100644 index 0000000..bdb8b7e --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-100.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22482584aeaa7b1d74de072793246c65e38b402ac231f38bb0d9102802543230 +size 15712 diff --git a/docs/docs/fonts/roboto-v29-latin-100italic.eot b/docs/docs/fonts/roboto-v29-latin-100italic.eot new file mode 100644 index 0000000..74bbe5a Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-100italic.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-100italic.svg b/docs/docs/fonts/roboto-v29-latin-100italic.svg new file mode 100644 index 0000000..d1d4796 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-100italic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e44a7ee51c8ba442989e53c6869fc35083f59e58102cf211b403be1661a1e5b +size 56194 diff --git a/docs/docs/fonts/roboto-v29-latin-100italic.ttf b/docs/docs/fonts/roboto-v29-latin-100italic.ttf new file mode 100644 index 0000000..2be5604 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-100italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:426204b23967eb68831eba08ada7a22d4d74d75ed5122dd4c2fb825f8fcab033 +size 38284 diff --git a/docs/docs/fonts/roboto-v29-latin-100italic.woff b/docs/docs/fonts/roboto-v29-latin-100italic.woff new file mode 100644 index 0000000..c298589 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-100italic.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-100italic.woff2 b/docs/docs/fonts/roboto-v29-latin-100italic.woff2 new file mode 100644 index 0000000..e4474b2 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-100italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ec2c7c341db456f2c057a73bdcc82be478efc0834741036198d9589765af6a2 +size 17016 diff --git a/docs/docs/fonts/roboto-v29-latin-300.eot b/docs/docs/fonts/roboto-v29-latin-300.eot new file mode 100644 index 0000000..d37d5fa Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-300.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-300.svg b/docs/docs/fonts/roboto-v29-latin-300.svg new file mode 100644 index 0000000..01a6760 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-300.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70e6369f9bd8828aac01a685fa350fea382251550bfc0de5ebe7163342061c1c +size 49248 diff --git a/docs/docs/fonts/roboto-v29-latin-300.ttf b/docs/docs/fonts/roboto-v29-latin-300.ttf new file mode 100644 index 0000000..7d23f01 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-300.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc5011972e352363bd8f41e1a3b59c16cbc5e283cc119af9ddd098ec905b7415 +size 36216 diff --git a/docs/docs/fonts/roboto-v29-latin-300.woff b/docs/docs/fonts/roboto-v29-latin-300.woff new file mode 100644 index 0000000..5565042 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-300.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-300.woff2 b/docs/docs/fonts/roboto-v29-latin-300.woff2 new file mode 100644 index 0000000..83a893f --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-300.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33530b007071281a97e79baab13ddf7cc4b9de942ebd3e212224857335f7cb97 +size 15732 diff --git a/docs/docs/fonts/roboto-v29-latin-300italic.eot b/docs/docs/fonts/roboto-v29-latin-300italic.eot new file mode 100644 index 0000000..9f89c84 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-300italic.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-300italic.svg b/docs/docs/fonts/roboto-v29-latin-300italic.svg new file mode 100644 index 0000000..5f34f8b --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-300italic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9cf2ffae89e668261e35af3fda7b51078f731cc7e1bf797b7d73dab7c3bbc5de +size 54885 diff --git a/docs/docs/fonts/roboto-v29-latin-300italic.ttf b/docs/docs/fonts/roboto-v29-latin-300italic.ttf new file mode 100644 index 0000000..612de9d --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-300italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38a89f53518a7670fcf67aa104c8e2e8234790a0fcb6950efcee9c2fc885e5d3 +size 38008 diff --git a/docs/docs/fonts/roboto-v29-latin-300italic.woff b/docs/docs/fonts/roboto-v29-latin-300italic.woff new file mode 100644 index 0000000..6bf71d9 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-300italic.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-300italic.woff2 b/docs/docs/fonts/roboto-v29-latin-300italic.woff2 new file mode 100644 index 0000000..c5e63ea --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-300italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c7856c0d39606a745670d4c03525f3644fe65304191be208516def923cc3762 +size 17484 diff --git a/docs/docs/fonts/roboto-v29-latin-500.eot b/docs/docs/fonts/roboto-v29-latin-500.eot new file mode 100644 index 0000000..fb2a160 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-500.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-500.svg b/docs/docs/fonts/roboto-v29-latin-500.svg new file mode 100644 index 0000000..0d053f9 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-500.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:679eb020429b65c21deb42212a49fbdda9be5d985ef55803c2ad83f8c428fbf0 +size 48624 diff --git a/docs/docs/fonts/roboto-v29-latin-500.ttf b/docs/docs/fonts/roboto-v29-latin-500.ttf new file mode 100644 index 0000000..936a920 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-500.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7796600b2ee4c84552cb08fd79603c19b95cd21089e802f222320feceba74c45 +size 36460 diff --git a/docs/docs/fonts/roboto-v29-latin-500.woff b/docs/docs/fonts/roboto-v29-latin-500.woff new file mode 100644 index 0000000..c9eb5ca Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-500.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-500.woff2 b/docs/docs/fonts/roboto-v29-latin-500.woff2 new file mode 100644 index 0000000..0eb79e3 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-500.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb46ed079c3dd3c39af5051b4ada48f29f49151dad4fa218117bad2fdb5e616f +size 15920 diff --git a/docs/docs/fonts/roboto-v29-latin-500italic.eot b/docs/docs/fonts/roboto-v29-latin-500italic.eot new file mode 100644 index 0000000..e14fad8 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-500italic.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-500italic.svg b/docs/docs/fonts/roboto-v29-latin-500italic.svg new file mode 100644 index 0000000..e4597a4 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-500italic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61243fa2e143cf51f1535df33ae4c75d2548567a976d991f03fa87ac04761ea8 +size 53825 diff --git a/docs/docs/fonts/roboto-v29-latin-500italic.ttf b/docs/docs/fonts/roboto-v29-latin-500italic.ttf new file mode 100644 index 0000000..7e6bc82 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-500italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88f87cdf817311dfa951df2579f095f3e992ef882ba9a0711f4a8b32e06bdf85 +size 37936 diff --git a/docs/docs/fonts/roboto-v29-latin-500italic.woff b/docs/docs/fonts/roboto-v29-latin-500italic.woff new file mode 100644 index 0000000..35d2715 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-500italic.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-500italic.woff2 b/docs/docs/fonts/roboto-v29-latin-500italic.woff2 new file mode 100644 index 0000000..a24c6eb --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-500italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a938256d2de59b044f8ca7c7aa0c788ed2ffa9a48bf0e3930a5830c4298f509 +size 17380 diff --git a/docs/docs/fonts/roboto-v29-latin-700.eot b/docs/docs/fonts/roboto-v29-latin-700.eot new file mode 100644 index 0000000..3e2d316 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-700.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-700.svg b/docs/docs/fonts/roboto-v29-latin-700.svg new file mode 100644 index 0000000..68b953b --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-700.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90fd3ac31f8553c19f65018e385022cfae140a6341b0cc05d7701a90ad28dde2 +size 48982 diff --git a/docs/docs/fonts/roboto-v29-latin-700.ttf b/docs/docs/fonts/roboto-v29-latin-700.ttf new file mode 100644 index 0000000..0e2d728 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-700.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52dc362cae7e441a98741305a38b045859ac60e99377d9d88922ec32cb944cfa +size 36052 diff --git a/docs/docs/fonts/roboto-v29-latin-700.woff b/docs/docs/fonts/roboto-v29-latin-700.woff new file mode 100644 index 0000000..a5d98fc Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-700.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-700.woff2 b/docs/docs/fonts/roboto-v29-latin-700.woff2 new file mode 100644 index 0000000..7f6d7e1 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-700.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0eaeadb58e6995ba85eccb6198aaef77eeb1d4b66699e4e1f3fc10eb6adfcdb9 +size 15828 diff --git a/docs/docs/fonts/roboto-v29-latin-700italic.eot b/docs/docs/fonts/roboto-v29-latin-700italic.eot new file mode 100644 index 0000000..213bea8 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-700italic.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-700italic.svg b/docs/docs/fonts/roboto-v29-latin-700italic.svg new file mode 100644 index 0000000..fc57ee5 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-700italic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3fa251b00cf984bad8c0224de665a2b2c3b3d6d08b64dd601d0ecaed0b3572c +size 53453 diff --git a/docs/docs/fonts/roboto-v29-latin-700italic.ttf b/docs/docs/fonts/roboto-v29-latin-700italic.ttf new file mode 100644 index 0000000..448da07 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-700italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b48ef8ec3a31e379fd238f9878c63e35a077997f6a75fcaf7f2382b1460dbd55 +size 36864 diff --git a/docs/docs/fonts/roboto-v29-latin-700italic.woff b/docs/docs/fonts/roboto-v29-latin-700italic.woff new file mode 100644 index 0000000..a449c44 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-700italic.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-700italic.woff2 b/docs/docs/fonts/roboto-v29-latin-700italic.woff2 new file mode 100644 index 0000000..0c35eae --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-700italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a42cc82f30fbf25a268f6d5a10158e8312a838222da6847158ea4175fa289d4 +size 17004 diff --git a/docs/docs/fonts/roboto-v29-latin-900.eot b/docs/docs/fonts/roboto-v29-latin-900.eot new file mode 100644 index 0000000..da9a215 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-900.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-900.svg b/docs/docs/fonts/roboto-v29-latin-900.svg new file mode 100644 index 0000000..4f5bd30 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-900.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f626680217362d9a26da9eca11d46a0318b95c5d084fccce55a08ee4971a34c +size 48022 diff --git a/docs/docs/fonts/roboto-v29-latin-900.ttf b/docs/docs/fonts/roboto-v29-latin-900.ttf new file mode 100644 index 0000000..0e16f8a --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-900.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5abde466e653eda612285a42d7f23c6490961fe942d2ec3b86d731db531b57bd +size 35964 diff --git a/docs/docs/fonts/roboto-v29-latin-900.woff b/docs/docs/fonts/roboto-v29-latin-900.woff new file mode 100644 index 0000000..c3933ba Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-900.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-900.woff2 b/docs/docs/fonts/roboto-v29-latin-900.woff2 new file mode 100644 index 0000000..ca9f73d --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-900.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e868ca932480407e63d27e8e868cb1514581142928b9be15ec9039bf5fe348f +size 15724 diff --git a/docs/docs/fonts/roboto-v29-latin-900italic.eot b/docs/docs/fonts/roboto-v29-latin-900italic.eot new file mode 100644 index 0000000..d5d3576 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-900italic.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-900italic.svg b/docs/docs/fonts/roboto-v29-latin-900italic.svg new file mode 100644 index 0000000..26c129c --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-900italic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fea2db367482beff05c6651eccfce3f0b049da19a82e0bfeae88221549469057 +size 53240 diff --git a/docs/docs/fonts/roboto-v29-latin-900italic.ttf b/docs/docs/fonts/roboto-v29-latin-900italic.ttf new file mode 100644 index 0000000..e079d52 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-900italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d449bcfcd062266871baf83d35e57d7a90089a3e05a5f96f60c096c2ffeee56c +size 37992 diff --git a/docs/docs/fonts/roboto-v29-latin-900italic.woff b/docs/docs/fonts/roboto-v29-latin-900italic.woff new file mode 100644 index 0000000..40c71e9 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-900italic.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-900italic.woff2 b/docs/docs/fonts/roboto-v29-latin-900italic.woff2 new file mode 100644 index 0000000..c750e0c --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-900italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f2778667ce7da721e201618eac589ac1a32af6b43c246675826a8d728eb902b +size 17540 diff --git a/docs/docs/fonts/roboto-v29-latin-italic.eot b/docs/docs/fonts/roboto-v29-latin-italic.eot new file mode 100644 index 0000000..d1a5344 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-italic.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-italic.svg b/docs/docs/fonts/roboto-v29-latin-italic.svg new file mode 100644 index 0000000..76044b8 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-italic.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75c12901ed264247e6625f4353cc62136a710fe147e1e76618df7d6fed78b902 +size 54053 diff --git a/docs/docs/fonts/roboto-v29-latin-italic.ttf b/docs/docs/fonts/roboto-v29-latin-italic.ttf new file mode 100644 index 0000000..791f07f --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-italic.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d549f3e5837763b1dbb31a5cae5d4015c9e706e96906aec08b073831c432128 +size 37496 diff --git a/docs/docs/fonts/roboto-v29-latin-italic.woff b/docs/docs/fonts/roboto-v29-latin-italic.woff new file mode 100644 index 0000000..c8bc602 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-italic.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-italic.woff2 b/docs/docs/fonts/roboto-v29-latin-italic.woff2 new file mode 100644 index 0000000..2840cfe --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-italic.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46375ee9192c1e0f6eabe4d32b2a48b996b93037f7b4beb970df5b87359548fd +size 17304 diff --git a/docs/docs/fonts/roboto-v29-latin-regular.eot b/docs/docs/fonts/roboto-v29-latin-regular.eot new file mode 100644 index 0000000..6dd5e3a Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-regular.eot differ diff --git a/docs/docs/fonts/roboto-v29-latin-regular.svg b/docs/docs/fonts/roboto-v29-latin-regular.svg new file mode 100644 index 0000000..5c8445e --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-regular.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f23d5a8b97a1078d2c4c8ae90495010fc762986f3eb85e84476c641ee5a72a5b +size 48974 diff --git a/docs/docs/fonts/roboto-v29-latin-regular.ttf b/docs/docs/fonts/roboto-v29-latin-regular.ttf new file mode 100644 index 0000000..be62aef --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-regular.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52e0349a641604d5204952039bfac8acde78242227defae8864d1caa48b8c5c1 +size 36216 diff --git a/docs/docs/fonts/roboto-v29-latin-regular.woff b/docs/docs/fonts/roboto-v29-latin-regular.woff new file mode 100644 index 0000000..86b3863 Binary files /dev/null and b/docs/docs/fonts/roboto-v29-latin-regular.woff differ diff --git a/docs/docs/fonts/roboto-v29-latin-regular.woff2 b/docs/docs/fonts/roboto-v29-latin-regular.woff2 new file mode 100644 index 0000000..e19b845 --- /dev/null +++ b/docs/docs/fonts/roboto-v29-latin-regular.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc46322d5c4d41da447f26f7fa714827f2ec9a112968c12ef5736c7494985eca +size 15688 diff --git a/docs/docs/fonts/source-code-pro-v11-all-charsets-500.woff2 b/docs/docs/fonts/source-code-pro-v11-all-charsets-500.woff2 new file mode 100644 index 0000000..ff19cc3 --- /dev/null +++ b/docs/docs/fonts/source-code-pro-v11-all-charsets-500.woff2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bdd9410b0141db3cbbf4cfc3818cc6fad279e8e63940940e06cd6af76ccbfcf +size 59140 diff --git a/docs/docs/governance-&-token/governance.md b/docs/docs/governance-&-token/governance.md new file mode 100644 index 0000000..0865a9a --- /dev/null +++ b/docs/docs/governance-&-token/governance.md @@ -0,0 +1,10 @@ +# Governance +Similar to the way that majority of Cosmos SDK chains operate, validators can vote using tokens they are delegated with. However, if a delegator votes themselves, their voting decision will override the validator’s vote if the decision differs. The parameters for the governance on Picasso are as follows: + +| Parameter | Period/Number | +|----------------------------------------------------|----------------| +| Total Deposit | 2 million PICA | +| Quorum | 30% | +| Voting Period | 1 day | +| Threshold | 50% | +| No-with-veto | 33% | \ No newline at end of file diff --git a/docs/docs/governance-&-token/opengov.md b/docs/docs/governance-&-token/opengov.md new file mode 100644 index 0000000..a6560be --- /dev/null +++ b/docs/docs/governance-&-token/opengov.md @@ -0,0 +1,195 @@ +# Picasso Kusama OpenGov + +Governance mechanisms for Picasso Kusama are intended to ensure the growth and adaptation of the ecosystem in alignment with the wants and needs of the Picasso Kusama community. Therefore, all token holders are able to participate, with their votes being weighted by stake. Moreover, any alteration to Picasso Kusama must be approved by a referendum decided by PICA token holders. + +[Picasso’s Polkassembly](https://picasso.polkassembly.io/opengov) will serve as a governance forum where open discussion about the future of Picasso Kusama can occur. Here, proposals can be refined based on community input. + +Picasso Kusama OpenGov is live, a new era of decentralisation, allowing PICA holders to actively participate in governance and a new structure of collectives. PICA serves as the native token of Picasso Kusama and plays a vital role on the parachain. It is extensively used as a gas token and governance token [powered by OpenGov](../governance-%26-token/opengov.md). Additionally, PICA is a requirement for infrastructure providers who operate oracles and collators on the network. + +Picasso’s OpenGov structure and design is an adapted version of Polkadot OpenGov. + +## Core Tenets + +Core principles guiding participation in the Picasso Kusama OpenGov process are as follows: + +- Supporting engagement of token holders who are influenced by and in turn would like to influence Picasso Kusama governance, even when their opinions and desires differ from that of the Composable team +- Prioritising the greater good of Picasso Kusama and its community over any individual interests +- Upholding transparency and openness with the public +- Acting morally and with a mind for consequences of action or inaction +- Standing firmly against any malicious language, behaviour, and actions + +## On-Chain Governance + +Picasso’s hard governance involves on-chain mechanisms where the majority of tokens on Picasso Kusama determine key decisions. These decisions are made via token holders voting on proposed referenda. + +### OpenGov Committees + +The **Technical Committee** is a group of 6 core developers that are able to whitelist proposals. Its purpose is to provide technical review of urgent security issues and upgrades. There must always be 1/3 approval from the committee to whitelist proposals. + +The **Treasury Committee** is an on-chain entity made up of 11 senior team members and supporters. Members of the Treasury committee consist of: + +- Henry Love, Executive Director of Composable Foundation +- 0xBrainJar, Composable Founder & Research Director +- Blas Rodriguez Irizar, Composable Co-Founder & CTO +- Joe DeTommasso, Composable Head of Governance & Strategy +- Miguel Santefé, Composable Co-Founder & Head of Design +- Jafar Azam, Composable Devrel +- Jacob Gadikian, Notional Ventures Founder & CEO +- Jesse Abramowitz, Entropy Lead Software and Protocol Engineer +- Will Pankiewicz, Parity Master of Validators +- Tamara Frankel, D1 Ventures Founding Partner +- James Wo, Digital Finance Group (DFG) Founder & Chairman + +The Treasury Committee also control Picasso’s multi-sig wallets holding the allocation for Liquidity Programs and Ecosystem incentives. Treasury proposals can be submitted by anyone but spending can only be approved by this council; the funds from any of these wallets will only be transferred upon the approval of on-chain governance. For more details, refer to the PICA token transparency commitment statement. + +The **Relayer Committee** consists of accounts running the Hyperspace relayer. + +## Definitions +Definitions and components for OpenGov on Picasso Kusama are detailed below: + +#### Origins +An origin is an authorization-based dispatch source for an operation. This determines the Track that a referendum is posted in. + +#### Pre-Image Deposit +This is the amount of tokens that a proposer must bond to submit a pre-image. It is a base deposit per network plus a fee per byte of the proposed pre-image. + +#### Pre-Image Hash +This is the hash of the proposal to be enacted. The first step to make a proposal is to submit a pre-image; the hash is its identifier. The proposer of the pre-image can be different than the user that proposes that pre-image as a formal proposal + +#### Proposals +Proposals are an action or item (defined by the pre-image hash) proposed by a token holder and open for consideration/discussion by token holders. + +#### Referendum +A referendum is a stake-based voting model. Each referendum is associated with an individual proposal for modifying Picasso Kusama in some way. This could include changes to code, parameters, or the governance of Picasso Kusama. + +## Tracks +This is a specific pipeline delineating the life cycle of a proposal. Tracks in Picasso Kusama OpenGov are Root, Whitelist Caller, General Admin, Referendum Canceller, and Referendum Killer: + +| Track | Description | Example | +|-----------------------|-------------------|--------------------------| +| Root | Highest Privileges | Runtime Upgrades | +| Whitelist Caller | Fast-track proposals | Accelerated proposal | +| General Admin | On-chain changes | Apollo and Collator onboarding, Release committee, LSD | +| Referendum Canceller | Cancelling proposal | Incorrect referendum | +| Referendum Killer | Cancelling proposals & slashing deposits | Malicious referendum | + + +### Voting +Token holders can approve or reject proposals. + +A vote’s weight is defined by the following: + +1. The number of tokens a user commits to a vote +2. The lock period of the vote; in Picasso Kusama OpenGov, users can voluntarily lock tokens to increase their voting power, with longer lock periods associated with a conviction multiplier on vote weight: + +| Lock Period After Enactment | Conviction Multiplier | Lock Time | +|-----------------------|-------------------|--------------------------| +| 0 | 0.1x | None | +| 1 | 1x | 28 days | +| 2 | 2x | 56 days | +| 4 | 3x | 112 days | +| 8 | 4x | 224 days | +| 16 | 5x | 448 days | +| 32 | 6x | 896 days | + + +#### Vote Delegation +Voters can delegate voting power (including conviction multiplier) to other token holders (“delegates”). This feature exists to allow tokens to be delegated to those who may be more knowledgeable about Picasso Kusama and thus able to make more informed decisions on specific referenda. + +#### Multirole Delegation +Voting power can be delegated based on tracks, e.g. token holders can specify different delegates for each track. + +#### Approval +This is the minimum number of votes for passing a referendum, as a percentage of total conviction-weighted votes needed to approve the referendum. + +#### Support +This is the minimum number of votes for passing a referendum (NOT taking into consideration conviction-weighted votes) needed to approve the referendum. + +#### Lead-In Period +This is the initial period of discussion and voting on a proposal. During this period, proposals are undecided until they pass the criteria for a Track, which include: + +- The prepare period, or the minimum time a referendum needs to wait before it can progress to the next phase after submission +- Capacity, or the limit for a number of referenda on a given track that can be decided at once +- Decision deposit, or the minimum deposit amount needed for a referendum to progress to the decision phase after the lead-in period ends; this deposit is larger than the submission deposit in order to limit spam proposals/referenda + +Details on the lead-in period (specifically, the prepare period) for each track are found in the OpenGov Parameters section of this documentation. + +#### Decision Period +During this period, token holders continue to vote on the referendum. If a referendum does not pass by the end of the period, it will be rejected, and the Decision Deposit will be refunded. +Details on the decision period for each track are found in the OpenGov Parameters section of this documentation. + +#### Confirm Period +This is a period of time within the decision period where the referendum needs to have maintained enough Approval and Support to be approved and move to the enactment period. + +Details on the confirm period for each track are found in the OpenGov Parameters section of this documentation. + +#### Enactment Period +This is a specified time, defined at the time the proposal was created, that an approved referendum waits before it can be dispatched. +There is a minimum amount of time for each Track. Details on the enactment period for each track are found in the OpenGov Parameters section of this documentation. +## OpenGov Parameters +Governance parameters (for each referenda track) are as follows: + +| Track | Track ID | Concurrent Proposals | Decision Deposit | +| -------- | -------- | --- | -------- | +| Root | 0 | 5 | 5,000,000 PICA | +| Whitelist Caller | 1 | 25 | 500,000 PICA | +| General Admin | 2 | 10 | 1,000,000 PICA | +| Referendum Canceller | 3 | 10 | 1,000,000 PICA | +| Referendum Killer | 4 | 25 | 1,000,000 PICA | + +## Period Parameters by Track + +| Track |Prepare Period | Decision Period | Confirm Period | Min. enactments | +| --- | --- | -------- | -------- | -------- | +| Root | 1 day 2 Hours (600 Blocks) | 10 Days (72000 Blocks) | 1 Day (7200 Blocks) | 1 day | +| Whitelist Caller | 10 mins (50 Blocks) | 10 Days (72000 Blocks) | 30 mins (150 Blocks) | 10 mins | +| General Admin | 1 hour (300 blocks) | 10 Days (72000 Blocks) | 1 Day (7200 Blocks) | 1 day | +| Referendum Canceller | 1 hour 1 Day (7200 Blocks) | 10 Days (72000 Blocks) | 3 Hours (3600 Blocks) | 10 mins | +| Referendum Killer | 1 hour 1 Day (7200 Blocks) | 10 Days (72000 Blocks) | 3 Hours (3600 Blocks) | 10 mins | + +## Support and Approval Parameters by Track + +| Track | Approval Curve | Parameters | Support Curve | Parameters | +| --- | --- | -------- | -------- | -------- | +| Root | Reciprocal | Day 0: 100% Day 2: 80% Day 10: 50% | Linear | Day 0: 50% Day 10: 0.5% | +| Whitelist Caller | Reciprocal | Day 0: 100% Day 2: 80% Day 10: 50% | Reciprocal | Day 0: 2% Hour 1: 1% Day 14: 0% | +| General Admin | Reciprocal | Day 0: 100% Day 2: 80% Day 10: 50% | Reciprocal | Day 0: 50% Day 5: 10% Day 10: 0% | +| Referendum Canceller | Reciprocal | Day 0: 100% Day 2: 80% Day 10: 50% | Reciprocal | Day 0: 10% Day 1: 1% Day 10: 0% | +| Referendum Killer | Reciprocal | Day 0: 100% Day 2: 80% Day 10: 50% | Reciprocal | Day 0: 10% Day 1: 1% Day 10: 0% | + +## Approval Curves +With X % of support, Referenda can pass after Y duration (time periods in the table) since the beginning of referenda depending on whethere the approval rate is above the approval curve. + +![whitelist-curve](../governance-&-token/whitelist-track.png) +*Approval curve for the Whitelist Track* + +![root-curve](../governance-&-token/root-track.png +*Approval curve for the Root Track* + +## Proposal Roadmap + +1. A proposal author should submit their idea to Picasso’s Polkassembly governance forum, where they should be open to community feedback for at least five days before moving forward +2. Taking into account feedback, the proposal author can submit their proposal on-chain + - The proposer must first submit the preimage (if you need assistance with creating the preimage or would like secondary approval, reach out to our team on Discord) + - Note: your preimage deposit will be returned once via unnoting after the proposal is submitted + - The proposer then can submit the Referendum, and place the decision deposit (which covers the on-chain storage cost of the proposal) +3. Thus veins the lead-in period, where the community can begin voting +4. The proposal will then move to the decision period when the following are met: + - The referenda waits the duration of the prepare period (ensuring enough time for discussion) + - There is capacity in the chosen track + - A decision deposit has been submitted and meets the minimum requirements of the track +5. During the decision period, voting continues and the referendum has a set amount of days to reach approval. + - If the Referendum is rejected, the decision deposit will be returned +6. If the Referendum is approved, it enters the confirm period where it must remain approved for the duration of this period. + - If the referendum fails to meet these requirements at any time, it moves back to the decide period; if it again meets these requirements, it moves back to the confirm period and the decide period is delayed until the end of the confirm period +7. If the referendum receives enough approval and support throughout the confirm period, it will be approved and move to the enactment period +8. Once the enactment period elapses, the referendum will be executed + +## Proposal Cancellations +If a proposal in the voting stage is found to have an issue, it may be necessary to prevent its approval. This could be due to malicious activity or technical issues that void the proposal. + +Cancellations must be voted on by the network. Cancellation proposals are expedited, as they must be decided before the enactment of the proposal they seek to cancel. However, the same process as standard referenda applies. + +Moreover, a cancellation Origin called the Emergency Canceller exists for use against any referendum with an unanticipated issue. The Emergency Canceller Origin and the Root Origin can cancel referenda. Regardless of the Origin, if a proposal is cancelled, it is rejected and the decision deposit is refunded. + +The Kill Origin called Emergency Killer exists for use against malicious referenda. The Emergency Killer Origin and the Root Origin have the ability to kill referenda. The difference between killing and cancelling a referenda is that in the case of a kill, not only is the proposal cancelled, but also the Decision Deposit is slashed, meaning the deposit amount is burned regardless of the Origin. diff --git a/docs/docs/governance-&-token/pica-allocation-pie.png b/docs/docs/governance-&-token/pica-allocation-pie.png new file mode 100644 index 0000000..ba45cb2 --- /dev/null +++ b/docs/docs/governance-&-token/pica-allocation-pie.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1b20ffdddf4cf19b99f52fea6aa3ff193a248e191cd572403669bd121d021d6 +size 99301 diff --git a/docs/docs/governance-&-token/pica-vesting-schedule.png b/docs/docs/governance-&-token/pica-vesting-schedule.png new file mode 100644 index 0000000..3bfbb4c --- /dev/null +++ b/docs/docs/governance-&-token/pica-vesting-schedule.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cef5fe00b15c298053710ad1171d71598921420d158e454086d5867136919d44 +size 311752 diff --git a/docs/docs/governance-&-token/root-track.png b/docs/docs/governance-&-token/root-track.png new file mode 100644 index 0000000..6097ff9 --- /dev/null +++ b/docs/docs/governance-&-token/root-track.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef36498dc0230a87629801b7f6b307ed8ce528c3af01c9d973df0c7e94737656 +size 264704 diff --git a/docs/docs/governance-&-token/token-transparency.md b/docs/docs/governance-&-token/token-transparency.md new file mode 100644 index 0000000..47dd0fd --- /dev/null +++ b/docs/docs/governance-&-token/token-transparency.md @@ -0,0 +1,165 @@ +# Token Transparency Commitment Statement + +Composable Foundation (“Composable”) remains committed to transparency at all levels of the Composable ecosystem and our infrastructure offerings. +Thus, we provide the community with the following information on the Picasso (PICA) token holdings, actions, and supply. + +## Organization Objectives & Token Use Statement + +Picasso's native PICA token is fundamental to governance, user dynamics, and network usage on Picasso. +Some of the [use cases for the PICA token](./tokenomics.md) +are (1) gas fees, (2) governance, (3) validator and collator staking, (4) oracle staking, +and (5) liquidity provisioning. +Beyond these intended functionalities for user or token holders, +the PICA token also serves to (1) enhance the Picasso L1 Cosmos SDK chain and Picasso Kusama (parachain’s) sustainability, +and (2) support growth, development, and security. +More details on these potential ecosystem benefits can be found below: + +### Enhancing the Picasso Parachain’s User Appeal and Sustainability + +Composable has allocated 10% of the PICA token supply to “Ecosystem Incentives”, +which include rewards for participating in a number of future actions on the Picasso network. +These are programmatic incentives to bootstrap network growth such as running an oracle on. +A subcategory of these incentives are the so-called “Infrastructure Tokens”, +currently comprising approximately 0.72% of the total token supply of PICA (72,132,700 tokens) +and dedicated to rewarding people running infrastructure for the Composable Ecosystem. + +Further, 30% of the PICA token supply was originally allocated to participants of the Picasso Kusama crowdloan. +The Picasso crowdloan and the user support therein were critical in helping secure its Kusama parachain slot. +Finally, 15% of the total PICA token supply is targeted to be released as rewards for participants in Liquidity Programs. + +:::info + +Total supply refers to the number of coins or tokens that currently exist and are either in circulation or locked somehow. It is the sum of coins that were already minted (or issued) minus the total number of coins that were burned or destroyed. + +Therefore, the total supply refers to both the circulating supply and the tokens that are yet to hit the open market including tokens that are being held under a lockup or vesting period, which typically follows a private sale or Token Generation Event. Coins or tokens that are eventually burned are excluded from the total supply. +::: + +### Supporting Growth, Development, and Security on Picasso + +Tokens from Composable’s “Treasury” PICA allocation may be used for a number of initiatives towards advancing +the Picasso ecosystem, network security, application development and other forms of utility. +This distribution involves the Picasso Network treasury receiving transaction fees. +This is governed by the Picasso General Council, which is intended to later be governed by PICA token holders. +75% of spent network fees will automatically flow into the treasury pallet, +with the remaining 25% of spent fees intended to be distributed to collators. +Here, the token holders have the ability to identify and submit for approval improvement proposals relating to the Picasso network. + +Improvement proposals may include but are not limited to implementing additional security audits, +grants for development on the Picasso network, core protocol updates or additions, +new integrations of other ecosystems and protocols into Picasso and the broader Composable ecosystem, +educational initiatives, further developer and/or user documentation, +additional technological exploration and enhancement, etc. +Token Holders are encouraged to discuss initial ideas and recommendations for improvement proposals via conversation +on the dedicated Picasso Discord and submit formal proposals through Picasso’s governance process. + +For the purposes of advancing these above objectives, + +* Composable may re-balance Composable-controlled accounts when warranted. + This could involve creating new addresses and/or removing old addresses. + For the sake of transparency, any changes in account addresses will be reflected below on this page. +* Composable may liquidate PICA on occasion, in the event that expenses cannot be paid in this token. + For instance, Composable may liquidate PICA to accumulate KSM for maintaining the Picasso parachain slot on Kusama. + +## Genesis Addresses + +The following is a list of non-circulating and circulating genesis addresses of PICA tokens. +Upon token launch, the genesis pools would be the multisig addresses below. +We have published this list for the community to monitor for purposes of transparency. +The other non-multisig addresses are labeled as protocol controlled addresses. + +:::info + +Circulating supply refers to all tokens that are held in accounts outside of the non-circulating Composable and protocol-controlled addresses listed above. + - Circulating supply is currently the unvested tokens associated with the crowdloan rewards. No other multisig wallets or tokens will be considered circulating unless voted upon by protocol governance to become circulating, unless otherwise above. + +::: +### Non-Circulating Genesis Addresses + +The following multisigs are controlled by the governance council and are activated only by governance. +These multisigs are considered non-circulating, +and can only be considered “circulating” if voted upon by protocol governance to become circulating. + +Team Tokens Multisig: `5zBQWEzVJuF7BPkgi8hxRW4T3c4RkfhMuArgXekwHyLck4hT` + +Ecosystem Incentives Multisig : `5upPPwmpXUp3yrgx6erAzr84BfywuhVhKCeza5MGmBY8wJCK` + +Liquidity Programs Multisig : `5ys4cFxQBDs8qhkXbs9smn7yVMSmJ3QdLeqNTHfhk5QmX5Pj` + +Centauri Fees Multisig: `5xMXcPsD9B9xDMvLyNBLmn9uhK7sTXTfubGVTZmXwVJmTVWa` + +Treasury Pallet for accruing fees: https://polkadot.js.org/apps/#/treasury + + +### Alignment of allocation + +In accordance with [Council motion #16](https://picasso.polkassembly.io/motion/16), the Picasso Treasury has been reimbursed for the allocation portion of the Infrastructure Round, which should have been sourced from the allocation designated for Ecosystem Incentives. This amount encompasses complete PICA allocations for oracle and collator providers, along with 12 months' worth of allocated rewards. The total PICA transferred sums up to 78,282,699.80. + +Pursuant to [Council motion #19](https://picasso.polkassembly.io/motion/19), the Picasso Team Multisig will be reimbursed at its designated address from the Picasso Treasury. These tokens were mistakenly spent from the Team multisig address prior to the migration of a new Team Multisig, and therefore, reimbursed by the intended location, the Picasso treasury. The total PICA amount to be reimbursed is 51,874,200 PICA. + +Following the launch of OpenGov phase 2 on Picasso, the allocation for the Picasso Treasury was transferred from the multisig account (`5uMNuPRaGaJ6BXoys1Myi5gioCsc5dMux4A6R2dnxGPcNoHm`) reserved by the council to the Treasury pallet account (`5w3oyasYR35Hek3szEEuWUz8Vm2XXDs4dMoosQEvLU8JGuw7`). + +**Neither of these events aims to modify any previously established token allocations; rather, they intend to rectify an accounting error between multisig addresses and improve the decentralisation of the protocol.** + +### Protocol Controlled Addresses + +#### Crowdloan Pallet Funds + +Are located at the crowdloan pallet: `5w3oyasYQg6vkbxZKeMG8Dz2evBw1P7Xr7xhVwk4qwwFkm8u` + +A detailed list of the crowdloan contributions and rewards can be found [on our GitHub](https://github.com/ComposableFi/composable/blob/main/docs/docs/networks/picasso/crowdloan-contributors/crowdloan-logs.csv). + +#### IBC Escrow Address + + +The IBC escrow address is an intermediary protocol owned address on Picasso that temporarily holds assets during cross-chain transfers to ensure secure and trust-minimised communication. It is following account: `5z7QRVsBvf7BiS4Erw74GzmJU1BNiJ1dwKoJ9Z7t6b6hDrBA` +#### Token Purchasers' Funds + +Token purchasers’ funds have been loaded into a vesting pallet and +will unlock based on the vesting schedule specified on the PICA token distribution. +For more on how the vesting pallet works, +please read: [https://github.com/paritytech/substrate/blob/master/frame/vesting/src/lib.rs.](https://github.com/paritytech/substrate/blob/master/frame/vesting/src/lib.rs) + +### Picasso Allocation + +As per [Council Motion 26](https://picasso.polkassembly.io/motion/26), 1,066,669,217.17 PICA tokens on Picasso Kusama was transferred to the Picasso (Cosmos) upon its mainnet launch from the Picasso Treasury to an escrow address. 1,066,669,217.17 PICA was minted on Picasso for the purpose of validator delegations during genesis. PICA was not burned on Picasso, but instead sent to the escrow address and once the transfer protocol opens, they will only be unescrowed if the initial PICA supply minted on Picasso is sent back to Picasso Kusama. +### Hyperspace Relayer allocation + +The current Hyperspace account on Picasso has the following address: `5wcgm3bbotHBcSjpgN6uGV338XhxDGuB22BETxsbgaMwqhzT`. +### State of PICA Supply as of October 26th, 2022 + +- Circulating Supply: At most currently ~15% of Total supply. +- Total Supply: 10 Billion +- Gross Inflation: N/A +- Net Inflation: N/A +- Burnt Fees: N/A + +The PICA token generation event (TGE) occurred on December 28th, 2022 at block number 1,444,176 on our chain. +Total PICA supply at this time is 10 billion, which is the genesis supply of PICA. +Additional PICA token distributions, inflation, etc. will be reported here once PICA goes into circulation after the TGE. + +### Tokens Released Into Circulation + +#### Historical Token Release Since Network Launch + +As per the tokeneconomics, half of the crowdloan rewards are now available, and the locked portion will continue vesting according to the vesting schedule. The unlocked tokens are considered circulating. + +The treasury has seeded QA, testing stages, and operational wallets: + +`5wiDStfPBJDhzJmkNqnjsbAmunqbSb8h1JobZV7FiMzgEmZu` + +`HCMDYY3ittCoNQEtZV9XAxMQkC6YYKgC6cxZuJkAdikhuqQ` + +`5w53mgBc2w2kNQZgFBaYT5h79cQQNfv8vUuoa85zUe5VxBvQ` + +No other tokens will be considered circulating unless approved by governance. + +#### Disclaimer +This document is meant for informational purposes only. +It is not meant to serve as investment advice or an offer to sell or buy any securities, utility tokens, or any financial instruments or services. +Any reader should conduct their own research, and consult an independent financial, tax, or legal advisor before making any decisions. +The past performance of any asset is not indicative of future results. Although the information is intended to be presented with accuracy, +in the event any statement is or becomes inaccurate, +the creator is not responsible for any such inaccuracies and the reader fully disclaims and releases the creator from any and all liability. +Since the content is intended to be disclosed on the date of its release there is no duty on the part of the creator to update any material shared herein. +Please see our important Legal Disclosures & Disclaimers which are fully incorporated herein as if set out here at length: +[https://www.composable.finance/disclaimer](https://www.composable.finance/disclaimer) diff --git a/docs/docs/governance-&-token/tokenomics.md b/docs/docs/governance-&-token/tokenomics.md new file mode 100644 index 0000000..8200576 --- /dev/null +++ b/docs/docs/governance-&-token/tokenomics.md @@ -0,0 +1,23 @@ +# PICA Tokenomics + +## Total supply and genesis token distribution + +The total supply of PICA is 10 billion tokens. PICA Token distribution is intended as follows: + +![pica_vesting_schedule](./pica-vesting-schedule.png) + +| Allocation | Amount | Percentage (%) | Description | +|:-----------------------------------------------------:|---------------:|:----------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Founders, Current Contributors, Key Partners & Advisors | 2,000,000,000 | 20% | 20% of PICA is earmarked for distribution to founders, current key team members, Key Partners & Advisors along a 2-year linear vesting schedule with an initial 6-month lock. | +| Treasury | 2,708,674,592 | ~27.1% | Approximately 18% of PICA’s supply was allocated to account for the long-term sustainability of Picasso. 75% of spent network fees will automatically flow into this fund (the remaining 25% of gas fees are distributed to collators). Following the approval of Referendum 63 on Picasso, ~9% of unclaimed crowdloan rewards were transferred to the Treasury. Following council motion 23, 1 billion PICA from this allocation is currently bonded on Picasso to secure the network. ** | +| Future Personnel Incentives _(part of Treasury)_ | 200,000,000 | ~2% | 2% of PICA is intended to be reserved for future personnel incentives. Future issues from this pool will be subject to a 4-year vesting schedule from network launch or grant date (whichever is later) with a 1-year cliff and monthly vesting thereafter.** | +| Crowdloan | 2,091,622,608 | ~20.9% | 30% of Picasso's token supply was originally allocated to crowdloan stakers for the parachain lease slot dated November 30, 2021 - October 31, 2022. The crowdloan stakers earned 50% of their PICA upon TGE, with the remainder released linearly within 48 weeks. The full balance can be used to participate in governance and other activities besides transferring. Any unclaimed rewards from the crowdloan will be transferred to the Picasso treasury three months after the crowdloan vesting period is concluded via a treasury proposal. This was executed after community referendum 63 on OpenGov. | +| Ecosystem Incentives | 1,000,000,000 | 10% | 10% of PICA’s total token supply will be released from the protocol as rewards and incentives for a number of actions involved in the protocol. These are programmatic incentives to bootstrap network growth such as running an oracle on Apollo. | | +| Series A Token Purchasers | 699,702,800 | ~7% | This portion of PICA tokens is allocated to Series A token purchasers, with a 3 month lock-up plus 2 years vesting. | +| Liquidity Programs | 1,500,000,000 | 15% | 15% of the total token supply will be released as rewards for participants in Liquidity Programs on Picasso. | + + +![pica_allocation_pie](./pica-allocation-pie.png) + +**Estimated allocation and length of program is subject to change. +[Specific Disclaimers and Disclosures for the PICA Token](https://docs.composable.finance/faqs/disclaimers-disclosures-for-composable-tokens) \ No newline at end of file diff --git a/docs/docs/governance-&-token/use-cases.md b/docs/docs/governance-&-token/use-cases.md new file mode 100644 index 0000000..5cfaa78 --- /dev/null +++ b/docs/docs/governance-&-token/use-cases.md @@ -0,0 +1,72 @@ +# PICA Use Cases + +PICA is the native token of Picasso, powering the cross-ecosystem IBC and Restaking Hub. It is positioned to be the network and native token for cross-ecosystem-IBC transfer activity. The vision is serve as the infrastructure network for cross-chain interaction and execution on MANTIS to abstract the UX of having to individually navigate between dApps and chains in a secure manner. + +A concerted effort has been made to ensure that the PICA token holds as much utility as possible by incorporating various value accrual methods and governance features. + +## What is $PICA used for? + + +## Governance + +In pursuit of a trustless and interoperable vision, PICA plays a crucial role, as [governance on Picasso](../picasso/governance.md) is operating OpenGov phase 2. + +Additionally, as PICA serves as the native token of Composable Cosmos, it is essential for governance on the [Composable Cosmos](../composable-cosmos.md) chain as well. +## Validator staking +PICA is used to secure Picasso. This is the first instance of a token being utilized for validation within both the Kusama and Cosmos ecosystems and highlights the critical role PICA plays within cross-ecosystem communication. + +### Bridging Fees Distribution +A percentage of the bridging fees generated by each new IBC connection involving Picasso will be allocated to [stakers of PICA on Composable Cosmos](/docs/docs/user-guides/pica-staking.md). At present, stakers receive rewards from the Polkadot-Cosmos IBC connection. + +With the introduction of Solana and Ethereum IBC connections in Q1 of 2024, 20% of the bridging fees from these connections will be distributed to PICA stakers. + +### AVS Payment Distribution +The Generalized Restaking Layer will secure the launches and activity of various Actively Validated Services (AVS) enhancing revenue generation for PICA stakers. A portion of the revenue, specifically 20%, will be directed towards PICA stakers. The initial AVS to be launched will be the Guest blockchain on Solana, which facilitates the Solana IBC connection. + + +:::tip +Follow [this guide](https://docs.composable.finance/user-guides/pica-staking) for staking PICA on Picasso to take part in governance and earn rewards through various protocol revenue streams. +::: + + + + + +## Where is PICA available? + +The PICA token is available on: + +- [Osmosis DEX](https://app.osmosis.zone/) +- [Pablo DEX](https://app.pablo.finance/) on Picasso +- [Uniswap V2](https://app.uniswap.org/explore/tokens/ethereum/0xbb63a9b64a80e9338b8ea298c51765e57c4f159c?chain=mainnet) on Ethereum diff --git a/docs/docs/governance-&-token/whitelist-track.png b/docs/docs/governance-&-token/whitelist-track.png new file mode 100644 index 0000000..bf64035 --- /dev/null +++ b/docs/docs/governance-&-token/whitelist-track.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b15ccfc566b46027ca86bc6aa04a17ae4ea6dc817d71fcb7ddfbb5feda743ac5 +size 301852 diff --git a/docs/docs/internal/CONTRIBUTING.md b/docs/docs/internal/CONTRIBUTING.md new file mode 100644 index 0000000..5469cd6 --- /dev/null +++ b/docs/docs/internal/CONTRIBUTING.md @@ -0,0 +1,34 @@ +# CONTRIBUTING + +We have a few guidelines and requirements to ensure correct workflows are followed while contributing to the composable project. + +## First Things First +Before contributing, go through the documentation found in `~/docs/`. Specifically: +* Use [Nix](../nix) instead for env setup. +* [proptest.md](./proptest) ― A guide to our approach and philosophy for automated testing +* [benchmarking.md](./benchmarking) ― A guide for benchmarking pallet changes + +## Workflow +When contributing code changes, follow this general process to ensure the CI pipeline processes code and that your work is accessible via ClickUp. +1) Create a git branch with a short name that is descriptive of the issue/feature you are working on +2) Create a 'Draft' PR from your new branch. Include your ClickUp issue ID in either the title or description of the PR +Example Title: `[CU-1u0b7bm] Added CONTRIBUTING.md` +3) Ensure your commits are signed and verified +4) Change the state of your PR to 'Open' once you are ready for review +5) Once all PR checks pass, a merge will be conducted + +## Signing and Verification +All commits to the composable project ***must*** be signed and verified. GitHub provides an overview of commit signing that can be found [here](https://docs.github.com/en/authentication/managing-commit-signature-verification). +Specifically, you will need to: +1) You will need to have a [new](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key) or [existing](https://docs.github.com/en/authentication/managing-commit-signature-verification/checking-for-existing-gpg-keys) GPG key that is [associated to one of your valid GitHub emails](https://docs.github.com/en/authentication/managing-commit-signature-verification/associating-an-email-with-your-gpg-key) +2) [Add the GPG key to your GitHub account](https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-new-gpg-key-to-your-github-account) +3) [Tell your local git client to use the GPG key](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) +4) Use the `-S` signing flag when you [commit](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits) +Alternatively, you can set `commit.gpgsign` to `true` so git will do this automatically +```bash +git config --global commit.gpgsign true +``` + +## Other Notes +* Keep the scope of PR changes small and easy to review +* Documentation throughout this repository will provide CLI commands in bash. You may need to use different commands/syntax if you use another shell diff --git a/docs/docs/internal/README.md b/docs/docs/internal/README.md new file mode 100644 index 0000000..d54f382 --- /dev/null +++ b/docs/docs/internal/README.md @@ -0,0 +1,6 @@ +# "Internal" Docs + +Documentation that neither fits the published [docs](../) nor can sit at the place where the code base is located (like some cross pallet cross-chain stuff). +Usually, it is not marketable and is more technical than it would fit the book. Neither it is not as technical as pallets or contract documents. + +These docs are not internal in the sense that they are private within Composable Finance, since everything we do is open source, but they are not listed in the public sidebar at [docs.composable.finance](https://docs.composable.finance), and are instead accessed by going to [docs.composable.finance/internal](https://docs.composable.finance/internal) diff --git a/docs/docs/internal/benchmarking.md b/docs/docs/internal/benchmarking.md new file mode 100644 index 0000000..01e4768 --- /dev/null +++ b/docs/docs/internal/benchmarking.md @@ -0,0 +1,12 @@ +# Benchmarking + + +In general follow Parity official guidelines and explanation on why and how to bench. + +### Read more + +* https://docs.rs/crate/frame-benchmarking +* https://github.com/shawntabrizi/substrate-benchmark-genesis +* https://github.com/paritytech/substrate/blob/master/frame/benchmarking/src/lib.rs +* https://www.shawntabrizi.com/substrate-graph-benchmarks/docs/#/ +* https://crates.io/crates/frame-benchmarking \ No newline at end of file diff --git a/docs/docs/internal/byog.md b/docs/docs/internal/byog.md new file mode 100644 index 0000000..1d59708 --- /dev/null +++ b/docs/docs/internal/byog.md @@ -0,0 +1,111 @@ +--- +title: BYOG +--- +# Overview + +Use cases of Bring your own gas (`BYOG`) on the Picasso parachain. + +BYOG allows owners of non-native tokens to execute transactions by paying fees in foreign currencies. + +Such mechanisms are built into the runtime on Picasso and [other Dotsama parachains](https://wiki.acala.network/learn/flexible-fees). + +`On ramps` and [meta (gas less) transactions](https://docs.polygon.technology/docs/category/meta-transactions) handle such possibilities on other chains. + +## Context + +Users pay fees in the runtime's native currency for the execution, allowing the runtime to earn and prevents spam and DDoS attacks. BYOG extend payments to registered non native currencies. + +A runtime configuration allows mapping amount of execution which can be bought for amount of native currency. + +## Current state + +Any cross-chain XCMP transactions can choose which assets to use to pay for the transaction. + +Direct transaction can add header to pick up `payment` asset or accounts can configure default [payment asset](https://github.com/paritytech/substrate/discussions/12055). + +`Payment` assets are configurable and configuration is shared. + +In future, direct Pablo-based swaps from an asset to PICA will be available later. + +Minting, burns, and airdrops are out of the scope of this feature. + +Fees are small now, but later we will have a way to show the exact fee for a transaction paid in any possible asset. + +**Example** +Currently, non-native currencies are mapped to native with some configurable ratio which in turn is mapped to a weight. + +## How much does my transaction cost in Picasso? + +When a transaction is executed, its `weight` is known and roughly equals the computational resources it consumes. Computational resources are benchmarked and updated with each runtime upgrade. + +Weight is converted into an appropriate amount of PICA by the polynomial formula. + +The formula dynamically changes depending on the desired target load of the network. +As the usage of this chain increases towards maximum capacity, the price of a unit of weight increases as well. + +From this point onwards we say that transactions are paid directly in PICA for simplicity. + +For details on fees, see the chapters below. + +## How can one pay for a transaction when one has USD/KSM? + +If a user account has enough PICA to pay for direct transactions and the user-specified PICA as payment assets in the case of XCMP, +the appropriate amount of PICA would be moved to the `native treasury.` + +If a user has not enough PICA to pay and [keep the account alive](https://github.com/ComposableFi/composable/blob/main/rfcs/0002-rent-deposit.md) or a user specified USD/KSM as payment in case of XCMP, +an appropriate amount of foreign assets will be calculated and transferred to the treasury. + +The amount would be defined by the configured or hardcoded ratio of PICA to USD/KSM. +If there is no ratio defined, a transaction will fail. + +Later, Pablo governed and native governance approved DEX will be checked for direct swaps of PICA to USD/KSM. + +In this case: + +- The native treasury will get PICA. +- Pablo will get foreign assets. +- If there is no direct and approved mapping, configured or hardcoded ratios will be used as before. +- if slippage is unacceptable or the pool is empty the transaction will fail. It will not try to use configured or hardcoded ratio. + +The currency in which users can pay on Picasso is `payment currency`. + +## Direct native transaction specific + +Later user will be able to configure his preferred payment token by default. If the user peeks at such a token, then direct transactions are paid only in this token. No other tokens are tried. + +Switching configuration is paid in a token to which configuration is switched. The user's existential deposit(ED) must be enough to reset the configuration to default later. + +## XCMP specific + +If a user tried to pay in a currency that is not `payment currency`, it would be trapped in a binary blob. + +If the user overpaid for a transaction, the remaining funds go to the user's account on Picasso. The whole amount goes to the user account if the payment is too small. + +## IBC Specific + +Packet trying to pay in no payment currency will not be acknowledged. + +## Fee calculator + +Here is an example of the fee for transferring some KSM from Karura: + +1. Fee on Karura for XCMP. +2. Price for XCMP on Picasso. It consists of a base fee and some formula of cost per instruction. +3. Transaction fee on Picasso +4. DEX swap fee + +All these fees change dynamically depending on network load, upgraded when the runtime is upgraded (and dependencies of runtime), and pool or native fee formulas configuration changes. + +There is no unified view of all fees. So if there will be, given fees prediction should be less than one order of magnitude error. + +## References + +### Pallets + +- transaction-fee (../frame/transaction-fee) +- xcmp +- pablo (../frame/pablo) +- assets-registry (../frame/assets-registry) +- currency-factory (../frame/currency-factory) +- +- diff --git a/docs/docs/internal/cosmwasm.md b/docs/docs/internal/cosmwasm.md new file mode 100644 index 0000000..c1f7671 --- /dev/null +++ b/docs/docs/internal/cosmwasm.md @@ -0,0 +1,54 @@ +# Overview + +This documents describes generate solution stucture of CosmWasm on Substrate +and references documents and code about usage and quality of it. + +## Stucture + +CosmWasm on substrat consists of 2 parts. + +[VM](https://github.com/ComposableFi/cosmwasm-vm), +uses [parity-wasmi](https://github.com/paritytech/wasmi) as interpeter, +and [cosmwasm-sdk](https://github.com/CosmWasm/cosmwasm/) for interface types, +used to produce CW VM capable of running CW contracts which runnalbe by reference `wasmd` +(wasmd is go module for Cosmos chains with AOT native complication for CW contracts). + +All features are supported (as defined by CW SDK feature flags). + +Second part is substrate [pallet-cosmwasm](../../../code/parachain/frame/cosmwasm). +Which integrates CW with Substrate storage, RPC, [cli](../../../code/parachain/frame/cosmwasm/cli), +[Polkadot.JS](technology/cosmwasm/deploy-and-run-cosmwasm-contracts-with-pdjs.md). + +PD.js and cli can be used to execute transactions and qeury contract state. + +## Substrate Runtime integration + +Contracts can use pallet-assets via standard `Bank` interface. + +Any pallet can be called via precompile(CW messaging interface to pallets as if these are usual contracts). + +Polkadot XCM pallet can be called via [this](https://github.com/ComposableFi/composable/blob/main/code/xcvm/lib/core/src/transport/xcm/mod.rs) precompile. + +Our DEX pallet can be called via [this](https://github.com/ComposableFi/composable/blob/6db2dedb093b1cfb02cd5a3abbfb49a0a9c0fb96/code/parachain/frame/composable-traits/src/dex.rs#L20) precompile. + +## Testing + +VM can be tested via `cargo test`, examples of tests are [here](https://github.com/ComposableFi/cosmwasm-vm/blob/main/orchestrate/README.md), +run of contracts in simulator and asserts of results. + +Pallet is covered with tests using test runtime you may find in pallet directory. + +Above tests including property tests. + +Pallet src folder has some [basic fuzzy tests](../../../code/parachain/frame/cosmwasm/fuzz_targets). + +Model checking(kani) as [per their documentation](https://model-checking.github.io/kani/tutorial-real-code.html) and our final research are not applicable to current solution. + +Benchamrks for pallet extrinics and gas metering of WASM instuctions are done using parity benchmarking infrastucture. + +## Local devnet + +Local devnet is released to [docker hub](https://hub.docker.com/r/composablefi/devnet) +and to `nix run composable#devnet-picasso`. + +CW20(analog of ERC-20) contract and 2 Composable contracts are embedded into genesis. diff --git a/docs/docs/internal/currency.md b/docs/docs/internal/currency.md new file mode 100644 index 0000000..2f8896c --- /dev/null +++ b/docs/docs/internal/currency.md @@ -0,0 +1,149 @@ +--- +tags: + - assets + - tokens + - funds + - coins +--- + +# Currency + +This document describes various properties of currencies. + +`currency`, `asset`, `token`, `coins`, `fungibles` are referring to same thing, emphasizing either some aspect of entity or just came from various blockchains. + +## What is currency? + +We express the identity of a currency as a positive integer. Any positive integer may be a currency id, but not all integers are currency ids. + +### Amounts + +Each currency has a non-negative total issuance. Given an identifier, we can ask for the total supply of the respective currency in consensus with the ledger(in this case, the parachain). A Currency is considered fungible because an amount of 10 of said currency equals another 10 of the same currency on another account. + +### Decimals + +Most pallets operate without knowledge of decimals and execute all mathematical operations on whole numbers. + +A Currency may be associated with a `unit` and `minimal amount`. `Unit` usually comes in an amount of 10 to some power like 6, 9, or 12. The units are typically priceable and comprehendible for users. `minimal amount` can be used to operate micro-transactions and help minimize rounding errors. + +Only pallets that care about out-of-consensus metadata for humans operate with decimals. + +Ledgers operate only in decimal currencies. However, currencies with zero decimals are viable too. + +Pallets use larger decimals internally in order to keep rounding effectively non-existent on a per-protocol basis. + +**Example** + +Currency A has 12 decimals. 420 units of A would equal to `420*10^12`. Currency B has 9 decimals, so 420 units would be equal to `420*10^09`. + +## Remote or local + +All currencies are eventually local with local identifiers. + +Any remote currency bridged to our parachain is minted in an equal amount to what was bridged. +Remote currency transferred into and out of the parachain is minted and burned in equal amounts. + +Remote tokens on our chain can be local or remote on other chains. +For example, ETH is remote on Acala and AUSD is local on Acala. Both are remote on this parachain as we consider them to both be from Acala. + +In the local consensus, bridged tokens semantically are just protocol tokens with their associated risks. + +For details on registry mapping, check the AssetsRegistry (frame/assets-registry) pallet. + +### Remote currencies equivalence + +Generally, a remote currency transferred via one bridge is not necessarily the same as the same currency transferred via another bridge. + +For example, USDC transferred via IBC is not equal to the same amount transferred via XCMP from Acala. + +There are several solutions to equalize currencies: + +- Create a DEX for the currency pair and use a router to swap them. For example, if the currencies are equal in price, the swap would be 1 to 1. Market defined is best for high-risk bridges. +- A risky approach is to embed direct trust to bridges via the configured ratio of transferred currencies to be 1 to 1. +- Use trustless decentralized bridging. With this solution, there is proof of equivalence, making it the lowest risk. For example, IBC MMR or XCMP `Reserver Transfer`. + +For more details, read CVM documentation regarding security and the risks of choosing bridges (relayers). + +**Example** + +ETH was transferred from Ethereum to Acala and then to this parachain as AETH. At the same time, METH was transferred from Moonbeam. Moonbeam was then hacked, and the hacker minted a large amount of unbacked METH. +In this the case DEX (market) would react and skew the price of AETH to be higher than METH. +More mild form of non equivalence would be because of network congestion. +Imagine Acala transfer prices are several time more of Moonbeam. In this case AETH will be less liquid than METH, so it price may be lower. + +### Remote currency identifiers + +Any remote currency has a bidirectional map from and to local. +Bidirectional mapping allows sending the number of tokens from and to local consensus. + +Remote currencies usually have their respective bridge identifiers attached in the format "kind/network(chain)". + +**Example** + +Check XCM and IBC ICS-20. + +## Native currencies and gas fees + +Users pay fees in the runtime's native currency for the execution, allowing the runtime to earn and prevents spam and DDoS attacks. + +A runtime configuration allows mapping amount of execution which can be bought for amount of native currency. + +This parachain uses pre-calculated weights to estimate the hardware costs of execution. An amount of weight a native currency can buy is a non-linear dynamic function from currency amount to weight. As the usage of this chain increases towards maximum capacity, the price of a unit of weight increases as well. + +Cross-chain interactions over bridges may involve metered networks which allow setting limits on execution price and calculating the possible number of execution resources in the runtime. For example, Ethereum. + + +Within the protocols built on top of the parachain, there are "native" protocol currencies that are used for governance and revenue distribution, but _cannot_ be used to pay for execution. + +### Bridged gas fee (`bring your own gas`) + +Users who want to have assets on our chain can either be minted with some native currency governance or be allowed to pay for cross-chain transactions in some non-native currency. + +Currently, non-native currencies are mapped to native with some configurable ratio which in turn is mapped to a weight. + +Transactions issued by users are likely to swap some remote currencies into native on transfer, to enact the execution of local transactions. + +## Tokenomics + +All currencies are eventually local - they must have identity on this chain. +Minting of local representation is governed by a protocol. + +The most straightforward protocol is initial minting by `root` or `governance voting`. + +Other more complicated protocols are `bridges`, `staking`, or `LP`, and are more complicated. + +Protocols form various economical facets of tokens. +Here are several examples. + +### Inflation + +In the context of currency, we define inflation as when an amount of an asset is worth less than it was previously, and as such can no longer be swapped for as much of another asset(s) as it could before. + +Inflation may occur when: +- Users exchange substantial amount of inflating currency into other currencies. +- An excessive amount of tokens are minted, causing the value of the asset to decrease. +- A previously locked currency is released to the market. +- A currency is being shorted +- Off-chain issues like bridging bugs or misleading off-chain oracle information + +Some protocols, such as stable coins and staking, try to maintain a specific price level or level of liquidity by continuously minting tokens. + +Burning and locking tokens will in general cause deflation, as the total available supply has been decreased. + +### Dilution + +Some protocols allow users to provide their tokens to the protocol to issue other tokens, representing the total share of the protocol. +Meaning new users coming into the protocol and issuing more tokens leads to a reduction of the total user share in the protocol diluting their tokens. + +### Risk categories + +Some assets may be considered more volatile/riskier than others. + +Categories represent governance and oracle-like information on the chain. + +They are used in protocols like lending or credit scores. + +**Example** + +Assets may be sore risky, so it is not used as collateral in lending. +It may depreciate in price fast and there is no market to sell it when that happens. \ No newline at end of file diff --git a/docs/docs/internal/onboarding/01-consensus-and-blockchain.md b/docs/docs/internal/onboarding/01-consensus-and-blockchain.md new file mode 100644 index 0000000..45c7be4 --- /dev/null +++ b/docs/docs/internal/onboarding/01-consensus-and-blockchain.md @@ -0,0 +1,71 @@ +# Blockchain + +The term is quite overloaded and can refer to several different things, such as: + +- The data structure represents blocks of data connected by hashes through [header data](https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch07.html). We consider this the most naive definition, as the data structure is not novel, and does not encapsulate any of the core concepts. Unknowledgable developers might misconstrue it with a fancy, persistent [linked list](https://www.geeksforgeeks.org/data-structures/linked-list/). +- A decentralized network of nodes, using a blockchain data structure to maintain a shared database. This is the more sophisticated definition, and better expresses the amount of technological innovation. Other examples of decentralized networks not based on a blockchain data structure include torrent networks, which still use [peer-to-peer networks](https://www.geeksforgeeks.org/what-is-p2ppeer-to-peer-process/). When we talk about blockchain within Composable, we usually refer to this definition. +- A collection of different decentralized technologies, such as wallets, zero-knowledge proofs, and smart contracts. Often when we speak about **'the blockchain revolution"**, this is what we mean. + +## Introduction Video + +[![The Blockchain & Bitcoin - Computerphile](https://img.youtube.com/vi/qcuc3rgwZAE/maxresdefault.jpg)](https://youtu.be/qcuc3rgwZAE) + +### Takeaways + +- [hashing](https://www.educative.io/answers/what-is-hashing) +- [signatures](https://www.coinbase.com/cloud/discover/dev-foundations/digital-signatures#:~:text=Digital%20signatures%20are%20a%20fundamental,other%20users%20from%20spending%20them) +- [longest chain rule](https://learnmeabitcoin.com/technical/longest-chain#:~:text=The%20longest%20chain%20is%20what,on%20the%20same%20transaction%20history.) + +One thing that you should realize by now, is that processing transactions is not inherently expensive in Bitcoin. Oftentimes, people compare the total energy required by the Bitcoin network to smaller countries, as an example of how the technology is inefficient. Mining is just the process of choosing the next author of a block, and the energy required to become the next author is irrespective of the transactions being processed. The security of the Bitcoin network is proportional to the total energy expenditure and the cost of energy, however, this mining process plays an incredibly important part in securing (large) transactions. + +## Finality + +One question that every merchant asks is: when do I know that a payment will no longer be reverted, because of a network delay, a bug, or some other reason. Only after they know that they have their money, can they give the customer their product, as otherwise the payment might be reverted. We refer to this concept as [finality](https://smithandcrown.com/glossary/transaction-finality-probabilisticdeterministic/). The actual goal of a consensus protocol is to provide finality. + +> *Note* +> Is Bitcoin's finality probabilistic or deterministic? + +[![Finality in Blockchain Consensus - by Alexis Gauba - Mechanism Labs & She256](https://img.youtube.com/vi/efyiPhZvqOA/maxresdefault.jpg)](https://youtu.be/efyiPhZvqOA) + +### Takeaways + +- Probabilistic finality is strictly worse than deterministic finality. +- There are still tradeoffs, we pay a price for deterministic finality. +- We live in an imperfect world. Blockchains need to be resilient toward network failures as well as malicious actors. + +## Proof of Stake (PoS) + +An alternative method to providing finality is using proof of stake, which does not select the next leader based on expensive hashing, but instead uses a function that selects the next block author based on how much they are staking. The more you stake, the more often you are selected. The obvious advantage is the lower energy wastage, as well as the buy-in from block producers. With Proof of Work (mining), miners are not necessarily invested in the success of the underlying network. If the network loses value, is attacked, or is abandoned, they (the miners) can still use their mining equipment to make a profit on another PoW network, while with PoS their future profit is tied to the success of the network. + +[![Ethereum 2.0: Proof of Stake vs Proof of Work | Vitalik Buterin and Lex Fridman](https://img.youtube.com/vi/3yrqBG-7EVE/maxresdefault.jpg)](https://youtu.be/3yrqBG-7EVE) + +## Nominated/Delegated Proof of Stake (DPoS) + +One problem that we find with PoS is that small token holders are not incentivized to participate in block production, as the cost of running a node (server costs, electricity, etc.) outweighs the reward. A solution to this problem is allowing token holders to pool their funds, and select one of them to run the node and produce blocks. This way, the token holder can earn a portion of the block reward. DPoS is often combined with setting a limit on the maximum number of block producers so that only the top X producers are earning a fee. + +Although the above scheme seems very advantageous, there are a few downsides: + +- Cartel forming. Block producers with large holdings usually work together to remain in the top `X`. +- Centralization of block production: often investors and professionals run validators. These parties are registered in their respective countries and vulnerable to regulations and government-enforced censorship. + +That is why it is important to have a large number of validators, as well as to ensure that malicious validators can be booted from the network if we can prove that they are censoring transactions or missing blocks. Proving that a party is acting maliciously is incredibly difficult, as a network failure can be the cause of missing a block or not including a transaction (because it never arrived in the validator's mempool). + +A big upside of DPoS is that, since we are running fewer staking nodes, and do not expect the regular user to run one, we can increase the minimum hardware requirements for a node. This increases the throughput of the network. A 64-core machine with 2 TB of RAM is more powerful than grandma's Raspberry PI. + +[![Cardano's Proof of Stake Consensus Algorithm Explained | Charles Hoskinson and Lex Fridman](https://img.youtube.com/vi/Cj4dhHSJqDQ/maxresdefault.jpg)](https://youtu.be/Cj4dhHSJqDQ) + +### Takeaways + +- DPoS is a consensus protocol, but not necessarily better, just different tradeoffs again. +- We need to be extra vigilant with DPoS to guarantee censorship resistance. +- Less decentralized networks can still be censorship resistant, as long as new validators can freely join if old ones are taken down. + +## Further reading + +If you're interested in actually learning this stuff, get started with: + +- [Byzantine Finality Gadgets](https://research.web3.foundation/en/latest/polkadot/finality.html#grandpa-full-paper) +- [BABE](https://research.web3.foundation/en/latest/polkadot/block-production/Babe.html) +- [Bitcoin: A Peer-to-Peer Electronic Cash System](https://bitcoin.org/bitcoin.pdf) + +Note that this is not expected for your onboarding. diff --git a/docs/docs/internal/onboarding/02-smart-contracts.md b/docs/docs/internal/onboarding/02-smart-contracts.md new file mode 100644 index 0000000..620fac4 --- /dev/null +++ b/docs/docs/internal/onboarding/02-smart-contracts.md @@ -0,0 +1,45 @@ +# Smart contracts + +Before we had Ethereum, we had different chains for different use cases; called app chains. Each chain is specifically dedicated to a single application/company. This was also in the early stages of crypto (think 2012-2014), and to be frank, these app chains were not ideal. + +The real innovation here was Vitalik realizing that we needed a more general execution environment, which wouldn't just execute logic associated with the specific app chain, but could support many third-party developers and very different applications. + +Appchains have gained popularity in the past few years in the Cosmos and Polkadot ecosystems; although these chains usually include smart contract facilities as well. + +[![Avoid the Middle-Man (Smart Contracts) - Computerphile](https://img.youtube.com/vi/csS1mZFuNSY/maxresdefault.jpg)](https://youtu.be/csS1mZFuNSY) + +### Takeaways + +- Understand how smart contracts are just rules written by humans. +- Know smart contracts can only operate on data available onchain and are limited in their capabilities. + +## Implementations of VMs + +The EVM is the most well-known smart contract engine (or VM). A virtual machine is a program, which can execute other programs. A smart contract is not magic at all, just a regular program; but instead of running on your computer, it is executed on every single node of a blockchain. Each node has to execute the contract to verify the correctness of a proposed block. An alternative to the EVM is webassembly, which was originally developed for the browser as an alternative to Javascript. Your browser executes code when it loads a website, code that has been developed by a third-party developer and thus cannot be trusted. The same problem exists for smart contracts. The blockchain cannot trust the provided code and must ensure a few things. + +- The code must be sandboxed. Access to the actual node from the code is very limited. +- It must end in a reasonable amount of time, or otherwise be shut down. +- Execution needs to be deterministic. If 2 nodes run the same contract with the same state and input parameters, the result must be the same. + +A subset of webassembly provides these guarantees and is thus a popular runtime. + +[![How does WebAssembly work?](https://img.youtube.com/vi/zcADuXro-GQ/maxresdefault.jpg)](https://youtu.be/zcADuXro-GQ) + +### Takeaways + +- Realize that smart contracts are just programs, but that they can be used as a building block for [dapps](https://www.youtube.com/watch?v=KkZ6iYnSDRw). +- That if we treat smart contracts as regular technology, we can discuss which tradeoffs each technology makes. + +### On tradeoffs + +Rust is made to build rockets, airplanes, and medical devices. Solidity is based on Javascript to make the barrier of entry as low as possible. Which technology would you prefer to handle billions of USD? + +There are projects to bring better languages to the EVM, such as [Vyper](https://vyper.readthedocs.io/en/stable/) and [Fe](https://fe-lang.org/). + +## Further reading + +- [ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER](https://ethereum.github.io/yellowpaper/paper.pdf) +- [CosmWasm/wasmvm Specification](https://github.com/CosmWasm/wasmvm/blob/main/spec/Specification.md) + +> *Note* +> Why didn't they name it `Wasmos` :-( \ No newline at end of file diff --git a/docs/docs/internal/onboarding/03-bridging-and-crosschain.md b/docs/docs/internal/onboarding/03-bridging-and-crosschain.md new file mode 100644 index 0000000..5b87f80 --- /dev/null +++ b/docs/docs/internal/onboarding/03-bridging-and-crosschain.md @@ -0,0 +1,28 @@ +# Bridging and Cross Chain + +If you check out [coinmarketcap](https://coinmarketcap.com/), you'll see many different coins. Some are assets on a chain, so 1 blockchain may have many assets. Others represent the chain itself and are used for fees. You might realize then that there are a lot of chains out there, each with similar assets, functionality, and objective. + +The logical successor to multiple, independent ecosystems, is linking them up with bridges. This allows existing token holders on Ethereum to start using dapps on Fantom. + +These token bridges operate in two ways: + +- They burn tokens on the sender side, and mint tokens on the receiving side. +- They hold tokens on the sender and receiver sides, and when a deposit (lock) is made on the sender side, the receiver side releases. + +How we orchestrate this synchronization will be discussed later. For now, it is enough to know that there are two types of protocols: + +- `Trusted/Optimistic`: The synchronization protocol can commit fraud (release tokens without locking them), but may have some mechanism to punish fraud. +- `Trustless/Deterministic`: The synchronization mechanism uses fancy mathematics to make it impossible to commit fraud. + +- [What Are Blockchain Bridges And How Can We Classify Them? +](https://blog.li.fi/what-are-blockchain-bridges-and-how-can-we-classify-them-560dc6ec05fa) + +### Takeaways + +The above article makes clear distinctions, although we consider atomic swaps to be a synchronization primitive, and not a way to manage liquidity. Atomic swaps can enable burn & mint or lock & release style liquidity management. + +## Further Reading + +- [BEEFY](https://github.com/paritytech/grandpa-bridge-gadget/blob/master/docs/beefy.md) +- [Nomad](https://docs.nomad.xyz/) +- [Polkadot - Learn Bridges (good for beginners)](https://wiki.polkadot.network/docs/learn-bridges) \ No newline at end of file diff --git a/docs/docs/internal/onboarding/04-digital-assets.md b/docs/docs/internal/onboarding/04-digital-assets.md new file mode 100644 index 0000000..dec32d2 --- /dev/null +++ b/docs/docs/internal/onboarding/04-digital-assets.md @@ -0,0 +1,27 @@ +# Digital Assets + +Study ERC-20 and MetaMask wallet. + +- [![erc-20 tokens - Simply Explained](https://img.youtube.com/vi/cqZhNzZoMh8/maxresdefault.jpg)](https://youtu.be/cqZhNzZoMh8) +- [fungible assets](https://www.investopedia.com/terms/f/fungibility.asp) +- [erc-20](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) +- [erc-721](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/) +- [cw20](https://docs.rs/crate/cw20/0.2.0) + +### Takeaways + +Understand that tokens are not magical and that your wallet just manages your private key but doesn't actually `hold` the assets. + +## LP tokens and NFTs + +Some tokens don't represent a currency, but more of a share of an asset, such as stocks. These are still fungible assets. The equivalent to a `stock` in crypto is an LP token, which represents fractional ownership of a larger pool of other tokens. + +[How Liquidity Provider (LP) Tokens Work](https://www.gemini.com/cryptopedia/liquidity-provider-amm-tokens#section-lp-tokens-and-crypto-liquidity-providers) + +NFTs are a different standard, but the same as `erc-20` tokens, except the total supply is always 1. These can be used to express non-fungible assets. An example of a non-fungible asset is a house. Even though we have housing markets, each house must be priced differently (different number of rooms, location, etc.). + +[Non-fungible tokens (NFT)](https://ethereum.org/en/nft/) + +### Takeaways + +Tokens are financial instruments and can be used to express many different financial concepts. NFTs fall in the same category, even though they are now primarily used for artworks. \ No newline at end of file diff --git a/docs/docs/internal/onboarding/05-automated-market-makers.md b/docs/docs/internal/onboarding/05-automated-market-makers.md new file mode 100644 index 0000000..406652f --- /dev/null +++ b/docs/docs/internal/onboarding/05-automated-market-makers.md @@ -0,0 +1,34 @@ +# Automated Market Makers + +To understand how AMMs work, we'll first take a brief detour to traditional finance (tradfi). To understand the whole topic, you'll need to be familiar with the following concepts: + +- [Order Book](https://www.investopedia.com/terms/o/order-book.asp) +- [Spread](https://www.investopedia.com/terms/s/spread.asp) + +[![What is a Market Maker and How do They Make Money?](https://img.youtube.com/vi/-zTHKcJEGe8/maxresdefault.jpg)](https://youtu.be/-zTHKcJEGe8) + +## Constant Product Market Makers + +In smart contracts, keeping track of a full order book is quite expensive, due to the large amount of data that needs to be stored, as well as the computational cost of ordering the book during trade execution. What the founders of [bancor](https://research.thetie.io/bancor-history/) realized, was that instead of an exchange being a platform for market makers, the exchange itself could function as a market maker, and do away with the order book. + +[![What is an Automated Market Maker? (Liquidity Pool Algorithm)](https://img.youtube.com/vi/1PbZMudPP5E/maxresdefault.jpg)](https://youtu.be/1PbZMudPP5E) + +### Takeaways + +We use AMMs and liquidity pools because order book-based DEXes cannot be properly done in smart contracts. Do note that AMMs are strictly less capital efficient and flexible compared to order book-based exchanges. + +## Stableswap + +AMMs can be used to trade any asset, however, we can optimize the Constant Product AMM algorithm with knowledge of the underlying assets `real` value. For example, stablecoins should always have similar values. Stableswap is an adaptation of the algorithm: + +[![Curve - Math | DeFi](https://img.youtube.com/vi/GuD3jkPgPgU/maxresdefault.jpg)](https://youtu.be/GuD3jkPgPgU) + + +### Takeaways + +- We can 'manipulate' the AMM algorithms to better suit the intended assets. Curve adds weights to attempt to always have stablecoins be priced around $1. + +## Further Reading + +- [Uniswap v2 Core](https://uniswap.org/whitepaper.pdf) +- [Uniswap v3 Core](https://uniswap.org/whitepaper-v3.pdf): Very cool, very complicated. \ No newline at end of file diff --git a/docs/docs/internal/onboarding/06-decentralized-lending.md b/docs/docs/internal/onboarding/06-decentralized-lending.md new file mode 100644 index 0000000..00c7106 --- /dev/null +++ b/docs/docs/internal/onboarding/06-decentralized-lending.md @@ -0,0 +1,20 @@ +# Decentralized Lending + +We've previously covered one major application of DeFi: AMMs and trading. Now we're going to dive a bit deeper into another major application: overcollateralized loans. These protocols are smart contracts, that allow you to borrow tokens for a higher-value asset. For example, you can borrow $400 USDC in exchange for locking up $1000 worth of Bitcoin. As you repay the loan (with interest), your BTC is redeemed. When the value of BTC starts dropping, the protocol will auction off the collateral (BTC), so that it does not lose money. + +[![Lending And Borrowing In DEFI Explained - Aave, Compound](https://img.youtube.com/vi/aTp9er6S73M/maxresdefault.jpg)](https://youtu.be/aTp9er6S73M) + +Using these decentralized lending protocols, we can introduce leverage as a new tool in the DeFi arsenal: + +[A deep dive into leverages in DeFi Borrowing, Margin Trading, Perpetuals, Leveraged tokens, and Options](https://medium.com/phoenix-finance/a-deep-dive-into-leverages-in-defi-borrowing-margin-trading-leveraged-tokens-perpetuals-ed9019bd6833#:~:text=What%20is%20leverage%3F,potential%20return%20of%20an%20investment.) + +Leverage and lending can be hotly discussed topics. It's possible to increase profits by taking on leverage, but losses are also increased. Our standpoint is that it is merely another tool and, if used properly, a versatile one. However, even in TradFi, leverage affects the markets disproportionally: [Confronting the Hazards of Rising Leverage](https://blogs.imf.org/2021/03/29/confronting-the-hazards-of-rising-leverage/). + +### Takeaways + +- Understand how lending protocols work. +- Understand leverage and how it affects economic risks. + +## Further Reading + +- [Euler Whitepaper](https://docs.euler.finance/getting-started/white-paper) \ No newline at end of file diff --git a/docs/docs/internal/onboarding/07-polkadot.md b/docs/docs/internal/onboarding/07-polkadot.md new file mode 100644 index 0000000..f7b4afe --- /dev/null +++ b/docs/docs/internal/onboarding/07-polkadot.md @@ -0,0 +1,41 @@ +# Polkadot + +Polkadot is a blockchain of blockchains. Instead of executing smart contracts directly, it allows other chains to connect and verifies the integrity of the connected chains. We refer to this as 'shared security'. + +- [What is Polkadot? A Brief Introduction](https://polkadot.network/blog/what-is-polkadot-a-brief-introduction/) + +[![What is Polkadot? - Video](https://img.youtube.com/vi/BQ60bTU1bPg/maxresdefault.jpg)](https://youtu.be/BQ60bTU1bPg) + +Navigate to the [wiki](https://wiki.polkadot.network/docs/learn-accounts), and make sure to at least cover all the topics listed under `basics`. These include `Accounts`, `Tokens and Assets`, `Components`, and `Staking`. + +## Composable and Picasso + +Parachains are a part of our product. We use these as bridging hubs for our `XCVM` network, as well as an execution layer for DeFi protocols. Initially, we won two slots, the Picasso (Kusama) slot #13: leasing November 30, 2021 - November 2, 2022, and the Composable (Polkadot) slot #8: leasing March 11, 2022 - January 16, 2024. + +Some products that we are building and deploying on Picasso and Composable include: + +- [Pablo](https://dali.devnets.composablefinance.ninja/products/pablo-overview.html) +- [Centauri](https://dali.devnets.composablefinance.ninja/products/centauri-overview.html) +- [XCVM](https://dali.devnets.composablefinance.ninja/products/xcvm.html) +- [CosmWasmVM](https://dali.devnets.composablefinance.ninja/products/xcvm/writing-smart-contracts-with-cosmwasm.html) + + + +> **Note** +> While writing this document, links to these products were not available yet. Please ask your lead if they already are, and if so, file a PR with the documentation of each. + +In conjunction with our main projects, Composable Labs is incubating more projects to deploy on our chains. + +## Acala + +A parachain focussed on DeFi and stablecoins, and one of our partners in the DeFi space. Read through their [wiki](https://wiki.acala.network/) on the different products as well as their EVM+. + +## Moonbeam + +Another major parachain, focusing on being an Ethereum compatible execution layer. Many protocols jumped over to moonbeam because they did not have to rewrite their contracts. + +Peruse their [wiki](https://docs.moonbeam.network/builders/) too. + +## Further Reading + +Check out the advanced section of the Polkadot [wiki](https://wiki.polkadot.network/docs/learn-availability). \ No newline at end of file diff --git a/docs/docs/internal/onboarding/08-cosmos.md b/docs/docs/internal/onboarding/08-cosmos.md new file mode 100644 index 0000000..2867e15 --- /dev/null +++ b/docs/docs/internal/onboarding/08-cosmos.md @@ -0,0 +1,16 @@ +# Cosmos + +Another technology looking to become the 'blockchain of blockchains' is Cosmos, based on the Tendermint consensus algorithm. + +[![Cosmos blockchain (ATOM) explained by lead researcher Sunny Aggarwal – Deep Dive](https://img.youtube.com/vi/IzWpZ1fEcsY/maxresdefault.jpg)](https://youtu.be/IzWpZ1fEcsY) + +The above video is by Sunny Aggarwal, one of our partners. Currently, he works at Osmosis, a Cosmos decentralized exchange. + +### Takeaways + +Cross-chain is a way for scaling not just the transaction throughput, but also a way to scale governance and experiment freely. + +## Further Reading + +- [Tendermint: Consensus without Mining](https://tendermint.com/static/docs/tendermint.pdf) +- [Osmosis Medium](https://medium.com/osmosis/vision-for-osmosis-e68e796ff1c2) \ No newline at end of file diff --git a/docs/docs/internal/onboarding/09-near.md b/docs/docs/internal/onboarding/09-near.md new file mode 100644 index 0000000..55334c0 --- /dev/null +++ b/docs/docs/internal/onboarding/09-near.md @@ -0,0 +1,15 @@ +# NEAR + +The final chain that you need to understand is NEAR, which handles scaling through sharding. + +[![Alexander Skidanov Presents Challenges in Designing Shared Blockchain Protocols at Web3 Summit 2019](https://img.youtube.com/vi/fWig0S7cjO0/maxresdefault.jpg)](https://youtu.be/fWig0S7cjO0) + +NEAR has a very clever consensus mechanism, which makes it a great candidate for IBC-based bridging as well. We're targeting NEAR as the third bridged ecosystem. + +### Takeaways + +We're now entering pretty complex topics. Enjoy and try to learn as much as you can, but fully understanding NEAR and Nightshade is not a job requirement, unless you are working on the bridging team. + +## Further Reading + +- [Sharding Design: Nightshade](https://near.org/papers/nightshade/#introduction) \ No newline at end of file diff --git a/docs/docs/internal/onboarding/10-ibc.md b/docs/docs/internal/onboarding/10-ibc.md new file mode 100644 index 0000000..3e77a33 --- /dev/null +++ b/docs/docs/internal/onboarding/10-ibc.md @@ -0,0 +1,12 @@ +# IBC + +At Composable, we're investing quite a lot in the Inter-Blockchain-Communication protocol (IBC). This protocol originates from the Cosmos ecosystem and is designed for message passing and token transfers between blockchains. Not only does it work well for Cosmos-based chains, but also for any chain that has deterministic finality. IBC is based on mutual light clients on each chain, which can be used to trustlessly exchange data between the chains. + +## The protocol + +[![IBC Explained to Cosmonauts Ep. 1](https://img.youtube.com/vi/dYuTYykRhH4/maxresdefault.jpg)](https://youtu.be/dYuTYykRhH4) + +## Further Reading + +- [IBC](https://ibcprotocol.org/) +- [XCMP](https://research.web3.foundation/en/latest/polkadot/XCMP.html): Polkadot's competitor. \ No newline at end of file diff --git a/docs/docs/internal/onboarding/12-working-at-composable.md b/docs/docs/internal/onboarding/12-working-at-composable.md new file mode 100644 index 0000000..3fbff67 --- /dev/null +++ b/docs/docs/internal/onboarding/12-working-at-composable.md @@ -0,0 +1,62 @@ +# Working at Composable + +We hope that the learning during the onboarding was challenging and useful to you. Working at Composable is challenging and a lot of fun. Some advice as you start your journey, regardless of the team you'll be working in: + +1. Working remotely is hard. Hard for us to keep track of your progress, as well as hard for you since there are fewer opportunities to ask questions or drop by someone's office. The key to working remotely is disciplined communication. Let your team know what you are working on (or stuck on), and if you see others struggle or ask questions on slack, help them out. It is also hard to keep track of decisions made, so use `Github`'s discussions and PRs to discuss features, instead of slack or during calls. Even if you don't work as a developer, make sure to use appropriate tools. Try to always have one source of truth (SoT) regarding decisions and work, instead of multiple out-of-date documents. + +2. Ownership is important. It is not your boss who is responsible for delivering a product, it is all of us together. If you're a developer reading some code that your colleagues wrote, question the quality, security, and workings of it. If you're a technical writer, realize that your work is the face of Composable. + +3. Have fun. Working far apart from each other can make it difficult to have casual conversations, or daunting to approach someone. Going to conferences is a great way to get to know the others, as well as organizing social events with your team, such as a gaming session. + +## Summary of Composable + +- Composable Finance was founded in early 2021 and first announced to the world on April 6 of that year. Since then, much has changed and we are proud to say we have accomplished a great deal, though we still have more to achieve to fully execute our company vision. At the time, the founder Brainjar was anonymous. We still often refer to him as `Brainjar` or `BJ`. + +- 01 June 2022 - Seed Funding Round: $7,000,000 raised from: + - Advanced Blockchain AG: a publicly listed investor, incubator, and partner in the blockchain industry, acting as a transformational ecosystem developer. + - Rarestone Capital: an incubator and investor helping early-stage entrepreneurs architect, engineer, and launch products on decentralized architectures. + - 4SV: an investor in nascent blockchain companies that advances the growth of their transformative technologies. + - Alameda Research: a leading principal trading firm that uses internally developed technology and their team’s deep crypto expertise to trade thousands of digital asset products. + - Blockchain Capital: a pioneering blockchain venture firm with 8 years of experience investing in the space. + - Cluster: a distributed network of crypto insiders, influencers, builders, and investors. + - CMS Holdings: a principal investment firm that focuses on making investments across the crypto asset ecosystem. + - DFG: an investment and research team empowering blockchain and Web 3.0. + - Divergence Ventures: a crypto operator fund with an experimental approach to capital formation. + - Dlab: a branch of SOSV offering programmatic venture capital and resources for startups exploring new frontiers in web3, decentralization, and blockchain. + - Hypersphere Ventures: an investment group leveraging on-chain treasuries, decentralized organizations, and governance to increase the utility of the blockchain networks in which they invest. + - LedgerPrime: a quantitative digital asset investment firm running a portfolio of alpha-oriented low volatility strategies. + - LongHash Ventures: a user-owned, transparent, permissionless venture firm empowering founders to build in Web 3. + - Maven 11: a global blockchain and digital asset investment firm launched by a diverse set of serial entrepreneurs, investors, and blockchain builders. + - New Form Capital: an early-stage VC fund focused on FinTech and blockchain aiming to advance the economic networks of the future. + - Pluto Digital Assets: a crypto technology and operations company that makes Web 3.0 Decentralised Finance (DeFi) more accessible to all. + - PNYX Ventures: a venture fund investing in early-stage projects that drives project teams through blockchain capital markets toward a Web3 future. + - SOSV: a global venture capital firm providing multi-stage investments in 150 companies a year to develop and scale its founders’ ideas for positive change. + - Spartan Group: a leading blockchain and advisory firm building a world where the entrepreneurial culture flourishes through direct access to top-tier strategic and financial advice and capital. + +- 31 March 2022 - Series A Funding Round: Amount Raised: $32,000,000. Some of the investors and supporters: + - 0xVentures: a VC comprised of users and creators who deeply care about integrating with blockchains and their communities by acting as value-add investors. + - Blockchain Capital: a pioneering blockchain venture firm with 8 years of experience investing in the space. + - Coinbase Ventures: the venture arm of prominent cryptocurrency exchange Coinbase, investing in companies building the open financial system. + - DFG: an investment and research team empowering blockchain and Web 3.0. + - Figment VC: the venture firm of Figment (a platform that creates and runs DeFi infrastructure) with investments in proof-of-stake networks. + - Fundamental Labs: an offshoot of CTH Group dedicated to supporting the most promising entrepreneurs to accelerate fundamental innovations, mass adoption of blockchain technology, and creating value for a better digital society. + - GSR: a crypto market maker and ecosystem partner using a suite of trading services to help manage risk and build dynamic partnerships that can rapidly flex and grow. + - Ignite (formerly Tendermint) Ventures: the venture arm of Ignite/Tendermint (a feature-packed tool to accelerate blockchain development). + - Jump Capital: an investor and partner using a thesis-driven approach to support scalable software opportunities in fintech, crypto, IT, and data infrastructure. + - LongHash Ventures: a user-owned, transparent, permissionless venture firm empowering founders to build in Web 3. + - New Form Capital: an early-stage VC fund focused on FinTech and blockchain aiming to advance the economic networks of the future. + - NGC Ventures: a venture capital firm that invests in inspiring projects related to blockchain, known for its early support of leaders like Polkadot and Solana. + - Polytope Capital: a group of blockchain engineers on a mission to bring blockchain platforms to the masses via financing the future of the internet and providing additional support. + - SOSV: a global venture capital firm providing multi-stage investments in 150 companies a year to develop and scale its founders’ ideas for positive change. + - Spartan Group: a leading blockchain and advisory firm building a world where the entrepreneurial culture flourishes through direct access to top-tier strategic and financial advice and capital. + - Yunt Capital: a group of partners and investors redefining early-stage investment and advisement in the Crypto space. + +- 18 Feb 2022 - Brainjar, the founder of CF, got doxxed, which brought things about his life as a college student into the media. All of that was fully resolved in the past and was also discussed with investors, who agreed to continue their support. After this event, he started to appear publicly as well. + +- 01 July 2022 - Composable Unchained hosted in Berlin was our first conference, and was a massive success. + +## Welcome! + +Feel free to discuss your thoughts with me (@kaiserkarel), and ask any questions that you might have. Make sure to leave some feedback on the onboarding course. + +Welcome to Composable! \ No newline at end of file diff --git a/docs/docs/internal/onboarding/README.md b/docs/docs/internal/onboarding/README.md new file mode 100644 index 0000000..38c0c6b --- /dev/null +++ b/docs/docs/internal/onboarding/README.md @@ -0,0 +1,44 @@ +# ONBOARDING + +Here you'll find topics to introduce you to many technical blockchain concepts. You'll also find some useful links in case you are already familiar with blockchain and cryptocurrencies. + +## Expectations + +If you're being onboarded into the team of Composable finance, +we expect you to have a good understanding of the following topics after finishing your onboarding: + +- Consensus and blockchain +- Smart contracts +- Bridging and cross-chain +- Cryptoassets (erc20, erc721, erc1155, cw20, native assets, LP tokens and more) +- Automated market makers (AMMs) +- Decentralized lending protocols. +- Polkadot (Composable, Acala, Moonbeam) +- Cosmos +- NEAR +- IBC +- XCVM (our own protocol) + +Some of the other stuff you'll be learning, but not necessarily in your first week, include: + +- Zero-knowledge proofs. +- Layer 2 scaling solutions + +Depending on your role, the expected level of knowledge will differ. For our developers, we expect a solid understanding of the above concepts, including the mathematics, design tradeoffs, and underlying technology. However, we feel like everyone in Composable is building together towards a shared vision, and for that, you need to see where we came from, and where we are going. A strong foundation is needed to build a strong community and product. + +> *Note* +> DO NOT PANIC. We're here to help. + +If you're already familiar with blockchain and cryptocurrencies, each section will contain links to the original research as well as the state-of-the-art progress on each subject. Skip to that and become an expert. + +## Will I stop having to learn after my onboarding? + +Never. + +## Will I be learning about Composable specific technologies? + +Yes, although that is towards the end of your onboarding. Initially, these docs focus on the basics. + +## I don't work for Composable, but am a contributor/interested in crypto/passing by + +Feel free to have a look at all of our stuff, it's open-source for a reason. We accept contributions. Besides these crypto basics, make sure to check out our docs too. \ No newline at end of file diff --git a/docs/docs/internal/onboarding/references.md b/docs/docs/internal/onboarding/references.md new file mode 100644 index 0000000..e893f67 --- /dev/null +++ b/docs/docs/internal/onboarding/references.md @@ -0,0 +1,146 @@ +# References + +Below you'll find all content referenced in the onboarding basics. Feel free to explore the sources and content creators listed here if you want to deep dive into a topic. + + +## Consensus and Blockchain + +### Reading Materials +- [header data](https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch07.html) +- [linked list](https://www.geeksforgeeks.org/data-structures/linked-list/). +- [peer-to-peer networks](https://www.geeksforgeeks.org/what-is-p2ppeer-to-peer-process/) +- [hashing](https://www.educative.io/answers/what-is-hashing) +- [signatures](https://www.coinbase.com/cloud/discover/dev-foundations/digital-signatures#:~:text=Digital%20signatures%20are%20a%20fundamental,other%20users%20from%20spending%20them) +- [longest chain rule](https://learnmeabitcoin.com/technical/longest-chain#:~:text=The%20longest%20chain%20is%20what,on%20the%20same%20transaction%20history.) +- [finality](https://smithandcrown.com/glossary/transaction-finality-probabilisticdeterministic/) + +#### Further reading +- [Byzantine Finality Gadgets](https://research.web3.foundation/en/latest/polkadot/finality.html#grandpa-full-paper) +- [BABE](https://research.web3.foundation/en/latest/polkadot/block-production/Babe.html) +- [Bitcoin: A Peer-to-Peer Electronic Cash System](https://bitcoin.org/bitcoin.pdf) + +### Videos +- [![The Blockchain & Bitcoin - Computerphile](https://img.youtube.com/vi/qcuc3rgwZAE/maxresdefault.jpg)](https://youtu.be/qcuc3rgwZAE) +- [![Finality in Blockchain Consensus - by Alexis Gauba - Mechanism Labs & She256](https://img.youtube.com/vi/efyiPhZvqOA/maxresdefault.jpg)](https://youtu.be/efyiPhZvqOA) +- [![Ethereum 2.0: Proof of Stake vs Proof of Work | Vitalik Buterin and Lex Fridman](https://img.youtube.com/vi/3yrqBG-7EVE/maxresdefault.jpg)](https://youtu.be/3yrqBG-7EVE) +- [![Cardano's Proof of Stake Consensus Algorithm Explained | Charles Hoskinson and Lex Fridman](https://img.youtube.com/vi/Cj4dhHSJqDQ/maxresdefault.jpg)](https://youtu.be/Cj4dhHSJqDQ) + + +## Smart Contracts +--- +### Reading Materials +- [Vyper](https://vyper.readthedocs.io/en/stable/) +- [Fe](https://fe-lang.org/) + +#### Further Reading +- [ETHEREUM: A SECURE DECENTRALISED GENERALISED TRANSACTION LEDGER](https://ethereum.github.io/yellowpaper/paper.pdf) +- [CosmWasm/wasmvm Specification](https://github.com/CosmWasm/wasmvm/blob/main/spec/Specification.md) + +### Videos +- [![Avoid the Middle-Man (Smart Contracts) - Computerphile](https://img.youtube.com/vi/csS1mZFuNSY/maxresdefault.jpg)](https://youtu.be/csS1mZFuNSY) +- [![How does WebAssembly work?](https://img.youtube.com/vi/zcADuXro-GQ/maxresdefault.jpg)](https://youtu.be/zcADuXro-GQ) +- [dapps](https://www.youtube.com/watch?v=KkZ6iYnSDRw). + + +## Bridging and Crosschain +--- +### Reading Materials +- [coinmarketcap](https://coinmarketcap.com/) +- [What Are Blockchain Bridges And How Can We Classify Them?](https://blog.li.fi/what-are-blockchain-bridges-and-how-can-we-classify-them-560dc6ec05fa) + +#### Further Reading +- [BEEFY](https://github.com/paritytech/grandpa-bridge-gadget/blob/master/docs/beefy.md) +- [Nomad](https://docs.nomad.xyz/) +- [Polkadot - Learn Bridges (good for beginners)](https://wiki.polkadot.network/docs/learn-bridges) + + +## Digital Assets +--- +### Reading Materials +- [How Liquidity Provider (LP) Tokens Work](https://www.gemini.com/cryptopedia/liquidity-provider-amm-tokens#section-lp-tokens-and-crypto-liquidity-providers) +- [Non-fungible tokens (NFT)](https://ethereum.org/en/nft/) + +#### Further Reading +- [erc-20](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) +- [erc-721](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/) +- [cw20](https://docs.rs/crate/cw20/0.2.0) + +### Videos +[![erc-20 tokens - Simply Explained](https://img.youtube.com/vi/cqZhNzZoMh8/maxresdefault.jpg)](https://youtu.be/cqZhNzZoMh8) + + +## Automated Market Makers +--- +### Reading Materials +- [Order Book](https://www.investopedia.com/terms/o/order-book.asp) +- [Spread](https://www.investopedia.com/terms/s/spread.asp) +- [bancor](https://research.thetie.io/bancor-history/) + +#### Further Reading +- [Uniswap v2 Core](https://uniswap.org/whitepaper.pdf) +- [Uniswap v3 Core](https://uniswap.org/whitepaper-v3.pdf) + +### Videos +- [![What is a Market Maker and How do They Make Money?](https://img.youtube.com/vi/-zTHKcJEGe8/maxresdefault.jpg)](https://youtu.be/-zTHKcJEGe8) +- [![What is an Automated Market Maker? (Liquidity Pool Algorithm)](https://img.youtube.com/vi/1PbZMudPP5E/maxresdefault.jpg)](https://youtu.be/1PbZMudPP5E) +- [![Curve - Math | DeFi](https://img.youtube.com/vi/GuD3jkPgPgU/maxresdefault.jpg)](https://youtu.be/GuD3jkPgPgU) + + +## Decentralized Lending +--- +### Reading Materials +- [A deep dive into leverages in DeFi Borrowing, Margin Trading, Perpetuals, Leveraged tokens, and Options](https://medium.com/phoenix-finance/a-deep-dive-into-leverages-in-defi-borrowing-margin-trading-leveraged-tokens-perpetuals-ed9019bd6833#:~:text=What%20is%20leverage%3F,potential%20return%20of%20an%20investment.) +- [Confronting the Hazards of Rising Leverage](https://blogs.imf.org/2021/03/29/confronting-the-hazards-of-rising-leverage/) + +#### Further Reading +- [Euler Whitepaper](https://docs.euler.finance/getting-started/white-paper) + +### Videos +- [![Lending And Borrowing In DEFI Explained - Aave, Compound](https://img.youtube.com/vi/aTp9er6S73M/maxresdefault.jpg)](https://youtu.be/aTp9er6S73M) + + +## Polkadot +--- +### Reading Materials +- [What is Polkadot? A Brief Introduction](https://polkadot.network/blog/what-is-polkadot-a-brief-introduction/) +- [Polkadot Wiki](https://wiki.polkadot.network/docs/learn-accounts) +- [Moonbeam Wiki](https://docs.moonbeam.network/builders/) + +#### Further Reading +- [Polkadot Wiki - Advanced Section](https://wiki.polkadot.network/docs/learn-availability) + +### Videos +- [![What is Polkadot? - Video](https://img.youtube.com/vi/BQ60bTU1bPg/maxresdefault.jpg)](https://youtu.be/BQ60bTU1bPg) + +## Cosmos +--- +### Reading Materials + +#### Further Reading +- [Tendermint: Consensus without Mining](https://tendermint.com/static/docs/tendermint.pdf) +- [Osmosis Medium](https://medium.com/osmosis/vision-for-osmosis-e68e796ff1c2) + +### Videos +- [![Cosmos blockchain (ATOM) explained by lead researcher Sunny Aggarwal – Deep Dive](https://img.youtube.com/vi/IzWpZ1fEcsY/maxresdefault.jpg)](https://youtu.be/IzWpZ1fEcsY) + +## NEAR +--- +### Reading Materials + +#### Further Reading +- [Sharding Design: Nightshade](https://near.org/papers/nightshade/#introduction) + +### Videos +- [![Alexander Skidanov Presents Challenges in Designing Shared Blockchain Protocols at Web3 Summit 2019](https://img.youtube.com/vi/fWig0S7cjO0/maxresdefault.jpg)](https://youtu.be/fWig0S7cjO0) + +## IBC +--- +### Reading Materials + + +#### Further Reading +- [IBC](https://ibcprotocol.org/) +- [XCMP](https://research.web3.foundation/en/latest/polkadot/XCMP.html): Polkadot's competitor. + +### Videos +- [![IBC Explained to Cosmonauts Ep. 1](https://img.youtube.com/vi/dYuTYykRhH4/maxresdefault.jpg)](https://youtu.be/dYuTYykRhH4) diff --git a/docs/docs/internal/xc/trap.md b/docs/docs/internal/xc/trap.md new file mode 100644 index 0000000..3f0d89a --- /dev/null +++ b/docs/docs/internal/xc/trap.md @@ -0,0 +1,79 @@ +--- +title: XCM transfers token loss +--- +# Overview + +This document describes how a user may lose his tokens during XCM transfers. + +Reader should have grasped high level [XCM(P) concepts](./awesome-xcmp.md) before. + +As of now, it is about handling `lost` assets on our parachain. + +Please refer to guides of other chains on what they consider to be 'lost' restoration. + +This document does not describe a token loss when an XCM message does not reach our parachain XCM message queue. + + +## User provided no fee to pay + +[Talk to Parity](https://github.com/paritytech/polkadot/issues/2702) + +## Lost locations + +When an XCM message arrives, it may bring some tokens within. + +In bad cases token can end up in the: +- `pallet-xcm` trap +- `unknownTokens pallet` +- treasury +- in indexer logs off-chain + +### When assets get into `pallet-xcm` trap? + +Each XCM message is stateful. The normal state is assets in Holder. + +For example, +1. Message which does `WithdrawAssets` and `BuyExecution` +2. Execution consumes `BuyExecution` amount which is less than `WithdrawAssets` +3. There is no final `DepositAssets` + +Usually happens because of badly formed XCM messages which ordinary users do not send. + +Technical collective or Root transfer amount to valid account back. + + +### When assets get into unknownTokens? + +In case if XCM channel is opened but assets are not registered. + +For example, +- Message transfers `(1, parachain(1000), pallet(42), id(32))`. +- It will appear in the `treasury` account per location. + +Technical collective or Root transfer amount to valid account back. + +This can happens because of bad formed XCM message or misconfiguration of XCM(or lack of it for specific chains/assets). + +[**Currently tokens trapped only if fee token is known (so please send 2 tokens)**](https://github.com/paritytech/polkadot/issues/2702) + +### When do assets end up in `treasury`? + +When `BuyExecution` command is not enough to pay fees or `DepositAssets` is not enough for ED of a new account. + +The sender must increase the fee or deposit. In XCM v4, fees will be discoverable. + +### When assets appear in indexer logs off the chain? + +Hard to imagine or reproduce such a scenario. That can happen in case of XCMP infrastructure failure. + + +### Getting tokens back in case sent to self + +Create remark with event on sender chain from same wallet used to send first time. +If original sender wallet will not be same as remark sender, restoration is impossible. + +Remark must contain link to explorer reference to transaction used to send and textual request to transfer tokens back to sender from that transactions. + +### Sent via PD.JS + +Create Gov voting to send tokens back, attach remark. \ No newline at end of file diff --git a/docs/docs/intro.md b/docs/docs/intro.md new file mode 100644 index 0000000..177b03c --- /dev/null +++ b/docs/docs/intro.md @@ -0,0 +1,89 @@ +--- +title: Picasso – The Cross-Ecosystem IBC & Restaking Hub +hide_table_of_contents: true +slug: / +--- + + + diff --git a/docs/docs/networks/composable/composable-council.md b/docs/docs/networks/composable/composable-council.md new file mode 100644 index 0000000..4a0bf88 --- /dev/null +++ b/docs/docs/networks/composable/composable-council.md @@ -0,0 +1,60 @@ +# Composable Parachain's Governance + +Composable’s Polkadot parachain will ultimately become completely decentralized and democratic after the TGE of LAYR, its native token. This requires a sufficient user base, so in the initial stages of parachain deployment, the Composable parachain will operate under an OpenGov structure lead by the Composable Council and Technical Committee. + +## Composable OpenGov + +Similar to phase 1 of OpenGov on Picasso, members of the Council and Tech Committee on Composable will hold a GOV token to interact with Composable governance. + +The following tables outline the governance procedures and parameters related to the Governance tracks. + +| Support Threshold | Whitelist Track Time (Passing) | Root Track Time (Passing) | +|-------------------|--------------------------|----------------------| +| 10% | 12 hours 0 minutes | 5 days 14 hours | +| 20% | 3 hours 20 minutes | 4 days 4 hours | +| 30% | 1 hour 15 minutes | 2 days 18 hours | + +With X % of support, Referenda can pass after Y duration (time periods in the table) since the beginning of referenda depending on whethere the approval rate is above the approval curve. + + + + +| Track Type | Confirm Period | Decision Period (Voting) | +|-----------------------|-------------------|--------------------------| +| Whitelist Track | 30 minutes | 4 days | +| Sudo Track | 1 day | 7 days | + + +Any member from the two collectives is allowed to submit a referenda.To cancel a specific referendum, you need a 1/3 approval from the Technical Committee. To Kill a referendum, 1/2 approval from the Council is necessary, particularly when the referendum is deemed malicious. + +Regarding the whitelisted track, if you want to include the hash of a proposal, you must obtain either 1/3 approval from the Technical Committee or 1/3 approval from the Council. This is the operational procedure for the whitelisted track. If a proposal passes but its hash isn't added to the whitelist, the proposal will fail to execute. +## Governance Collectives +### Composable Council + +Composable’s Polkadot parachain governance is carried out via OpenGov processes lead by the Council and Technical Committee. Once core pallets are onboarded onto the parachain and the LAYR token has gone through the TGE, the netowrk will be governed by the community. + +The on-chain Composable Council comprises 11 members including senior Composable team members and Composable supporters. Council members are also responsible for controlling the Composable parachain’s multi-sig wallets. + +Composable Council members are as follows: + +- Henry Love, Executive Director of Composable Foundation +- 0xBrainJar, Composable Founder & Research Director +- Blas Rodriguez Irizar, Composable Co-Founder & CTO +- Joe DeTommasso, Composable Head of Governance & Strategy +- Miguel Santefé, Composable Co-Founder & Head of Design +- Joon W., MilkyWay Core Contributor +- Jafar Azam, Composable Devrel +- Jesse Abramowitz, Entropy Lead Software and Protocol Engineer +- Will Pankiewicz, Parity Master of Validators +- Tamara Frankel, D1 Ventures Founding Partner +- James Wo, Digital Finance Group (DFG) Founder & Chairman + +The Council will act to protect and support the functionality of the Composable parachain. + +### Technical Committee + +The members of the Technical Committee is initially composed of Composable Finance developers and agreed upon by the Council. The role of the Technical Committee includes approval of the Whitelist track for upgrades, integrations, ensuring the technical stability and critical safety measures of the parachain. \ No newline at end of file diff --git a/docs/docs/networks/composable/composable-crowdloan.md b/docs/docs/networks/composable/composable-crowdloan.md new file mode 100644 index 0000000..f31455d --- /dev/null +++ b/docs/docs/networks/composable/composable-crowdloan.md @@ -0,0 +1,37 @@ +# The Composable Crowdloan + +Our crowdloan on Polkadot was critical in allowing us to successfully obtain the 8th Polkadot parachain slot during the +7th round of auctions of these parachains. Over 9 thousand users participated in our crowdloan, depositing a total of +6,075,485 DOT (a value of over $163 million at the time). + +This crowdloan was available on our[ app](https://crowdloan.composable.finance/). Users were able to stake stablecoins +or DOT, earn an APY on their stakes, and support the ever-growing Composable ecosystem. + + +## Rewards + +See a breakdown of our early bird incentives for the initial 12% allocated to crowdloan stakers: + + + +* 5% bonus to those who staked in the first 24 hours +* 5% bonus to those who previously contributed KSM and stablecoins to the Picasso crowdloan stakers. +* 10% bonus to stakers in the first three days of opening the crowdloan +* 20% bonus for those who refer a total of 1000 DOT using our referral codes + +Additionally, +[we announced an increase](https://composablefi.medium.com/christmas-comes-early-for-crowdloan-contributors-30-increase-in-rewards-ffc11c911af7) +in the rewards for Composable crowdloan stakers. These added rewards come on top of the above early bird incentives. +We ended up unlocking additional rewards and allocating 16% of LAYR's token supply for the crowdloan. + +## DOT Purchase Log + +This page catalogues all the stablecoin conversions to DOT via TPS (the OTC desk of 3AC ) and contributed to the +crowdloan for the Composable Parachain. You can find the purchase logs corresponding to the Ethereum address for stablecoin contributors on our [Github](https://github.com/ComposableFi/composable/blob/main/docs/docs/networks/composable/crowdloan-contributors/LAYR-stables-logs.csv). + + +| Date | Stablecoins | DOT purchase price | +| ---------- | -------------- | ------------------ | +| 12/01/2022 | 252795.77 DAI | 27.1993 | +| 12/01/2022 | 157807.4 USDT | 27.1993 | +| 12/01/2022 | 48129.881 USDT | 27.1993 | \ No newline at end of file diff --git a/docs/docs/networks/composable/crowdloan-contributors/LAYR-stables-logs.csv b/docs/docs/networks/composable/crowdloan-contributors/LAYR-stables-logs.csv new file mode 100644 index 0000000..30f45c7 --- /dev/null +++ b/docs/docs/networks/composable/crowdloan-contributors/LAYR-stables-logs.csv @@ -0,0 +1,118 @@ +Contribution Address,STABLES Contribution,DOT EQUIV AT OTC TRADES,TokenSymbol +0x810c920f611456916bd9a9db37dbfea24987a488,"10,000",367.6565206,USDT +0x810c920f611456916bd9a9db37dbfea24987a488,"21,250",781.2701062,USDC +0x18054743197d5de28ec96d60429372391c8b9dae,213.84,7.861967036,USDT +0x33da9340402a97398d3c47b04031eac169674419,"7,500",275.7423904,USDT +0x9362680b95a295fff75d2e0753c3d3dac2787831,"6,500",238.9767384,USDC +0x7bb7e752ce21a46c85586f48e18175027c0ff889,"1,300",47.79534767,USDC +0xb941f9b7566e7108332a9ec187d222a1cc05e422,"20,000",735.3130411,USDC +0xb941f9b7566e7108332a9ec187d222a1cc05e422,"30,000",1102.969562,USDC +0xc89d39b810703dadec3e30d9fa81f1c686ba8fbb,"2,080",76.47255628,USDT +0xe0b719276ef8caa36c00ba3ac7b46bdbcb254c45,"3,851.82",141.614659,DAI +0xda03bca6e7e6017739d0535dd38e2553067d223a,3,0.1102969562,USDC +0x26cfa7371b705f6193c952ac061eaa20926b8b3f,"7,661.35",281.674455,DAI +0x3679d746dc4175d440d4166fe318775e551ca195,500,18.38282603,USDC +0x66d046521f6c91aa8432021a16d0f77fcc65436a,30,1.102969562,DAI +0x38910403c3e3eaddcc771190ce154842f219db10,"1,026.80",37.75097153,DAI +0xd455712e43582134f101a0c686d26548b5438a3b,"10,000",367.6565206,USDC +0x5771e621a795126f1146953b67443b76f03f16fe,129.675,4.767585931,USDC +0x43ac854fc562e27e103f0ea9fd835ff832139dfb,500,18.38282603,USDC +0x53aa927be0d3d0b57d8825d6f7098dba8b6bcb52,140,5.147191288,USDT +0xe48c32f1c291f957bd086c92ca2c9990adc0c148,"1,038.37",38.17623696,USDC +0xb4b969a9bb156873da5840f5fbf7626602e2cda1,"3,226.26",118.6155526,USDC +0x14eecf2f25d695d29596732f7523b5e1274660d9,"1,500",55.14847809,USDC +0x1b4b2372462b391006fac69f09066ae8504d75ec,"1,500",55.14847809,USDT +0xcbe33f591c334507b698de21e9b6eecb1b73e7ec,"7,500",275.7423904,USDC +0x21f5f331696f4e20f38a7ecb7b9589b74b3447b3,523.15,19.23395087,USDT +0x79c1134a1dfdf7e0d58e58cafc84a514991372e6,"23,073.74",848.3210357,DAI +0x3afd89fa00827c5195265d537a5a29172cee5b3a,500,18.38282603,USDT +0xe045821a556d73707a219c0cf4212b1e8cad4ff0,261.55,9.616056296,USDT +0x9fa26008fe5769b23682e9d8d5d7968bbb91c01a,"2,022",74.34014846,USDC +0x187b1ad9ba9179060d02b9ac0f4ba74757f519d2,"1,000",36.76565206,USDT +0x6f4dcd9ed452162e21d769e110dfd0a5baaa300f,500,18.38282603,USDT +0x8d3e7f6ca6404d2575ac20215f60b74c0c1b210c,101,3.713330858,USDT +0xcb114805b901f7a9c38d5675272ef26459a7d805,"10,000",367.6565206,USDC +0x818de034fd2d32238c05a636f687f17e46e9a62d,368.32,13.54152497,USDT +0xea67521ba195bf490a5664497fd7b6f5bc0685c8,30,1.102969562,USDC +0x0c593dd4642da8e7500abfe868a064b7d220d69e,"2,300",84.56099973,USDC +0xfdf7f859807d1dc73873640759b2706822802529,863,31.72875773,USDC +0x5e3ac570d4b55c587a36a2832ac35a1ee60a0e03,500,18.38282603,USDT +0xd5abb1633cf3e784578ba65e3d8f4902b2e181a5,"2,796.22",102.8048328,USDT +0xff8afdac75954d212f309c090f502f10f6256034,10,0.3676565206,USDC +0xa785f483bd914a5c5ba06ab1ff12d8a8de1ea781,"1,030",37.86862162,USDC +0x3f0556c7aa60f3a0201538bb37ac0a771ab22ac2,358.249231,13.17126658,USDT +0x4c59cea94ee8b05bd851af1bf9d243ba585e2962,10,0.3676565206,USDC +0x19eff04ddeea89d0762c80e5d3c9369e00a9fce4,"3,003.63",110.4305599,USDC +0x14f3aa982b2761188661be9744556fcc552f6b99,"2,000",73.53130411,USDC +0x8357063c3ec4190a6cbb3500b2650faf7da14213,300,11.02969562,USDC +0x468d1ef7a1204d592537dab35794aac640c97505,"1,000",36.76565206,DAI +0xeccea248210854d223c71814e4b9f5d1f1228ab6,500,18.38282603,DAI +0xeccea248210854d223c71814e4b9f5d1f1228ab6,500,18.38282603,DAI +0x6d94be0093b2318c1e3e5f3293216e60a7d906a2,275,10.11055432,USDT +0x5defe4f60965528030ee48bba305ed017ab84998,20,0.7353130411,USDC +0x0d734a787dfbadf4916b858d939aae0a9eeef4e2,"10,090.54",370.9851498,USDT +0x597c1ab2f0dc3b5fa6b1fbcd08c65f6e0e60c5c9,"20,578.67",756.5881657,USDC +0x197305c1f2266dfcfffe52dea4b2b6ed2ec7d3b7,"2,000",73.53130411,USDC +0xed0bd7f319cd03539cbd3b5c592cae91a349dbae,"14,524.07",533.9868689,USDC +0xf5137a7658d2253035542fb32f5b41353bf85c37,"2,500",91.91413014,USDC +0xee61b8fc63f9b0d4a212ac08fde361a4b43aaa13,50,1.838282603,DAI +0xa3d1dff544a1f039bcf1480a625b21b3d1ea0a2a,37.967727,1.39590824,USDT +0x8e2f7d5aaae5abbd5052acb74019b9b11cb74349,630.682018,23.18743563,USDC +0x08650d08ed7659ac18936f6e4ec6936cdb032dc9,"2,405.15",88.42702838,USDT +0x1b2257148bad3936c72854d9c709bd558ba0f5cd,"4,875.84",179.2634585,USDT +0x602901433ff21cbc7cb849f60a1bb92144a7c875,"1,000",36.76565206,USDC +0xeac87e08cde36ae9190d6e839256f1d56fff7161,116,4.264815639,USDT +0x123bcdffc5cc7fdd30a9a2fcd99d4897a6bf41ae,923.280706,33.94501719,USDC +0x8d124e465110559d0a37bd722de722fff10fca84,250,9.191413014,USDC +0x55f3be904e3742018515498e42a74c71bb94f4bc,650,23.89767384,USDT +0x7bcd6813c782fef10795493604f5a1da761b3f1b,"100,000",3676.565206,USDT +0x1af36325e7745cb77afad9f40c831b26d9f0324a,50,1.838282603,USDC +0x594df8342f931edbad3361e1b1ebc52412c2a373,499.58,18.36738445,USDT +0x474e05530a7b1d798ff445f65512522a31733ac0,964,35.44208858,USDT +0x474e05530a7b1d798ff445f65512522a31733ac0,"6,036.92",221.9511444,USDT +0xf916719c7251e109cf3d1a977b6cad198b630c32,10,0.3676565206,USDT +0xcc6f9d24e393569b600f89144dcc8df6ba7f3264,50,1.838282603,DAI +0xcc6f9d24e393569b600f89144dcc8df6ba7f3264,309.32097,11.37238716,DAI +0x43ffbf682b61d1a8d7c3235eb724775c5d8479d1,"10,000",367.6565206,USDC +0xc4cd57b06c9f735abd6240a2683026e308f716c7,"5,000",183.8282603,DAI +0x45645c8edd908a5143a1c0132ffd93324a431c52,"4,400",161.7688691,USDC +0x8f3d7c5cf34d33df17627091ca16f129e91395f5,1.5,0.05514847809,USDC +0x8722f82d6eadab966003bcde58a24c26baa1040f,191.28,7.032533926,USDC +0x18054743197d5de28ec96d60429372391c8b9dae,186,6.838411283,USDT +0x40d0a4d62ae30b732d50641f51b8e4e2fb937c73,71.547968,2.630507697,USDT +0x5a4c25d949621e80f2fc143122368a2dbb8f9af2,"2,001.49",73.58601041,DAI +0x14a32f53ba00e207939d7842d45b1b3a105644b0,996.447053,36.63502564,USDT +0x8f3d7c5cf34d33df17627091ca16f129e91395f5,4,0.1470626082,USDC +0x3084c7d27a5499b8b244d4b27ab7870d64756dbe,23.099917,0.849283511,USDT +0x29ba9df564c47b18e3e1cc8abe649049d770b910,3.987219,0.1465927064,USDC +0x1c20551bb64441bbd423a04fc52c326fa9b37af3,100,3.676565206,DAI +0x1c20551bb64441bbd423a04fc52c326fa9b37af3,100,3.676565206,DAI +0x602901433ff21cbc7cb849f60a1bb92144a7c875,"1,209.38",44.46353447,USDC +0xb189d81ab34fc4948c0ae930124508f10f1f2a47,227,8.345803017,USDT +0xa535d4751d3f6a83df1fff7c787b9ac396e93a20,"1,047.14",38.49862147,USDC +0x39cc43b3068a208ae87042f927fb53b85586c654,51,1.875048255,USDC +0xc5b46513ea71294ba740e115f88b697c26d25c8b,"2,436.56",89.58175883,USDC +0x9ab9936f7a43226f5e2dcdcd3a909920aac134e7,75,2.757423904,DAI +0x805fe2c09a181b174f9f2bd27e8a1d56c3636579,"1,000",36.76565206,USDC +0x39336391ae3438212b6a25cf7c898826bad882f9,"2,301.27",84.60765009,USDC +0x81208d87db9a7ec9bf6b24d74989485bcc3aac81,"1,025.53",37.70412536,USDC +0x69cd8d3a9bac2955e7074c566ab70d0c51aa52c2,"22,398.86",823.5085563,USDC +0xb3e52264a1240285f0a908401e780b5681e1a3fe,281.435388,10.34715555,USDC +0x445bb876d03d5fb688f4dd36ef98d70943fa9608,"2,000",73.53130411,USDT +0x04f0591cdce1065dd215c9cce9c63bed638fe4d9,"1,842.89",67.75517403,USDC +0x805fe2c09a181b174f9f2bd27e8a1d56c3636579,"1,000",36.76565206,USDC +0x86632848578699919df3944fba490a614ed762a3,"20,000",735.3130411,USDC +0xe81f8367d8682ef38ac09acec6f4d4031f8b83bb,500,18.38282603,USDC +0xfc414daf238a3cbea641f9eed8959ca6adaee3fd,"1,000",36.76565206,USDC +0x53bfb55d7a66b4c4f02d6c0541736871022adc1b,"1,000",36.76565206,USDC +0xe492fba4b94e5012db2ae396282ccfc1e13efaab,300,11.02969562,USDC +0xa7ce3afb4ca212c93d2b11f085e88d529bdd98c9,"2,800.37",102.9572848,DAI +0xaa99bd457c7722f8907fde057b394eb2c6259bff,"1,250",45.95706507,USDC +0xd2d6ad06a6aab4f64fe32b0ee7bbf328a926af07,"8,332.42",306.3468683,USDC +0x9d87d0be638c83f006b209b91fc876047391617e,212.30814,7.805647204,USDC +0x56e25f7082d893f3c2d4f98b81e0a4381bcdd77b,"3,513.58",129.1791923,USDC +0x4ada5227e164a37a0183ec6ce93222232f6a00f1,"48,129.88",,DAI +0x4ada5227e164a37a0183ec6ce93222232f6a00f1,"157,807.42",,USDT +0x4ada5227e164a37a0183ec6ce93222232f6a00f1,"252,795.77",,USDC +0xac516cfc8a5170b4d003312adbade589f4e93ece,"50,000",1838.282603,USDC +0x6a3994212ae1e1726660cb5164641a23e008da21,311,11.43411779,DAI \ No newline at end of file diff --git a/docs/docs/networks/picasso/contributor-bonus.png b/docs/docs/networks/picasso/contributor-bonus.png new file mode 100644 index 0000000..6665657 --- /dev/null +++ b/docs/docs/networks/picasso/contributor-bonus.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92597bea8d619f4b258ec10f3957d7cd50d314daae6e8390eb8c3a154c3f16a8 +size 384949 diff --git a/docs/docs/networks/picasso/crowdloan-contributors/crowdloan-logs.csv b/docs/docs/networks/picasso/crowdloan-contributors/crowdloan-logs.csv new file mode 100644 index 0000000..a693175 --- /dev/null +++ b/docs/docs/networks/picasso/crowdloan-contributors/crowdloan-logs.csv @@ -0,0 +1,446 @@ +CONTRIBUTION ADDRESS,STABLES CONTRIBUTION,KSM PURCHASE PRICE,KSM EQUIVALENT,USD returned at KSM price $33.32 ,TokenSymbol +0x54a6c8f1b61b767a0bfafe8be302682af632f9b5,10,422.95,0.02364345667,0.788,USDC +0x0739bf8e3fdd8540dc5bb95f32d56b406e0c3e8e,250.82,422.95,0.5930221114,19.759,USDT +0x935914ad4a126647af35378384d70c741892a5fa,"7,747.64",422.95,18.31809369,610.359,USDC +0xa9cdf0542a1128c5caca1e81521a09aec8abe1a7,"10,000",422.95,23.64345667,787.800,DAI +0xfa7195ed3f14e375cf1d6649d1356c61a6dd70d5,"4,500",422.95,10.6395555,354.510,USDT +0xd455712e43582134f101a0c686d26548b5438a3b,"10,000",422.95,23.64345667,787.800,USDC +0x8d452c1f4bae385b13933c83ecff70d74229915f,"17,710.74",422.95,41.87432054,"1,395.252",USDC +0x6a82540ac63046d2f21a159c00d84b84d22bd2b6,"10,000",422.95,23.64345667,787.800,USDC +0xc7dbcc064d3284a9320f074617443508b60263cf,"4,256.58",422.95,10.06403085,335.334,DAI +0x56b61aade43b93cc81746acb105812e8e29d90e4,100,422.95,0.2364345667,7.878,USDC +0x04c4c25b28f504521b0adf53195ed8e86424ee8b,"24,245.90",422.95,57.32567786,"1,910.092",USDC +0x690a5e2dd1189d03f7f4b8fa64a15863be89b58d,"25,749.83",422.95,60.8814893,"2,028.571",USDT +0x0d60977a04b2a88e33df83f577316c9308a3e5ac,125,422.95,0.2955432084,9.847,USDT +0x6a85bf836a4a87ace31aa18d04761287555a178e,"26,000",422.95,61.47298735,"2,048.280",USDT +0x655f436c8e140a956ef2cae336e9151721718ad8,"25,000",422.95,59.10864168,"1,969.500",USDT +0xacc4c1ea473a576a52483aa72327340587d51925,"34,000",422.95,80.38775269,"2,678.520",USDC +0x2a123b4d2a86f71cf5ce5a4b12ad8ef7bb1ecf3d,"10,000",422.95,23.64345667,787.800,USDC +0x4553ed5d8d3731e629f67bd86abd021175f31848,"20,000",422.95,47.28691335,"1,575.600",USDC +0x01cd6fee9da9d3a544f3cf96e5bb73fe6b3f8f5a,"2,000",422.95,4.728691335,157.560,USDC +0xe7cafd2364754316b27dd54e66f1d6217843f100,"15,362.81",422.95,36.32298695,"1,210.282",USDT +0xe7cafd2364754316b27dd54e66f1d6217843f100,"23,394.75",422.95,55.31326832,"1,843.038",USDT +0xe92d80a90bc050a12f1c6fbe0e50e1b5a874b595,"10,000",422.95,23.64345667,787.800,USDC +0x01cd6fee9da9d3a544f3cf96e5bb73fe6b3f8f5a,"8,000",422.95,18.91476534,630.240,USDC +0xee0b0271918ba62b939437af831efc689365112b,500,422.95,1.182172834,39.390,USDC +0x5c9bfe30740263dfaef1224fe0fc80ed38c3fae2,673.874724,422.95,1.593272784,53.088,USDT +0x6d9a4667e14783282517d0e3ebecf29da808c6de,"30,000",422.95,70.93037002,"2,363.400",USDC +0x741b875253299a60942e1e7512a79bbbf9a747d7,292,422.95,0.6911035087,23.028,USDC +0x4a895764934ca19652d29630e6da7601a7efbe24,"33,301.81",422.95,78.73698629,"2,623.516",USDC +0x3a5adf48e9397b7289f35fc4db6676cf1bd1ff1d,494,422.95,1.16798676,38.917,USDT +0x37a16c68736dd9e245707fc68add79ccf2d3d9f9,"1,240",422.95,2.931788627,97.687,USDC +0x8091587f4dd6019196e89fe82a5ee40400fa8bf9,874.530442,422.95,2.067692261,68.896,USDC +0xddfbaf93ed5056ff616f6b56c56f901eda4b8bed,500,422.95,1.182172834,39.390,USDC +0xcb98b2c2c22fcacd12ebf92676172616bb37d43f,10.00,422.95,0.02364345667,0.788,USDC +0x1aa8d27c4ecc7e27f5527ef8d4fa112498789ba6,20.00,422.95,0.04728691335,1.576,USDC +0x6221b8772e58e7b114d7b8e4ee400bfa8bf57986,"50,000",422.95,118.2172834,"3,939.000",USDC +0xd56ee5ba5a52e15f309108bdd6247c69b4f624c2,"1,095.16",422.95,2.589336801,86.277,DAI +0xc784aa191b4562d4ae860b851461d7fac80acf33,400,422.95,0.9457382669,31.512,DAI +0x291e4ebb46c04d87c2fb10582b20e9258a1a83f8,"4,985",422.95,11.78626315,392.718,USDC +0xef456ba3b950bd29305e243ee0c2b368339fa3ab,"5,035.97",422.95,11.90676826,396.734,USDT +0x72f56f903ff4ebdf8e16977679649ef9e60a9598,293,422.95,0.6927532805,23.083,DAI +0x479d4678258ef00be5c5653e676418124e0dd065,"1,503.29",422.95,3.554290282,118.429,DAI +0xda566a55005d0fea14fec7c129cc32c1203cd51f,100.00,422.95,0.2364345667,7.878,USDC +0xe62229174b79e20209a964cd0552b99cb3e679b3,"9,774",422.95,23.10911455,769.996,USDT +0x0f8c20740d31d99484e625c8b5ea7bb5d18b122f,"1,042.77",422.95,2.465478832,82.150,USDT +0x1c051112075feaee33bcdbe0984c2bb0db53cf47,"300,000",422.95,709.3037002,"23,633.999",USDC +0xf681e0c98e54943d4dfa634fdadc17ed8a0e73dd,"2,000",422.95,4.728691335,157.560,USDC +0x96e3e323966713a1f56dbb5d5bfabb28b2e4b428,"5,000",418.72,11.94115399,397.879,USDT +0xe1a16274d48bfded0db57ff6534caa270ff1f637,20,418.72,0.04776461597,1.592,USDT +0xabca2289f0d03773e8b102248997e854aa36cd21,"4,109.73",418.72,9.814983471,327.035,USDC +0x65685914465e7f6e70624b8bbd1c66be0411923e,0,418.72,0.0007992835308,0.027,USDT +0x4a4b9a1553dadb071fe6a53bfe909ec08cb6ce35,178,418.72,0.4259760628,14.194,USDT +0x2d0cedaab10b02786d18023a07af0861fc2b079f,391.4477353,418.72,0.9348675375,31.150,DAI +0x2d0cedaab10b02786d18023a07af0861fc2b079f,323.738049,418.72,0.7731611793,25.762,USDT +0x6221b8772e58e7b114d7b8e4ee400bfa8bf57986,"50,000",418.72,119.4115399,"3,978.793",USDT +0x33da9340402a97398d3c47b04031eac169674419,"6,000",418.72,14.32938479,477.455,USDT +0xc6db1db370fb85b72610947e536c3e7599b42e72,"250,000",418.72,597.0576997,"19,893.963",USDC +0x54b55662901af57b31fb6b52af8175b652a5816e,"250,000",418.72,597.0576997,"19,893.963",USDC +0xa25a1e84befc5ff5ec562af1409dc8994e91eda7,147,418.72,0.3510983879,11.699,USDC +0xbe3a04a2683073422ea8db63011e70166f32438e,400,418.72,0.9552923194,31.830,USDC +0xcf304823d4d0d8822648a66adbf67bc57f6dd350,"7,193.59",418.72,17.17995423,572.436,USDC +0x75c6a16c453fb81a7c4e8721e3541934867b451c,"23,049.47",418.72,55.04746536,"1,834.182",USDC +0x115143bd6eb248bb9dee04bb96aed0637f7b5990,112,418.72,0.2674818494,8.912,USDT +0xb212f44df6970f25d80e1b91b7bf3e8a9ae93c2d,"12,023",418.72,28.71369889,956.740,USDC +0xb212f44df6970f25d80e1b91b7bf3e8a9ae93c2d,"10,000",418.72,23.88230799,795.759,USDC +0x97b102e00d88f02debfd6b1e4b901dd6931bb982,500,403.3,1.239771882,41.309,USDC +0xa4fdc2103b412cc142bd7715dabab06f08ef842b,"100,000",403.3,247.9543764,"8,261.840",USDC +0x672ad3627e357d3fd06472c316f6075f0dcae553,"9,980.45",403.3,24.74697292,824.569,USDT +0x542f5de6a607621fa3cf3083a445a249007ecf8e,"1,000",403.3,2.479543764,82.618,USDC +0x4f3936c02c5be0112747cc19311b5074bbed8475,467.865682,403.3,1.160093434,38.654,USDT +0x23b85204dfda7477371998727109fd89dcd3fcf1,"10,000",403.3,24.79543764,826.184,USDC +0x8e2160a024ca85810e5bafba77ea332800c2b231,"4,293.79",403.3,10.64664454,354.746,USDC +0x3afd89fa00827c5195265d537a5a29172cee5b3a,"1,750",403.3,4.339201587,144.582,USDT +0x7421698e7e607d399e5a5d7a727886d39a6432f3,"1,000",403.3,2.479543764,82.618,USDT +0x354029b0d5c417fed5f22522d3a1325b5397df8e,500,403.3,1.239771882,41.309,USDT +0xbbddd093d7c303eabedd9efc81d1c70f28dd17e8,"1,243,376.74",403.3,3083.007037,"102,725.794",USDC +0xe89798bf02929545eeeb4e26d2aa49b2decb894f,500,403.3,1.239771882,41.309,USDC +0xa911ccf5f6c7bd5fb25188d41a536890c3c8fae5,"10,000",336.24,29.74066143,990.959,USDC +0xbbddd093d7c303eabedd9efc81d1c70f28dd17e8,"270,549",336.24,804.630621,"26,810.292",USDC +0xe6c58978d013b757eb315bd6fd776bee2ee2b63c,"3,978",336.24,11.83083512,394.203,USDC +0x3247da930721fadf467dcfaa2e211fa309381371,275,336.24,0.8178681894,27.251,USDC +0x2549bb64f069a4c1f02e80a6707486b689f8faab,342.999497,336.24,1.020103191,33.990,USDT +0xcb114805b901f7a9c38d5675272ef26459a7d805,"10,000",336.24,29.74066143,990.959,USDC +0x2221ceace30dbae7e209888452d29e711cb5741d,421.70,336.24,1.254150678,41.788,USDC +0x2cb644a9299f95f427a6a32b9b8f37b0d6720043,"1,000",336.24,2.974066143,99.096,USDC +0xf84cc4ed45f00c98e1739fd31f7533cafc249544,"1,000",336.24,2.974066143,99.096,USDC +0x9349c8c39dd1d5a6271861ce6f9974b2b76142bc,970.42,336.24,2.886093267,96.165,USDC +0xeeff483b297016938400575043752a2d10d7579a,"30,000",336.24,89.2219843,"2,972.877",USDT +0x679b4172e1698579d562d1d8b4774968305b80b2,100.00,336.24,0.2974066143,9.910,USDC +0x951b6d50d07c39b0f97a7bb2f5c1e96f07a093d3,"10,000",336.24,29.74066143,990.959,USDC +0x2221ceace30dbae7e209888452d29e711cb5741d,"2,000",336.24,5.948132286,198.192,USDC +0x461e76a4fe9f27605d4097a646837c32f1ccc31c,"79,733.66",336.24,237.1331702,"7,901.277",USDC +0x11ea74a088d280c77147f78c54c05e372c8d1653,110,336.24,0.3271472758,10.901,USDC +0xb27226ce5f123f91514ae3955e5cfeb7b9754981,"1,000",336.24,2.974066143,99.096,USDC +0xcf63e1c31805254b6fb3ed7829206c2b2505e3a7,"30,000",336.24,89.2219843,"2,972.877",USDC +0x98dc82470cd96449eff7a21837644e8a0b83f40e,"8,702.15",336.24,25.88077016,862.347,USDC +0x3fd1ddf28f604cfe5fefa3adc38e38be2f7208d6,"60,262.66",336.24,179.2251428,"5,971.782",USDC +0x428700e86c104f4ee8139a69ecdca09e843f6297,"2,000",336.24,5.948132286,198.192,USDC +0x55aea4cd456478d56f598e06a0db228192d5eb84,"1,000",336.24,2.974066143,99.096,USDC +0x07deef8ad7d095b45de4a2b39ca7d9f8aa7d4022,10.00,336.24,0.02974008446,0.991,USDC +0x5e7ec7c027092fdf2ce384dd217c37f434f78a57,203,336.24,0.6046552068,20.147,DAI +0x289c23cd7cacafd4bfee6344ef376fa14f1bf42d,"5,000",336.24,14.87033072,495.479,USDC +0x467ba5774af9b509af745a0870fcfabb34acfcc8,201.72,336.24,0.5999284916,19.990,USDC +0x2549bb64f069a4c1f02e80a6707486b689f8faab,228.06,336.24,0.6782785689,22.600,USDT +0x7ae02e3871f38d0ba4a5192d97621ba52083fd06,"2,000",336.24,5.948132286,198.192,USDT +0xf3f49dd68586335ee3b01a86368043508c962c2a,7,336.24,0.01968039198,0.656,USDC +0x453721d8f20513944a0edc7230ec2709552f7e17,367.67,336.24,1.093464594,36.434,USDT +0x4dace5a18a8c9d4d5f0a01269df49e3cc2b52750,215,336.24,0.6394242208,21.306,USDC +0xb79786b11fa27df856ba58fb9f8f2cfa2f790522,400.00,336.24,1.189626457,39.638,DAI +0x22d7d38717474569ea63cbda595f4bbc0f1b640d,749,336.24,2.227674646,74.226,USDC +0x825c6a3983fef62030693e6ee90267747bcfbd8c,10,336.24,0.02974066143,0.991,DAI +0x0dec50b958d51fa29df7767e7298be834a897135,100,336.24,0.2974066143,9.910,USDC +0x42edc9e6a511bcc25503e1eff7ca77b635fb39ba,994.92079,336.24,2.958960237,98.593,USDC +0x07a1f6fc89223c5ebd4e4ddae89ac97629856a0f,"19,488.97",336.24,57.96149185,"1,931.277",USDC +0x8d5f05270da470e015b67ab5042bdbe2d2fefb48,197,336.24,0.5865168243,19.543,USDC +0xae7ae37d9d97abc1099995036f17701fd55cefe5,"1,958.86",336.24,5.825785667,194.115,DAI +0x2ff0ad27418a9d211cad22e0c11a1255abb5b3aa,10,338.64,0.02952988424,0.984,USDC +0xcbe33f591c334507b698de21e9b6eecb1b73e7ec,"10,000",338.64,29.52988424,983.936,USDC +0xb7d9945166e3da89ee4c0947230753d656d116a5,"1,000",338.64,2.952988424,98.394,USDC +0x70e29afdccdd6012e4785f60168e46a68f4b1a42,582.2109912,338.64,1.719262317,57.286,DAI +0x52d597334a853cfc0e5afde7e813ae5a7e965176,10,338.64,0.02952988424,0.984,USDC +0x52d597334a853cfc0e5afde7e813ae5a7e965176,10.00,338.64,0.02952988424,0.984,USDC +0xa1d3aebf32163c96ef9a5ebaa38981e04ea41365,"2,015.18",338.64,5.950799991,198.281,USDC +0x74b4b8c7cb9a594a6440965f982def10bb9570b9,672.95,338.64,1.987218923,66.214,USDC +0x09988e9aeb8c0b835619305abfe2ce68fea17722,119.62,338.64,0.3532376181,11.770,USDC +0x3465d93b84ed7557d42d84cb7c8999fc3db2113d,"5,000",338.64,14.76494212,491.968,USDC +0xb032f8989e7634c6f5660155662f6d8c14a22ef1,"1,786.43",338.64,5.275299749,175.773,USDC +0x231919835aa6c37092ba56200e477a39d31f25b2,316,338.64,0.9326172868,31.075,USDC +0x1d80767d1c03286843212076333d8252f2044b16,33,338.64,0.09699192828,3.232,DAI +0xadff0346501fbf58b193d1be7dbff16eb3be2754,118,338.64,0.3484526341,11.610,USDC +0x71a15ac12ee91bf7c83d08506f3a3588143898b5,101.00,338.64,0.2982518309,9.938,DAI +0xcf6c9980cdbbc3abdcc2ef896323fcdbb6159df1,10,338.64,0.02952988424,0.984,USDC +0x01ffcc7285866e5cee14c8e807cb2e8d5f61079f,"10,000",338.64,29.52988424,983.936,DAI +0x9325564ade7683706107685cf1993678b1163261,"1,500",338.64,4.429482636,147.590,USDC +0x65b8ee88cd729b00c574884f3404678bac479dab,"1,095.17",338.64,3.234022962,107.758,USDC +0x182a72b9dd205177ad9c31fafb824195cc69fbe5,1,338.64,0.002952988424,0.098,DAI +0x3cd5c6d4248bed58495ac94945a12face2b6f198,"1,095",338.64,3.233522325,107.741,USDC +0x6a815735471dbd0f85c51b115b728a247abe0cf4,5,338.64,0.01476494212,0.492,USDC +0xc08c7d598fb8026a8bbd698ee0d5a0199db880ff,"10,000",338.64,29.52988424,983.936,USDC +0x3bb3fc70627c457093159a9125dc836c40d9acd8,"5,000",338.64,14.76494212,491.968,USDC +0x7f7b32c998083d66de56602d75bc820b768c721b,"38,000",338.64,112.2135601,"3,738.956",USDC +0x0aa2ccbf88c4e03fb25e0e6a7219a7ae9764380a,"1,040",338.64,3.071107961,102.329,USDC +0x4a6b57491c6537abaad435ec4c48f7452817ac94,"47,098",338.64,139.0798488,"4,634.141",USDT +0xa3d3b7f97ab0aca3072a4161851db89bcb292f7f,500,338.64,1.476494212,49.197,DAI +0xecf74b69aad56feaf896b8d71b7b4303dce984da,"1,557.59",338.64,4.599549182,153.257,USDC +0xa1d3aebf32163c96ef9a5ebaa38981e04ea41365,"7,985",338.64,23.57961257,785.673,USDC +0xe41a11a4cb8a5a57d3bee3719c391435af29b978,"2,075.99",338.64,6.130385755,204.264,USDT +0x6eca078edc94b955d38f826cb46ba1407cda152d,"2,000",338.64,5.905976849,196.787,USDC +0x8090bb265b6d4f2cd21b8d154a47ea74260d3390,"1,005.06",338.64,2.967942668,98.892,USDT +0x5b06b44a66e5345661f6e4596f3a20da19eec1ee,"4,699.60",338.64,13.87785224,462.410,USDT +0x864a2b0f12b90a8dfd38f5e93ac6dc169dc0df5c,"1,000",338.64,2.952988424,98.394,USDC +0x813d2bde8609df7077e8944a20db4eb21bc3f04f,55,338.64,0.1624143633,5.412,USDT +0xf2e2c98164ac3f4931ce56e2721d44a00455e55f,"2,600",338.64,7.677769903,255.823,USDT +0x2fa2cf37b1a330389b1cf8b985f71ff76a980ac4,"1,000",338.64,2.952988424,98.394,DAI +0x415fce36e2dc12421f20b93dbad1dd68bd2f6db6,"5,936.70",338.64,17.53101715,584.133,USDC +0xa3b31b5292600d48172cfe3b588a8406a41f42b7,"5,000",338.64,14.76494212,491.968,USDC +0xf9263986be319e0444b600a73501ef7689cdb022,"20,068.97",338.64,59.2634361,"1,974.658",USDT +0x087de07b6e716185b8eb4f707818d4b6fe1bb794,800,338.64,2.362390739,78.715,USDT +0xa911ccf5f6c7bd5fb25188d41a536890c3c8fae5,"10,000",338.64,29.52988424,983.936,USDT +0xd56ee5ba5a52e15f309108bdd6247c69b4f624c2,"3,000",338.64,8.858965273,295.181,USDT +0x0c387030a5d3acdcde1a8ddaf26df31bbc1ce763,259.98,338.64,0.7677179305,25.580,USDC +0xcb726f13479963934e91b6f34b6e87ec69c21bb9,"5,000",338.64,14.76494212,491.968,USDT +0x197305c1f2266dfcfffe52dea4b2b6ed2ec7d3b7,"2,000",338.64,5.905976849,196.787,DAI +0x14eecf2f25d695d29596732f7523b5e1274660d9,"4,962.34",338.64,14.65372756,488.262,USDC +0xe225c1296fd172f7dab917421f87e8cfa18a9f20,"5,000",338.64,14.76494212,491.968,USDT +0x949da077579dee261b08f729b2f70a2c2c123495,"2,000",338.64,5.905976849,196.787,DAI +0xfcfd3601862c7f5c6d2f743e0d4c28211b45d704,300.00,338.64,0.8858965273,29.518,USDT +0xa3f2d88fb722d4f2a082edbf98354b81dc34829e,"3,904.26",338.64,11.52923266,384.154,USDC +0xa7a9e6137d2582fc8bddad6a6daeb8fb985396f2,"1,467.02",338.64,4.332102923,144.346,USDT +0x0da5709210763a8e4840add60672d2bff8e534f8,483.18,338.64,1.426824947,47.542,USDC +0x03db74df4ef8b29fe210abcf027c757747c14f00,"1,000",338.64,2.952988424,98.394,USDC +0xa3f2d88fb722d4f2a082edbf98354b81dc34829e,"3,582.15",338.64,10.57804074,352.460,USDC +0x62e560167c333fb919034d1bd3a286f3104b0d3f,700.00,338.64,2.067091897,68.876,DAI +0x79252d8f9019f08012881ce1d71af86879351fa8,501,338.64,1.479447201,49.295,USDC +0x1877a64a37778e58ac2646107ece72a24d07021d,3,338.64,0.009936871013,0.331,USDT +0x9bcc57d24f1d154f73c19e92c78ae87b86683cfe,"1,000",338.64,2.952988424,98.394,USDT +0x5280537847c00723a2e710349390bff199661cd3,"1,355.52",338.64,4.002836466,133.375,USDC +0xcab5b71ef27aa7427ec7a87d95ffc0e7e3434565,"1,000",338.64,2.952988424,98.394,USDC +0x8aa60881dde54833fd2e2186ee7a9661440c16a1,"1,025",338.64,3.026813135,100.853,USDC +0xcec771b3ab9204c4eb0b731111658e7c8ba539cf,500.00,338.64,1.476494212,49.197,USDC +0x92d7aac06d1f44e3153b1c89f6c3d918d906691c,"2,500",338.64,7.382471061,245.984,USDT +0xa92a40457e419c5ec245a646da09112cdcc6cfb6,40,338.64,0.118119537,3.936,USDC +0xd384f5d32ae6fd285a63f5232ff10f1696919233,5.99,338.64,0.01767574526,0.589,DAI +0x3c8cbd613857965267bcd4bdec7b794dd53969a0,"10,000",338.64,29.52988424,983.936,USDC +0xe57afd4faedae0862d95ab713a053df0136f6ba2,6.49,338.64,0.01916489487,0.639,DAI +0x8f701b0732750378c7773bb07324a90e221bdc30,"5,259.11",338.64,15.53008353,517.462,USDT +0xf7f1852a70278fe87e42a8aa1e93b94244b8b13a,"1,790",338.64,5.285849279,176.124,USDC +0x44be98130fb63eb3a068929ef3a102f15c2e6159,"1,500",338.64,4.429482636,147.590,USDC +0xa7a9e6137d2582fc8bddad6a6daeb8fb985396f2,"4,976",364.6,13.64783324,454.746,USDT +0x4cf8be01027ad66c4939181a5b8c5b2b281771f0,"1,000",364.6,2.742731761,91.388,USDC +0x1cf6012cabeeb53d84fb33c05e2c2b6a3478eef7,75.00,364.6,0.2057048821,6.854,USDC +0x142f5aa531b69b10b04a7a53cb9f318d894bd4a4,"17,266.33",364.6,47.35691953,"1,577.933",USDC +0x1bc3e2c44e0b2dabb1b06a1890273571825d3e03,388,364.6,1.064882795,35.482,USDC +0x1a60eb1065aea0d4b78ce2859b6977ac417d3aab,10,364.6,0.02742731761,0.914,USDC +0x248eec608eaba4a9552852d433d72354c7c797a9,"3,009.01",364.6,8.252895485,274.986,USDC +0x46ea2f0f383348d76ae5e64277f084ede90eea12,"1,200",364.6,3.291278113,109.665,USDC +0x849693d92facf44a5d729e5f894d5a3ebc51a4c8,"1,636.45",364.6,4.488353097,149.552,USDC +0xf4ca35df279677654515d41aca6bc75e79731a4b,"172,470.84",364.6,473.0412644,"15,761.735",USDC +0x9fa0a37f9d8f8b4cbbfdaf25c441167d19b2ed85,"18,225.46",364.6,49.98754152,"1,665.585",USDC +0x388b2d29e7919d45b1b8f6e88b8a13a392f97b40,"4,932.40",364.6,13.52825469,450.761,USDC +0x196eb61840ca3165a9940d6b078eea73480940a6,957.69,364.6,2.626689213,87.521,USDT +0x21e743cfeb7c1104c30254d575819a81cb0a8673,"3,000",364.6,8.228195283,274.163,USDC +0x9fa0a37f9d8f8b4cbbfdaf25c441167d19b2ed85,"11,775",364.6,32.29566648,"1,076.092",USDC +0xbbddd093d7c303eabedd9efc81d1c70f28dd17e8,"155,000",364.6,425.1234229,"14,165.112",USDC +0x01ffcc7285866e5cee14c8e807cb2e8d5f61079f,"5,000",358.87,13.93262184,464.235,DAI +0x9d3bea971d35027e5e1472a871f97e3b238f37a9,100,358.87,0.2786524368,9.285,DAI +0x5f2f6ce97c7e1cff7032ab46dd1c8b1dfa78dffe,"500,181.14",358.87,1393.766936,"46,440.314",USDC +0x8d520d016246f31fe7a676648f1fd5e55ec5562d,50.00,372.415,0.1342588242,4.474,USDC +0x8d520d016246f31fe7a676648f1fd5e55ec5562d,50.00,372.415,0.1342588242,4.474,DAI +0x8d520d016246f31fe7a676648f1fd5e55ec5562d,35,372.415,0.09398117691,3.131,USDT +0x1fd18bebcd1dde8be03429c31500a528cb9793ed,"55,000",372.415,147.6847066,"4,920.854",USDC +0x17d60e33385700247741d8a0c2db0d4ac28130d7,"1,000",372.415,2.685176483,89.470,USDC +0x4e4aa5af3212ee1374440c6f82797c462f90c8a3,957.273326,372.415,2.570447823,85.647,USDC +0x3f9594a4b4803e337a08e27195a1f4e1d70aadfe,500,372.415,1.342588242,44.735,USDT +0xa911ccf5f6c7bd5fb25188d41a536890c3c8fae5,"10,000",372.415,26.85176483,894.701,USDT +0x4a6b57491c6537abaad435ec4c48f7452817ac94,"1,000",372.415,2.685176483,89.470,USDC +0x78c3b4cec856668c57f6d3f08c90eb63a9a71380,210.00,372.415,0.5638870615,18.789,USDC +0x541d18545434932a5855535c1ea6b988bcd9dfc6,560.00,372.415,1.503698831,50.103,USDC +0x2e5745f3136e1023b7db402f2f20d59ece802f4a,49.93,372.415,0.1340799243,4.468,USDT +0x4c7af76438de653dcb7a0948208e48206cbfe7ce,"10,434.09",372.415,28.01738088,933.539,USDC +0x90e91f8e98d88fb6d2dac44c64d0c22af606c0a6,"2,200",372.415,5.907388263,196.834,USDC +0x231919835aa6c37092ba56200e477a39d31f25b2,"2,000",372.415,5.370352966,178.940,USDC +0x12c15fafa41d6d427f7d89a68b3d69bf94b9fe6a,"1,692.50",372.415,4.544661198,151.428,USDC +0xe24f1714203518c0972f9e81286e273b445980b5,"37,500",372.415,100.6941181,"3,355.128",USDT +0x2d6b114c77f3355f204c37f657c680157e85dfa5,"9,960",372.415,26.74435777,891.122,USDC +0x1bc8822b33a51e27b8bf1d7b51653c1ebea84aa3,300,372.415,0.805552945,26.841,USDC +0x2c3459fb7a2d3fdac8941cd7a5367c627f10fc6d,30.00,372.415,0.0805552945,2.684,USDT +0x33ff13345df3a650c0136cdafaf0ec190ce502d6,"5,001.99",372.415,13.43122351,447.528,USDC +0xb995f0daae04ab22071874770f3de8902978bc42,"1,288.22",372.415,3.459090813,115.257,USDT +0xfe4229f3d4cc851c94d2d13c74441426ea2e5bd4,700,372.415,1.879623538,62.629,USDT +0x50bd960d37efeb62989a93821aa886c6042f9df1,"10,000",372.415,26.85176483,894.701,USDC +0x31e0bd55b7d810141df3f708d6f27eedc2b8e4c0,478.78,372.415,1.285612185,42.837,USDC +0x903f4afc0963fb4ef3a37355492c40ac5ea582d4,"40,000.00",372.415,107.4070595,"3,578.803",USDC +0x10aeda815442c83aad7ba990aeace28ad5cfe8cc,970,372.415,2.604621189,86.786,USDT +0x0d60977a04b2a88e33df83f577316c9308a3e5ac,220.92,372.415,0.5932075024,19.766,USDT +0xe87945b5350f37e06039432337f417aabbfd4882,1.15,372.415,0.003087952956,0.103,DAI +0x8bc6b3fd67be8d0ad383b71e6f6b1fbafe0716e8,500,372.415,1.342588242,44.735,USDC +0x22390abaa52d4be608b4530dc1522adc01898c3a,"10,000",372.415,26.85176483,894.701,USDC +0xac2c6ac3cc453e1f62758b4f5a5f6a19acf7964f,"4,420",372.415,11.86848006,395.458,USDT +0x189c415968ea2f62f6430d5050df872221633340,"1,342.25",372.415,3.604170226,120.091,DAI +0x5812602b6427e3dae54df18188bd78e428ca9184,900,372.415,2.416658835,80.523,USDC +0x84bb8f4998527aaf4cf5633bb2743533310600bb,"10,000",372.415,26.85176483,894.701,USDT +0x38910403c3e3eaddcc771190ce154842f219db10,"2,000",372.415,5.370352966,178.940,USDC +0xfc0ac081405ad9b335d6a2d5a0812a4959ad4372,"6,000",372.415,16.1110589,536.820,DAI +0x2ef0782745b9890c2d1047cbd33be98e22ec35a2,"1,975",372.415,5.303223554,176.703,USDC +0x444e66a8dd6d8f3d7a370045f0f056a4377e4a59,831,372.415,2.232104561,74.374,DAI +0x5e812a00a2351810156f9b49d7554a7fb8c0ee26,500.00,372.415,1.342588242,44.735,USDT +0xa36299f53c37c6ddcd2c59f84ec9bba9025c3f5f,406,372.415,1.090181652,36.325,USDT +0x14ee81f2095197322229389ff92587623b2bec5c,"5,000",372.415,13.42588242,447.350,DAI +0x292c13392fafc0d16dc45586eb317a038dd94d36,975,372.415,2.618400577,87.245,USDT +0xa5025faba6e70b84f74e9b1113e5f7f4e7f4859f,"38,428.60",372.415,103.187573,"3,438.210",USDC +0x09e510498ae3fc6d06a0a24f85d988e413d0854d,330.05,372.415,0.8862525194,29.530,USDC +0x11a8a0335bdd466efc827301abf20f9869f55253,"1,000",372.415,2.685176483,89.470,USDC +0x340c02c07329fdf2f7aa1523c3c67c29ae35cdcf,779.36,372.415,2.092719144,69.729,USDT +0xafaf4434759c170929c95419b6b3105051eabe06,"3,959.06",372.415,10.63077284,354.217,USDT +0x201b5abfd44a8f9b75f0fe1bae74cdac7675e54b,"200,000",372.415,537.0352966,"17,894.016",USDC +0x8d4a9c9300d300b64e012430efcbb1f6f1fe6782,"2,500",383.23,6.523497638,217.363,USDC +0x2e6bbd0f771146ad702d63dbda859a47533e3003,"3,189",383.23,8.321373588,277.268,DAI +0x5899275c5ec1f45018eafeba5a9a7e59f0ed3bc7,"34,000",383.23,88.71956788,"2,956.136",USDT +0x5899275c5ec1f45018eafeba5a9a7e59f0ed3bc7,"1,000",383.23,2.609399055,86.945,USDT +0xedf7b675a2fe3c27efb263fb4c204a3f0fb17d46,"10,000",383.23,26.09399055,869.452,USDC +0xc5b46513ea71294ba740e115f88b697c26d25c8b,"6,000",383.23,15.65639433,521.671,USDC +0xd34eccaf180a75b56ce98d0c414d3fc03a820f58,"6,928.76",383.23,18.07990548,602.422,USDC +0xf486d56cce70c481b3455af901fcc4f03fee8107,"60,000",383.23,156.5639433,"5,216.711",USDC +0x0c1f2b70c3448220e9e8ab864c3b378dd81342ce,"1,368.26",383.23,3.570328985,118.963,USDC +0x5e03abc56a207c0894c7e79f4195f0695dea32df,"10,000",383.23,26.09399055,869.452,USDC +0x643430283b19fa5bd70a1138b495c2b43523cdd5,"50,000",383.23,130.4699528,"4,347.259",USDC +0x3ecd0359496f9a49a1b11eb50bb603c262ff4218,"3,457",383.23,9.020692535,300.569,USDC +0x3d37cfa2e89a04b3704bd64bc2c9ab9dcd448b9a,"34,911.55",383.23,91.09816477,"3,035.391",USDC +0x9ade31f7baabf784a94200abce297df859eb3350,"75,203.76",383.23,196.2366313,"6,538.605",USDC +0xaaf37a1b5f2a38fbb562f6383cf66a7ebe0b00ad,976.00,383.23,2.546773478,84.858,USDT +0x773d161310d07cafc6f767ca24f43e52163b9be6,"86,596.54",383.23,225.9649188,"7,529.151",USDC +0x773d161310d07cafc6f767ca24f43e52163b9be6,"13,237.17",383.23,34.54106647,"1,150.908",DAI +0x5a3c1249d03488f53bbc30b5a833a390372095ae,"9,885.42",383.23,25.79500708,859.490,USDC +0x01c9f4268beb4c049ac81e0a1d8e6970078601b1,390,383.23,1.017665632,33.909,USDT +0x3b7a7674a43936e9f0d4aa98bc73f990cd726029,"2,035.75",383.23,5.312072985,176.998,USDT +0xb3ee59b941b6c76e8d7bad0f6ca503cce0566632,"1,600",383.23,4.175038489,139.112,USDC +0xfa6aef4656862b2b4c24764522172784eff57390,"1,000",383.23,2.609399055,86.945,USDC +0x12d195e2585dbff7c75a9533c03f7fad60d42202,"1,495",383.23,3.901051588,129.983,USDT +0xe41a11a4cb8a5a57d3bee3719c391435af29b978,"4,449.70",383.23,11.61104833,386.880,DAI +0xf08d882ae658fbfcb6cb88b822182c3e05940aed,688.8982594,383.23,1.797610467,59.896,DAI +0x63f0a3660170a5c9cd4ca7b28b82f0011ffb37c4,"3,032.11",383.23,7.91198497,263.627,USDC +0x3f9594a4b4803e337a08e27195a1f4e1d70aadfe,56.818,383.23,0.1482608355,4.940,USDT +0x243e23c83135ca0fed2f9f5df9068de644929433,"5,000",383.23,13.04699528,434.726,USDC +0xef090f7e575d421c6b9da4e9da9776bee771caff,"1,000",383.23,2.609399055,86.945,USDC +0x18637e9c1f3bbf5d4492d541ce67dcf39f1609a2,100,383.23,0.2609399055,8.695,USDT +0xc59821cbf1a4590cf659e2ba74de9bbf7612e538,"53,454",383.23,139.4828171,"4,647.567",USDC +0x788f7a5eb84cf256de67d5629d146a9654356f8c,113,383.23,0.2948620933,9.825,USDC +0x75d228291f2670546549563569d25ab1840fa897,"2,000",383.23,5.218798111,173.890,USDT +0x99b476d2d2a1d13b81454a11c81ab8211b18902d,"5,000.00",383.23,13.04699535,434.726,USDT +0x649e6e22ac45129889eac16f2d97c233ef0c3ea0,600,383.23,1.565639433,52.167,USDC +0xa7b66856b34bc50b0d52944dd1697fe0f5702f64,"1,000",383.23,2.609399055,86.945,USDC +0x0e224d54a12d4934a036b671fa051e363b4521e4,"1,045.00",383.23,2.726822099,90.858,USDC +0x875a7dfc5749eacfc5f2725e717d7b17cd5492fa,"1,200",383.23,3.131278866,104.334,USDT +0x6ae03180afab253c939397fd6d9d3975cb372707,"1,000",383.23,2.609399055,86.945,USDT +0xac98d36783266bc4fbae14751c69aff811406932,900,383.23,2.34845915,78.251,USDC +0x20961aa837950d9c8761dd21c42c2ab41eba84b5,825.883282,383.23,2.155059056,71.807,USDC +0xbbddd093d7c303eabedd9efc81d1c70f28dd17e8,"323,163.31",413.99193,780.6029187,"26,009.689",USDC +0xa5e47ccf086cf986847a32b3402fce810bbc30be,"1,324.08",413.99193,3.198315445,106.568,USDC +0x1a247288c2c33701ec69d6e61db10f1d17f7a1a1,203.47288,413.99193,0.491489967,16.376,USDC +0x788f7a5eb84cf256de67d5629d146a9654356f8c,500,413.99193,1.207753011,40.242,USDC +0xc343b65ec11dfb5dbe0f1d3af4b1a201fbe7de9b,"4,976",413.99193,12.01955797,400.492,USDT +0x1a247288c2c33701ec69d6e61db10f1d17f7a1a1,51.13594,413.99193,0.123519171,4.116,USDC +0xc5d25184bfbb97b9811280e1113b1ba04320bedf,200.584228,413.99193,0.4845124107,16.144,USDC +0x597c1ab2f0dc3b5fa6b1fbcd08c65f6e0e60c5c9,"17,975",413.99193,43.41872075,"1,446.712",USDC +0x78810ef439d6e1066f65fde217ed7d4a9721d4b1,250,413.99193,0.6038765055,20.121,USDC +0xb8a9e7fb56122c60aca6a253a56f65a48297f811,"5,000",413.99193,12.07753011,402.423,USDT +0x9237f3faf9b03e5bd54eccdc24eed2b277807f24,407.953277,399.416,1.021374399,34.032,USDT +0x9258fbcddf8174c5b13264297fc8379d00d04115,"2,769.76",399.416,6.934512125,231.058,USDC +0xc9bac923dea801614cb7995079e72c1cc03e1264,"2,115.96",399.416,5.297631404,176.517,USDC +0x243e23c83135ca0fed2f9f5df9068de644929433,"5,000",399.416,12.51827668,417.109,USDC +0xc43b60da1d1c8e87ed9445621419d292b0b3435a,"1,000",399.416,2.503655337,83.422,USDT +0xdfcdbd6ea18a1fac82736d1206a76fe972e45d56,"2,765",399.416,6.922607006,230.661,USDC +0x9e8c646220613d68eaf2b947f46c2b4f52bf3f45,"2,068.04",399.416,5.177652948,172.519,USDC +0xf18bee08e1018650bf1eac20323c870b416119c6,888,399.416,2.223245939,74.079,USDT +0xc89d39b810703dadec3e30d9fa81f1c686ba8fbb,"1,200",399.416,3.004386404,100.106,USDT +0x655f436c8e140a956ef2cae336e9151721718ad8,"25,000",399.416,62.59138342,"2,085.545",USDC +0x44186ae312de783cddd6d01c22451d052ea57f43,"1,000",399.416,2.503655337,83.422,USDT +0xe839b2e436782ec0f52724e72b68d1c70cbc8f35,"10,000",399.416,25.03655337,834.218,USDT +0x44186ae312de783cddd6d01c22451d052ea57f43,"1,000",399.416,2.503655337,83.422,USDT +0xe839b2e436782ec0f52724e72b68d1c70cbc8f35,"40,000",399.416,100.1462135,"3,336.872",USDT +0xe5c7d7a1dc2e2b03cb72bf16e3c2efaeb51505a1,"1,100",399.416,2.75402087,91.764,USDC +0x44186ae312de783cddd6d01c22451d052ea57f43,140,399.416,0.3505117472,11.679,USDT +0x32cabd3b393c4ec30e569fdb112885354ab15064,"5,000",399.416,12.51827668,417.109,USDT +0xdcaeff45e1cb6a57245cfbd98704b20dfa0382c4,"3,928.39",399.416,9.835329093,327.713,USDT +0xf5e10b867a3daa0a2aa634d8d0d4a631103081c4,"2,808",399.416,7.030264186,234.248,USDC +0xc2778fb651d0030476522d9918330cd41aae3ae8,"4,000",399.416,10.01462135,333.687,USDT +0xe839b2e436782ec0f52724e72b68d1c70cbc8f35,"1,000",399.416,2.503655337,83.422,USDT +0x44186ae312de783cddd6d01c22451d052ea57f43,"1,000",399.416,2.503655337,83.422,USDT +0x45beacbb0e144718e17deac4dd810a7501244c89,"1,000",399.416,2.503655337,83.422,USDC +0x1b87b6ef6de51d272bd30493d0761d9a8de6b3d0,"1,000",399.416,2.503655337,83.422,USDC +0x92989eb906d40c6385c9982b08c5953cbf763ab2,"7,556.70",399.416,18.91937208,630.393,USDC +0x14d7428990f27f2120d0e383b366ede559518fc7,"1,975.03",399.416,4.944787082,164.760,USDT +0xa1d3aebf32163c96ef9a5ebaa38981e04ea41365,"3,978.92",399.416,9.96183563,331.928,USDC +0xf5e10b867a3daa0a2aa634d8d0d4a631103081c4,"9,990",399.416,25.01151681,833.384,USDC +0x0770d4bf1685b9b0a218a7b21f142f656d395830,"1,140",399.416,2.854167084,95.101,USDC +0xe839b2e436782ec0f52724e72b68d1c70cbc8f35,100,399.416,0.2503655337,8.342,USDT +0x44186ae312de783cddd6d01c22451d052ea57f43,100,399.416,0.2503655337,8.342,USDT +0x13f5e942c3957274e3b0a74a3798f454c45d5a1b,"29,052.20",399.416,72.73669114,"2,423.587",USDC +0x2443f245944e7333208b90b540a975da83893332,750,399.416,1.877741503,62.566,USDT +0x38910403c3e3eaddcc771190ce154842f219db10,988.122989,399.416,2.473919395,82.431,USDC +0x577502784edd9b0d84d08334c30d378975e8f5ac,"9,981.03",399.416,24.98906696,832.636,USDT +0x24b3d50cb883619d41d813f977842fe320cab49c,735.413225,399.416,1.841221246,61.349,USDT +0xa3f2d88fb722d4f2a082edbf98354b81dc34829e,"5,429.59",399.416,13.59382306,452.946,USDC +0xd581f0b4493f6f5177165dca75b64f0fba02b61f,"2,438.78",399.416,6.105864562,203.447,USDC +0x1efb3038de631cfce0c0a231952c6b90d5d9cfe5,"4,041.24",399.416,10.11788308,337.128,USDC +0x13f5e942c3957274e3b0a74a3798f454c45d5a1b,"58,476.01",399.416,146.4037821,"4,878.174",USDT +0x6546ab8a46fb2e6351612f9645ec890affd18453,"1,000",399.416,2.503655337,83.422,USDT +0xdc2bbe1ec9dd004350aac5f9166e7d69c6b150a2,"4,976",399.416,12.45818896,415.107,USDT +0x5a5acd588a5b705d0d84f04dcdd4b82fc1484600,"2,376",399.416,5.94868508,198.210,USDT +0x8a960bec930af48a14b54f921c83fd52b2abdc23,884.135268,399.416,2.213569982,73.756,USDT +0x191c5e248e29426385f2e6b739f263c60b95aff1,"1,000",399.416,2.503655337,83.422,USDC +0xdd75c52a9eaf6a7506018c999d0f0e3280974689,"83,272.44",399.416,208.4854786,"6,946.736",USDC +0xc4f1a2f245768fd8c491e24f43f3497e352f0aa8,"1,155.27",399.416,2.892386259,96.374,USDT +0x77777773b18ee36340d769059b3159af2699ec67,"5,555",399.416,13.9078054,463.408,DAI +0xf55b6d78f31b7c9666dd74eda7d15d3569a91f28,"9,960",399.416,24.93640715,830.881,USDT +0x9870d6ee51ae8a95c42c5fea7134438aa61d4647,"1,989.55",399.416,4.981155592,165.972,USDC +0x297946c26171008ba8c0e5642814b5fe6b842ab7,"50,000",399.416,125.1827668,"4,171.090",DAI +0x20ff6dbde4aba9ad6272b4972d09bfce99f40544,"1,005.54",399.416,2.517521982,83.884,USDT +0xd6e2d2486b4344fee0fa84a63d81c053df579dba,500,399.416,1.251827668,41.711,USDC +0xd19f4f7c9df8c6bd134840bbcb9063588b9b5054,10,399.416,0.02503655337,0.834,USDC +0x01cd6fee9da9d3a544f3cf96e5bb73fe6b3f8f5a,"16,000",399.416,40.05848539,"1,334.749",USDC +0x1384b1246f86070e188bff13bf9cb11937708790,"2,000",399.416,5.007310674,166.844,DAI +0xc9a3671558884e6ac67a4ce34a68ca534d39d71c,"3,128.13",399.416,7.831752867,260.954,USDC +0xb23324742c160df56696b1395db8354e408b0a0b,"3,108.92",399.416,7.783652135,259.351,USDC +0x2e60c16c0ca834dcb62990e6757ed9d31cb52db1,"2,007.53",399.416,5.026167855,167.472,USDC +0x918080371d1aaf5678725a84e2cbdebd080d0a76,"2,012.24",399.416,5.037960162,167.865,USDC +0x225c4cfc17d5ee7bf3e682396b12c0f6a7709d7d,"1,500",399.416,3.755483005,125.133,USDC +0xbdc4d451dcab410dca2699fce2f25cf20f7ab61d,"10,050.00",399.416,25.16174365,838.389,USDC +0x8d520d016246f31fe7a676648f1fd5e55ec5562d,15,399.416,0.03755483005,1.251,DAI +0xd96dc025c835f155534a33a15d24482b257c7652,150,399.416,0.3755483005,12.513,USDC +0xd96dc025c835f155534a33a15d24482b257c7652,25,399.416,0.06259138342,2.086,DAI +0xd96dc025c835f155534a33a15d24482b257c7652,25,399.416,0.06259138342,2.086,USDT +0x8d520d016246f31fe7a676648f1fd5e55ec5562d,50,399.416,0.1251827668,4.171,USDC +0xc03410624c083468d97df3c56f56033a8d111680,500,399.416,1.251827668,41.711,USDC +0x872b90923c604bc6d9afba57d170eda1f47ad565,"117,652.64",399.416,294.5616671,"9,814.795",USDC +0x3e95e93ace1d56792d3ed326b3f20d32f050fd9f,300,381.42076,0.7865329617,26.207,USDC +0x1ecf823c05f97c390d86deff57c03ade4575c380,"138,024.20",381.42076,361.8686117,"12,057.462",USDC +0xdb42d8479c693c91dc27be83abf47858ac211162,"1,030.82",381.42076,2.702571216,90.050,USDC +0x069a7f4ad699fe56b6524996414e8def025485bd,760,381.42076,1.99255017,66.392,DAI +0x0e5b233019b448f0379c2f1e712bffe9a52c4770,"10,000",381.42076,26.21776539,873.576,USDT +0x594fd875ad3f6efcf51a9af3b9603438d1b26cbc,"4,580.59",381.42076,12.00928301,400.149,USDT +0x3dcdbd9e2bc163089964cc74c97d39aa7e65d633,400,381.42076,1.048710616,34.943,USDT +0xa5747c711b7c08983e992dd7aeec2eebc6b713df,"5,525",381.42076,14.48531538,482.651,DAI +0xa2dd2be421e26ca8bb6e6b224fec6f96ae2596bf,565,381.42076,1.481303744,49.357,USDT +0xecfd89584e4b33e8eeaa0aacd08c36dfef401c07,"10,578.89",381.42076,27.73548013,924.146,USDC +0xf6fe0b03452628f1dba358d1613ce9fdcc7ccde4,167.210652,381.42076,0.4383889645,14.607,USDT +0x152902d1d80c9478b1d246714d256ef15c6276fe,234.79993,381.42076,0.6155929479,20.512,DAI +0xa99dd874884774bc8e99ec2d743105eda63c95df,515.121182,381.42076,1.35053263,45.000,USDT +0xf59a5a36b969de497c4b4bb644122e7888b75c34,674.921806,381.42076,1.769494157,58.960,USDT +0x0c1f2b70c3448220e9e8ab864c3b378dd81342ce,"2,465",381.42076,6.462679168,215.336,USDC +0x93545389bf3b742427b66a4b2809d8f6c1699a00,"1,190.85",381.42076,3.122145391,104.030,USDC +0x6b4bd7b8fbd121e48ffe91de6df9388e7af11b64,"1,258.49",381.42076,3.299483715,109.939,USDC +0xc2b5a349d26a42a8949ab2c3f9415fd01a90db7a,"3,000",381.42076,7.865329617,262.073,USDC +0x83454050026c668ade1d37b2cdcc09c33166ae68,"1,650",381.42076,4.325931289,144.140,USDC +0x63f0a3660170a5c9cd4ca7b28b82f0011ffb37c4,"2,849.52",381.42076,7.470793525,248.927,USDC +0xca7e6c9b4481916ed72c9729727ffa52affdbc83,"5,000",381.42076,13.10888269,436.788,USDT +0x8f908b66629dd622b2b2343b360e6c4cdaf2b60b,758.704072,381.42076,1.989152536,66.279,USDT +0xbbddd093d7c303eabedd9efc81d1c70f28dd17e8,"256,398.87",381.42076,672.2205466,"22,398.389",USDC +0x88c222066753b2da14cb34d759441d5ac9d2314f,474.5,379.5780859,1.250072166,41.652,USDC +0x4c1115b49a9e55152d025372fa0ec4db3a99cc49,204.933846,379.5780859,0.5398990448,17.989,DAI +0xe839b2e436782ec0f52724e72b68d1c70cbc8f35,"150,000",379.5780859,395.1756057,"13,167.251",USDT +0x44186ae312de783cddd6d01c22451d052ea57f43,"99,982.55",379.5780859,263.4044382,"8,776.636",USDT +0x484299bc1a8b8d2bd5470b11dee14602cc0e886d,"6,005.44",379.5780859,15.82135593,527.168,USDC +0x8cd3bec93d81f900f4faef7f40259d392b616a7e,"8,473.14",379.5780859,22.3225235,743.786,USDT +0x249c6faf32cb676ee2003cebfd8ec8692dfe74ba,"1,000",379.5780859,2.634504038,87.782,USDT +0x3ef8e8cd580e7a32b8f11d8ab93acabe3b5a6106,"2,690",379.5780859,7.086815862,236.133,USDT +0xe5e89e3c821ec477719cbfa3be1fadf5aed23b68,"5,000",379.5780859,13.17252019,438.908,USDC +0xd9ddf715608e48820fb445fd1376c45afdfe729f,20,379.5780859,0.05269008076,1.756,DAI +0xd9ddf715608e48820fb445fd1376c45afdfe729f,450.04702,379.5780859,1.185650692,39.506,DAI +0xcf420c639b122b5c1c150dc49e8c0b27a01dc0a6,"1,500",379.5780859,3.951756057,131.673,USDT +0xbb2ffef531cb0b573c5e3ca3762c098e436b0f3d,48.9016,379.5780859,0.1288314627,4.293,DAI +0x1b54aa56c6841695b38a6731cde17cfc0e077cba,530,379.5780859,1.39628714,46.524,USDC +0xa9ebb5285d01226aa31d11366635069ae7474428,"2,001.60",379.5780859,5.273215384,175.704,USDT +0x79c1134a1dfdf7e0d58e58cafc84a514991372e6,"12,500",379.5780859,32.93130048,"1,097.271",USDC +0xc7bda303343476d8140acc70dadc6ee2ef5ec156,"1,359.14",379.5780859,3.580665114,119.308,USDT +0xb3e0cf575be1b73506ed66690bf8c51b312dc378,150,379.5780859,0.3951756057,13.167,USDC +0x2cf6fe97a70cf4cbf8b107861b05b2166d9ed45d,"2,388.02",379.5780859,6.291255934,209.625,USDC +0x39a56e1ade957dccc5d235a5eada60e425d0df7d,"4,999",379.5780859,13.16988569,438.821,USDT +0xb0165861f99b319e8ffaf90dfccad6dc36175afc,"4,000",379.5780859,10.53801615,351.127,USDT +0xf6bdab64303807f4e040201c809b073fae56a796,"2,000",379.5780859,5.269008076,175.563,USDT +0x265d18630e53341d309feaf4bdb24180d27d8091,"5,000",379.5780859,13.17252019,438.908,USDC +0x282b68539893c1b2847f8d5f298d53ebfbebaa12,173.12005,379.5780859,0.4560854708,15.197,USDT +0xd6d8957449f2a98cc2a995a9899cc3360ba1764c,"21,191.84",379.5780859,55.8299875,"1,860.255",USDT +0xa52cb26139876d6e26817fbbd67dc219fc44aa81,970,379.5780859,2.555468917,85.148,USDC +0x4a6b57491c6537abaad435ec4c48f7452817ac94,"80,000",379.5780859,210.760323,"7,022.534",USDC +0xa1d3aebf32163c96ef9a5ebaa38981e04ea41365,"10,045.43",379.5780859,26.46472069,881.804,USDC +0xde6a03bb34ded96088435076c0d44ccfdd38c510,100,379.5780859,0.2634504038,8.778,USDT +0x9af6b6f2a118ff0a07690e0ed2c1631608390cc6,611.557764,379.5780859,1.611151399,53.684,USDT +0xa1fc8a55f6031e67dda0659fa335ce196df3324b,280,379.5780859,0.7376611307,24.579,DAI +0xd73b3a4f83248fdcbad16cc22a109fb8f5032336,"2,093.25",379.5780859,5.514682043,183.749,USDT +0x49cdbee64d5e43327853466df123ea4537a6240c,"1,250",379.5780859,3.293130048,109.727,USDC +0xf9bc563fb4929c58ea39a8a7c2a54aa21a59ac73,"1,471.21",379.5780859,3.875901417,129.145,USDT +0x0b20b9bd6ea6f9d75c3eb676e703056e1b7538e3,"1,134.70",379.5780859,2.989379514,99.606,USDT +0x6934ddd053a01f06859e9c0bce5f5ef4aaf8f26f,"1,000",379.5780859,2.634504038,87.782,USDC +0xbbddd093d7c303eabedd9efc81d1c70f28dd17e8,"5,000",379.5780859,13.17252019,438.908,USDC +0x7ad3ca0c9e04fc665fd6e6e032dc3d826737914c,"1,340.27",379.5780859,3.530934636,117.651,DAI +0x3942ae3782fbd658cc19a8db602d937baf7cb57a,"45,000",379.5780859,118.5526817,"3,950.175",DAI +0x77ee4d4a7f1ad39f50197f6058860c06191074c0,"2,000",379.5780859,5.269008076,175.563,USDC +0xef87e537439acc5dc5fa697abb17834e8ee7f8a8,"1,079.09",379.5780859,2.842863005,94.724,USDT +0xadc5a1519536518d5351a9c1ea515df060077c92,"10,453.13",379.5780859,27.53880989,917.593,USDC +0x1bbfa662a802d0a5dd880e80801649600e6c6d42,"2,000",379.5780859,5.269008076,175.563,USDT +0x0b20b9bd6ea6f9d75c3eb676e703056e1b7538e3,"2,592.62",379.5780859,6.830277639,227.585,USDT +0xf8a36513bf4720f6b7e64d90d8dd70f57c80606f,"5,000",379.5780859,13.17252019,438.908,USDT +0x4a895764934ca19652d29630e6da7601a7efbe24,"7,000",379.5780859,18.44152827,614.472,USDC +0x0b20b9bd6ea6f9d75c3eb676e703056e1b7538e3,"7,410.06",379.5780859,19.52182867,650.467,USDT \ No newline at end of file diff --git a/docs/docs/networks/picasso/crowdloan.md b/docs/docs/networks/picasso/crowdloan.md new file mode 100644 index 0000000..5dc1be1 --- /dev/null +++ b/docs/docs/networks/picasso/crowdloan.md @@ -0,0 +1,48 @@ +# The Picasso Crowdloan +*Our strategy that lead to a successful parachain procurement.* + +:::caution + +Any unclaimed rewards from the crowdloan will be transferred to the Picasso treasury, via a governance proposal, +three months after the crowdloan vesting period is concluded + +::: + +## Picasso Crowdloan Details + +Composable has won the 13th Kusama parachain auction slot, +raising 115,017 KSM and successfully securing a parachain to build out and deploy the Picasso network. +Crowdloan participation was capped at 200,000 KSM and the crowdloan period will total 48 weeks, +broken down into 8 lease periods of 6 weeks each. + +Initially, 20% of Picasso’s native token supply was allocated to the crowdloan: 2,000,000,000 PICA. +However, as a result of the bonuses awarded to crowdloan participants, +the total allocated supply of PICA amounted to 30% (3,000,000,000 PICA). + +## Picasso Crowdloan Bonuses + + +![picasso_contributor_bonus](./contributor-bonus.png) + +### Referral Bonus + +We implemented a referral program where users were able to generate referral codes +and obtain a 20% bonus on their PICA tokens if they brought in other users contributing a total of 100 KSM or more. + +### Early Participation Bonuses + +Users who participated early on in the Picasso crowdloan received a boost on their earnings: +participating in the first 12 hours provided such users with a 5% bonus, +and participating in the first three days provided a 10% bonus. + +### Bonus to Prior Stakers + +Within the 30% PICA rewards for crowdloan participants, +5% is allocated as a bonus to contributors who previously staked in our crowdloan, +and restake the same amount or greater. The bonus will be subject to the amount contributed to the prior round. + +### KSM purchase logs + +You can find the purchase/sell logs corresponding to the Ethereum address for stablecoin contributors +[on our Github.](https://github.com/ComposableFi/composable/blob/main/docs/docs/networks/picasso/crowdloan-contributors/crowdloan-logs.csv) +They catalogue all of the Picasso stable coin conversions to KSM via TPS (the OTC desk of 3AC). diff --git a/docs/docs/pallets/airdrop.md b/docs/docs/pallets/airdrop.md new file mode 100644 index 0000000..d7c08c5 --- /dev/null +++ b/docs/docs/pallets/airdrop.md @@ -0,0 +1,7 @@ +# Airdrop + +*The Airdrop pallet allows users and protocols to airdrop tokens to users.* + +--- + +{{#include ../../../code/parachain/frame/airdrop/README.md:5:}} diff --git a/docs/docs/pallets/airdrop/extrinsics.md b/docs/docs/pallets/airdrop/extrinsics.md new file mode 100644 index 0000000..c4f2f36 --- /dev/null +++ b/docs/docs/pallets/airdrop/extrinsics.md @@ -0,0 +1,154 @@ + + + +# Airdrop Pallet Extrinsics + +## Create Airdrop + +[`create_airdrop`](https://dali.devnets.composablefinance.ninja/doc/pallet_airdrop/pallet/enum.Call.html#variant.create_airdrop) + +Create a new Airdrop. This requires that the user puts down a stake in PICA. + +If `start_at` is `Some(MomentOf)` and the `MomentOf` is greater than the current +block, the Airdrop will be scheduled to start automatically. + +Can be called by any signed origin. + +### Parameter Sources + +* `start_at` - user provided, optional +* `vesting_schedule` - user provided + +### Emits + +* `AirdropCreated` +* `AirdropStarted` + +### Errors + +* `AirdropDoesNotExist` - No Airdrop exist that is associated 'airdrop_id' +* `AirdropAlreadyStarted` - The Airdrop has already started or has been scheduled to + start +* `BackToTheFuture` - The provided `start` has already passed + +## Add Recipient + +[`add_recipient`](https://dali.devnets.composablefinance.ninja/doc/pallet_airdrop/pallet/enum.Call.html#variant.add_recipient) + +Add one or more recipients to the Airdrop, specifying the token amount that each +provided address will receive. + +Only callable by the origin that created the Airdrop. + +### Parameter Sources + +* `airdrop_id` - user selected, provided by the system +* `recipients` - user provided + +### Emits + +* `RecipientsAdded` + +### Errors + +* `AirdropDoesNotExist` - No Airdrop exist that is associated 'airdrop_id' +* `NotAirdropCreator` - Signer of the origin is not the creator of the Airdrop + +## Remove Recipient + +[`remove_recipient`](https://dali.devnets.composablefinance.ninja/doc/pallet_airdrop/pallet/enum.Call.html#variant.remove_recipient) + +Remove a recipient from an Airdrop. + +Only callable by the origin that created the Airdrop. + +### Parameter Sources + +* `airdrop_id` - user selected, provided by the system +* `recipient` - user selected, provided by the system + +### Emits + +* `RecipientRemoved` +* `AirdropEnded` + +### Errors + +* `AirdropDoesNotExist` - No Airdrop exist that is associated 'airdrop_id' +* `NotAirdropCreator` - Signer of the origin is not the creator of the Airdrop +* `RecipientAlreadyClaimed` - The recipient has already began claiming their funds. +* `RecipientNotFound` - No recipient associated with the `identity` could be found. + +## Enable Airdrop + +[`enable_airdrop`](https://dali.devnets.composablefinance.ninja/doc/pallet_airdrop/pallet/enum.Call.html#variant.enable_airdrop) + +Start an Airdrop. + +Only callable by the origin that created the Airdrop. + +### Parameter Sources + +* `airdrop_id` - user selected, provided by the system + +### Emits + +* `AirdropStarted` + +### Errors + +* `AirdropDoesNotExist` - No Airdrop exist that is associated 'airdrop_id' +* `AirdropAlreadyStarted` - The Airdrop has already started or has been scheduled to + start +* `BackToTheFuture` - The provided `start` has already passed +* `NotAirdropCreator` - Signer of the origin is not the creator of the Airdrop + +## Disable Airdrop + +[`disable_airdrop`](https://dali.devnets.composablefinance.ninja/doc/pallet_airdrop/pallet/enum.Call.html#variant.disable_airdrop) + +Stop an Airdrop. + +Only callable by the origin that created the Airdrop. + +### Parameter Sources + +* `airdrop_id` - user selected, provided by the system + +### Emits + +* `AirdropEnded` + +### Errors + +* `AirdropDoesNotExist` - No Airdrop exist that is associated 'airdrop_id' +* `NotAirdropCreator` - Signer of the origin is not the creator of the Airdrop + +## Claim + +[`claim`](https://dali.devnets.composablefinance.ninja/doc/pallet_airdrop/pallet/enum.Call.html#variant.claim) + +Claim recipient funds from an Airdrop. + +If no more funds are left to claim, the Airdrop will be removed. + +Callable by any unsigned origin. + +### Parameter Sources + +* `airdrop_id` - user selected, provided by the system +* `reward_account` - user provided +* `proof` - calculated by the system (requires applicable signing) + +### Emits + +* `AirdropEnded` + +### Errors + +* `AirdropDoesNotExist` - No Airdrop exist that is associated 'airdrop_id' +* `AirdropIsNotEnabled` - The Airdrop has not been enabled +* `AssociatedWithAnotherAccount` - Associated with a different account +* `ArithmeticError` - Overflow while totaling claimed funds +* `InvalidProof` +* `RecipientNotFound` - No recipient associated with the `identity` could be found. diff --git a/docs/docs/pallets/airdrop/integration-guide.md b/docs/docs/pallets/airdrop/integration-guide.md new file mode 100644 index 0000000..29c1f80 --- /dev/null +++ b/docs/docs/pallets/airdrop/integration-guide.md @@ -0,0 +1,72 @@ +# Airdrop Integration Guide + +[**Pallet Overview & Workflow**](../airdrop.md) + +## Integration Status + +| Dali | Picasso | Composable | +| ---- | ----------- | ---------- | +| IP | No | No | + +## Setup / Configuration + +Airdrops are created and managed by users. Only the airdrop creator will have +access to life cycle methods of the airdrop. Airdrops have three states: +created, enabled, disabled. These states transition linearly. + +During the created state, no claims can be made, but all management transactions +can be conducted. During the enabled state, claims can be made and management +transactions can be conducted in a limited fashion. During the disabled state, +the airdrop and its relevant info in pallet storage will be deleted. + +Automatic state transitions can accrue under two conditions. 1) The Airdrop was +provided with a scheduled `start_at` and that time has come, the Airdrop will be +enabled. 2) All funds in the Airdrop have been claimed and/or a recipient was +deleted that leaves no more funds to claim, the Airdrop will be disabled and +deleted from storage. + +For more details on the Airdrop life cycle, see the [Workflow section](../airdrop.md#workflow) +of the Pallet Overview & Workflow file. This information is retrieved directly +from the pallet's `README.md`. + +## RPC & Data Retrieval + +*Soon(TM)* + +## Subsquid Data Retrieval + + +N/A + +## Locally Consumed Types + +### Types + +* `AirdropId` - Numeric type used to uniquely identify Airdrops +* `Balance` - Numeric type used to represent some amount of tokens +* `Convert` - Function for converting between `Moment` and `Balance` +* `Moment` - Numeric type used to represent a time stamp +* `RelayChainAccountId` - Numeric type used to uniquely identify relay chain accounts +* `Time` - Time provider +* `WeightInfo` - Provider for extrinsic transaction weights + +### Constants + +* `PalletId` - Unique ID of the pallet +* `Prefix` - The prefix used in proofs +* `Stake` - The amount required to create an Airdrop + +## Calculations & Sources of Values + +N/A + +## Extrinsic Parameter Sources + +See the Airdrop pallet extrinsics [documentation](./extrinsics.md) + +## Pricing Sources + +N/A + diff --git a/docs/docs/pallets/assets-registry.md b/docs/docs/pallets/assets-registry.md new file mode 100644 index 0000000..eadc80e --- /dev/null +++ b/docs/docs/pallets/assets-registry.md @@ -0,0 +1,3 @@ +# Assets Registry + +*This pallet allows the bidirectional mapping of assets used for crosschain message transfers and payments.* \ No newline at end of file diff --git a/docs/docs/pallets/assets.md b/docs/docs/pallets/assets.md new file mode 100644 index 0000000..a6a1d98 --- /dev/null +++ b/docs/docs/pallets/assets.md @@ -0,0 +1,3 @@ +# Assets + +*The assets pallet provides an implementation of common currency traits and functionality for handling transfers and minting.* \ No newline at end of file diff --git a/docs/docs/pallets/bonded-finance/extrinsics.md b/docs/docs/pallets/bonded-finance/extrinsics.md new file mode 100644 index 0000000..7d6c2ce --- /dev/null +++ b/docs/docs/pallets/bonded-finance/extrinsics.md @@ -0,0 +1,50 @@ + + + +# Bonded Finance Pallet Extrinsics + +## Offer + +[`offer`](https://dali.devnets.composablefinance.ninja/doc/pallet_bonded_finance/pallet/enum.Call.html#variant.offer) + +Create a new bond offer. To be `bond` to later. + +The dispatch origin for this call must be *Signed* and the sender must have the +appropriate funds to stake the offer. + +Allows the issuer to ask for their account to be kept alive using the `keep_alive` +parameter. + +Emits a `NewOffer`. + +## Bond + +[`bond`](https://dali.devnets.composablefinance.ninja/doc/pallet_bonded_finance/pallet/enum.Call.html#variant.bond) + +Bond to an offer. + +The issuer should provide the number of contracts they are willing to buy. +Once there are no more contracts available on the offer, the `stake` put by the +offer creator is refunded. + +The dispatch origin for this call must be *Signed* and the sender must have the +appropriate funds to buy the desired number of contracts. + +Allows the issuer to ask for their account to be kept alive using the `keep_alive` +parameter. + +Emits a `NewBond`. +Possibly Emits a `OfferCompleted`. + +## Cancel + +[`cancel`](https://dali.devnets.composablefinance.ninja/doc/pallet_bonded_finance/pallet/enum.Call.html#variant.cancel) + +Cancel a running offer. + +Blocking further bonds but not cancelling the currently vested rewards. The `stake` put +by the offer creator is refunded. + +The dispatch origin for this call must be *Signed* and the sender must be `AdminOrigin` + +Emits a `OfferCancelled`. diff --git a/docs/docs/pallets/bonded-finance/integration-guide.md b/docs/docs/pallets/bonded-finance/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/bonded-finance/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/crowdloan-rewards.md b/docs/docs/pallets/crowdloan-rewards.md new file mode 100644 index 0000000..b2b762e --- /dev/null +++ b/docs/docs/pallets/crowdloan-rewards.md @@ -0,0 +1,7 @@ +# Crowdloan Rewards + +*The Crowdloan Rewards pallet allows contributors to claim their rewards.* + +--- + +{{#include ../../../code/parachain/frame/crowdloan-rewards/README.md:5:}} diff --git a/docs/docs/pallets/crowdloan-rewards/extrinsics.md b/docs/docs/pallets/crowdloan-rewards/extrinsics.md new file mode 100644 index 0000000..352b8d3 --- /dev/null +++ b/docs/docs/pallets/crowdloan-rewards/extrinsics.md @@ -0,0 +1,48 @@ + + + +# Crowdloan Rewards Pallet Extrinsics + +## Initialize + +[`initialize`](https://dali.devnets.composablefinance.ninja/doc/pallet_crowdloan_rewards/pallet/enum.Call.html#variant.initialize) + +Initialize the pallet at the current transaction block. + +## Initialize At + +[`initialize_at`](https://dali.devnets.composablefinance.ninja/doc/pallet_crowdloan_rewards/pallet/enum.Call.html#variant.initialize_at) + +Initialize the pallet at the given transaction block. + +## Populate + +[`populate`](https://dali.devnets.composablefinance.ninja/doc/pallet_crowdloan_rewards/pallet/enum.Call.html#variant.populate) + +Populate pallet by adding more rewards. +Can be called multiple times. If an remote account already has a reward, it will be +replaced by the new reward value. +Can only be called before `initialize`. + +## Associate + +[`associate`](https://dali.devnets.composablefinance.ninja/doc/pallet_crowdloan_rewards/pallet/enum.Call.html#variant.associate) + +Associate a reward account. A valid proof has to be provided. +This call also claim the first reward (a.k.a. the first payment, which is a % of the +vested reward). +If logic gate pass, no fees are applied. + +The proof should be: + +````haskell +proof = sign (concat prefix (hex reward_account)) +```` + +## Claim + +[`claim`](https://dali.devnets.composablefinance.ninja/doc/pallet_crowdloan_rewards/pallet/enum.Call.html#variant.claim) + +Claim a reward from the associated reward account. +A previous call to `associate` should have been made. +If logic gate pass, no fees are applied. diff --git a/docs/docs/pallets/crowdloan-rewards/integration-guide.md b/docs/docs/pallets/crowdloan-rewards/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/crowdloan-rewards/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/currency-factory.md b/docs/docs/pallets/currency-factory.md new file mode 100644 index 0000000..ff51087 --- /dev/null +++ b/docs/docs/pallets/currency-factory.md @@ -0,0 +1,7 @@ +# Currency Factory + +*The currency factory pallet provides functionality to create new and sovereign local consensus assets.* + +--- + +{{#include ../../../code/parachain/frame/currency-factory/README.md:5:}} \ No newline at end of file diff --git a/docs/docs/pallets/curve-amm.md b/docs/docs/pallets/curve-amm.md new file mode 100644 index 0000000..8d5807d --- /dev/null +++ b/docs/docs/pallets/curve-amm.md @@ -0,0 +1 @@ +# curve-amm diff --git a/docs/docs/pallets/curve-amm/extrinsics.md b/docs/docs/pallets/curve-amm/extrinsics.md new file mode 100644 index 0000000..b3f018a --- /dev/null +++ b/docs/docs/pallets/curve-amm/extrinsics.md @@ -0,0 +1,54 @@ + + + +# Curve Amm Pallet Extrinsics + +## Create + +[`create`](https://dali.devnets.composablefinance.ninja/doc/pallet_curve_amm/pallet/enum.Call.html#variant.create) + +Create a new pool. + +Emits `PoolCreated` event when successful. + +## Buy + +[`buy`](https://dali.devnets.composablefinance.ninja/doc/pallet_curve_amm/pallet/enum.Call.html#variant.buy) + +Execute a buy order on pool. + +Emits `Swapped` event when successful. + +## Sell + +[`sell`](https://dali.devnets.composablefinance.ninja/doc/pallet_curve_amm/pallet/enum.Call.html#variant.sell) + +Execute a sell order on pool. + +Emits `Swapped` event when successful. + +## Swap + +[`swap`](https://dali.devnets.composablefinance.ninja/doc/pallet_curve_amm/pallet/enum.Call.html#variant.swap) + +Execute a specific swap operation. + +The `quote_amount` is always the quote asset amount (A/B => B), (B/A => A). + +Emits `Swapped` event when successful. + +## Add Liquidity + +[`add_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_curve_amm/pallet/enum.Call.html#variant.add_liquidity) + +Add liquidity to a stable-swap pool. + +Emits `LiquidityAdded` event when successful. + +## Remove Liquidity + +[`remove_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_curve_amm/pallet/enum.Call.html#variant.remove_liquidity) + +Remove liquidity from stable-swap pool. + +Emits `LiquidityRemoved` event when successful. diff --git a/docs/docs/pallets/curve-amm/integration-guide.md b/docs/docs/pallets/curve-amm/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/curve-amm/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/democracy.md b/docs/docs/pallets/democracy.md new file mode 100644 index 0000000..665127c --- /dev/null +++ b/docs/docs/pallets/democracy.md @@ -0,0 +1,7 @@ +# Democracy + +*The Democracy pallet handles the administration of general stakeholder voting.* + +--- + +{{#include ../../../code/parachain/frame/democracy/README.md:2:}} diff --git a/docs/docs/pallets/democracy/extrinsics.md b/docs/docs/pallets/democracy/extrinsics.md new file mode 100644 index 0000000..e78237a --- /dev/null +++ b/docs/docs/pallets/democracy/extrinsics.md @@ -0,0 +1,407 @@ + + + +# Democracy Pallet Extrinsics + +## Propose + +[`propose`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.propose) + +Propose a sensitive action to be taken. + +The dispatch origin of this call must be *Signed* and the sender must +have funds to cover the deposit. + +* `proposal_hash`: The hash of the proposal preimage. +* `asset_id` : The asset id of the proposal preimage. +* `value`: The amount of deposit (must be at least `MinimumDeposit`). + +Emits `Proposed`. + +Weight: `O(p)` + +## Second + +[`second`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.second) + +Signals agreement with a particular proposal. + +The dispatch origin of this call must be *Signed* and the sender +must have funds to cover the deposit, equal to the original deposit. + +* `proposal`: The index of the proposal to second. +* `seconds_upper_bound`: an upper bound on the current number of seconds on this + proposal. Extrinsic is weighted according to this value with no refund. + +Weight: `O(S)` where S is the number of seconds a proposal already has. + +## Vote + +[`vote`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.vote) + +Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal; +otherwise it is a vote to keep the status quo. + +The dispatch origin of this call must be *Signed*. + +* `ref_index`: The index of the referendum to vote for. +* `vote`: The vote configuration. + +Weight: `O(R)` where R is the number of referendums the voter has voted on. + +## Emergency Cancel + +[`emergency_cancel`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.emergency_cancel) + +Schedule an emergency cancellation of a referendum. Cannot happen twice to the same +referendum. + +The dispatch origin of this call must be `CancellationOrigin`. + +-`ref_index`: The index of the referendum to cancel. + +Weight: `O(1)`. + +## External Propose + +[`external_propose`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.external_propose) + +Schedule a referendum to be tabled once it is legal to schedule an external +referendum. + +The dispatch origin of this call must be `ExternalOrigin`. + +* `proposal_hash`: The preimage hash of the proposal. +* `asset_id` : The asset id of the proposal. + +Weight: `O(V)` with V number of vetoers in the blacklist of proposal. +Decoding vec of length V. Charged as maximum + +## External Propose Majority + +[`external_propose_majority`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.external_propose_majority) + +Schedule a majority-carries referendum to be tabled next once it is legal to schedule +an external referendum. + +The dispatch of this call must be `ExternalMajorityOrigin`. + +* `proposal_hash`: The preimage hash of the proposal. +* `asset_id` : The asset id of the proposal. + +Unlike `external_propose`, blacklisting has no effect on this and it may replace a +pre-scheduled `external_propose` call. + +Weight: `O(1)` + +## External Propose Default + +[`external_propose_default`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.external_propose_default) + +Schedule a negative-turnout-bias referendum to be tabled next once it is legal to +schedule an external referendum. + +The dispatch of this call must be `ExternalDefaultOrigin`. + +* `proposal_hash`: The preimage hash of the proposal. +* `asset_id` : The asset id of the proposal preimage. + +Unlike `external_propose`, blacklisting has no effect on this and it may replace a +pre-scheduled `external_propose` call. + +Weight: `O(1)` + +## Fast Track + +[`fast_track`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.fast_track) + +Schedule the currently externally-proposed majority-carries referendum to be tabled +immediately. If there is no externally-proposed referendum currently, or if there is one +but it is not a majority-carries referendum then it fails. + +The dispatch of this call must be `FastTrackOrigin`. + +* `proposal_hash`: The hash of the current external proposal. +* `asset_id` : The asset id of the proposal. +* `voting_period`: The period that is allowed for voting on this proposal. Increased to + `FastTrackVotingPeriod` if too low. +* `delay`: The number of block after voting has ended in approval and this should be + enacted. This doesn't have a minimum amount. + +Emits `Started`. + +Weight: `O(1)` + +## Veto External + +[`veto_external`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.veto_external) + +Veto and blacklist the external proposal hash. + +The dispatch origin of this call must be `VetoOrigin`. + +* `proposal_hash`: The preimage hash of the proposal to veto and blacklist. +* `asset_id` : The asset id of the proposal. + +Emits `Vetoed`. + +Weight: `O(V + log(V))` where V is number of `existing vetoers` + +## Cancel Referendum + +[`cancel_referendum`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.cancel_referendum) + +Remove a referendum. + +The dispatch origin of this call must be *Root*. + +* `ref_index`: The index of the referendum to cancel. + +### Weight: `O(1)`. + +## Cancel Queued + +[`cancel_queued`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.cancel_queued) + +Cancel a proposal queued for enactment. + +The dispatch origin of this call must be *Root*. + +* `which`: The index of the referendum to cancel. + +Weight: `O(D)` where `D` is the items in the dispatch queue. Weighted as `D = 10`. + +## Delegate + +[`delegate`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.delegate) + +Delegate the voting power (with some given conviction) of the sending account. + +The balance delegated is locked for as long as it's delegated, and thereafter for the +time appropriate for the conviction's lock period. + +The dispatch origin of this call must be *Signed*, and the signing account must either: + +* be delegating already; or + +* have no voting activity (if there is, then it will need to be removed/consolidated + through `reap_vote` or `unvote`). + +* `to`: The account whose voting the `target` account's voting power will follow. + +* `asset_id` : The asset id to be used in delegating. + +* `conviction`: The conviction that will be attached to the delegated votes. When the + account is undelegated, the funds will be locked for the corresponding period. + +* `balance`: The amount of the account's balance to be used in delegating. This must not + be more than the account's current balance. + +Emits `Delegated`. + +Weight: `O(R)` where R is the number of referendums the voter delegating to has +voted on. Weight is charged as if maximum votes. + +## Undelegate + +[`undelegate`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.undelegate) + +Undelegate the voting power of the sending account. + +Tokens may be unlocked following once an amount of time consistent with the lock period +of the conviction with which the delegation was issued. + +The dispatch origin of this call must be *Signed* and the signing account must be +currently delegating. + +* `asset_id` : The asset id to be used in delegating. + +Emits `Undelegated`. + +Weight: `O(R)` where R is the number of referendums the voter delegating to has +voted on. Weight is charged as if maximum votes. + +## Clear Public Proposals + +[`clear_public_proposals`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.clear_public_proposals) + +Clears all public proposals. + +The dispatch origin of this call must be *Root*. + +Weight: `O(1)`. + +## Note Preimage + +[`note_preimage`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.note_preimage) + +Register the preimage for an upcoming proposal. This doesn't require the proposal to be +in the dispatch queue but does require a deposit, returned once enacted. + +The dispatch origin of this call must be *Signed*. + +* `encoded_proposal`: The preimage of a proposal. +* `asset_id` : The asset id of a proposal. + +Emits `PreimageNoted`. + +Weight: `O(E)` with E size of `encoded_proposal` (protected by a required deposit). + +## Note Preimage Operational + +[`note_preimage_operational`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.note_preimage_operational) + +Same as `note_preimage` but origin is `OperationalPreimageOrigin`. + +## Note Imminent Preimage + +[`note_imminent_preimage`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.note_imminent_preimage) + +Register the preimage for an upcoming proposal. This requires the proposal to be +in the dispatch queue. No deposit is needed. When this call is successful, i.e. +the preimage has not been uploaded before and matches some imminent proposal, +no fee is paid. + +The dispatch origin of this call must be *Signed*. + +* `encoded_proposal`: The preimage of a proposal. +* `asset_id` : The asset id of a proposal. + +Emits `PreimageNoted`. + +Weight: `O(E)` with E size of `encoded_proposal` (protected by a required deposit). + +## Note Imminent Preimage Operational + +[`note_imminent_preimage_operational`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.note_imminent_preimage_operational) + +Same as `note_imminent_preimage` but origin is `OperationalPreimageOrigin`. + +## Reap Preimage + +[`reap_preimage`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.reap_preimage) + +Remove an expired proposal preimage and collect the deposit. + +The dispatch origin of this call must be *Signed*. + +* `proposal_hash`: The preimage hash of a proposal. +* `asset_id` : The asset id of a proposal. +* `proposal_length_upper_bound`: an upper bound on length of the proposal. Extrinsic is + weighted according to this value with no refund. + +This will only work after `VotingPeriod` blocks from the time that the preimage was +noted, if it's the same account doing it. If it's a different account, then it'll only +work an additional `EnactmentPeriod` later. + +Emits `PreimageReaped`. + +Weight: `O(D)` where D is length of proposal. + +## Unlock + +[`unlock`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.unlock) + +Unlock tokens that have an expired lock. + +The dispatch origin of this call must be *Signed*. + +* `target`: The account to remove the lock on. +* `asset_id` : The asset id of a proposal. + +Weight: `O(R)` with R number of vote of target. + +## Remove Vote + +[`remove_vote`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.remove_vote) + +Remove a vote for a referendum. + +If: + +* the referendum was cancelled, or +* the referendum is ongoing, or +* the referendum has ended such that + * the vote of the account was in opposition to the result; or + * there was no conviction to the account's vote; or + * the account made a split vote + ...then the vote is removed cleanly and a following call to `unlock` may result in more + funds being available. + +If, however, the referendum has ended and: + +* it finished corresponding to the vote of the account, and +* the account made a standard vote with conviction, and +* the lock period of the conviction is not over + ...then the lock will be aggregated into the overall account's lock, which may involve + *overlocking* (where the two locks are combined into a single lock that is the maximum + of both the amount locked and the time is it locked for). + +The dispatch origin of this call must be *Signed*, and the signer must have a vote +registered for referendum `index`. + +* `asset_id` : The asset id of a referendum. +* `index`: The index of referendum of the vote to be removed. + +Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on. +Weight is calculated for the maximum number of vote. + +## Remove Other Vote + +[`remove_other_vote`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.remove_other_vote) + +Remove a vote for a referendum. + +If the `target` is equal to the signer, then this function is exactly equivalent to +`remove_vote`. If not equal to the signer,d then the vote must have expired, +either because the referendum was cancelled, because the voter lost the referendum or +because the conviction period is over. + +The dispatch origin of this call must be *Signed*. + +* `target`: The account of the vote to be removed; this account must have voted for + referendum `index`. +* `asset_id` : The asset id of a referendum. +* `index`: The index of referendum of the vote to be removed. + +Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on. +Weight is calculated for the maximum number of vote. + +## Enact Proposal + +[`enact_proposal`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.enact_proposal) + +Enact a proposal from a referendum. For now we just make the weight be the maximum. + +## Blacklist + +[`blacklist`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.blacklist) + +Permanently place a proposal into the blacklist. This prevents it from ever being +proposed again. + +If called on a queued public or external proposal, then this will result in it being +removed. If the `ref_index` supplied is an active referendum with the proposal hash, +then it will be cancelled. + +The dispatch origin of this call must be `BlacklistOrigin`. + +* `proposal_hash`: The proposal hash to blacklist permanently. +* `asset_id` : The asset id of a referendum. +* `ref_index`: An ongoing referendum whose hash is `proposal_hash`, which will be + cancelled. + +Weight: `O(p)` (though as this is an high-privilege dispatch, we assume it has a +reasonable value). + +## Cancel Proposal + +[`cancel_proposal`](https://dali.devnets.composablefinance.ninja/doc/pallet_democracy/pallet/enum.Call.html#variant.cancel_proposal) + +Remove a proposal. + +The dispatch origin of this call must be `CancelProposalOrigin`. + +* `prop_index`: The index of the proposal to cancel. + +Weight: `O(p)` where `p = PublicProps::::decode_len()` diff --git a/docs/docs/pallets/democracy/integration-guide.md b/docs/docs/pallets/democracy/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/democracy/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/dex-router.md b/docs/docs/pallets/dex-router.md new file mode 100644 index 0000000..5aa68ff --- /dev/null +++ b/docs/docs/pallets/dex-router.md @@ -0,0 +1,7 @@ +# Dex-Router + +*The DEX-Router pallet provides basic functionality to add a route to a DEX for any given pair of asset id's.* + +--- + +Please refer to the [extrinsics](./dex-router/extrinsics.md) for more information. \ No newline at end of file diff --git a/docs/docs/pallets/dex-router/extrinsics.md b/docs/docs/pallets/dex-router/extrinsics.md new file mode 100644 index 0000000..f3085b9 --- /dev/null +++ b/docs/docs/pallets/dex-router/extrinsics.md @@ -0,0 +1,46 @@ + + + +# Dex Router Pallet Extrinsics + +## Update Route + +[`update_route`](https://dali.devnets.composablefinance.ninja/doc/pallet_dex_router/pallet/enum.Call.html#variant.update_route) + +Create, update or remove route. +On successful emits one of `RouteAdded`, `RouteUpdated` or `RouteDeleted`. + +## Exchange + +[`exchange`](https://dali.devnets.composablefinance.ninja/doc/pallet_dex_router/pallet/enum.Call.html#variant.exchange) + +Exchange `amount` of quote asset for `asset_pair` via route found in router. +On successful underlying DEX pallets will emit appropriate event + +## Sell + +[`sell`](https://dali.devnets.composablefinance.ninja/doc/pallet_dex_router/pallet/enum.Call.html#variant.sell) + +Sell `amount` of quote asset for `asset_pair` via route found in router. +On successful underlying DEX pallets will emit appropriate event. + +## Buy + +[`buy`](https://dali.devnets.composablefinance.ninja/doc/pallet_dex_router/pallet/enum.Call.html#variant.buy) + +Buy `amount` of quote asset for `asset_pair` via route found in router. +On successful underlying DEX pallets will emit appropriate event. + +## Add Liquidity + +[`add_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_dex_router/pallet/enum.Call.html#variant.add_liquidity) + +Add liquidity to the underlying pablo pool. +Works only for single pool route. + +## Remove Liquidity + +[`remove_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_dex_router/pallet/enum.Call.html#variant.remove_liquidity) + +Remove liquidity from the underlying pablo pool. +Works only for single pool route. diff --git a/docs/docs/pallets/dex-router/integration-guide.md b/docs/docs/pallets/dex-router/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/dex-router/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/dutch-auction.md b/docs/docs/pallets/dutch-auction.md new file mode 100644 index 0000000..4ebcacb --- /dev/null +++ b/docs/docs/pallets/dutch-auction.md @@ -0,0 +1 @@ +# dutch-auction diff --git a/docs/docs/pallets/lending.md b/docs/docs/pallets/lending.md new file mode 100644 index 0000000..4527b50 --- /dev/null +++ b/docs/docs/pallets/lending.md @@ -0,0 +1 @@ +# lending diff --git a/docs/docs/pallets/liquidity-bootstrapping.md b/docs/docs/pallets/liquidity-bootstrapping.md new file mode 100644 index 0000000..f5ac6f0 --- /dev/null +++ b/docs/docs/pallets/liquidity-bootstrapping.md @@ -0,0 +1 @@ +# liquidity-bootstrapping diff --git a/docs/docs/pallets/liquidity-bootstrapping/extrinsics.md b/docs/docs/pallets/liquidity-bootstrapping/extrinsics.md new file mode 100644 index 0000000..f4b2159 --- /dev/null +++ b/docs/docs/pallets/liquidity-bootstrapping/extrinsics.md @@ -0,0 +1,59 @@ + + + +# Liquidity Bootstrapping Pallet Extrinsics + +## Create + +[`create`](https://dali.devnets.composablefinance.ninja/doc/pallet_liquidity_bootstrapping/pallet/enum.Call.html#variant.create) + +Create a new pool. + +Emits `PoolCreated` event when successful. + +## Buy + +[`buy`](https://dali.devnets.composablefinance.ninja/doc/pallet_liquidity_bootstrapping/pallet/enum.Call.html#variant.buy) + +Execute a buy order on a pool. + +Emits `Swapped` event when successful. + +## Sell + +[`sell`](https://dali.devnets.composablefinance.ninja/doc/pallet_liquidity_bootstrapping/pallet/enum.Call.html#variant.sell) + +Execute a sell order on a pool. + +Emits `Swapped` event when successful. + +## Swap + +[`swap`](https://dali.devnets.composablefinance.ninja/doc/pallet_liquidity_bootstrapping/pallet/enum.Call.html#variant.swap) + +Execute a specific swap operation. + +Buy operation if the pair is the original pool pair (A/B). +Sell operation if the pair is the original pool pair swapped (B/A). + +The `quote_amount` is always the quote asset amount (A/B => B), (B/A => A). + +Emits `Swapped` event when successful. + +## Add Liquidity + +[`add_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_liquidity_bootstrapping/pallet/enum.Call.html#variant.add_liquidity) + +Add liquidity to an LBP pool. + +Only possible before the sale started. + +Emits `LiquidityAdded` event when successful. + +## Remove Liquidity + +[`remove_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_liquidity_bootstrapping/pallet/enum.Call.html#variant.remove_liquidity) + +Withdraw the remaining liquidity and destroy the pool. + +Emits `PoolDeleted` event when successful. diff --git a/docs/docs/pallets/liquidity-bootstrapping/integration-guide.md b/docs/docs/pallets/liquidity-bootstrapping/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/liquidity-bootstrapping/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/nft.md b/docs/docs/pallets/nft.md new file mode 100644 index 0000000..086c5e2 --- /dev/null +++ b/docs/docs/pallets/nft.md @@ -0,0 +1 @@ +{{#include ../../../code/parachain/frame/fnft/README.md}} \ No newline at end of file diff --git a/docs/docs/pallets/oracle.md b/docs/docs/pallets/oracle.md new file mode 100644 index 0000000..9db4860 --- /dev/null +++ b/docs/docs/pallets/oracle.md @@ -0,0 +1 @@ +{{#include ../../../code/parachain/frame/oracle/README.md}} diff --git a/docs/docs/pallets/oracle/extrinsics.md b/docs/docs/pallets/oracle/extrinsics.md new file mode 100644 index 0000000..33e6072 --- /dev/null +++ b/docs/docs/pallets/oracle/extrinsics.md @@ -0,0 +1,83 @@ + + + +# Oracle Pallet Extrinsics + +## Add Asset And Info + +[`add_asset_and_info`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.add_asset_and_info) + +Permissioned call to add an asset + +* `asset_id`: Id for the asset +* `threshold`: Percent close to mean to be rewarded +* `min_answers`: Min answers before aggregation +* `max_answers`: Max answers to aggregate +* `block_interval`: blocks until oracle triggered +* `reward`: reward amount for correct answer +* `slash`: slash amount for bad answer +* `emit_price_changes`: emit PriceChanged event when asset price changes + +Emits `DepositEvent` event when successful. + +## Set Signer + +[`set_signer`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.set_signer) + +Call for a signer to be set, called from controller, adds stake. + +* `signer`: signer to tie controller to + +Emits `SignerSet` and `StakeAdded` events when successful. + +## Adjust Rewards + +[`adjust_rewards`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.adjust_rewards) + +Call to start rewarding Oracles. + +* `annual_cost_per_oracle`: Annual cost of an Oracle. +* `num_ideal_oracles`: Number of ideal Oracles. This in fact should be higher than the + actual ideal number so that the Oracles make a profit under ideal conditions. + +Emits `RewardRateSet` event when successful. + +## Add Stake + +[`add_stake`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.add_stake) + +call to add more stake from a controller + +* `stake`: amount to add to stake + +Emits `StakeAdded` event when successful. + +## Remove Stake + +[`remove_stake`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.remove_stake) + +Call to put in a claim to remove stake, called from controller + +Emits `StakeRemoved` event when successful. + +## Reclaim Stake + +[`reclaim_stake`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.reclaim_stake) + +Call to reclaim stake after proper time has passed, called from controller + +Emits `StakeReclaimed` event when successful. + +## Submit Price + +[`submit_price`](https://dali.devnets.composablefinance.ninja/doc/pallet_oracle/pallet/enum.Call.html#variant.submit_price) + +Call to submit a price, gas is returned if extrinsic is successful. +Should be called from offchain worker but can be called manually too. + +This is an operational transaction. + +* `price`: price to submit, normalized to 12 decimals +* `asset_id`: id for the asset + +Emits `PriceSubmitted` event when successful. diff --git a/docs/docs/pallets/oracle/integration-guide.md b/docs/docs/pallets/oracle/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/oracle/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/pablo.md b/docs/docs/pallets/pablo.md new file mode 100644 index 0000000..60ffdef --- /dev/null +++ b/docs/docs/pallets/pablo.md @@ -0,0 +1,7 @@ +# Pablo + +*Pallet Pablo provides extensive functionality to set up an exchange; enabling users to create, trade with, and manage, liquidity pools.* + +--- + +Please refer to the [extrinsics](./pablo/extrinsics.md) for more information \ No newline at end of file diff --git a/docs/docs/pallets/pablo/extrinsics.md b/docs/docs/pallets/pablo/extrinsics.md new file mode 100644 index 0000000..7425ba7 --- /dev/null +++ b/docs/docs/pallets/pablo/extrinsics.md @@ -0,0 +1,60 @@ + + + +# Pablo Pallet Extrinsics + +## Create + +[`create`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.create) + +Create a new pool. + +Emits `PoolCreated` event when successful. + +## Buy + +[`buy`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.buy) + +Execute a buy order on pool. + +Emits `Swapped` event when successful. + +## Sell + +[`sell`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.sell) + +Execute a sell order on pool. + +Emits `Swapped` event when successful. + +## Swap + +[`swap`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.swap) + +Execute a specific swap operation. + +The `quote_amount` is always the quote asset amount (A/B => B), (B/A => A). + +Emits `Swapped` event when successful. + +## Add Liquidity + +[`add_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.add_liquidity) + +Add liquidity to the given pool. + +Emits `LiquidityAdded` event when successful. + +## Remove Liquidity + +[`remove_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.remove_liquidity) + +Remove liquidity from the given pool. + +Emits `LiquidityRemoved` event when successful. + +## Enable Twap + +[`enable_twap`](https://dali.devnets.composablefinance.ninja/doc/pallet_pablo/pallet/enum.Call.html#variant.enable_twap) + +No documentation available at this time. diff --git a/docs/docs/pallets/pablo/integration-guide.md b/docs/docs/pallets/pablo/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/pablo/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/ping.md b/docs/docs/pallets/ping.md new file mode 100644 index 0000000..3ffd2b3 --- /dev/null +++ b/docs/docs/pallets/ping.md @@ -0,0 +1 @@ +# ping diff --git a/docs/docs/pallets/ping/extrinsics.md b/docs/docs/pallets/ping/extrinsics.md new file mode 100644 index 0000000..b2a522a --- /dev/null +++ b/docs/docs/pallets/ping/extrinsics.md @@ -0,0 +1,40 @@ + + + +# Ping Pallet Extrinsics + +## Start + +[`start`](https://dali.devnets.composablefinance.ninja/doc/pallet_ping/pallet/enum.Call.html#variant.start) + +No documentation available at this time. + +## Start Many + +[`start_many`](https://dali.devnets.composablefinance.ninja/doc/pallet_ping/pallet/enum.Call.html#variant.start_many) + +No documentation available at this time. + +## Stop + +[`stop`](https://dali.devnets.composablefinance.ninja/doc/pallet_ping/pallet/enum.Call.html#variant.stop) + +No documentation available at this time. + +## Stop All + +[`stop_all`](https://dali.devnets.composablefinance.ninja/doc/pallet_ping/pallet/enum.Call.html#variant.stop_all) + +No documentation available at this time. + +## Ping + +[`ping`](https://dali.devnets.composablefinance.ninja/doc/pallet_ping/pallet/enum.Call.html#variant.ping) + +No documentation available at this time. + +## Pong + +[`pong`](https://dali.devnets.composablefinance.ninja/doc/pallet_ping/pallet/enum.Call.html#variant.pong) + +No documentation available at this time. diff --git a/docs/docs/pallets/ping/integration-guide.md b/docs/docs/pallets/ping/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/ping/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/privilege.md b/docs/docs/pallets/privilege.md new file mode 100644 index 0000000..53fc068 --- /dev/null +++ b/docs/docs/pallets/privilege.md @@ -0,0 +1 @@ +# privilege diff --git a/docs/docs/pallets/privilege/extrinsics.md b/docs/docs/pallets/privilege/extrinsics.md new file mode 100644 index 0000000..712b02d --- /dev/null +++ b/docs/docs/pallets/privilege/extrinsics.md @@ -0,0 +1 @@ +# Extrinsics diff --git a/docs/docs/pallets/privilege/integration-guide.md b/docs/docs/pallets/privilege/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/privilege/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/staking-rewards.md b/docs/docs/pallets/staking-rewards.md new file mode 100644 index 0000000..cd8f2f4 --- /dev/null +++ b/docs/docs/pallets/staking-rewards.md @@ -0,0 +1,7 @@ +# Staking Rewards + +This pallet allows protocols to reward users for staking assets. Stakers are protected from dilution. + +--- + +{{#include ../../../code/parachain/frame/staking-rewards/README.md:28:}} diff --git a/docs/docs/pallets/staking-rewards/extrinsics.md b/docs/docs/pallets/staking-rewards/extrinsics.md new file mode 100644 index 0000000..5a41837 --- /dev/null +++ b/docs/docs/pallets/staking-rewards/extrinsics.md @@ -0,0 +1,66 @@ + + + +# Staking Rewards Pallet Extrinsics + +## Create Reward Pool + +[`create_reward_pool`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.create_reward_pool) + +Create a new reward pool based on the config. + +Emits `RewardPoolCreated` event when successful. + +## Stake + +[`stake`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.stake) + +Create a new stake. + +Emits `Staked` event when successful. + +## Extend + +[`extend`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.extend) + +Extend an existing stake. + +Emits `StakeExtended` event when successful. + +## Unstake + +[`unstake`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.unstake) + +Remove a stake. + +Emits `Unstaked` event when successful. + +## Split + +[`split`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.split) + +No documentation available at this time. + +## Update Rewards Pool + +[`update_rewards_pool`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.update_rewards_pool) + +Updates the reward pool configuration. + +Emits `RewardPoolUpdated` when successful. + +## Claim + +[`claim`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.claim) + +Claim a current reward for some position. + +Emits `Claimed` event when successful. + +## Add To Rewards Pot + +[`add_to_rewards_pot`](https://dali.devnets.composablefinance.ninja/doc/pallet_staking_rewards/pallet/enum.Call.html#variant.add_to_rewards_pot) + +Add funds to the reward pool's rewards pot for the specified asset. + +Emits `RewardsPotIncreased` when successful. diff --git a/docs/docs/pallets/staking-rewards/integration-guide.md b/docs/docs/pallets/staking-rewards/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/staking-rewards/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/templates/pallet-integration-guide-template.md b/docs/docs/pallets/templates/pallet-integration-guide-template.md new file mode 100644 index 0000000..9fce4b0 --- /dev/null +++ b/docs/docs/pallets/templates/pallet-integration-guide-template.md @@ -0,0 +1,44 @@ +```md +# [name] Integration Guide + +[**Pallet Overview & Workflow**](../pallet-name.md) + +## Integration Status + +| Dali | Picasso | Composable | +| ---- | ----------- | ---------- | +| Done | In Progress | No | + +## Setup / Configuration + +*Include any notes about pallet lifecycle or states. A state diagram that notes +transition requirements if you're feeling fancy* + +## RPC & Data Retrieval + +*RPCs w/ links to cargo docs?* + +## Subsquid Data Retrieval + +*Not required yet since we have no subsquid yet* + +## Locally Consumed Types + +*Types the pallet consumes, potentially linking to pallet#config docs* + +## Calculations & Sources of Values + +*"Provide calculations of APY or APR if any and mention the source of all values +that need to be fetched from the chain/backend/subsquid or any other data +source"* + +## Extrinsic Parameter Sources + +*Document sources of extrinsic parameters, hard coded, calculated on the front +end, user provided* + +## Pricing Sources + +*"Pricing sources are a must have if any Zeplin designs show users values in USD +$"* +``` \ No newline at end of file diff --git a/docs/docs/pallets/uniswap-v2.md b/docs/docs/pallets/uniswap-v2.md new file mode 100644 index 0000000..5837394 --- /dev/null +++ b/docs/docs/pallets/uniswap-v2.md @@ -0,0 +1 @@ +# uniswap-v2 diff --git a/docs/docs/pallets/uniswap-v2/extrinsics.md b/docs/docs/pallets/uniswap-v2/extrinsics.md new file mode 100644 index 0000000..fdd50e4 --- /dev/null +++ b/docs/docs/pallets/uniswap-v2/extrinsics.md @@ -0,0 +1,61 @@ + + + +# Uniswap V2 Pallet Extrinsics + +## Create + +[`create`](https://dali.devnets.composablefinance.ninja/doc/pallet_uniswap_v2/pallet/enum.Call.html#variant.create) + +Create a new pool. + +Emits `PoolCreated` even when successful. + +## Buy + +[`buy`](https://dali.devnets.composablefinance.ninja/doc/pallet_uniswap_v2/pallet/enum.Call.html#variant.buy) + +Execute a buy order on a pool. + +The `base_amount` always represent the base asset amount (A/B => A). + +Emits `Swapped` event when successful. + +## Sell + +[`sell`](https://dali.devnets.composablefinance.ninja/doc/pallet_uniswap_v2/pallet/enum.Call.html#variant.sell) + +Execute a sell order on a pool. + +The `base_amount` always represent the base asset amount (A/B => A). + +Emits `Swapped` event when successful. + +## Swap + +[`swap`](https://dali.devnets.composablefinance.ninja/doc/pallet_uniswap_v2/pallet/enum.Call.html#variant.swap) + +Execute a specific swap operation. + +Buy operation if the pair is the original pool pair (A/B). +Sell operation if the pair is the original pool pair swapped (B/A). + +The `quote_amount` is always the quote asset amount (A/B => B), (B/A => A). + +Emits `Swapped` event when successful. + +## Add Liquidity + +[`add_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_uniswap_v2/pallet/enum.Call.html#variant.add_liquidity) + +Add liquidity to a constant_product pool. + +Emits `LiquidityAdded` event when successful. + +## Remove Liquidity + +[`remove_liquidity`](https://dali.devnets.composablefinance.ninja/doc/pallet_uniswap_v2/pallet/enum.Call.html#variant.remove_liquidity) + +Remove liquidity from constant_product pool. + +Emits `LiquidityRemoved` event when successful. diff --git a/docs/docs/pallets/uniswap-v2/integration-guide.md b/docs/docs/pallets/uniswap-v2/integration-guide.md new file mode 100644 index 0000000..d654dc7 --- /dev/null +++ b/docs/docs/pallets/uniswap-v2/integration-guide.md @@ -0,0 +1 @@ +# Integration Guide diff --git a/docs/docs/pallets/vault.md b/docs/docs/pallets/vault.md new file mode 100644 index 0000000..e99524f --- /dev/null +++ b/docs/docs/pallets/vault.md @@ -0,0 +1,7 @@ +# Vault + +*The Vault pallet is a batteries included vault module, usable as liquidity pools, yield farming vaults or embeddable as core infrastructure.* + +--- + +{{#include ../../../code/parachain/frame/vault/README.md:5:}} diff --git a/docs/docs/pallets/vault/extrinsics.md b/docs/docs/pallets/vault/extrinsics.md new file mode 100644 index 0000000..1e73328 --- /dev/null +++ b/docs/docs/pallets/vault/extrinsics.md @@ -0,0 +1,120 @@ + + + +# Vault Pallet Extrinsics + +## Create + +[`create`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.create) + +Creates a new vault, locking up the deposit. If the deposit is greater than the +`ExistentialDeposit` + `CreationDeposit`, the vault will remain alive forever, else it +can be `tombstoned` after `deposit / RentPerBlock `. Accounts may deposit more funds to +keep the vault alive. + +### Emits + +* [`Event::VaultCreated`](Event::VaultCreated) + +### Errors + +* When the origin is not signed. +* When `deposit < CreationDeposit`. +* Origin has insufficient funds to lock the deposit. + +## Claim Surcharge + +[`claim_surcharge`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.claim_surcharge) + +Subtracts rent from a vault, rewarding the caller if successful with a small fee and +possibly tombstoning the vault. + +A tombstoned vault still allows for withdrawals but blocks deposits, and requests all +strategies to return their funds. + +## Add Surcharge + +[`add_surcharge`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.add_surcharge) + +No documentation available at this time. + +## Delete Tombstoned + +[`delete_tombstoned`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.delete_tombstoned) + +No documentation available at this time. + +## Deposit + +[`deposit`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.deposit) + +Deposit funds in the vault and receive LP tokens in return. + +### Emits + +* Event::Deposited + +### Errors + +* When the origin is not signed. +* When `deposit < MinimumDeposit`. + +## Withdraw + +[`withdraw`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.withdraw) + +Withdraw funds + +### Emits + +* Event::Withdrawn + +### Errors + +* When the origin is not signed. +* When `lp_amount < MinimumWithdrawal`. +* When the vault has insufficient amounts reserved. + +## Emergency Shutdown + +[`emergency_shutdown`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.emergency_shutdown) + +Stops a vault. To be used in case of severe protocol flaws. + +### Emits + +* Event::EmergencyShutdown + +### Errors + +* When the origin is not root. +* When `vault` does not exist. + +## Start + +[`start`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.start) + +(Re)starts a vault after emergency shutdown. + +### Emits + +* Event::VaultStarted + +### Errors + +* When the origin is not root. +* When `vault` does not exist. + +## Liquidate Strategy + +[`liquidate_strategy`](https://dali.devnets.composablefinance.ninja/doc/pallet_vault/pallet/enum.Call.html#variant.liquidate_strategy) + +Turns an existent strategy account `strategy_account` of a vault determined by +`vault_idx` into a liquidation state where withdrawn funds should be returned as soon +as possible. + +Only the vault's manager will be able to call this method. + +### Emits + +* Event::LiquidateStrategy diff --git a/docs/docs/pallets/vault/integration-guide.md b/docs/docs/pallets/vault/integration-guide.md new file mode 100644 index 0000000..8b80a9a --- /dev/null +++ b/docs/docs/pallets/vault/integration-guide.md @@ -0,0 +1 @@ +{{#include ../../../../code/parachain/frame/vault/INTEGRATION.md}} diff --git a/docs/docs/pallets/vesting.md b/docs/docs/pallets/vesting.md new file mode 100644 index 0000000..c93cad0 --- /dev/null +++ b/docs/docs/pallets/vesting.md @@ -0,0 +1,7 @@ +# Vesting + +*The vesting pallet adds functionality to gradually unlock an accounts balance* + +--- + +{{#include https://raw.githubusercontent.com/ComposableFi/composable/main/code/parachain/frame/vesting/README.md:5:}} \ No newline at end of file diff --git a/docs/docs/technology/apollo-overview.md b/docs/docs/technology/apollo-overview.md new file mode 100644 index 0000000..93cfd3d --- /dev/null +++ b/docs/docs/technology/apollo-overview.md @@ -0,0 +1,61 @@ +# Apollo + +## An Overview of Apollo + +Apollo is a decentralized oracle that provides trustless, +flexible and permissionless access to off-chain data for applications built on Picasso. +Oracles provide pricing data, verify proof of payments, and authenticate real-world events. +This is achieved through a network of nodes, +each of which collect and validate data from various external sources such as APIs +and then broadcast this data to the network. + +The process of data collection and validation is crucial to ensure the integrity of the data +and prevent malicious actors from feeding false or manipulated information to a smart contract. +All oracle providers need to put down a stake of PICA and if their answers deviate by a threshold from the mean, +they are slashed. +This allows for greater flexibility in the types of data +that can be used and the complexity of the logic that can be executed. + +As a pallet on Picasso, +Apollo can be leveraged by other pallets to form DeFi primitives that build on top of its oracle functionality. +For example, [Angular Finance], which functions as a cross-chain money market and lending platform, +would make use of Apollo’s functionality for retrieving price feeds on their assets. + +[Angular Finance]: https://www.angular.finance/ + +## Mitigating MEV + +Importantly, Apollo is MEV-resistant. +MEV, or Maximal Extractable Value, is a form of front-running transactions that occurs at the block creation level. +Apollo is able to overcome this challenge through its design, which also provides other security benefits. +Normally, one common type of MEV allows actors to reorganize transactions in a block. +For example, in a proof stake blockchain, +a validator could see a new price update before it’s executed through the oracle +which could allow them to include a transaction to buy or sell an asset based on the expected price (frontrunning). + +With the use of substrate blockchain `on_initialize` hook in Apollo, +the order of the Oracle price updates is guaranteed; +i.e when a block initializes, the price of an asset is guaranteed a slot into the block. +Apollo also implements an algorithm that instead of trusting one oracle for the price, +it takes the median price from different oracles which significantly limits the ability of oracle manipulation. + +![high-level-architecture](./apollo/high-level-architecture.png) + +The implementation of how Apollo can be utilized is dependent on the developer. +Apollo has asset ID types which represent an asset pair. +Here's an example of how the architecture of Apollo submits the price of an asset: + +- Firstly, a price is requested using the request price function (this can be built into pallets using Apollo) +- The request triggers an offchain worker to go out and query a local price feed. For more + information + on off-chain workers see [here](https://substrate.dev/docs/en/knowledgebase/learn-substrate/off-chain-features) +- As the off-chain worker fetches the proper price from the oracle’s price feed, it prepares a transaction and + submits it back on-chain +- On the top of the next block if the threshold is met, + it will: + - take the median price + - check to make sure that no prices are too old + - either reward or slash the oracle providers +- Finally, the price and block number that was identified will be stored and available to the entire chain + +Apollo is built to fulfill one task - provide an honest and non front-runnable price on-chain. diff --git a/docs/docs/technology/apollo/apollo-architecture.png b/docs/docs/technology/apollo/apollo-architecture.png new file mode 100644 index 0000000..ba4e45d --- /dev/null +++ b/docs/docs/technology/apollo/apollo-architecture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c00f2f201e026446945d53339822dc7f8c0132385bbb1372794e6c62fcac13a7 +size 243780 diff --git a/docs/docs/technology/apollo/apollo-deployment.md b/docs/docs/technology/apollo/apollo-deployment.md new file mode 100644 index 0000000..d962537 --- /dev/null +++ b/docs/docs/technology/apollo/apollo-deployment.md @@ -0,0 +1,15 @@ +# Apollo Deployment + +Apollo can be used in smart contracts or in any other form of DeFi module which requires information on external assets. +Composable sits at an interoperable intersection of multiple ecosystems and Apollo’s functionality is central to any +DeFi activity within most DeFi applications in the Composable ecosystem. + +Apollo serves as a base for decentralized products and services to leverage for price information and event +verification. Developers can take advantage of Apollo in order to find reliable prices that avoid manipulation, and +fraud. The XCVM is constructed to tap into other pallets within the Composable ecosystem which enables developers +building applications on the XCVM to leverage Apollo for their protocols. + +If you’re a developer and want to connect your protocol to Apollo, reach out to us on our +[discord](https://discord.com/invite/composable). + +To operate an oracle on Apollo, check out the **[ set-up guide](../../developer-guides/oracle-set-up-guide.md)**. diff --git a/docs/docs/technology/apollo/apollo-how-it-works.md b/docs/docs/technology/apollo/apollo-how-it-works.md new file mode 100644 index 0000000..e49dd8d --- /dev/null +++ b/docs/docs/technology/apollo/apollo-how-it-works.md @@ -0,0 +1,53 @@ +# How it works + +Apollo is a permissionless, decentralized DeFi oracle. +As a pallet, Apollo is built directly into the base of the parachain. +As a result, it can use blockchain hooks on either side of the development of a block to find the median price +and immediately update data. +In addition, it is able to provide greater customization in the level of security it offers. + +![apollo_architecture](./apollo-architecture.png) + + +Oracle data providers operate nodes and provide a stake of tokens. +This stake is slashed by some amount if the node provides a price +that is different by a preset margin to the median data point submitted in a particular block. +To verify information from Apollo, an asset is first added to the oracle. +Then, an off-chain worker adds the price to the chain via a signed transaction. +The off-chain worker gets the price via an API call to a pre-configured price server. +The next block confirms if a threshold of minimum providers have found up-to-date information as well. +If so, the price will be averaged amongst providers who may then be rewarded +or have their stakes slashed based on how close they are to the median price. +Upon aggregation of the asset price, the median price is stored with a block number to prevent front-running. +This is made possible through the use of Substrate pallets instead of smart contracts, +where such a function can be performed in one transaction. + +In other DeFi oracles, owners can add or remove different price feeds through permissions, +which opens the door for price manipulation. +In the past, this meant that Chainlink paused an oracle for Luna on the platform Blizz Finance, +which led to leveraged trades with artificially low collateral ratios that led to Blizz Finance being drained. +Apollo avoids this by being permissionless and enabling any DeFi user to operate a node. + +Apollo further reduces the ability for price manipulation by proving the option of time-weighting, +for a time-weighted average price (TWAP). Aggregated prices are applied weights proportional to their interval of time. +If an aggregated price has been held for a longer interval, it is given more weight. +Developers are able to use TWAP to a customized degree, +as longer intervals do open some ability for front-running while avoiding price manipulation through false data. + +In the future, a feature Apollo will incorporate is price banding. +This means users will be able to select a ‘trusted server’(TS) that measures prices between its own server, +and the difference found on other servers. +If the delta between the two is significantly different, this would alert users to potential manipulation. +Attackers would have to broadcast the wrong price from multiple nodes, +over multiple intervals, which raises the stake required on their behalf. +The TS would not act as a single trust source for the price either, however, +as it would only alert users on price differentials, and not price. +In the event a TS is compromised, it can be ignored while the oracle still provides an asset price. + + +![price_bonding_apollo](./price-bonding-apollo.png) +_Price banding on Apollo_ + + +Through Apollo’s permissionless and MEV-resistant nature, +and features like TWAP, it acts as a superior, composable DeFi oracle. diff --git a/docs/docs/technology/apollo/high-level-architecture.png b/docs/docs/technology/apollo/high-level-architecture.png new file mode 100644 index 0000000..2ae8a5b --- /dev/null +++ b/docs/docs/technology/apollo/high-level-architecture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6904f319a179e4cd926231b3797d7acc993e5d8de365414a44b8d4fe6f292fa7 +size 2476111 diff --git a/docs/docs/technology/apollo/price-bonding-apollo.png b/docs/docs/technology/apollo/price-bonding-apollo.png new file mode 100644 index 0000000..158b708 --- /dev/null +++ b/docs/docs/technology/apollo/price-bonding-apollo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d07304523e4a47e5c99b68ea35ee3d2b6b9ddcebee74a1e74938da5d2ec9d6dc +size 76136 diff --git a/docs/docs/technology/apollo/technical-details.md b/docs/docs/technology/apollo/technical-details.md new file mode 100644 index 0000000..d20f0d6 --- /dev/null +++ b/docs/docs/technology/apollo/technical-details.md @@ -0,0 +1,105 @@ +# Technical Details + +Oracles on Composable will utilize our Apollo oracle pallet. Apollo is: + +- Built in a highly flexible way +- Able to have its use customized totally determined by the implementer +- Designed to be highly powerful and comes with great responsibility + +As for the validity of the data, +all oracle providers need to put down a stake and if their answers deviate by a threshold from the mean, +they are slashed. Specific API methods are as follows: + +- `Request_price (origin: OriginFor, asset_id: u64)` and `do_request_price(who: &T::AccountId, asset_id: u64)` + - The former is an extrinsic call, and the latter should be called while writing a pallet + - If the price for an asset is deemed to be “stale” by your application, + based on the amount of blocks back that this is, + calling this will trigger a price fetch from the oracle on the given asset ID + - From the pallet you can pass through an account and pay for your applications oracle updates (see cookbook) +- `prices(asset_id: u64) -> Price` + - Price {price: u64, block: BlockNumber} + - This will return the price and the block number the price was set at for the asset_id + - This is replaced when a new price comes in + +The oracle is meant to be used in two ways. +Either you take the price presented at face value (not recommended) +or you check the last time the oracle was updated and schedule for a future price. +Or, you can use a combination of both; for such “combo” prices: + +It is up to the developer to determine their risk factors and set a proper threshold. +For example, an app that does lending has a longer window that can accept an old price. +For example, 5 blocks old. A perpetual future platform may want to schedule all calls for a future price. +A simple if statement can do this. +Scheduling a future call should be used with an `on_init` hook. +Note that using a future price should pre-lock funds that a user will take and +probably use some form of user set price banding. + +## Technical Requirements for Running Oracles + +The oracle is built into the base of the Composable parachain and heavily uses different blockchain hooks to “medianize" +(calculate and bring towards the median) and update data. +The goals of the oracle are to be flexible to use and offer integrators differing levels of security. + +To become an oracle data provider, one must run a node. Apollo is a decentralized permissionless network. +This means anyone can run a provider node and share in both the reward and the risk of slashing. +First, a user needs to download the composable repo and follow the guide to build it in the readme. + +There are two keys in the oracle setup: a signing key and a controller key. +The signing key needs to be injected into the node and the controller key collects rewards. +To start, first the controller key needs an adequate stake amount. + +It will call `set_signer(signer: T::AccountId)`. + +It is important to keep transaction fee funds in the signer account and manage that (subject to change). +Next, the key needs to be inserted: + +`Const insert = await api.rpc.author.insertKey(“orac”, seed, publicKey)`. + +The offchain worker will always fallback to query `localhost 3001`. +If you want to change that, you can insert your URL with the following: +- `await api.rpc.offchain.localStorageSet("PERSISTENT", key, value)` + - Where the key = “0x6f63772d75726c” + - And the value is the hex form of the desired URL + +In addition to running a node, oracle providers need to put down a stake of tokens. +The stake is slashed if the oracle provider inputs data that is a calculable amount away from the median data value +(such as price, in the case of a price oracle). Managing stake is accomplished as follows: + +- `add_stake(stake: BalanceOf)` to add more stake from any key to signing key +- Removing stake requires a time lock and involves two steps: + - remove_stake() → sent from controller + - reclaim_stake() → sent from controller + +Querying for relevant staker information involves: + +- asset_info(asset_id: u64) → AssetInfo + - Asset info contains the min answers the max answers for oracles plus how close to the median in percent a provider +needs to get to be rewarded and not slashed +- signer_to_controller(signer: T::AccountId) → T::AccountId + - Will return the controller of a signer +- controller_to_signer(controller: T::AccountId) → T::AccountId + - Will return the signer of a controller +- declared_withdrawls(signer: T::AccountId) → T::AccountId + - If you have any pending withdrawals + +After an asset type is added to an oracle, it can be requested for a price. This will trigger a two-phase update. +The first will be an HTTP call using an off-chain worker, +which goes to an application programming interface (API) managed by the node provider. +The call will fetch the price and add it to a signed transaction (tx) chain. +Then, on the next block, there is a check to see if a threshold of minimum providers has answered the particular data. + +Supposing that the minimum threshold has been met, +at the top of the block the chain will prune any stale prices (if the price is a certain number of blocks old), +and if the threshold is still met, +it will medianize the prices and reward or slash providers if they are within a specific threshold of the median. + +After the prices are aggregated, the median price is then stored for that asset ID with a block number. +Someone who is integrating with this pallet can determine their level of protection by using the block number. + +For example, if users are working with significant leverage, +they can schedule all calls to require a future price with a blockchain hook such as +`on_init`(to be run at the top of a block). This will mean all users will get a future price that is not frontrunnable. +Further, where this would typically take two transactions, +on Substrate users can do this with one transaction. +Alternatively, if the price requires a less strict risk model, +an application can use the current price if the price is under a certain number of blocks old. \ No newline at end of file diff --git a/docs/docs/technology/architecture.md b/docs/docs/technology/architecture.md new file mode 100644 index 0000000..1f39747 --- /dev/null +++ b/docs/docs/technology/architecture.md @@ -0,0 +1,35 @@ +# Architecture + +Composable Finance is dedicated to **enhancing the cross-blockchain infrastructure in decentralized finance via trust-minimized bridging and order flow optimization**. + +Composable’s architecture is thoughtfully constructed to actualize this mission. This includes three different blockchains serving their own unique purposes. The architecture also includes trust-minimized bridging via the IBC protocol, which not only connects Composable’s blockchains, but connects other ecosystems as well. The Composable Technical stack also includes the Composable Virtual Machine (CVM) and MANTIS, which both serve roles in transaction execution. + +These different components collectively facilitate a complete, end-to-end ecosystem for cross-chain DeFi. In brief, the core components of the technical architecture are as follows: + +## [MANTIS](mantis.md) +Multichain Agnostic Normalized Trust-minimized Intent Settlement (MANTIS) is an ecosystem-agnostic intent settlement framework. It is the culmination of all other elements mentioned in this page; it uses Picasso's trust minimized bridge (IBC connections) as well as the CVM to facilitate cross-chain execution of user intents. As a result, users can interact with a novel, intuitive, and streamlined experience for participating in cross-chain DeFi. +## [Composable VM](cvm.md) +In the blockchain industry, virtual machines play a key role in executing smart contracts, processing transactions, and ensuring the overall integrity of the chain. Existing virtual machines are designed for specific blockchains, such as the Ethereum Virtual Machine (EVM) being designed for the Ethereum chain. + +The Composable Virtual Machine (CVM) plays a different role in that it was constructed as a solution to carry out cross-chain operations. The CVM is an orchestration language and execution runtime for cross-chain program execution and intent settlement over IBC. With the CVM, developers are no longer restricted to one blockchain ecosystem and instead are able to execute cross-chain operations in one user-signed transaction. + +## [The IBC Protocol](ibc.md) + +Dozens of bridging solutions exist in DeFi, but only two transport layers live in production are actually trust-minimised, XCMP and IBC. [The Inter-Blockchain Communication (IBC) Protocol](https://www.ibcprotocol.dev/) is one such superior bridging solution; this protocol facilitates trust-minimized cross-chain bridging. While it was originally designed to bridge Cosmos-native chains (e.g. Cosmos SDK chains and the Cosmos Hub), the trust-minimized nature of the IBC in addition to a number of other benefits motivated Composable to leverage this protocol as the basis of [cross-chain bridges](https://www.trustless.zone/) - and therefore the primary means of connection between the various components in the Composable ecosystem. + +## [Composable Cosmos](../networks/composable-cosmos.md) + +Composable opted to deploy a Cosmos SDK chain as it enabled the customisation of consensus and other feature sets. Moreover, a Cosmos chain is the most seamless method of interacting with other existing Cosmos chains. Composable Cosmos enables far more efficient connections between IBC outside of Cosmos and existing Cosmos-based chains. Composable Cosmos currently serves as the IBC hub of the ecosystem, connecting Cosmos and expanding the Interchain with chains that are otherwise IBC-incompatible, such as those with non-Tendermint consensus implementations like Polkadot, Ethereum and Solana. Composable Cosmos's native token is PICA. + +## [Picasso](../networks/picasso-parachain-overview.md) + +Picasso is Composable’s Kusama parachain. Having a Kusama parachain enabled an IBC bridge to Kusama. Moreover, Picasso serves as the infrastructure layer powering the rest of the technical stack, offering primitives that support the ecosystem such as the [Pablo decentralized exchange](https://www.pablo.finance/). + +Picasso’s native token is also PICA. Its use current cases include collator staking on Picasso, Apollo staking, and validator staking. In the future, use cases will also include liquid staking revenue and bridging revenue. Moreover, [PICA is used for governing Picasso](../networks/picasso/governance.md). + +## [Composable Polkadot](../networks/composable-parachain-overview.md) + +Composable Polkadot is a parachain on the Polkadot network. Similarly to Picasso enabling us to seamlessly connect a trust-minimized bridge to Kusama, Composable Polkadot allows us to seamlessly connect the bridge to Polkadot. Moreover, Composable Polkadot inherits the security of the Polkadot relay chain, and thus offers an incredibly secure environment. Furthermore, having both a Kusama and Polkadot parachain has allowed us to connect the DotSama space at a greater level than ever before. + +Composable Polkadot’s native token is [LAYR](../networks/composable/LAYR-tokenomics.md). Its use cases include serving as the universal gas token for Composable, facilitating flash loans and borrowing, and participating in restaking, collator staking, and OpenGov on Composable Polkadot. + diff --git a/docs/docs/technology/cosmwasm-vm-overview.md b/docs/docs/technology/cosmwasm-vm-overview.md new file mode 100644 index 0000000..dd02c50 --- /dev/null +++ b/docs/docs/technology/cosmwasm-vm-overview.md @@ -0,0 +1,56 @@ +# Composable CosmWasm VM + +## Overview of Composable CosmWasm VM (ccw-vm) + +Composable is the first team building a CosmWasm virtual machine (VM) outside the Cosmos ecosystem that +developers can use to build with all the benefits of CosmWasm (CW) and the Cosmos Network. + +Confio's current implementation of CW is written half in Rust and half in Golang, +which means it is not compatible with Substrate and has never been used outside Cosmos. +Also, Confio's CW VM excludes library components but consists of a single implementation targeting the Cosmos SDK. + +Our team is creating a portable library version of CosmWasm that can be hosted on different implementations to +reduce the effort required to port CosmWasm to other ecosystems. +[Composable CosmWasm VM] (ccw-vm) has two host implementations which +allow developers to easily integrate CosmWasm into their ecosystems. +This ensures that ccw-vm is highly portable and has consistent execution semantics regardless of its host. +As a result, developers can integrate ccw-vm as a pallet, within a frontend app, or inside a CLI tool. + +[Composable CosmWasm VM]: https://github.com/ComposableFi/cosmwasm-vm + +## Value proposition for CosmWasm projects deployed on Cosmos + +Building a CosmWasm virtual machine (VM) will allow developers to run smart contracts directly on [Picasso], +our chain on Kusama. +This provides novel opportunities, such as enabling existing Cosmos projects and CW developers to run smart contracts in +the Polkadot & Kusama (DotSama) ecosystems simultaneously. + +Accessible, interoperable smart contract creation is crucial for developing ecosystems, especially nascent ecosystems, +that will play a significant role in the future of DeFi. + +[Picasso]: https://picasso.xyz/ + +## Overview of Components + +CosmWasm on Picasso can be divided into three components: + +- **CosmWasm VM:** An abstract engine that enables other applications to run CosmWasm programs. + Pallet CosmWasm is an application of the CosmWasm VM. +- **Pallet Cosmwasm:** Similar to a Cosmos SDK module, Pallet CosmWasm is the Substrate version of a CosmWasm module. + It uses the CosmWasm VM under the hood, and implements it to be able to run CW contracts on Picasso. +- **CW-CLI:** A tool for interacting with the Pallet CW, + both to get started with CosmWasm and to interact with the CW Pallet in Picasso. + Essentially, it is a communicator and helper tool. It can be used in local development and called by other programs. + Anyone using CW can use the CW-CLI, and it is not specific to Picasso. + + + +**Developer Tool - [Smart Contract Interface]:** With Composable Finance’s Smart Contract Tooling Interface, +we have abstracted the process of using CosmWasm and made it accessible through a browser. +This allows developers to easily upload their smart contracts and instantly test them, +saving time and reducing the overhead of interacting with a blockchain. + +Read our introductory thread for a preview of the [CosmWasm VM smart contract tooling interface]. + +[Smart Contract Interface]: https://tools.xcvm.dev/ +[CosmWasm VM smart contract interface]: https://twitter.com/ComposableFin/status/1600538100282761216?s=20&t=NkUt9w8mush_wmMpkph7xw diff --git a/docs/docs/technology/cosmwasm/deploy-and-run-cosmwasm-contracts-with-pdjs.md b/docs/docs/technology/cosmwasm/deploy-and-run-cosmwasm-contracts-with-pdjs.md new file mode 100644 index 0000000..c678b14 --- /dev/null +++ b/docs/docs/technology/cosmwasm/deploy-and-run-cosmwasm-contracts-with-pdjs.md @@ -0,0 +1,77 @@ +# Overview + +Follow this guide to upload, initialize and execute cw20 contract on local Picasso Rococo DevNet. + +## Prerequisites + +You successfully run simple transaction(like transfer) and observe events using Polkadot.js one one of Composable or Picasso runtimes. + +It does not require you to know CosmWasm contracts well, but general awareness would be super useful. + +You have [installed Nix](https://zero-to-nix.com/start/install) and successfully run any package from `composable` registry or installed container runner like `docker`. + +You know how Picasso DEX can be used via PD.js. + +## Examples + +Run `nix run composable#devnet-picasso` or `docker run --publish 9988:9988 composablefi/devnet-picasso` + +### CW20 + +1. Download [cw20](https://github.com/CosmWasm/cw-plus/releases/download/v1.0.1/cw20_base.wasm) contract +3. Click [Direct Link](https://polkadot.js.org/apps/?rpc=ws://127.0.0.1:9988#/explorer) in devnet startup output on one of nodes to open Polkadot.js. +4. Go to `Developer -> Submission -> Extrinsics -> cosmwasm -> upload -> file upload` , click on input and peek `cw20_base.wasm` +5. `Submit Transaction` as `ALICE` +6. Observe `cosmwasm.Uploaded.codeId` in events. +7. Events can be seen in `Network -> Explorer` +8. Call `cosmwasm -> instantiate` with `codeId` from event, gas `10000000000`, message `{ "decimals" : 18, "initial_balances": [], "name" : "SHIB", "symbol" : "SHIB", "mint": {"minter" : "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL"} }`, salt and labels to unique random numbers like `0x1234` and `0x4321`, other fields `0x`. +9. Observe `cosmwasm.Instantiated` event and click icon to copy `contract` address. +10. `cosmwasm -> execute` , put `contract` address from event, gas `10000000000`, message `{ "mint" : { "amount" : "123456789", "recipient" : "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL" }}`, other fields `0x`. +11. Observe `cosmwasm.Executed` execution success. + +### Read state + +1. `Storage -> cosmwasm -> contractToInfo -> 5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL` +2. Read `trieId: 0xaef7a272709ec3b6d60e3cc3f42679391bfeebfedc6f82dfb434374f37224318` from output. +3. Go to `Developer -> JavaScript` and use this key to get all child keys vai `api.rpc.childstate.getKeys`. +4. Use child keys to get storage data via `Developer -> Raw Storage` + +### DEX precompile (singleton instance contract embedded into Substrate runtime) + +1. Contract address is `5EYCAe5iidyqfb6z7dgK2d2Wpk9D1n8KpBUi1jra4a4PTPg4` + +2. Execute message is +```json +{ + "add_liquidity": { + "keep_alive": true, + "min_mint_amount": "0", + "pool_id": "0", + "assets": [ + { + "amount": "1000000000000", + "denom": "1" + }, + { + "amount": "1000000000000", + "denom": "4" + } + ] + } +} +``` + +### Do + +## CW4 + +Download [CW4 Group](https://github.com/CosmWasm/cw-plus/releases/download/v1.0.1/cw4_group.wasm) contract +and instantiate it with `{"members": [{"addr": "5yNZjX24n2eg7W6EVamaTXNQbWCwchhThEaSWB7V3GRjtHeL", "weight" : 1 }]}` message. + +## Testnet + +Repeat steps here. + +## DEX + +Form `Swap` according schema and execute. \ No newline at end of file diff --git a/docs/docs/technology/cosmwasm/existing-cosmwasm-projects-to-deploy-on-ccw-vm.md b/docs/docs/technology/cosmwasm/existing-cosmwasm-projects-to-deploy-on-ccw-vm.md new file mode 100644 index 0000000..ebc0397 --- /dev/null +++ b/docs/docs/technology/cosmwasm/existing-cosmwasm-projects-to-deploy-on-ccw-vm.md @@ -0,0 +1,24 @@ +# How existing CW projects can deploy on the ccw-vm + +This section explains how CosmWasm developers can test their contracts on the ccw-vm. +Generally, the entire codebase of a CosmWasm project can be compiled and uploaded to the ccw-vm on Picasso. +However, there is a minor difference between ccw-vm and the Cosmos chains' VM +which is the `data` field of the `Response` type. +Normally, it should be up to the users to use this `data` field and format it however they want. +But currently in Cosmos chains, after the instantiation of the contract, +the `data` field is formatted with protobuf and the SDK adds the instantiated contract's address in that field. +The ccw-vm leaves this field up to the user and doesn't touch it at all. + +Some contracts make use of this field, for example; +contract **A** might instantiate an instance from contract **B** and can use the +`data` field to read the address that is instantiated. +However, ccw-vm does not interfere with the `data` field, +so any contract that tries to read the contract address from this `data` field will fail. +Instead of reading the address from the `data` field, contracts can read this address from the emitted events. +A default `instantiate` event with the `contract_address` attribute key is emitted on every instantiate call. + +Developers can test the deployment of their projects on Picasso through a standard Command Line Interface (CLI) +that interacts with Pallet CosmWasm. At Composable, we utilize Nix to reproducibly build all necessary packages. +**To get started testing out CW contracts on the ccw-vm, check out our guide [here].** + +[here]: ../../developer-guides/cosmwasm/walkthrough diff --git a/docs/docs/technology/cosmwasm/synergy-with-ibc-for-cvm.md b/docs/docs/technology/cosmwasm/synergy-with-ibc-for-cvm.md new file mode 100644 index 0000000..d71ab63 --- /dev/null +++ b/docs/docs/technology/cosmwasm/synergy-with-ibc-for-cvm.md @@ -0,0 +1,40 @@ +# Synergy with IBC for the CVM + +__Connecting Satellite protocols & orchestrating smart contracts__ + + +At Composable, our mission is to promote a trustless and cohesive experience for web3. +To achieve this, we have chosen to build a CosmWasm VM (Virtual Machine) +as it is the most portable and robust solution available in the market. +This decision is in line with our adoption of the Inter Blockchain Communication Protocol (IBC) +as the basis of our transport layer via Centauri. + +Initially, existing CW projects deployed on different networks can create a clone protocol on Picasso and tap into +a new user- and liquidity base from DotSama. +Centauri, our bridge implementing the IBC protocol to reach beyond Cosmos into DotSama and NEAR protocols, +is currently in its testnet stage and launching in Q2. +Once it goes live, satellite protocols on Cosmos would then be able +to utilize Centauri as a transport layer to communicate and transfer assets between them. +This would lead to an array of protocols existing on multiple chains without any orchestration between them, +easing the user's experience. + +This is where the Composable Virtual Machine (CVM) comes in. +The CVM will be beneficial for developers +who have deployed satellite protocols on multiple chains that are currently incapable of cross-chain communication. +It is important to understand the difference here, multi-chain applications are often redeployed +or slightly modified codebases that provide the same functionality across different chains and layers. +While this may provide users with a familiar experience, it is not really cross-chain, +since liquidity itself is fragmented due to the absence of an interoperability standard. +With CVM, applications are natively cross-chain as they can operate cohesively across multiple chains and layers. + +In short, the CVM abstracts complexity from the process of sending instructions to the Routing Layer, +initiates call-backs into smart contracts, handles circuit failure such as network outages, provides finality, +and perhaps most notably, allows for the deployment of natively cross-chain protocols and smart contracts. +Throughout this experience, we enable users +to tailor their experience by maximizing for a desired parameter while minimizing ecosystem-specific decision making. +Furthermore, CosmWasm developers will have the ability +to call into applications on Solidity based chains through use of our Rust SDK. + +Our goal is not to create a new standard for cross-chain communication, +which is already the subject of numerous projects. +Instead, the CVM will serve as the orchestration layer for existing bridging protocols. diff --git a/docs/docs/technology/cosmwasm/writing-smart-contracts-with-cosmwasm.md b/docs/docs/technology/cosmwasm/writing-smart-contracts-with-cosmwasm.md new file mode 100644 index 0000000..39c8c6e --- /dev/null +++ b/docs/docs/technology/cosmwasm/writing-smart-contracts-with-cosmwasm.md @@ -0,0 +1,47 @@ +# Writing Smart Contracts with CosmWasm + +## CosmWasm’s Advantages + +Composable selected CosmWasm as the developer framework for smart contract deployment on the CVM as it offers +cross-chain support, is tightly compatible with Cosmos chains, and has superior security design. + +[CosmWasm](https://cosmwasm.com/) is an abbreviation derived from the combination of the name +[Cosmos](https://cosmos.network/) and the abbreviation for [WebAssembly](https://webassembly.org/), Wasm. It implements +the WASM smart contract engine for the Cosmos SDK and runs on the IBC. This allows projects using CosmWasm to +communicate cross-chain between all of the chains linked on the IBC protocol. It enables dApps to function as smart +contracts on Cosmos chains, without the need to develop a new chain. + +CosmWasm has a significant feature that enables multi-chain contracts, where a single contract can be used across multiple chains in one dApp. With the use of the Cosmos SDK, any chain can easily incorporate the CosmWasm module with minimal system overhead. Our development of pallet-CosmWasm has made it possible for any parachain to integrate and implement the CosmWasm framework on their chain. This integration provides a composition of multiple chains and migration functionality across different chains with pre-contract permission. CosmWasm is designed to connect various blockchains, allowing users to benefit from the utility of multiple chains without the need to choose one over the other. The framework also includes built-in, permissioned, pre-contract migration functionality. + +In terms of security, CosmWasm is designed to avoid the attack vectors found in Ethereum and Solidity, such as Reentrancy, +Arithmetic Underflows/Overflows, and Default Visibilities. Its security is further reinforced by its +[well-developed tooling and testing mechanisms](https://medium.com/cosmwasm/cosmwasm-for-ctos-i-the-architecture-59a3e52d9b9c) +[prioritized early in its conception](https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8). + +Due to these benefits, many DeFi projects have adopted CosmWasm as their smart contract framework, including notable +examples like Neutron, Secret Network, OKX, Crypto.org, and Osmosis. + + +## CosmWasm as the Developer Framework for the CVM + +CosmWasm’s inter-chain contract support works hand in hand with CVM’s interoperable smart contract functionality. +Through the adoption of CosmWasm, the CVM will be the first to bring its functionality to the DotSama ecosystem. +This will enable the CVM to combine the benefits of both ecosystems and connect CosmWasm to a broader range of DeFi +ecosystems. As such, developers will be able to write smart contract for DotSama, that exist as multi-chain contracts on +IBC-Cosmos. + +Accessible, interoperable smart contract creation is crucial for developing ecosystems, especially nascent +ecosystems, that will form a considerable role in DeFi’s future. These ecosystems and protocols that exist cross-chain +suffer from the fragmented liquidity of the DeFi space. As such, they need virtual machines like the CVM that enable +multi-chain contracts and cross-chain communication. + +CosmWasm’s customizability and use of the Rust programming language makes it optimal for adoption as a developer +framework for the CVM. Compared to Solidity, Rust makes it easier for developers to write secure code and comes with +stronger tooling support. This makes it well-suited to the development of infrastructure projects and the language of +choice in the DotSama ecosystem. + +CosmWasm is defined by its interoperability. Polkadot is defined by its shared security. By merging the two, the CVM is +able to leverage their advantages to create a novel smart contract platform within the DeFi space that is deeply +interoperable and highly secure. Thus, the CVM can act as an easy portal for existing or new protocols to participate +in the ever-expanding cross-chain movement, augmenting the unification of the DeFi industry and helping deliver the +ultimate goal of chain agnosticism in DeFi. diff --git a/docs/docs/technology/cvm.md b/docs/docs/technology/cvm.md new file mode 100644 index 0000000..6e4bde2 --- /dev/null +++ b/docs/docs/technology/cvm.md @@ -0,0 +1,30 @@ +# Composable Virtual Machine (CVM) + +The Composable Virtual Machine (CVM) is language and execution runtime for cross-chain program execution and intents settlement. +The CVM is an orchestration language on top of standards for cross-chain communication, specifically over [IBC](./ibc.md). + +## Summary +With the Composable Virtual Machine (CVM), developers can execute complex cross-chain operations in a single, user-signed transaction. With CVM, you're not restricted to a single blockchain universe. Just like you wouldn't want to be confined to one streaming service for all your entertainment needs, why settle for one blockchain network? CVM offers you a plethora of options, letting your digital assets enjoy the best of all worlds. + +Unlike existing iterations of blockchain virtual machines, the CVM does not force applications and smart contracts to +be deployed onto one particular chain. Instead, the CVM provides a novel opportunity for applications to be +**natively cross-chain**. The goal is to facilitate a top-down approach to interoperability and compatibility instead +of connecting different pre-existing pieces together. + +For users, CVM streamlines your experience by abstracting away complicated terms and protocols. In line with a trust-minimized, non-custodial approach, you own your assets at every step. It's cross-chain asset management, simplified. + +For developers, CVM offers native support for various liquidity markets, asset systems, and even bridges. This makes the CVM the most versatile cross-chain solution available. All you need is to write your program once and watch it execute anywhere, seamlessly. Developers do not have to focus on the complex technicalities required for interoperable transactions. Instead, +the CVM serves as an orchestration framework for cross-chain communication and function calling across multiple ecosystems. + +## The Importance of the CVM +User transactions and intents need a language for execution across different environments/ecosystems. CVM is the building block that energizes the Inter-Blockchain Communication (IBC) Protocol to be able to meet this need. + +For example, the CVM enables the ability to move Polkadot’s DOT token to Osmosis, swap to DOT to ETH, move ETH to Ethereum, swap to ETH to USDC, and move funds to Composable’s Cosmos chain. This all occurs in one user-signed transaction, which is expressed in plain English. + + +## [Specification](https://github.com/ComposableFi/composable-vm/blob/main/docs/cvm/specification.md) + +## [Account Abstractions(aka Virtual Wallet)](https://github.com/ComposableFi/composable-vm/blob/main/docs/cvm/account-abstraction.md) + + +## [Tutorial](./cvm/tutorial.md) diff --git a/docs/docs/technology/cvm/centauri-ntrn-neutron-osmo-osmosis.json b/docs/docs/technology/cvm/centauri-ntrn-neutron-osmo-osmosis.json new file mode 100644 index 0000000..fc88fbc --- /dev/null +++ b/docs/docs/technology/cvm/centauri-ntrn-neutron-osmo-osmosis.json @@ -0,0 +1,25 @@ +{ + "execute_program": { + "program": { + "instructions": [ + { + "spawn": { + "network_id": 4, + "assets": [ + [ + "158456325028528675187087900677", + { + "slope": "1000000000000000000" + } + ] + ], + "program": { + "instructions": [ + ] + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/docs/docs/technology/cvm/centauri-osmo-to-osmosis-to-pica-to-centauri.json b/docs/docs/technology/cvm/centauri-osmo-to-osmosis-to-pica-to-centauri.json new file mode 100644 index 0000000..b5669be --- /dev/null +++ b/docs/docs/technology/cvm/centauri-osmo-to-osmosis-to-pica-to-centauri.json @@ -0,0 +1,78 @@ +{ + "execute_program": { + "program": { + "instructions": [ + { + "spawn": { + "network_id": 3, + "assets": [ + [ + "158456325028528675187087900674", + { + "slope": "1000000000000000000" + } + ] + ], + "program": { + "instructions": [ + { + "exchange": { + "exchange_id": "237684489387467420151587012609", + "give": [ + [ + "237684487542793012780631851010", + { + "slope": "1000000000000000000" + } + ] + ], + "want": [ + [ + "237684487542793012780631851009", + { + "slope": "950000000000000000" + } + ] + ] + } + }, + { + "spawn": { + "network_id": 2, + "assets": [ + [ + "237684487542793012780631851009", + { + "slope": "1000000000000000000" + } + ] + ], + "program": { + "instructions": [ + { + "transfer": { + "to": { + "account": "centauri1u2sr0p2j75fuezu92nfxg5wm46gu22ywfgul6k" + }, + "assets": [ + [ + "158456325028528675187087900673", + { + "slope": "1000000000000000000" + } + ] + ] + } + } + ] + } + } + } + ] + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/docs/docs/technology/cvm/cosmos-cosmwasm-internals.md b/docs/docs/technology/cvm/cosmos-cosmwasm-internals.md new file mode 100644 index 0000000..02d0262 --- /dev/null +++ b/docs/docs/technology/cvm/cosmos-cosmwasm-internals.md @@ -0,0 +1,75 @@ +# Overview + + +In general CVM on CW-IBC is very similar, but more abstract version of https://github.com/osmosis-labs/osmosis/tree/main/cosmwasm/contracts/crosschain-swaps + + +## How to run local Cosmos nodes(devnet) with CVM + +There are 2 options to run CVM enabled devnet. + +First is Nix installation guide, and run via nix. Another run via docker. + +```bash +# this runs lightweight chain only with cosmos chains as on latest main branch +nix run composable#devnet-cosmos-fresh +``` + +```bash +# run all cosmos and dotsama chain with relays +docker run composablefi/devnet-xc:main +``` + +Picasso, Centauri and Osmosis are uploaded with CVM contracts. + +Centauri and Osmosis main target of testing and configuration. + + +Wait for relayer start relaying. + +Transfer ppica to Osmosis and uosmo to Centauri using command lines for daemons. +`nix run .#centauri-tx` and `nix run .#osmosis-tx` do it. + +Use preferred methods to observe transfer happened. +I look at logs at `/tmp/composable-devnet/`. + +And finally run sample CVM program: +```bash +# ppica on Centauri -> ppica on Osmosis -> swap to uosmo -> uosmo on Centauri +nix run .#xc-swap-pica-to-osmo +``` + + + +### ICS-20 Memo as `Spawn` carrier + +`Spawn` forms `ICS-20` packet with `memo`. + +`Assets` are put into `ICS-20` packet. + +`Assets` are sent to `cvm-executor` contract, and `wasm` termination callback is done to `cvm-outpost` contract with sender info and `Spawn` body. + +`Memo` wasm message contains information to verify check sender from hash. + +`cvm-outpost` contract verifies amount sent and proceed with move of assets up to amount in message via delegation from `cvm-executor`. + +Approach is needed because there is no `amount` information can be securely transferred in `memo`. + +### How to make Cosmos(CosmWasm) chain CVM enabled + +#### CW enabled chain + +If chain has `hook`s, there should be adapter in core library. There are Neutron, Osmosis and ICF hooks. + +If chain has custom protocol `adapter` should be coded for it. For example, order book or liquid staking. + +#### Non CW enabled + +`Shortcut`s for remote call should be developed. For example for native IBC protocol to do staking. + + +### Both + +For `hook` and `shortcut` build `outpost` tracking to handle packet failures + +Make CVM Executor to handle `instruction` via `adapter+hook` or `shortcut`. \ No newline at end of file diff --git a/docs/docs/technology/cvm/neutron-ntrn-osmosis.json b/docs/docs/technology/cvm/neutron-ntrn-osmosis.json new file mode 100644 index 0000000..e878ace --- /dev/null +++ b/docs/docs/technology/cvm/neutron-ntrn-osmosis.json @@ -0,0 +1,25 @@ +{ + "execute_program": { + "program": { + "instructions": [ + { + "spawn": { + "network_id": 4, + "assets": [ + [ + "237684487542793012780631851013", + { + "slope": "1000000000000000000" + } + ] + ], + "program": { + "instructions": [ + ] + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/docs/docs/technology/cvm/swap-pica-to-osmosis.json b/docs/docs/technology/cvm/swap-pica-to-osmosis.json new file mode 100644 index 0000000..e62702c --- /dev/null +++ b/docs/docs/technology/cvm/swap-pica-to-osmosis.json @@ -0,0 +1,92 @@ +{ + "execute_program": { + "salt": "737061776e5f776974685f6173736574", + "program": { + "tag": "737061776e5f776974685f6173736574", + "instructions": [ + { + "spawn": { + "network_id": 3, + "salt": "737061776e5f776974685f6173736574", + "assets": [ + [ + "158456325028528675187087900673", + { + "intercept": "123456789000", + "slope": "10" + } + ] + ], + "program": { + "tag": "737061776e5f776974685f6173736574", + "instructions": [ + { + "exchange": { + "exchange_id": "237684489387467420151587012609", + "give": [ + [ + "237684487542793012780631851009", + { + "slope": "1000000000000000000" + } + ] + ], + "want": [ + [ + "237684487542793012780631851010", + { + "intercept": "1" + } + ] + ] + } + }, + { + "spawn": { + "network_id": 2, + "salt": "737061776e5f776974685f6173736574", + "assets": [ + [ + "237684487542793012780631851010", + { + "slope": "1000000000000000000" + } + ] + ], + "program": { + "tag": "737061776e5f776974685f6173736574", + "instructions": [ + { + "transfer": { + "to": { + "account": "4qA3hVL1E8yLhVTSZFHbrpHFKI4=" + }, + "assets": [ + [ + "158456325028528675187087900674", + { + "slope": "1000000000000000000" + } + ] + ] + } + } + ] + } + } + } + ] + } + } + } + ] + }, + "assets": [ + [ + "158456325028528675187087900673", + "123456789000" + ] + ] + }, + "tip": "centauri1u2sr0p2j75fuezu92nfxg5wm46gu22ywfgul6k" +} \ No newline at end of file diff --git a/docs/docs/technology/cvm/tutorial.md b/docs/docs/technology/cvm/tutorial.md new file mode 100644 index 0000000..f278144 --- /dev/null +++ b/docs/docs/technology/cvm/tutorial.md @@ -0,0 +1,328 @@ +# CVM Tutorial + +This document provides an introductory tutorial on the fundamental utilisation of the Composable Virtual Machine (CVM), both from the Command Line Interface (CLI) and the TypeScript Node environment. + +Please note that this document assumes prior knowledge of Cosmos, CosmWasm, and blockchain fundamentals. It serves as a reference for users already acquainted with these concepts and aims to provide guidance on working with CVM. + +## Prerequisites + +Ensure that you have a clear understanding of how to interact with CosmWasm contracts. If you're unfamiliar with this process, we recommend referring to the official test contract guides. + +Additionally, make sure you are well-versed in how to make Cosmos RPC calls via the CLI. If you need assistance, consider consulting the official guides or reaching out on the Composable Discord. For mainnet usage, you may want to explore Celatone as an option. + +Lastly, it's important to be aware of Bech32 encoding for accounts and the use of IBC prefixed assets within the Cosmos ecosystem. + +### Deployments + +See `ComposableFi/networks` for contract addresses on mainnet. + +If you are interacting with CVM contracts on the DevNet, you can get their address via logs in `/tmp/composable-devnet/` or via calling the RPC. + +Configuration for latest CVM registry can be found in the `ComposableFi/env` in `cvm.json` file or queried from contract. + +### Shells + +Ensure that you have diligently followed the official setup guides provided for Osmosis and Composable Cosmos mainnet shells. + +Optionally, for those familiar with Nix and interested in leveraging it, consult the [Nix documentation](../../docs/docs/nix.md) for detailed instructions. To run a development network shell, you can execute the following commands: + +For Composable Cosmos DevNet: + +``` +nix develop "composable#centauri-devnet" --impure +``` + +For Osmosis DevNet: +``` +nix develop "composable#osmosis-devnet" --impure +``` + +For Composable Cosmos Mainnet: +``` +nix develop "composable#centauri-mainnet" --impure +``` + +For Osmosis Mainnet: +``` +nix develop "composable#centauri-mainnet" --impure +``` + +### Assets + +Please follow the multi-hop guide to transfer PICA or DOT (optional). + +For access to tokens on Devnet, you can request tokens via the #cvm-mantis-dev-chat channel on the Composable discord. + +## End to end + +The following steps outline a user's transaction journey: sending PICA from Composable Cosmos to Osmosis swapping them for OSMO. Identifiers for a similar process with DOT will be released in the near future, but these steps must be manually replicated. + +Additionally, this documentation includes commonly utilized queries for obtaining the state of the CVM in both a general context and for specific users. + +Finally, a program to address situations where funds become stuck due to cross-chain message failures is given. This is simply a transfer program + +#### Prominent identifiers + +PICA on Composable Cosmos is 158456325028528675187087900673 +OSMO on Composable Cosmos is 158456325028528675187087900674 +DOT on Composable Cosmos is 158456325028528675187087900675 + +PICA on Osmosis is 237684487542793012780631851009 +OSMO on Osmosis is 237684487542793012780631851010 +DOT on Osmosis is 237684487542793012780631851011 + +PICA <-> OSMO on Osmosis is 237684489387467420151587012609 +PICA <-> DOT on Osmosis is 237684489387467420151587012610 + + +### Transfer Composable Cosmos PICA to Osmosis + +Executing the following message enables the transfer of PICA from the sender account to the CVM executor contract and then transfers it to Osmosis. + +Please read and remove `//` commands before executing. + +```json + { + "execute_program": { + "salt": "737061776e5f776974685f6173736574", // each user has instances of Executor contract per user per salt, so each new slat instances new contract, + // while reusing salt reuses existing instances (and funds on these) + "program": { + "tag": "737061776e5f776974685f6173736574", // a number give by user which allows to differentiate on program from other (just of offchain indexing) + "instructions": [ + { + "spawn": { + "network_id": 3, // this is Osmosis + "salt": "737061776e5f776974685f6173736574", + "assets": [ + [ + "158456325028528675187087900673", // PICA on Centauri + { + "intercept": "1234567890", // amount to move to Osmosis, but be same or larger than moved to Executor + "slope": "0" + } + ] + ], + "program": { + "tag": "737061776e5f776974685f6173736574", + "instructions": [ + { + "exchange": { + "exchange_id": "237684489387467420151587012609", // PICA<->OSMO pool id as configured on Osmosis + "give": [ + [ + "237684487542793012780631851009", // PICA on Osmosis has other identifier + { + "intercept": "123456789", + "slope": "0" + } + ] + ], + "want": [ + [ + "237684487542793012780631851010", // OSMO on Osmosis + { + "intercept": "1000", // min want amount, larger value is less slippage + "slope": "0" + } + ] + ] + } + }, + { + "spawn": { + "network_id": 2, // Centauri + "salt": "737061776e5f776974685f6173736574", + "assets": [ + [ + "237684487542793012780631851010", + { + "intercept": "0", + "slope": "1000000000000000000" // 100% of OSMO after swap to be transferred to Centauri + } + ] + ], + "program": { + "tag": "737061776e5f776974685f6173736574", + "instructions": [ + { + "transfer": { + "to": { + "account": "AB9vNpqXOevUvR5+JDnlljDbHhw=" // base64 encoded 32 byte account to deposit assets on Centauri + }, + "assets": [ + [ + "158456325028528675187087900674", // OSMO identifier on Osmosis + { + "intercept": "0", + "slope": "1000000000000000000" + } + ] + ] + } + } + ] + } + } + } + ] + } + } + } + ] + }, + "assets": [ + [ + "158456325028528675187087900673", // this PICA identifier on Centauri + "1234567890", // When sending amount, in program amount must be equal to CW transaction amount + ] + ] + }, + "tip": "centauri12smx2wdlyttvyzvzg54y2vnqwq2qjatescq89n" // any address, use self for now + } +``` + +This is full execute messages for Wasmd. Please follow Wasmd/Notional/Osmosis how to send message for execution. + +As always - ensure you have funds. If you do not - please trace errors which tell you about this. + +If you think something is not working correctly, remove `Exchange` and `Spawn`, and re-attempt the message with only `Transfer` and then only `Exchange` to observe where the error is occuring. + +The above program can be executed using `nix run "composable#xc-swap-pica-to-osmo"` on devnet. + +On `mainnet`, after using the `centauri-mainnet` shell, run: + +``` +$BINARY tx wasm execute "" --from= -y --gas=5000000 --amount=123456789000ppica` +``` + +#### Tracing + + +All events raised by CVM are prefixed by `cvm.` All logs are prefixed by `cvm::` as logged by CVM contracts. + +On the sender side, look for wasmd `cvm` prefixed events, specifically `cvm.outpost.bridge.track.added` if the packet was sent from Composable Cosmos. + +`cvm.executor.exchange.succeeded` indicates the swap was successful on Osmosis. + +Events prefixed `cvm.executor.` trace deep execution of programs in the `executor`. All Executor events can be seen by [generating schema](./cosmwasm/README.md). + +All CVM events are wrapped around by IBC and wasmd modules events as documented by relevant parties. + +Some `cvm` events are prefixed with `wasm-` by wasmd. + +A very specific event is `wasm-cvm.executor.instantiated` with `_contract_address`, which may be equal `centauri12u8s70drvm6cg4fc6j93q0q3g5nw6rvk926rjctx96md4fttedaq787pyl`. + +This address will be used to query the state of the `executor`. + +In general, Celatone and other generalised indexers show execution very well. It occurs according to the sequence diagram in the CVM description. + +### Query state of contract + +After the schema is generated, you will be able to view all the queries that can be called. + +You can use the `State` query in the Executor to dump the whole state of the Executor. + +You can follow the CW20 and Cosmos Bank guide to retrieve the amount of assets on the `executor` address. + + +The following example is to retrieve the CVM state of the `executor`: +```sh +(devenv) bash-5.2$ $BINARY query wasm contract-state smart centauri12u8s70drvm6cg4fc6j93q0q3g5nw6rvk926rjctx96md4fttedaq787pyl '{ +"state" : [] }' +``` + +Field details are comprehensively documented in Rust doc comments and within the schema, which is generated from these doc comments. + +In some instances, failures may arise at the IBC and WASMD levels before the CVM reaches a stage where it can issue events. In such cases, it is recommended to consult the IBC and WASMD guides to monitor the execution process. Utilising indexers like Numia, Mintscan, and Cosmos Indexers can be particularly beneficial in addressing these scenarios. + +### CVM Exercise + +Replace the asset id for DOT and DOT<->OSMO pool identifier identifier in `execute` message body and then try to execute this. + +### Unstuck funds + +Here is a program to release stuck funds on the `executor`. + +This transfers 1 PICA to Osmosis, and than transfers some assets on the Osmosis `executor` to some account. + +Additionally, the `executor` includes a CW1 proxy contract, allowing users to recover stuck funds from Osmosis directly by simply sending CW20 or Bank transfer messages on behalf of the `executor`. + + + +```json + { + "execute_program": { + "salt": "737061776e5f776974685f6173736574", // retain same salt to talk to same Executor + "program": { + "tag": "137061776e5f776974685f6173736574", + "instructions": [ + { + "spawn": { + "network_id": 3, + "salt": "737061776e5f776974685f6173736574", + "assets": [ + [ + "158456325028528675187087900673", // PICA on Centauri + { + "intercept": "1234567890", // amount to move to Osmosis, but be same or larger than moved to Executor + "slope": "0" + } + ] + ], + "program": { + "tag": "137061776e5f776974685f6173736574", + "instructions": [ + { + "transfer": { + "to": { + "account": "AB9vNpqXOevUvR5+JDnlljDbHhw=" // base64 encoded 32 byte account to deposit assets + }, + "assets": [ + // he we move all 100% assets we know about + [ + "237684487542793012780631851009", + { + "intercept": "0", + "slope": "1000000000000000000" + } + ], + [ + "237684487542793012780631851010", + { + "intercept": "0", + "slope": "1000000000000000000" + } + ] + ] + } + } + } + } + } + ] + }, + "assets": [ + [ + "158456325028528675187087900673", + "1", // just something + ] + ] + }, + "tip": "centauri12smx2wdlyttvyzvzg54y2vnqwq2qjatescq89n" + } +``` + + +## Usage from TypeScript + +You can find types and simple client and CosmWasm JSON schemas in https://www.npmjs.com/package/cvm-cw-types package. + +Example of usage located in https://github.com/ComposableFi/composable/blob/main/code/cvm/cvm.ts . + +If you are using React, consider generating React `state` and `query` integrations using the CosmWasm client generator from JSON schemas. + +## Tech Talk + +https://discord.com/channels/828751308060098601/1162324949277622333 + +https://discord.com/channels/828751308060098601/1163404253537247283 \ No newline at end of file diff --git a/docs/docs/technology/ibc-overview.png b/docs/docs/technology/ibc-overview.png new file mode 100644 index 0000000..4141430 --- /dev/null +++ b/docs/docs/technology/ibc-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9130ea2a3566c6b5a0009b9bc51d669b4edd4d6029c7f2dcc6e9005659219e09 +size 262050 diff --git a/docs/docs/technology/ibc.md b/docs/docs/technology/ibc.md new file mode 100644 index 0000000..29b1967 --- /dev/null +++ b/docs/docs/technology/ibc.md @@ -0,0 +1,28 @@ +# Inter-Blockchain Communication Protocol (IBC) + +The IBC protocol is structured into two layers: IBC/TAO, which governs packet transmission, authentication, and ordering, and IBC/APP, which specifies application handlers for processing the packets. These handlers may include token transfer handlers (ICS20 standard), NFT handlers (ICS721), and others. + +**The transport layer (IBC/TAO) comprises light clients, connections, and channels**. Light clients are a succinct representation of the consensus of a counterparty chain with a verification algorithm, allowing the host chain to monitor the counterparty chain's state cost-effectively. The process initiates with the establishment of a connection built on top of a Client, encapsulating two connection ends formed by a successful handshake between the chains. Channels facilitate information exchange between applications on distinct chains, similarly established through a handshake protocol. + +The application layer focuses on the business logic involved in processing packets, which can be highly complex and evolves to meet the demands of protocols and users for new functionalities. The IBC specification outlines handlers for standardized token transfers, NFT transfers, cross-chain queries, and atomic token swaps across chains. + +In every communication between two applications, there is a **relayer**, an off-chain permissionless component responsible for constructing packets on one chain and submitting these packets to the counterparty chain. + +## Requirements to implement IBC on a network + +To implement IBC on a blockchain, various components are required. This section highlights three essential components. First, an implementation of the IBC protocol in the programming language that the underlying blockchain uses. Second, a light client and finally, you'll need an IBC-Relayer designed to be compatible with the chain. + +### IBC Implementations +This refers to the connection and packet level integration of the IBC implementation. It enables the protocol to establish handshake-based connections to securely process and interpret IBC opaque data packets between different blockchains. In production, there are only two implementations of this core IBC functionality. The first implementation is the original `ibc-go`, which is specifically designed for Cosmos SDK chains written in Golang. The second implementation is [`ibc-rs`](https://github.com/ComposableFi/centauri/tree/master/ibc/modules), an implementation of the IBC protocol for Rust based blockchains. It's worth noting that, among all the IBC-enabled chains in production, the majority use `ibc-go`, with the exceptions being Composable Polkadot, Picasso, and Composable Cosmos. + +### [Light Clients](./ibc/light-clients.md) + +Light clients serve as a lightweight, trustless mechanism for verifying the state of connected blockchains. They are essential components of the IBC protocol as they facilitate secure and efficient cross-chain interactions without the necessity of fully synchronizing and managing the complete history of every connected blockchain. Composable possesses extensive experience in writing multiple light clients for various blockchains with the intention of enabling communication via the IBC protocol. + +Composable's implementation of IBC on Picasso and Composable utilizes the [grandpa light client](https://github.com/ComposableFi/centauri/tree/master/light-clients/ics10-grandpa). The Grandpa protocol is Polkadot and Kusama's consensus mechanism used to finalize blocks on its relay chains. `GRANDPA` enables the verification of finality proofs of Parachain headers. + +The `ICS-8 client` enables light client implementations written in CosmWasm to run natively on blockchains built with the Cosmos SDK. The Grandpa light client is constructed using the `GRANDPA` protocol and written in CosmWasm, therefore, enabling the tracking of finality for Polkadot and Kusama parachains on Cosmos chains through CosmWasm contracts. + +### [Hyperspace Relayer](./ibc/hyperspace-relayer.md) + +Relayers act as intermediaries responsible for relaying messages, transactions, and state updates across interconnected blockchains within an IBC connection. Hyperspace is a custom-built relayer implementation that allows for transferring arbitrary packets on non-Cosmos blockchains using the IBC protocol. In the future, we anticipate that other relayer solutions will add support for cross-ecosystem message passing through IBC. However, as of now, Hyperspace is the only relayer implementation that has this functionality. \ No newline at end of file diff --git a/docs/docs/technology/ibc/beefy-light-client.md b/docs/docs/technology/ibc/beefy-light-client.md new file mode 100644 index 0000000..2840d46 --- /dev/null +++ b/docs/docs/technology/ibc/beefy-light-client.md @@ -0,0 +1,63 @@ +# 11-BEEFY IBC Light Client + +:::note + +**The IBC implementation on Picasso and Composable utilizes the grandpa light client, as beefy has not yet been deployed on Kusama. The content of this section pertains to a beefy light client which is not used in production.** + +::: + +[Parity](https://www.parity.io/)’s `Bridge Efficiency Enabling Finality Yielder (BEEFY)` and its novel consensus gadget that enables DotSama to be bridged to additional chains via very efficient finality proofs. Parachains get their finality from the Kusama relay chain, and thus BEEFY’s ability to create finality proofs provides finality for IBC on Picasso and an essential gateway for the bridge infrastructure. + +We are also developing a BEEFY light client implementation for Cosmos-IBC (11-BEEFY, spec pending. This product will enable Cosmos chains to follow the finality of the Kusama relay chain (and thus, the finality of Picasso). A single instance of this light client on any Cosmos chain can prove finality for any Kusama parachain, allowing Cosmos chains to verify IBC commitment packets (IBC consensus proofs). + +## BEEFY Finality Gadget + +With the [BEEFY protocol](https://www.youtube.com/watch?v=ZmIa_4hPRZ8&t=2378s), the authority set produces an extra finality proof for light clients which consists of the MMR root hash of all blocks finalized by [GRANDPA](https://polkadot.network/tag/grandpa/) (the finality gadget implemented for the Polkadot relay chain) at a given height. With the introduction of this protocol, light clients no longer need to be aware of all the headers in a chain for them to be convinced about finality. This drastically reduces the size of the data that light clients must store to follow the chain’s consensus to exactly 124 bytes. + +A preliminary [specification](https://github.com/paritytech/grandpa-bridge-gadget/blob/td-docs/docs/beefy.md) for BEEFY is already available and is largely implemented, barring a few kinks that need ironing out. At a high level, this is a new protocol that will be added to Polkadot without the need for a hard fork. Thanks to the [WebAssembly (Wasm)](https://webassembly.org/) runtime and the on-chain governance protocol, this new protocol will produce significantly lighter finality proofs for light clients for both on-chain and off-chain uses. It will achieve this by having the existing GRANDPA authority set periodically vote on the Merkle Mountain Range root hash of all blocks that have been considered final by the network. + +This proof is shown below: + +```markdown +pub struct BEEFYNextAuthoritySet { + /// Id of the next set. + /// + /// Id is required to correlate BEEFY signed commitments with the validator set. + /// Light Client can easily verify that the commitment witness it is getting is + /// produced by the latest validator set. + pub id: u64, // 8bytes + /// Number of validators in the set. + /// + /// Some BEEFY Light Clients may use an interactive protocol to verify only subset + /// of signatures. We put set length here, so that these clients can verify the minimal + /// number of required signatures. + pub len: u32, // 4bytes + /// Merkle Root Hash build from BEEFY AuthorityIds. + /// + /// This is used by Light Clients to confirm that the commitments are signed by the correct + /// validator set. Light Clients using interactive protocol, might verify only subset of + /// signatures, hence don't require the full list here (will receive inclusion proofs). + pub root: H256, // 32 bytes + } +``` + +```markdown +/// Data that light clients need to follow relay chain consensus +pub struct BEEFYLightClient{ + pub latest_BEEFY_height: u32, // 4bytes + pub mmr_root_hash: H256, // 32bytes + pub current_authorities: BEEFYNextAuthoritySet, // 44bytes + pub next_authorities: BEEFYNextAuthoritySet, // 44bytes + } +``` + + +## 11-BEEFY COSMOS-IBC Light Client + +Connecting to IBC requires both chains to embed a light client for proof of validation. In order to connect to IBC using Cosmos and Picasso, Composable is working to develop a Bridge Efficiency Enabling Finality Yielder (BEEFY) light client onto Picasso and Cosmos. + +To support Substrate-based chains on the Cosmos side, Composable will need a BEEFY-IBC client merged into IBC-Go; therefore, the first step in the process is to create a BEEFY-Go followed by a BEEFY-IBC. Once this is set, Composable will work on updating the relayer before launching the product. + +Composable has completed the development of this [BEEFY light client](https://github.com/ComposableFi/ibc-go/blob/main/modules/light-clients/11-beefy/README.md) in Go for the Cosmos ecosystem, with the product being called the 11-BEEFY COSMOS-IBC light client. Pending further audits, this light client will be merged upstream into the IBC-Go repo which hosts the canonical implementation of the [Tendermint](https://tendermint.com/) light client. + +Composable’s intent is that this light client will serve as the canonical light client for Cosmos chains to communicate directly with DotSama parachains. A single instance of the light client can track either the Kusama or Polkadot relay chain’s finality and be used to prove the finality of any of the connected parachains’ states. In the spirit of trustlessness, Composable has published a demo with [instructions](https://github.com/ComposableFi/ibc-go/blob/main/modules/light-clients/11-beefy/README.md) for everyone to run a test to verify the operation of the light client. The draft spec is available [here.](https://github.com/ComposableFi/ibc-go/blob/main/modules/light-clients/11-beefy/spec.md) diff --git a/docs/docs/technology/ibc/ethereum.md b/docs/docs/technology/ibc/ethereum.md new file mode 100644 index 0000000..d851e16 --- /dev/null +++ b/docs/docs/technology/ibc/ethereum.md @@ -0,0 +1,45 @@ +# Ethereum IBC + +:::tip +The inaugral implementation of IBC on Ethereum is now live on mainnet. Users can utilise [Mantis.app](https://games.mantis.app/) to bridge between Ethereum and Cosmos chains via Picasso. +::: + +Ethereum's integration with the IBC protocol expands the ability to offer novel and valuable DeFi use cases and enhance opportunities for participants across diverse ecosystems. In line with prior IBC extensions, incorporating essential components such as a light client, relayer, and IBC implementation remains a prerequisite. However, when extending IBC compatibility to Ethereum, it became imperative to supplement the relayer with a ZK-Circuit. + +Previous IBC extensions relied on ibc-rs, whereas, this particular integration utilises an IBC implementation in Solidity. The essential components powering the Ethereum IBC connection are described in the following sections. + +## Light Clients +Before Ethereum transitioned to Proof of Stake (PoS) from its former consensus mechanism, Proof of Work (PoW), developing a light client was notably challenging. Building a light client for any PoW blockchain presents difficulties due to the need for resource-intensive validation of PoW, storage requirements for large block sizes, slow and bandwidth-intensive syncing and having non-deterministic finality - this means that transactions are never truly finalised so there is always the potential for someone to create a longer chain originating from a block preceding the current one, excluding it from the valid chain. These challenges arise from PoW's computational complexity and resource demands, making it more intricate to implement a light client compared to blockchains using PoS consensus mechanisms. + +Composable has made substantial progress in developing light clients for networks that previously lacked them, conducting extensive research and development in this domain. In the IBC extension to Ethereum, the **Casper light client for the [Ethereum Beacon Chain](https://ethereum.org/en/roadmap/beacon-chain/#what-is-the-beacon-chain)** is used in production. This light client will be deployed on Picasso, which is already connected to the Cosmos and Polkadot ecosystems. + +:::info +Casper is Ethereum's PoS consensus protocol implemented within ETH 2.0. In Casper, validators participate in block creation and validation based on the amount of stake they lock up as collateral. This PoS system was adopted to enhance the security, scalability, and energy efficiency of Ethereum by reducing the need for computationally intensive mining while rewarding validators with transaction fees. +::: + +The Casper Light Client relies on the **Sync Committee**, which comprises 512 validators who undergo random selection once every sync committee period, approximately equal to one day. While a validator is actively participating in the sync committee, their primary responsibility entails consistently signing the block header representing the current chain head during each slot. The Sync Committee is a succinct way of getting a sample to verify a subset of the signatures of Ethereum. + +A Tendermint light client is deployed on Ethereum as a smart contract and responsible for verifying the validity of block headers from Picasso and ensuring that the consensus state of the source blockchain is consistent with the header being presented. These headers contain data such as block hashes, timestamps, and state roots. It will be too expensive to verify signatures from the validator set of Picasso, therefore, ZK-Snarks are used to verify all signatures in succinct proofs. Read more on light clients [here](light-clients.md). + +## ZK Circuit +Wthin the [Hyperspace](hyperspace-relayer.md) operation on Ethereum, a **zero-knowledge (ZK) circuit** is employed to optimise and sustain the cost of the relayer. A ZK circuit is a program capable of generating a proof when given a set of inputs. This proof can then be verified to ensure the correctness of each computational step executed within the circuit. + +The ZK circuit involves a **prover** and **verifier**. Similar to Hyperspace, the prover is a permissionless off-chain component that anyone can run. The verifier lives on-chain as a smart contract on Ethereum. The role of the verifier is to verify proofs submitted by the prover, in this case, a succinct proof of client updates from the Composable Cosmos chain. + +:::tip +Verifiers receive proofs from provers and subsequently validate these claims, resulting in the generation of zero-knowledge proofs. For an in-depth explanation of this process, [read here](https://ethereum.org/en/developers/docs/zksnarks). +::: + +In particular, the IBC connection to Ethereum currently operates with a Groth16 SNARK circuit specialized in verifying signatures of the Ed25519 signature scheme. The proving times stand at 2 minutes, thanks to Rapid SNARK, an accelerated prover software. + +:::info +The Ed25519 signature scheme is a cryptographic algorithm used for digital signatures and adopted by majority of Blockchains. It is based on the elliptic curve cryptography and provides strong security with relatively short key sizes. The scheme is named after the Edwards curve Curve25519, which is used as the underlying mathematical structure. Ed25519 offers efficient signing and verification operations, making it popular for various applications such as secure communication protocols, cryptocurrencies, and digital authentication systems. +::: + +In the next release, Succinct Lab's TendermintX ZK Tendermint light client circuit designed will be integrated to enhance the efficiency of relaying costs and accelerate client update speeds on Ethereum. + +## IBC implementation in Solidity +Building upon the existing IBC implementation in Solidity by [Hyperledger Labs](https://github.com/hyperledger-labs/yui-ibc-solidity), the contracts that have been deployed are optimised for a production-ready environment tailored for Ethereum. + +The ownership of the IBC contracts deployed on Ethereum for Picasso is presently held by a [team multisig wallet](https://etherscan.io/address/0xcbcfccb93b14e5cc55917a56f67f419f259e0813), with plans to transition control to PICA governance in the forthcoming release. This decision reflects the unprecedented nature of implementing IBC for the first time on Ethereum, emphasizing the need for a stable initial launch. Updates regarding any contract upgrades will be shared in our Discord community. + diff --git a/docs/docs/technology/ibc/hyperspace-relayer.md b/docs/docs/technology/ibc/hyperspace-relayer.md new file mode 100644 index 0000000..5b40463 --- /dev/null +++ b/docs/docs/technology/ibc/hyperspace-relayer.md @@ -0,0 +1,55 @@ +# Hyperspace Relayer + +_Composable's chain-agnostic, IBC Relayer_ + +This section introduces [Hyperspace] - the first event-driven, chain-agnostic IBC relayer that is fully written in Rust and based on ibc-rs, the Rust implementation of IBC. In the IBC architecture, a relayer is necessary because blockchains cannot communicate directly over the network. The primary function of a relayer is to "relay" information between any IBC-enabled chain. + +[Hyperspace]: https://github.com/ComposableFi/centauri/blob/master/hyperspace/README.md + +As Composable IBC was designed to extend the reach of IBC beyond the Cosmos ecosystem, it was necessary to develop a relayer that was both rust-based and IBC-compatible in order to birth interoperability on new ecosystems on. + +:::info + +At present, there are three IBC relayers available in Rust, Golang, and Typescript, which can be found [here](https://ibcprotocol.org/relayers/). However, these existing relayers were not designed to support chains beyond Tendermint/CometBFT based chains, and reconfiguring them would require significant technical effort. Therefore, it was necessary to develop a new relayer that can function with any underlying consensus or programming language used by the source/destination chain. + +::: + +There are several client verification algorithms currently available in Composable's light-client directory for different consensus engines, including: + +- [Ics07-tendermint](https://github.com/ComposableFi/centauri/tree/master/light-clients/ics07-tendermint) +- [Ics10-grandpa](https://github.com/ComposableFi/centauri/tree/master/light-clients/ics10-grandpa) +- [Ics11-beefy](https://github.com/ComposableFi/centauri/tree/master/light-clients/ics11-beefy) +- [Ics13-near](https://github.com/ComposableFi/centauri/tree/master/light-clients/ics13-near) + +## Hyperspace architecture + +Hyperspace is a chain-agnostic IBC relayer that can be extended to support new chains with little to no changes to the core framework. **Hyperspace is stateless**, this means it does not perform any form of data caching. The relayer, therefore, relies heavily on the nodes it's connected to for sourcing data as needed. This design choice eliminates a class of bugs that could come from cache invalidation. + +The relayer operates on an **event-driven model**, which means that it waits idly until it receives a finality notification from any of the chains it is linked to. This finality notification represents new IBC messages and events that have been finalized and are ready to be sent to the connected counterparty chain. + +Taking a closer look at Hyperspace's design, it can be broken down into three central components, each handling a distinct layer of the relayer's operations that collectively comprise the entire system. A visual representation of this breakdown is provided in the diagram below. + +![hyperspace_overview](../images-centauri/hyperspace-overview.png) + +The **Primitives** package serves as the foundation layer for the relayer, containing generic types and traits that allow for constructing the client component to interact with individual blockchains. Although it also includes functions for creating clients, connections, and channels on each chain, these operations may be better suited for the Core package. + +The second layer consists of **chain-specific** packages that are built upon Primitives. These packages contain customized objects, methods, and implementations specific to each blockchain. + +Finally, the **Core** package is responsible for the relaying logic and processes. It frequently communicates with the chain-specific packages, utilizing client objects such as ParachainClient and manipulating their endpoints to read on-chain data for preparing response messages to be sent to the counter-party chain. The Core functions as a processor, determining the workflow and performing tasks like parsing events, grouping messages, and batching packets. It also includes a simple CLI that manages four commands: relay, create-client, create-connection, and create-channel. + +The diagram below provides a visual representation of the different components of the relayer and their interactions. + +![hyperspace_architecture](../images-centauri/hyperspace-arch.png) +(Source:https://informal.systems/blog/comparing-hyperspace-hermes) + +## Hyperspace runs the Fisherman Protocol + +While trustless bridges are a preferable alternative to trusted solutions, they are still subject to attacks if one of the blockchains in question is taken over by a malicious validator set. The solution lies in the Fisherman Protocol. Thus, any relayer running Hyperspace in ‘Fisherman mode’ can report malicious blockchain headers to freeze bridges if a chain is taken over by bad actors. The relayer then receives the associated slashing rewards for themselves, thus incentivizing relayers to remain vigilant and on the lookout for malicious blockchain takeovers. + +![hyperspace_fisherman](../images-centauri/hyperspace-fisherman.png) + +:::tip + +Hyperspace is a permissionless relayer by design, which means that anyone can run a Fisherman node to earn rewards for helping to secure trustless bridges. + +::: \ No newline at end of file diff --git a/docs/docs/technology/ibc/light-clients.md b/docs/docs/technology/ibc/light-clients.md new file mode 100644 index 0000000..881ce91 --- /dev/null +++ b/docs/docs/technology/ibc/light-clients.md @@ -0,0 +1,135 @@ +# Light Clients + +Light clients are designed to operate effectively in environments where computational and memory resources are limited, such as mobile, on-chain contracts. They can verify the latest blockchain state without the need to execute and store full block data and state, instead tracking block headers and executing transactions to reach the latest state. It's important to note that blocks are composed of headers and transactions. + +Efficient light client protocols play a critical role in decentralizing and mainstreaming blockchain protocols. Most notably, they enable bridging via IBC. The IBC protocol uses light clients on either side of the connection to link to other chains, allowing for the transfer of IBC opaque packets of information (i.e., transactions and associated data). Composable IBC utilizes these light clients to create connections and leverage upon the bridging opportunities of the IBC: + + +![header_transactions](../images-centauri/header-transactions.png) + + +_The size of the transactions in a block might vary, but headers have a fixed size (usually no more than 1kb) and contain the following:_ + + +![header_overview](../images-centauri/header-overview.png) + + +Light client protocols consist of a combination of transaction Merkle proofs, state proofs, consensus proofs, and finality proofs, which are all usually included in the block headers with the exception of finality proofs. This is because finality proofs may differ from the consensus proof and require data that is an extension of the header. + + +## Transactions Root + +This is the Merkle root of all transactions that have been executed in this block. This Merkle root can be seen as a +kind of cryptographic compression that allow trustless verification in the event that some data was part of the original +data that was compressed by a Merkle proof, illustrated below: + + +![transactions_root](../images-centauri/transactions-root.png) + + +The Merkle proof required to check if some element was included in the root would be log2(n) hashes, which are usually +32 bytes. In the diagram above, we only need 4 hashes (outlined in blue) to prove or otherwise reconstruct the original +root hash that K was indeed part of the original Merkle tree. The math is: n = 16, log2(16) = 4. This enables light +clients to efficiently check which transactions were executed in a block without needing to download the full block that +may potentially contain thousands of transactions and having to scan this list linearly. + + +## State Root + +The state root of a blockchain is similar to the transactions root in that it is the output of the cryptographic +compression of data. However, where the transaction root is a compression of a list of transaction data, the state root +can be seen as the compression of a list of keys and values. + +Take, for example, the Ethereum state tree architecture: + + +![state_root](../images-centauri/state-root.png) + + +Hence, the keys and values are the data stored on the blockchain by contracts or core blockchain subsystems, like the +consensus protocol storing the list of authorities and their stakes. By compressing this data into a kind of Merkle +root, it is possible to check the existence of some key value against the root hash and a Merkle proof without needing +to maintain the full blockchain state, but still having the same trustless guarantees as a full node. + + +## Consensus Proofs + +The consensus proof that a block is valid is usually included in its header and its format is entirely dependent on the +consensus protocol of the blockchain. For proof-of-work (PoW) systems, the consensus proof is a nonce that satisfies the +equation: + + +![consensus_proofs_1](../images-centauri/consensus-proofs-1.png) + + +As seen above, finding a value that satisfies this equation would require a significant amount of computation as the +hash functions cannot be brute-forced, but verifying this consensus proof is relatively inexpensive and fast. + +Meanwhile, the consensus proof for a proof-of-stake (PoS) protocol is usually the output of a verifiable random function +where: + + +![consensus_proofs_2](../images-centauri/consensus-proofs-2.png) + + +Most blockchain protocols’ consensus mechanisms usually only guarantee liveness, hence verifying these consensus proofs +only tells if this block is valid. It does not, however, tell if this block should be considered as final. In the case +of PoS, blocks that are not signed by a public key in the known authority set are not considered to be valid. Consensus +proofs provide trust guarantees about a block to the nodes on the network pending finalization, as competing blocks for +the same block height may arise in a byzantine system. It is entirely up to the finalization protocol to provide safety +guarantees. + + +## Finality Proofs + +For light clients to verify that events are happening on chain, they need a finality proof. This is cryptographic proof +that the transactions in a block are final and that the block can never be reverted. These proofs could be part of the +headers or could be requested alongside the header from full nodes. + +For proof-of-work blockchains, this finality proof is actually embedded in the headers as the proof-of-work nonce. +However, this alone is not enough to guarantee finality. Rather, we need a certain threshold of similarly valid headers +that reference this header as its parent in order to be truly convinced of its finality. This vastly increases the +storage requirements for light clients that want to be convinced of finality, since they must store n headers to verify +the finality of n-1 headers. + +Even then, the finality is entirely probabilistic and dependent on the security of the hash functions used in deriving +the proof-of-work nonce. + +For proof-of-stake blockchains, the finality proof is usually not included in the header but is optionally available to +light clients to request alongside the headers. The finality proof will usually consist of the signatures of the known +authority set, who have staked their tokens on the network and sign what they think is the latest block in the +network. \The finality proofs in this system are signatures of this data from 2/3 + 1 of the known authority set, under +security assumptions that less than a third of the authority set is malicious. + + +## Ancestry Proofs + +Unfortunately, most finality proofs require light clients to be aware of the full chain of headers that have been +finalized in order to follow the finality protocol. To enable trustless bridging between two networks via light clients +which run in smart contract environments and have even stringent computation and memory constraints, Composable needs +smaller-sized ancestry proofs which do not require awareness of every header in the blockchain. + +This could be attempted using Merkle trees, where a light client simply tracks the Merkle root of all block headers seen +so far. Merkle proofs could then prove finality about any header to a light client that only knows the Merkle root of +all finalized blocks. However, because of the structure of Merkle trees, this would require recalculating the full tree +structure from the genesis block all the way to the latest block, for every new block. + +Thus, 2,097,151 nodes would need to be recalculated for every new block for blockchain that already has a million +blocks: + +```markdown + Tree height = log₂(1,000,000) // a million blocks + + + Tree height = 20 + + + Nodes in the tree = 2^(20 + 1) — 1 + + + Nodes in the tree = 2,097,151 +``` + +To prevent this staggering amount of work, Composable needs a tree structure that preserves the log2(n) proof sizes of a +Merkle tree but also re-uses in some way the previous hash computations on older nodes in the tree whenever new data is +added to the tree. diff --git a/docs/docs/technology/ibc/merkle-mountain-ranges.md b/docs/docs/technology/ibc/merkle-mountain-ranges.md new file mode 100644 index 0000000..ee904e5 --- /dev/null +++ b/docs/docs/technology/ibc/merkle-mountain-ranges.md @@ -0,0 +1,37 @@ +# Merkle Mountain Ranges + +Merkle Mountain Range trees resolve the high computational volume problem by enabling highly efficient ancestry proofs. +Merkle Mountain Ranges (MMRs) are a special kind of Merkle tree that is composed of perfectly-sized binary subtrees in +descending order of height. For example, an MMR tree with 1,000,000 leaves will be composed of 8 perfect subtrees of +heights: 19, 18, 17, 16, 14, 9 and 6: + + +![merkle_mountain_ranges_1](../images-centauri/merkle-mountain-ranges-1.png) + + +A key feature of MMR is the reuse of the previous computations (root hashes) whenever new leaves are added to the tree. +The rules for adding new leaves to an existing MMR tree require merging any two subtrees of the same height (i.e. the +pink section and blue section are merged to the hash in blue in the following two images), so there is only ever one +subtree per height level: + + +![merkle_mountain_ranges_2](../images-centauri/merkle-mountain-ranges-2.png) + + +![merkle_mountain_ranges_3](../images-centauri/merkle-mountain-ranges-3.png) + + +Merkle Mountain Ranges are also very efficient with proofs where the tree itself is composed of subtrees. Since MMR +subtrees are presented in descending height, the first subtree is typically the heaviest to compute. This also means +that, as the list grows, new leaves are actually less expensive to insert and prove. + + +![merkle_mountain_ranges_4](../images-centauri/merkle-mountain-ranges-4.png) + + +In the continued example of the above tree, the subtree that requires the most proof items is the first subtree, 4 + 2 +(peak nodes of the other 2 subtrees) = 6 proof nodes. The benefit of the MMR is that, when adding new leaves, there is +no need to recalculate the hashes of the first subtree, only the more recent ones: + + +![merkle_mountain_ranges_5](../images-centauri/merkle-mountain-ranges-5.png) diff --git a/docs/docs/technology/ibc/near.md b/docs/docs/technology/ibc/near.md new file mode 100644 index 0000000..501a0a2 --- /dev/null +++ b/docs/docs/technology/ibc/near.md @@ -0,0 +1,25 @@ +# NEAR IBC +_IBC everywhere_ + +:::note + +This section outlines our progress in connecting the IBC Protocol to NEAR and our upcoming plans. While we are still working on this project, we expect to launch sometime in Q1 2024. + +::: + +Composable’s bridging team have been working in close collaboration with the NEAR team to bring the necessary components for a GRANDPA light client implementation on [NEAR Protocol](https://near.org/). To do this, we have been assisting NEAR’s core developers with the development of infrastructure-level improvements for: + +1. Signature verification +2. Missing validity +3. Singular validation process +4. And more + +All of these can be found in our NEAR enhancement proposals [NEP-364](https://github.com/near/NEPs/pull/364), [NEP-384](https://github.com/near/NEPs/pull/384) and 9 PRs which have been merged into NEAR’s codebase. These changes will pave the way for our light client implementation, bringing IBC to the NEAR ecosystem. Additionally, we have received a grant from the NEAR Foundation as a result of Composable establishing an IBC bridge to NEAR Protocol. + +The following is a diagram detailing Composable IBC's implementation to NEAR Protocol: + +![centauri_stack](../images-centauri/NEAR-temp.png) + +NEAR IBC architecture + +We have plans to develop within ecosystems such as NEAR Protocol, with the ultimate goal of interconnecting all blockchains through IBC in the future. \ No newline at end of file diff --git a/docs/docs/technology/ibc/polkadot-kusama.md b/docs/docs/technology/ibc/polkadot-kusama.md new file mode 100644 index 0000000..69399d4 --- /dev/null +++ b/docs/docs/technology/ibc/polkadot-kusama.md @@ -0,0 +1,20 @@ +# Kusama ⬌ Polkadot IBC + +The **first implementation of IBC outside of the Cosmos** ecosystem was between [Kusama](https://kusama.network/) and [Polkadot](https://polkadot.network/) via Picasso Kusama and Composable. This was a significant development as no bridge exists connecting these two relay chains. + +:::info + +On Polkadot & Kusama, parachains can connect to each other using the [Cross-Chain Message Passing protocol (XCM)](https://wiki.polkadot.network/docs/learn-xcm). XCM messages are used to transfer tokens, execute smart contracts, and perform other actions across different parachains. Parachains lacked the means to communicate with each other across different relay chains until the development of IBC outside Cosmos. + +::: + +A diagram showcasing the components utilized in this implementation can be found below: + +![kusama_polkadot_bridge_stack](../images-centauri/kusama-polkadot-bridge-stack.png) +Kusama ⬌ Polkadot transfers utilizing IBC + +The shared components of the IBC implementations between Kusama ⬌ Polkadot and [Polkadot ⬌ Cosmos](../ibc/polkadot.md) is apparent from their respective architectures. This is due to the fact that the IBC protocol features a standardized structure for message passing and messaging requirements that must be adhered to + +By utilizing IBC as a trust-minimised access point for DotSama to the wider cryptocurrency ecosystem, a proven and successful cross-chain communication protocol can be leveraged to enable transfers of assets between parachains in both ecosystems. + +The fees for transferring between Polkadot and Kusama is 0.5% of the notional amount bridged. \ No newline at end of file diff --git a/docs/docs/technology/ibc/polkadot.md b/docs/docs/technology/ibc/polkadot.md new file mode 100644 index 0000000..8575d9b --- /dev/null +++ b/docs/docs/technology/ibc/polkadot.md @@ -0,0 +1,24 @@ +# Polkadot IBC + +IBC was once known as the native communication protocol of the Cosmos ecosystem until Composable worked on extending this piece of technology to non-Cosmos chains. It allows for trust-minimised cross-chain messaging to occur between blockchains. For the IBC connection between Polkadot and Cosmos, the Tendermint and Grandpa light clients are utilised alongside `ibc-rs` and the Hyperspace relayer on Picasso and Picasso Kusama. + +To connect the grandpa client implementation in Cosmos with the existing IBC stack, [the IBC specification](https://github.com/cosmos/ibc/pull/901) was extended to include the `10-wasm-light-client module`. This module serves as an adapter between CosmWasm light clients and the `ibc-go` stack, allowing for an easy integration between two different Consensus protocols. In the future, this update also enables light clients from other ecosystems to be easily ported into Cosmos with minimal difficulty. + +Picasso is equipped with the essential components for establishing connections to Parachains via IBC. This alleviates the integration bottlenecks that previously required each Cosmos appchain to wait and integrate with the wasm client module which is yet to be upstreamed. This streamlined approach significantly simplifies the process of bringing IBC communication between new extensions and Cosmos to production, enabling seamless integration with Cosmos chains as if they were connecting with each other directly. + +By leveraging the packet forwarding midddle, Picasso functions as an IBC Hub for Cosmos SDK chains, facilitating smooth IBC transfers between every IBC extension Picasso implements. + +A diagram showcasing the high-level architecture of this IBC connection can be found below: + +![cosmos_polkadot_bridge_stack](../images-centauri/centauri-stack.png) + +Cosmos ⬌ Polkadot transfers utilising IBC + +## Pallet Multihop +Pallet Multihop cam be likened to a packet forwarding middleware for connecting with the Polkadot Relay chain and parachains. It provides the functionality to send tokens via IBC and XCM simulatenously in one call. This unlocks seamless UX for users on other parachains to execute IBC transfers without requiring to bridge to Composable or Picasso. For example, this would enable a user to send ATOM from the Cosmos Hub to Moonbeam in one click or vice versa, enable a user on Moonbeam to send GLMR to Osmosis in one click. + +:::tip +With this entire IBC stack designed for blockchains built with Polkadot-SDK (previously named Substrate), implementing IBC on parachains and standalone Substrate chains has become easily portable. +::: + + diff --git a/docs/docs/technology/ibc/solana.md b/docs/docs/technology/ibc/solana.md new file mode 100644 index 0000000..23f7c64 --- /dev/null +++ b/docs/docs/technology/ibc/solana.md @@ -0,0 +1,54 @@ +# Solana IBC + +Composable is working on implementing the Inter-Blockchain Communication (IBC) protocol on [Solana](https://solana.com/), establishing trust-minimized connections with Ethereum, Cosmos, and Polkadot. This accomplishment stands as a pioneering achievement, overcoming technical challenges that were previously deemed impossible. + +Due to the requirements of implementing the IBC protocol, Solana and a number of other chains like [TRON](https://tron.network/) and [NEAR](https://near.org/) were previously thought to be incompatible with IBC. In collaboration with the University of Lisbon, a solution has been developed for making Solana and other IBC-incompatible chains capable of supporting IBC for the first time. Initially it will be deployed on Solana, with plans for expansion to other networks in the future. + +The TL;DR of this innovation is an AVS powered by the Solana Restaking Layer and deployed on Solana as a smart contract, providing all of the features needed to make Solana IBC-compatible. **Operators of the AVS receive messages about transactions on Solana, using this information to create blocks on the AVS that reflect these Solana transactions.** + +The [AVS for Solana IBC](../restaking/sol-ibc-avs.md) (previously referred to as the Guest Blockchain) serves as a replication of Solana, but unlike Solana, it is able to interoperate along the IBC landscape via [Mantis.app](https://games.mantis.app/). In this manner, the AVS for Solana IBC can be considered as a sort of Layer 2 (L2) of the Solana network. + +:::tip Solana Restaking +Through the Solana IBC connection, **[restaking is enabled on Solana](../restaking.md) for the first time**. Restaking is a new and popular concept primarily established in the Ethereum community. In brief, restaking involves staking an asset with a blockchain’s validators along the PoS mechanism using liquid staked and receipt tokens belonging to the underlying L1. + +This not only increases the yield a DeFi user can earn, but also enhances total security. These benefits are now being delivered into the Solana ecosystem as a necessary feature to implement IBC on the network. The restaking layer will be incentivized via the team staking competition designed for the [restaking vaults](../restaking/vaults.md). +::: + +## IBC Requirements & The Need for an AVS for Solana IBC +IBC is an end-to-end stateful protocol for reliable, ordered, and authenticated communication between two blockchains. It enables bi-directional asynchronous communication between two blockchains within a relatively short time window (an average of less than one minute per IBC message ([Kim, Essaid, and Ju, 2022](https://ieeexplore.ieee.org/document/9919970/)). Thus, IBC is the only current mechanism of choice for facilitating cross-chain communication in a trust-minimized manner. + +Yet, connecting to the IBC has a number of requirements. The IBC implementation on each blockchain has the following elements: + +- **Provable key-value store**: this provides a key-value store interface with the addition that it can cryptographically prove to an external verifier the presence or absence of a given key-value pair. It is often realised as a Merkle trie but other cryptographic commitment schemes are also possible. + +- **Counterparty’s light client**: an on-chain component responsible for processing and validating the blockchain headers of the counterparty blockchain. This client is light in the sense that processing only the headers requires a small amount of computational resources. + +- **IBC module**: handles the logic of the IBC Protocol and maintains all the state necessary for the packet exchange. Some blockchains such as those implementing the CosmWasm specification have native IBC support and hence this module is part of the runtime environment. Other blockchains are IBC-agnostic and hence the IBC module is implemented as a regular Smart Contract. + +- **Smart Contracts**: execute in the chain’s runtime environment and are responsible for sending and receiving IBC packets. + +In addition to the requirements mentioned in the first section of this documentation, for two blockchains to communicate along the IBC Protocol, an IBC connection must be established that meets the above requirements. This must be done through a four-way handshake whose purpose is to negotiate the protocol version and features to use, as well as to verify the identity and status of each chain. + +The four phases of the [handshake](https://github.com/cosmos/ibc/tree/main/spec/core/ics-023-vector-commitments) are: + +- **Init**: Chain A initiates the connection, sets the connection’s status to INIT and sends proofs of its view of: i) the status of the connection, and ii) chain B’s head. “Send” here means that an off-chain relayer forwards the message by executing a transaction on the other chain. +- **Try**: Chain B verifies the proofs, sets the connection’s status to TRYOPEN and sends replies with two analogous proofs. +- **Ack**: Chain A verifies the proofs, sets the connection’s status to OPEN and sends confirmation to chain B. +- **Confirm**: Chain B sets the connection’s status to OPEN. + +Additional technical requirements imposed by the IBC on chains that it connects are that the ledger needs to: + +- Provide a Smart Contract runtime with transactional state changes +- Support light clients and state proofs +- Provide block timestamps +- Support introspection including a view of past block hashes + +Yet, not all chains meet these requirements. Notably, Solana does not offer state proofs, and instead uses a [simpler mechanism for payment and state verification](https://docs.solana.com/proposals/simple-payment-and-state-verification). The AVS for Solana IBC serves as a solution to this problem. + +This [section](../restaking/sol-ibc-avs.md) outlines the approach taken for satisfying IBC requirements without having to extend the ledger implementation. This solution can run on any blockchain which offers a Smart Contracts runtime. We demonstrate it running on the Solana network and overcoming Solana’s lack of state proofs. + +## Benefits & Use Cases + +As a result of Solana IBC, the massive usership and liquidity of the ecosystem can flow into other IBC-enabled chains over Picasso and vice versa. Solana is a thriving ecosystem in terms of usership as well as in terms of value. As of December 7, 2023, the [total value locked (TVL) in Solana](https://defillama.com/chain/Solana) DeFi protocols is $712 million. This means Solana is the 7th largest blockchain in terms of TVL. The market cap of the network’s native SOL token was approximately $27.3 billion as of the same day. This puts SOL as the 6th largest token in terms of total market capitalization. + +Moreover, this connection allows for the development of new cross-chain use cases between Solana and other ecosystems, and enables users to more seamlessly navigate the cross-chain DeFi space. With the Solana IBC connection, users and developers will be able to implement any kind of cross-chain use case imaginable between Solana and the other IBC-enabled chains, including Cosmos, Polkadot, Kusama, and Ethereum. Thus, the speed, cost-effectiveness, and massive liquidity and usership of Solana can be leveraged from other ecosystems as well. diff --git a/docs/docs/technology/images-centauri/NEAR-temp.png b/docs/docs/technology/images-centauri/NEAR-temp.png new file mode 100644 index 0000000..ed84083 --- /dev/null +++ b/docs/docs/technology/images-centauri/NEAR-temp.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76b719832bfcc90df0ed1eddb8ff28b41b7a763f7a115f1ec7331160eb52e92e +size 4072546 diff --git a/docs/docs/technology/images-centauri/centauri-stack.png b/docs/docs/technology/images-centauri/centauri-stack.png new file mode 100644 index 0000000..3fc92de --- /dev/null +++ b/docs/docs/technology/images-centauri/centauri-stack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40d07ee3edc8897b7d0d3a718271e0b019d8fd54debc51c28f6f414646a3941 +size 3944735 diff --git a/docs/docs/technology/images-centauri/consensus-proofs-1.png b/docs/docs/technology/images-centauri/consensus-proofs-1.png new file mode 100644 index 0000000..acd4548 --- /dev/null +++ b/docs/docs/technology/images-centauri/consensus-proofs-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61944674aeeb0677c32a3ec5b018315564e50314f056725c8b744e94affe8dfc +size 80369 diff --git a/docs/docs/technology/images-centauri/consensus-proofs-2.png b/docs/docs/technology/images-centauri/consensus-proofs-2.png new file mode 100644 index 0000000..e0a193c --- /dev/null +++ b/docs/docs/technology/images-centauri/consensus-proofs-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e6c4fad088a48016d14dcfdf7f903eb0f589696411625b344272a49f692b90e +size 94948 diff --git a/docs/docs/technology/images-centauri/header-overview.png b/docs/docs/technology/images-centauri/header-overview.png new file mode 100644 index 0000000..d62199d --- /dev/null +++ b/docs/docs/technology/images-centauri/header-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b50009002b12997ec82a40af4814e8e348b303a9e20ebb976c4677f0cb077001 +size 881164 diff --git a/docs/docs/technology/images-centauri/header-transactions.png b/docs/docs/technology/images-centauri/header-transactions.png new file mode 100644 index 0000000..557c056 --- /dev/null +++ b/docs/docs/technology/images-centauri/header-transactions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04728532f5ee1200032a42806338ec8748f12d5065a10d08fe0dccf283abc370 +size 934947 diff --git a/docs/docs/technology/images-centauri/hyperspace-arch.png b/docs/docs/technology/images-centauri/hyperspace-arch.png new file mode 100644 index 0000000..c3a6f5c --- /dev/null +++ b/docs/docs/technology/images-centauri/hyperspace-arch.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dffa92669153f4ff7a1100a365e65067ababd549bb6f4bcd08b4dd99d142f2b +size 417852 diff --git a/docs/docs/technology/images-centauri/hyperspace-fisherman.png b/docs/docs/technology/images-centauri/hyperspace-fisherman.png new file mode 100644 index 0000000..1a33ef1 --- /dev/null +++ b/docs/docs/technology/images-centauri/hyperspace-fisherman.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eec196bf708386ddb28dd6569260a5403d85c7cca586f2eb9fb9b78d626c8d11 +size 709115 diff --git a/docs/docs/technology/images-centauri/hyperspace-overview.png b/docs/docs/technology/images-centauri/hyperspace-overview.png new file mode 100644 index 0000000..83f7753 --- /dev/null +++ b/docs/docs/technology/images-centauri/hyperspace-overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8a1d79b1bef68e4f862ebd8241c1958c5975fb3b950184248d8216c0312e74f +size 118530 diff --git a/docs/docs/technology/images-centauri/kusama-polkadot-bridge-stack.png b/docs/docs/technology/images-centauri/kusama-polkadot-bridge-stack.png new file mode 100644 index 0000000..86b8097 --- /dev/null +++ b/docs/docs/technology/images-centauri/kusama-polkadot-bridge-stack.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea64940466625ddda644e49153cf2023c1463f9022d2dd2455bda703357ec7b5 +size 1414355 diff --git a/docs/docs/technology/images-centauri/merkle-mountain-ranges-1.png b/docs/docs/technology/images-centauri/merkle-mountain-ranges-1.png new file mode 100644 index 0000000..116888b --- /dev/null +++ b/docs/docs/technology/images-centauri/merkle-mountain-ranges-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf839eb7436dbf66b728f039e45a4738a5cf2d33d68df6a239e071f6259f9ce6 +size 1283598 diff --git a/docs/docs/technology/images-centauri/merkle-mountain-ranges-2.png b/docs/docs/technology/images-centauri/merkle-mountain-ranges-2.png new file mode 100644 index 0000000..8d37d49 --- /dev/null +++ b/docs/docs/technology/images-centauri/merkle-mountain-ranges-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:586203a722c2994e310aa0558573a94820d1e194266da767145b80f090c6c458 +size 418640 diff --git a/docs/docs/technology/images-centauri/merkle-mountain-ranges-3.png b/docs/docs/technology/images-centauri/merkle-mountain-ranges-3.png new file mode 100644 index 0000000..1b6b20a --- /dev/null +++ b/docs/docs/technology/images-centauri/merkle-mountain-ranges-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7d7834bf385417b2178542f18ea3dd1394b1730fd0dde2ad3ff0b996469b0bc +size 424994 diff --git a/docs/docs/technology/images-centauri/merkle-mountain-ranges-4.png b/docs/docs/technology/images-centauri/merkle-mountain-ranges-4.png new file mode 100644 index 0000000..0590d80 --- /dev/null +++ b/docs/docs/technology/images-centauri/merkle-mountain-ranges-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f2949594de10cfe514b56308d113b88b4606defd2438aacfde24473328ed9af +size 384437 diff --git a/docs/docs/technology/images-centauri/merkle-mountain-ranges-5.png b/docs/docs/technology/images-centauri/merkle-mountain-ranges-5.png new file mode 100644 index 0000000..f233d8e --- /dev/null +++ b/docs/docs/technology/images-centauri/merkle-mountain-ranges-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e27a5bbbf35840524c4964fa3959f6b82f5220fd9dc5c678aeee69bcfa485568 +size 1184502 diff --git a/docs/docs/technology/images-centauri/state-root.png b/docs/docs/technology/images-centauri/state-root.png new file mode 100644 index 0000000..62a43fa --- /dev/null +++ b/docs/docs/technology/images-centauri/state-root.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b206fa27f83f38ed5e470b8770ca197c0c05b255837df8afd00939bb200b3559 +size 411157 diff --git a/docs/docs/technology/images-centauri/transactions-root.png b/docs/docs/technology/images-centauri/transactions-root.png new file mode 100644 index 0000000..846bf76 --- /dev/null +++ b/docs/docs/technology/images-centauri/transactions-root.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e67c6b79e4b1a0820d02e2c752049158de1ac4dc8811c2cbd67b8ad342dd4c +size 161807 diff --git a/docs/docs/technology/liquid-staking.md b/docs/docs/technology/liquid-staking.md new file mode 100644 index 0000000..388fc13 --- /dev/null +++ b/docs/docs/technology/liquid-staking.md @@ -0,0 +1,17 @@ +# Polkadot Liquid Staking + +Polkadot, utilising a Nominated Proof-of-Stake (NPoS) consensus model, allows DOT holders to stake their tokens to secure the network by nominating tokens to validators in return for yield. To enhance the utility of staked DOT, Composable has created a new liquid staking token (LST), called **Liquid Staked DOT (LSDOT)** that enables the liquidity to of staked DOT to be utilised without compromising the network's security. + +:::info +Liquid staking is a mechanism that allows holders of staked assets to access liquidity while continuing to participate in staking or securing a blockchain network, in this case, Polkadot. Traditional staking involves the locking of tokens for a specified duration to support network consensus and earn staking rewards, making these assets illiquid. Liquid staking protocols address this challenge by issuing fungible or representative tokens (e.g., staked versions of the original tokens) in exchange for the locked assets. + +These liquid tokens can then be freely traded, lent, or employed within decentralized finance (DeFi) applications, allowing users to navigate market fluctuations, generate additional yields, and actively engage with their assets while maintaining their staking commitments. +::: + +A primary objective of Composable's liquid staking protocol is to facilitate users in unlocking liquidity from their staked DOT tokens, offering a range of significant advantages. This enhanced liquidity empowers users to explore a broader array of DeFi platforms, seize more yield opportunities, and improve capital efficiency. In essence, it will optimize users' financial flexibility and access to DeFi opportunities while maintaining the integrity of the Polkadot network, fostering a more dynamic and robust DeFi experience for the DOT token. + +In the near future, this can be used to secure Composable’s ecosystem in line with the proof-of-stake (PoS) consensus model. This will be accomplished by allowing the restaking of LSDOT. **The result is pooled security**. This solution can be expanded to be offered to apps on Cosmos and other networks as Composable’s IBC connections continues to add new networks (such as to Ethereum and Solana). + +Initially, the first step will be to facilitate the restaking of LSDOT into Composable's restaking layer. This restaking layer is vital as it not only allows for securing Composable's network via PoS, but also facilitates partial block building and thus relieves concerns over block proposer censorship and agency issues. Once this model is implemented on Composable's restaking layer, it can be integrated as a middleware and apps on various blockchains. As a result, it will create a use case for LSDOT in Cosmos and other networks, while delivering pooled security to the Composable ecosystem and beyond. + +Read more about why Composable has introduced Liquid Staked DOT [here](./liquid-staking/why-lsd.md). diff --git a/docs/docs/technology/liquid-staking/technical-overview.md b/docs/docs/technology/liquid-staking/technical-overview.md new file mode 100644 index 0000000..f9e0794 --- /dev/null +++ b/docs/docs/technology/liquid-staking/technical-overview.md @@ -0,0 +1,58 @@ +# Technical Overview + +The primary interaction between Parachains and the Polkadot Relay chain within the Polkadot ecosystem occurs through Cross-Chain Messaging (XCM). From the perspective of users on Composable Polkadot, the main concern is to stake and unstake DOT, without needing to worry about the underlying mechanics. + +The Liquid Staking pallet residing on Composable Polkadot is responsible for executing functions such as bonding, unbonding, and rebonding with the Polkadot Relay chain. The Relay chain updates validators in every Era, and the Liquid Staking pallet processes user requests and operates in sync with the Relay chain's Era updates. This functionality is facilitated by the MatchingPool module. + +:::info +An Era refers to a (whole) number of sessions, which is the period that the validator set and each validator's active nominator set is recalculated and where rewards are paid out. An era equals one day on the Polkadot Relay chain. +::: + +## DOT Distribution + +To optimise APY and risk management, the Liquid Staking pallet utilises multiple derivative accounts on the Polkadot Relay chain, each of which acts as an independent stash account. These accounts are used to distribute funds effectively based on a sophisticated fund allocation algorithm. + +### Staking Reward Updates Mechanism +When staking rewards are updated on the Polkadot Relay chain, an off-chain relayer verifies these changes. The relayer submits Merkle storage proofs that the reward adjustment has occurred on the Relay chain. This process is fully decentralised as the relayer does not have access to any of the staked funds and is open for participation by any interested party, ensuring a distributed and trustless operation. + +### Stake and Unstake Processing + +The Liquid Staking pallet manages all users' stake and unstake requests within a single period. It initiates the necessary bonding or unbonding actions on the Relay chain. In scenarios where the initial period involves unbonding and the subsequent period involves bonding, the pallet may prioritize rebonding in the first instance. + +### Period Duration + +Typically, one period aligns with the duration of one era. This synchronization with eras is essential as it allows the Relay chain to comprehensively update users' accounts at regular intervals. + +### Era-Based Accumulation + +In each era, the staked amounts contributed by all users are cumulatively aggregated into a parameter termed `total_stake_amount`, while the total of all users' unstaked amounts are compiled under the parameter `total_unstake_amount`. This assessment informs the decision-making process, determining whether actions such as unbonding, rebonding, or bonding should be executed in the subsequent era. + + +### `MaxMinDistribution Algorithm` + +The `MaxMinDistribution` algorithm governs the allocation of funds for various operations: + +- **`Bond`**: The account with the minimum active funds is selected to execute the bonding operation, ensuring efficient utilization of available assets. + +- **`Unbond`**: The account with the maximum active funds is chosen to perform the unbonding operation, promoting risk mitigation through the use of ample resources. + +- **`Rebond`**: For rebonding, the account with the maximum unlocking funds is selected. This approach ensures that unlocked funds are strategically reinvested into the staking ecosystem. + +This allocation strategy helps maintain the balance between liquidity and network security while maximizing returns for participants in the liquid staking protocol. + +### `AverageDistribution` + +The `AverageDistribution` mechanism pertains to the execution of `Bond`, `Unbond`, and `Rebond` operations across all accounts within the network when their associated asset amounts fall within the average range. + +The formula for the price of LSDOT is as follows: + +$$ +\text{Liquid Staked DOT Price Model} = \frac{\text{TotalActiveBonded} + \text{TotalStake} - \text{TotalUnstake}}{\text{sTokenIssuance}} +$$ + +The definitions of the components in this formula are as follows: + +- `TotalActiveBonded`: This metric aggregates the active bonded amount across all derivative accounts on the Relay chain. +- `TotalStake`: The cumulative stake amount contributed by all network users throughout the current era. +- `TotalUnstake`: The total amount of funds that users have withdrawn or unstaked within the current era. +- `sTokenIssuance`: Denotes the latest issuance of LSDOT in the market. \ No newline at end of file diff --git a/docs/docs/technology/mantis.md b/docs/docs/technology/mantis.md new file mode 100644 index 0000000..b05b192 --- /dev/null +++ b/docs/docs/technology/mantis.md @@ -0,0 +1,33 @@ +# Protocol Overview + +Composable’s Multichain Agnostic Normalized Trust-minimized Intent Settlement (MANTIS) is an ecosystem-agnostic intent settlement framework. MANTIS facilitates settlement of cross-chain user intents, optimising the supply chain to deliver upon our vision of a user-centric, ecosystem-agnostic future for DeFi. + +Presently, MANTIS is live on mainnet for testing with a number of solvers to fulfill user intents, with the inclusion of oracles and collators to run validators for this framework. + +:::info Understanding Intents + +Intents have become a hot topic in DeFi, though there is no one set definition for this concept. In general, intents are understood to be users’ desires for a given transaction or other outcome. Intents include desired parameters (such as to swap X amount of A token for B token), but leave some room for flexibility (such as where this swap occurs) in the solution that solvers provide. Anoma does a great job of breaking down the history and various definitions of intents in [this blog](https://anoma.net/blog/intents-arent-real) about their Intents Day event. [This blog](https://blog.essential.builders/introducing-essential/) by Essential also provides another means of defining intents and solvers. +::: +## Intents are Inherently Cross-Domain + +Composable's thesis introduces an additional feature to how intents are currently recognised, interoperability - intents are inherently cross-domain. To understand this, the history of the equities markets provides great insights as it became more efficient with execution being broken across different markets. Prior to the introduction of dark pools, which are private liquidity pools, individuals were only able to use select markets: + +After the introduction of dark pools, which enabled orders to be broken up and split into different markets, the solution space broadened and more earnings opportunities were made available: + +![dark-pool](../technology/mantis/overview.png) +## Blockchains are Inherently Trust-No-One Markets +Orders live on blocks that are publicly verifiable. A supply chain forms around these orders, involving the following entities and roles: + +- **Users** - submit orders +- **Protocols** - serve as venues for orders +- **Block builders** - build blocks within orders +- **Proposers** - propose blocks with orders +- **Searchers** - extract MEV from the presence of these orders in pre-processed blocks + +This relationship is shown below: + +![flow](../technology/mantis/flow.png) + +Distinct blockchain markets, though increasing the solution space for problems, do not actually communicate with each other. There is thus a huge amount of potential loss due to lack of synchronicity between these markets. Unlike the equities market, there is no credibly verifiable way to settle orders between chains, and also settle them at the same time. + +How can the supply chain be optimized so that there is the remote possibility of facilitating this? **The solution is MANTIS.** \ No newline at end of file diff --git a/docs/docs/technology/mantis/MANTIS-distribution-diagram.png b/docs/docs/technology/mantis/MANTIS-distribution-diagram.png new file mode 100644 index 0000000..78d8bdf --- /dev/null +++ b/docs/docs/technology/mantis/MANTIS-distribution-diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dbd3bad00bcff554460f719fb05be94f99ef3f7c7a9fbec188562eb7fe18891 +size 70526 diff --git a/docs/docs/technology/mantis/MANTIS-release-schedule.png b/docs/docs/technology/mantis/MANTIS-release-schedule.png new file mode 100644 index 0000000..a394eb3 --- /dev/null +++ b/docs/docs/technology/mantis/MANTIS-release-schedule.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab7457a9ca4fcaf547c2a73688c11b5c1f88e096cb99f4b5cacc84b59cde1236 +size 316085 diff --git a/docs/docs/technology/mantis/benefits-use-cases.md b/docs/docs/technology/mantis/benefits-use-cases.md new file mode 100644 index 0000000..9959b58 --- /dev/null +++ b/docs/docs/technology/mantis/benefits-use-cases.md @@ -0,0 +1,71 @@ +# Cross-Chain Intent Settlement: Benefits & Use Cases + +## Improved Cross-Chain User Experience + +At Composable, our focus has always been on improving the cross-chain landscape by providing user-friendly cross-chain infrastructure. By making DeFi more accessible and appealing in this manner, the industry becomes better positioned for mass adoption. + +Specifically regarding MANTIS, we believe that a user intent settlement platform (particularly, a cross-chain one) can improve the landscape for blockchain transaction execution. That is because this vastly improves the user experience, carrying out all types of cross-domain transactions and abstracting away the complexity involved in this process. + +Furthermore, users do not have to spend time identifying the best opportunities to satisfy their intents, only to find that these opportunities are no longer available by the time that they have explored all options; instead this is done for them, in short order. + +Here’s the TLDR on MANTIS and how it improves the cross-chain transaction user experience: + +- **One Stop**: bring any asset to and from any chain, swap natively, and earn yield instantly +- **Do You**: maximize the potential of your assets with lending, staking, retaking, LP, vaults, lock drops, NFT borrowing, limit orders, and perps +- **Performant**: leveraging IBC, MANTIS can execute simultaneous orders, cross-chain +- **Execution**: get best-price execution with dark pools and cross-chain MEV subsidies (soonTM) +- **Simplified**: an intuitive, seamless design that lets you have fun on-chain + +In this way, MANTIS is the everything dApp for the cross-domain future of DeFi. + +The go-to-market plan for MANTIS consists of implementing a layer for gamification, beginning with staking for Solana IBC. + +In crypto, we often find ourselves needing to do many steps to hunt for alpha. However, there are lots of people on twitter that know what they’re doing and suggest/curate alpha for the average degen: + + + +Still, the steps are not necessarily clear and might be daunting. We have thus made a commitment over the past few years to introduce a platform that is natively cross-chain and simplifies the overall crypto experience for people. + +**The best part is, this can be shared with others, introducing a Social Fi feeling that has been lacking from crypto.** + +Social Fi has been manifested in many different contexts such as friend.tech, the points system pioneered by MarginFi, and many other platforms such as Blast. However, it has not really been super successful in the realm of copy-trading. We believe that now is the right time to introduce such a product, with a level of gamification to it. This is accomplished by the MANTIS Games, detailed. + +## Cross-Domain MEV + +A cross-domain intent settlement platform (such as that being developed by Composable) reshapes an emerging type of MEV: cross-domain MEV. As this is a relatively novel form of MEV, and MEV is still a poorly studied and reported phenomenon, a number of questions thus arise. In particular, we at Composable believe that cross-domain MEV could impact the price of intent settlement in a positive way, decreasing cost for users. In fact, this type of MEV is a positive for all levels of the supply chain. + +:::tip [Obadia et al, 2021](https://arxiv.org/pdf/2112.01472.pdf) + +Cross-domain MEV can be defined as the extraction of value from cross-chain transactions mathematically defined by Obadia et al, 2021. To summarize, this research found that cross-domain MEV is the maximum of the sum of final balances across all considered domains into a single base asset (canonically the first domain considered), given there is some assortment of transactions across all those domains that are executed together. Importantly, this research also concluded that “We expect bridges to play an extremely important role in such an MEV ecosystem, as the cheaper, more ubiquitous, and faster bridges become, the more competitive these arbitrage transactions naturally become by decreasing the inequality of the action space across players as a function of their capital.” +::: + +In the Composable ecosystem specifically, cross-domain MEV is potentiated from cross-chain intent settlement. Composable’s MANTIS receives user transaction intents, which are then picked up by solvers who compete to find the best solution to execute these intents. Once the optimal solution is chosen via a scoring mechanism, the winning solver must then execute upon their proposed solution. + +A single solution can involve a number of different domains. Searchers can access the orderflow from these solutions not only within each domain but also between domains by accessing the mempool: + +![orderflow](../mantis/problem-mempool.png) + +This results in cross-domain MEV. + +## Free/Reduced Gas + +Another exciting potential benefit of a cross-domain intent settlement framework is reducing gas costs for users which is detailed in [this forum post](https://research.composable.finance/t/cross-domain-mev-as-an-influence-on-pricing-of-intent-settlement-can-we-achieve-free-reduced-cost-exchange/47). In brief, the way that gas costs could be kept as low as possible would be to have such gas costs be a dynamic value that is subject to market conditions. This means that users could be able to trade for free, but only in the event that the below incentive equation is positive, and solvers are able to cover user gas fees: + +- (+) 0.1% of transfer, like CoW Swap +- (+) Sale to blockbuilders +- (+) MEV +- (-) Money paid to blockbuilders in the role of searcher +- (-) User’s gas + +If not, then users will have a partial gas payment. Solvers can also take out short term loans and use these to cover gas fees, then pay these loans off after the order is executed and they receive their rewards. + +## Future Explorations + +There are a number of ways in which Composable envisions expanding and improving our MANTIS intent settlement framework, once deployed. These include: + +- Incorporating credible commitment schemes such as MEV-Boost ++ and PEPC-Boost. +- Building a new relay that would allow for partial block building +- Moving towards a no-builder future where searchers can build blocks collaboratively and send them directly to proposers +- Implementing mempool matching and pre-reserved blockspace + +We are incredibly excited about the potential of MANTIS for delivering upon our vision of a user-centric, ecosystem-agnostic future for DeFi. Stay tuned for more updates about this project and our progress towards its deployment. \ No newline at end of file diff --git a/docs/docs/technology/mantis/components.png b/docs/docs/technology/mantis/components.png new file mode 100644 index 0000000..bfa5086 --- /dev/null +++ b/docs/docs/technology/mantis/components.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ab53576f75b3c473fc7b818b595f933892059be0e1fd49d0424e4b4461f1eb8 +size 127490 diff --git a/docs/docs/technology/mantis/flow.png b/docs/docs/technology/mantis/flow.png new file mode 100644 index 0000000..7b89292 --- /dev/null +++ b/docs/docs/technology/mantis/flow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec140069f27d86bb212dd383133325534f9397174781984e914ce92f41756481 +size 46873 diff --git a/docs/docs/technology/mantis/integration-guide.md b/docs/docs/technology/mantis/integration-guide.md new file mode 100644 index 0000000..ed864ab --- /dev/null +++ b/docs/docs/technology/mantis/integration-guide.md @@ -0,0 +1,50 @@ +# Integration Guides + +## Integration Guide for Apps/Wallets +Wallets and Banana Gun bots will be able to plug into MANTIS using an open source UI package. + +The end-to-end flow for getting data for solvers, posting the solution, and executing solutions on chain is as follows: + +1. **User Posts Problem** +- The user sends their transaction to our Cosmos CosmWasm contract via RPC. +- The order ends up in storage. +- It is the user's responsibility to consult an oracle to set limits he wants. +- The problem format is [here](https://github.com/ComposableFi/composable/blob/f65076f5fcf2f0903b3d21e62ba22d7ba91c0c9f/code/xcvm/cosmwasm/contracts/order/src/lib.rs#L65). + - In JSON format, in https://www.npmjs.com/package/cvm-cw-types?activeTab=code, open `/cvm-cw-types/dist/cw-mantis-order/response_to_get_all_orders.json`. + +2. **Solvers Collect Data Needed to Solve Problems** +- AMM amounts/fees, tokens denominations, and routes are needed. + - [AMM Neutron](https://app.astroport.fi/api/trpc/pools.getAll?input=%7B%22json%22%3A%7B%22chainId%22%3A%22phoenix-1%22%7D%7D) + - [AMM Osmosis](https://app.osmosis.zone/api/pools?page=1&limit=300&min_liquidity=500000) + - [Routes](https://github.com/ComposableFi/composable/blob/main/code/cvm/cvm.json) + - Fees and rate limits are added if needed + +- These are collected off-chain and on-chain. +- Coding is in progress to satisfy what the solver algorithm wants. + +3. **Solvers Run Optimization Algorithm** +- Solvers solve for: + - Maximal volume via Coincidence of Wants (CoWs), where CoWs are matched up to the limit. + - The remaining amount of the order is proposed to be settled via constant function market maker (CFMM) routes +- Python coding is in progress [here](https://github.com/BrunoMazorra/2-assets-matching). +- Rust port is [here](https://github.com/ComposableFi/composable/blob/main/mantis/solver/src/solver.rs). +4. **Solvers Post Solution On-Chain Into Contract** +- Python solver output is in progress. +- The final matrix output is to be converted into a call to a standard Cosmos CosmWasm RPC. +- The solution message to RPC format is in https://www.npmjs.com/package/cvm-cw-types?activeTab=code, in the `/cvm-cw-types/dist/cw-mantis-order/response_to_get_all_solutions.json` file. +5. **Contract Choses the Solution Clearing the Largest Volume** +- Currently, any solution of several is picked each block for testing. +- The final configuration will be 2 blocks of solutions. +- The [contract](https://github.com/ComposableFi/composable/blob/f65076f5fcf2f0903b3d21e62ba22d7ba91c0c9f/code/xcvm/cosmwasm/contracts/order/src/lib.rs#L343) checks that the solution respects the user's limits. +6. **Contract Executes CoW in the Same Transaction** +- CoWs happen on the same chain. +- These are coded as simple CosmWasm transfers back and forth between accounts. +7. **Contract Sends a Message to Convert Route to CVM** +- Each solution has a simplified version of routes which is mapped 1:1 to a more detailed lower level CVM program. + - Coding is in progress. +The solution route tree is [here](https://github.com/ComposableFi/composable/blob/f65076f5fcf2f0903b3d21e62ba22d7ba91c0c9f/code/xcvm/cosmwasm/contracts/order/src/lib.rs#L153). +An equivalent root of the tree in the CVM is [here](https://github.com/ComposableFi/composable/blob/ee480d0062b8cde89e5cfb848881d88bb56f2625/docs/docs/technology/cvm/specification.md?plain=1#L120). +8. **The CVM is Executed** +- This mostly involves converting CVM instructions to IBC packets. + +Problems can be submitted from a wallet or application via RPC to MANTIS. [Here](https://github.com/ComposableFi/composable/blob/06b2b265a4fb0e866faaf76af4ab94ba580560dd/docs/docs/technology/mantis/mantis.ts#L4) is an example typescript problem for submission to MANTIS. diff --git a/docs/docs/technology/mantis/lfe-cvm.png b/docs/docs/technology/mantis/lfe-cvm.png new file mode 100644 index 0000000..eaf73ae --- /dev/null +++ b/docs/docs/technology/mantis/lfe-cvm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8995dc53ece536508a54b36dbd02975e266a0661073cbc90088e6b2e8e0bdcc0 +size 51327 diff --git a/docs/docs/technology/mantis/mantis.ts b/docs/docs/technology/mantis/mantis.ts new file mode 100644 index 0000000..8a3b72e --- /dev/null +++ b/docs/docs/technology/mantis/mantis.ts @@ -0,0 +1,79 @@ +/// example usage of MANTIS batch auction order contract +/// for CosmWasm usage see +/// - https://github.com/cosmos/cosmjs/blob/main/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +/// - https://github.com/CosmWasm/ts-codegen +import { CwMantisOrderClient } from "./dist/cw-mantis-order/CwMantisOrder.client.js" +import { GasPrice } from "@cosmjs/stargate" +import { SigningCosmWasmClient } from "@cosmjs/cosmwasm-stargate" +import { DirectSecp256k1HdWallet } from "@cosmjs/proto-signing" +import { Coin } from "cosmjs-types/cosmos/base/v1beta1/coin.js" + +const print = console.info + +print("creating wallet") +const wallet = await DirectSecp256k1HdWallet.fromMnemonic( + "apart ahead month tennis merge canvas possible cannon lady reward traffic city hamster monitor lesson nasty midnight sniff enough spatial rare multiply keep task", + { + prefix: "centauri", + } +) + +const sender = (await wallet.getAccounts())[0].address +print(sender) + +const rawClient = await SigningCosmWasmClient.connectWithSigner("https://rpc.composable.nodestake.top:443", wallet, + { + gasPrice: GasPrice.fromString("0.25ppica") + }) + +const client = new CwMantisOrderClient(rawClient, sender, "centauri1c676xpc64x1lxjfsvpn7ajw2agutthe75553ws45k3ld26vy8pts0w203g") + +const give = "1100000000" +const wants = "1000000000" + +print("one side of want") +const ppica = Coin.fromPartial({ denom: "ppica", amount: give }) +print(await client.order({ + msg: { + timeout: 100, + wants: { + denom: "pdemo", + amount: wants, + }, + } +}, + "auto", + null, + [ppica] +)) + + +print("other side of want") +const pdemo = Coin.fromPartial({ denom: "pdemo", amount: give }) +print(await client.order({ + msg: { + timeout: 100, + wants: { + denom: "ppica", + amount: wants, + }, + } +}, + "auto", + null, + [pdemo] +)) + +print("observer that give and want of one is more than want and less than give of other") +const orders = await client.getAllOrders() +print(orders) + +if ( + orders[0].given.amount > orders[1].msg.wants.amount && + orders[1].given.amount > orders[0].msg.wants.amount) { + print("solver run in background and finds all such matches by limits and coins and sends solutions to contract as COWs") +} else { + print("solver will send cross chain swaps") +} + +print("...observe events or query order with you order until it solved or timeouts") diff --git a/docs/docs/technology/mantis/mantis1.png b/docs/docs/technology/mantis/mantis1.png new file mode 100644 index 0000000..e78ba85 --- /dev/null +++ b/docs/docs/technology/mantis/mantis1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c268597a10bbd272dbac0f257000263d7d92bd8fced08a0fb025bf04bd62fc1e +size 106347 diff --git a/docs/docs/technology/mantis/mda.png b/docs/docs/technology/mantis/mda.png new file mode 100644 index 0000000..300e18a --- /dev/null +++ b/docs/docs/technology/mantis/mda.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4dea1b9e3b473082b94b529e2dbb5345d25f3c97b0da43102d7d8102c6c4c83 +size 214665 diff --git a/docs/docs/technology/mantis/overview.png b/docs/docs/technology/mantis/overview.png new file mode 100644 index 0000000..2a56c44 --- /dev/null +++ b/docs/docs/technology/mantis/overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab51f06d33d354d793f2485048726bd867382c41f81ea9779b91ca3d7817082f +size 42739 diff --git a/docs/docs/technology/mantis/problem-mempool.png b/docs/docs/technology/mantis/problem-mempool.png new file mode 100644 index 0000000..6a7224e --- /dev/null +++ b/docs/docs/technology/mantis/problem-mempool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8dced198b87893ec2afe7e116cbf0c56b0da0a599126efbbbea649015818d7f +size 27961 diff --git a/docs/docs/technology/mantis/product.md b/docs/docs/technology/mantis/product.md new file mode 100644 index 0000000..af19ade --- /dev/null +++ b/docs/docs/technology/mantis/product.md @@ -0,0 +1,32 @@ +# Overview + +This document outlines the user experience flow for MANTIS, a cryptocurrency trading platform. It details the process from the initial user intent submission to the final execution of orders, emphasizing features like batch auctions for volume optimization, dynamic price matching, and cross-chain executions. + +## Cryptocurrency Trading Platform: User Experience Flow + +### 1. **Intent Submission**: + - **User-Driven Transactions**: Users specify their transaction requirements, typically involving an exchange of a certain amount of one cryptocurrency (Token A) for another (Token B). + - **Assisted Order Formulation**: The platform assists in setting up order limits, providing suggestions for the exchange amount of Token B. The exchange rate will not be less than the user-defined A/B ratio. + - **Confirmation and Blockchain Registration**: Users review, confirm, and sign their transaction details for blockchain recording. + - **Timeout vs. Price Limits**: A balance between price limits and matching times is maintained, with tighter limits possibly leading to longer wait times for order matching. + +### 2. **Order Execution Observation**: + - **Status Monitoring**: Users can track the status of their orders post-placement. + - **Possible Outcomes**: Orders may be fully executed, partially filled, canceled, or timed out. + - **Handling Partial Fills**: Partially filled orders result in users receiving a portion of the requested amount, with the remainder being canceled or expiring based on the order settings. + +### 3. **Single-Chain Execution Scenario**: + - **Efficient Execution**: The platform swiftly matches orders in a single transaction block for prompt fulfillment. + - **Batch Auctions**: Batch Auctions process multiple orders simultaneously, maximizing the product of exchanged amounts (A * B) for efficient matching. + +**Order Pricing**: + - **Dynamic Price Matching**: The platform matches orders to achieve optimal trading volume without violating user-set limits. + - **Execution at Optimal Prices**: Execution occurs at a price that maximizes volume, ensuring efficiency. + +### 4. **Cross-Chain Solutions**: + - **Multi-Chain Execution**: Certain orders are executed using liquidity pools across multiple blockchain networks, involving several blocks and chains. + - **Cross-Chain Virtual Machine (CVM) Program**: The CVM facilitates these transactions, ensuring efficient multi-chain swaps. + - **Monitoring Interface**: A detailed interface provides real-time updates for multi-chain transactions. + - **Cross-Chain Transfers**: Includes straightforward cross-chain transfers. Solvers find several transfers which they batch into one cross chain message sharing costs of cross chain transfer amid several users. + +This document provides a structured overview of MANTIS's approach to cryptocurrency trading, focusing on efficiency, user assistance, and advanced technological solutions. diff --git a/docs/docs/technology/mantis/protocol-architecture.md b/docs/docs/technology/mantis/protocol-architecture.md new file mode 100644 index 0000000..9dbd5b8 --- /dev/null +++ b/docs/docs/technology/mantis/protocol-architecture.md @@ -0,0 +1,35 @@ +# Protocol Architecture/Features + +The MANTIS framework is architected with the following components: +- Cross-Domain Communication via the IBC +- Multi-Domain Auctions +- Language for Execution +- Verifiable Settlement + +### Cross-Domain Communication via the IBC + +MANTIS leverages Composable’s IBC bridge to facilitate cross-chain intent settlement. Our trust-minimized bridge in turn leverages the Inter-Blockchain Communication (IBC) Protocol. We have already connected Polkadot, Kusama, and Cosmos/the Interchain to this bridge, with expansion to Solana and Ethereum in the works. + +### Multi-Domain Auctions +User intents are scored based on volume cleared, with solutions being screened for MEV and bundled into a block for each domain. Searchers can tip for priority, and finalized blocks are embedded with validity predicates and sent to builders. This is depicted below: + +![mda](../mantis/mda.png) + +### Language for Execution: The Composable Virtual Machine +When the best solution is found, it is turned into a Composable Virtual Machine (CVM) program, which: +- Specifies which hops need to happen +- Specifies which calls to virtual wallet need to occur +- If a solution has multiple hops - routed back to Centauri chain +- Ex. Transferring to a CEX + - Problem defined as location to send funds to + - User funds transferred to virtual wallet + - CVM instruction set defines the necessary hops to the required network able to accept the assets + - Transfers occur over IBC + +This is depicted below: +![CVM](../mantis/lfe-cvm.png) + +### Verifiable Settlement +Settlement of transactions resolving user intents must be verifiable. We also believe that these transactions must be partial block aware; To improve cross-domain censorship-resistance and enforce searcher conditioning for cross-domain transactions, partial block auctions are a must. + +Examples of this can be seen in Cosmos, but Ethereum requires additional work regarding commitments to allow for a differentiation between top-of-block and rest-of-block. \ No newline at end of file diff --git a/docs/docs/technology/mantis/protocol-flow.md b/docs/docs/technology/mantis/protocol-flow.md new file mode 100644 index 0000000..4076187 --- /dev/null +++ b/docs/docs/technology/mantis/protocol-flow.md @@ -0,0 +1,32 @@ +# Protocol Flow +A summary of the MANTIS protocol flow in different scenarios is below, with further details found in subsequent sections of this documentation: + +## 1. Intent Submission: +- **User-Driven Transactions**: Users specify their transaction requirements, typically involving an exchange of a certain amount of one cryptocurrency (Token A) for another (Token B). +- **Assisted Order Formulation**: MANTIS assists in setting up order limits; in the example of exchanging A for B, MANTIS provides suggestions for the exchange amount of Token B. The exchange rate will not be less than the user-defined A/B ratio. +- **Confirmation and Blockchain Registration**: Users review, confirm, and sign their transaction details for blockchain recording. +- **Timeout vs. Price Limits**: A balance between price limits and matching times is maintained, with tighter limits possibly leading to longer wait times for order matching. + +## 2. Order Execution Observation: +- **Status Monitoring**: Users can track the status of their orders post-placement. +- **Possible Outcomes**: Orders may be fully executed, partially filled, canceled, or timed out. +- **Handling Partial Fills**: Partially filled orders result in users receiving a portion of the requested amount, with the remainder being canceled or expiring based on the order settings. + +## 3a. Single-Chain Execution Scenario: +- **Efficient Execution**: The platform swiftly matches orders in a single transaction block for prompt fulfillment. +- **Batch Auctions**: Batch Auctions process multiple orders simultaneously, maximizing the product of exchanged amounts (A * B) for efficient matching. + +### 3b. Order Pricing: + +- **Dynamic Price Matching**: The platform matches orders to achieve optimal trading volume without violating user-set limits. +- **Execution at Optimal Prices**: Execution occurs at a price that maximizes volume, ensuring efficiency. + +## 4. Cross-Chain Execution Scenario: +- **Multi-Chain Execution**: Certain orders are executed using liquidity pools across multiple blockchain networks, involving several blocks and chains. +- **Cross-Chain Virtual Machine (CVM) Program**: The CVM facilitates these transactions, ensuring efficient multi-chain swaps. +- **Monitoring Interface**: A detailed interface provides real-time updates for multi-chain transactions. +- **Cross-Chain Transfers**: This includes straightforward cross-chain transfers. + +The above components are displayed in some form in the following architecture diagram of Composable’s Cosmos chain: + +![architecture](../mantis/components.png) \ No newline at end of file diff --git a/docs/docs/technology/mantis/solver-guide.md b/docs/docs/technology/mantis/solver-guide.md new file mode 100644 index 0000000..cf06243 --- /dev/null +++ b/docs/docs/technology/mantis/solver-guide.md @@ -0,0 +1,72 @@ +# Solver Guide +This tutorial describes how to run a solver node and how users can post problems to this. + +### Deployments + +| **Chain** | **Stage** | **ID** | +| -------- | -------- | -------- | +| centauri-1 | mainnet | centauri1lnyecncq9akyk8nk0qlppgrq6yxktr68483ahryn457x9ap4ty2sthjcyt | +| osmosis-1 | mainnet | | + + +### Problem Submission +An example of a problem that the user can post is here: +```js + { + "@type": "/cosmwasm.wasm.v1.MsgExecuteContract", + "sender": "centauri1mgnu00vn0feumu660y6p7ty5mv58txvhgkr2lu", + "contract": "centauri1lnyecncq9akyk8nk0qlppgrq6yxktr68483ahryn457x9ap4ty2sthjcyt", + "msg": { + "order": { + "msg": { + "wants": { + "denom": "ppica", + "amount": "1000000" + }, + "transfer": null, + "timeout": 2506928, + "min_fill": null + } + } + }, + "funds": [ + { + "denom": "ibc/EF48E6B1A1A19F47ECAEA62F5670C37C0580E86A9E88498B7E393EB6F49F33C0", + "amount": "1" + } + ] + } +``` + +An example of a mainnet transaction is available [here](https://ping.pub/composable/tx/CA9489EC961BA97AB514A74EEC6BF3B6CD9900C00A031AA3BB80DC343CE85F2D). + +You can try it using live code with [this](https://github.com/ComposableFi/composable/blob/main/code/cvm/mantis.ts). + +### Deploying Your Own Contracts +Here is how you can deploy your own contracts: +``` +$BINARY tx wasm store $ORDER_WASM_FILE --from dz --gas=auto +$BINARY tx wasm instantiate 18 '{"admin": "centauri1u2sr0p2j75fuezu92nfxg5wm46gu22ywfgul6k", "cvm_address" : "centauri1wpf2szs4uazej8pe7g8vlck34u24cvxx7ys0esfq6tuw8yxygzuqpjsn0d"}' --label "mantis_order_1" --admin centauri1u2sr0p2j75fuezu92nfxg5wm46gu22ywfgul6k --gas=auto --from=dz +``` +### Running a Solver Node +Documentation on how to run a solver node is located [here](https://github.com/ComposableFi/composable/blob/06b2b265a4fb0e866faaf76af4ab94ba580560dd/docs/docs/technology/mantis/solver-tutorial.md#L4). + +### Problem/Solution Format +See on-chain indexer/explorer for the Problem Solver contract. It will show all in JSON format. + +### Querying the Order Book +How to query the order book on MANTIS is shown below: +- https://order-book.composablenodes.tech/mantis/orders +- https://order-book.composablenodes.tech/mantis/orders?orderId=ORDER_ID + +### CVM Interface +An example of how to convert the solution into a CVM program algorithm is depicted [here](https://github.com/ComposableFi/composable/blob/main/tests/examples/cvm.ts). + +### Fees +There are no fees; users just need to pay gas. + +### Contracts +The full MANTIS contracts GitHub repo is [here](https://github.com/ComposableFi/cvm/tree/main/contracts/cosmwasm/order). + +### Contract to add the Problem to MANTIS +The MANTIS contract to add the problem can be viewed [here](https://github.com/ComposableFi/composable/blob/main/code/cvm/mantis.ts). diff --git a/docs/docs/technology/mantis/solver-integration.md b/docs/docs/technology/mantis/solver-integration.md new file mode 100644 index 0000000..fc07fe1 --- /dev/null +++ b/docs/docs/technology/mantis/solver-integration.md @@ -0,0 +1,41 @@ +# Solver Integration + +Anyone can be a solver with Composable, though permission from Composable is required in initial phases. Solvers are offchain nodes with an on Composable chain wallet. Solvers monitor several chains, run algorithms to find the best solution for intention, and send solution proposals to the Composable chain. + +To be a solver, one must make an address on Composable’s Cosmos chain. Addresses can be owned by contract or a person’s machine/bot. + +Solver nodes will run well on a machine with 2 Core CPU, 4 GB RAM, and 1 GB high low latency internet connection with Linux x86_64 installed. + +Interested in participating as a solver? Join our solver channel [here](https://t.me/+Z69AYRzVTLVhNTk5). + +Solvers are able to onboard with MANTIS via the following steps: + +## Solver Setup + +### Requirements +1. A Cosmos compatible wallet holding PICA tokens on a valid Composable/Centauri chain address (Ex. Address format: centauri124l2ly8rgm4wjqgs50zzkzznxvqvve27uf6jr5) + +2. Clone the [MANTIS repository](https://github.com/ComposableFi/cvm/tree/main/mantis) and cargo to build mantis-node. As an alternative, you can use `nix run "github:ComposableFi/cvm#mantis-node -- ` + +3. An example of command line parameters used to run the solver can be found [here](https://github.com/ComposableFi/env/blob/a4bfeef449b5786f0d99f45e38a9acc306980fbb/flake.nix#L57) +(Note: the `--simulate` flag is optional) + +An example of problem formatting that will be broadcast to solvers may be found [here](https://github.com/ComposableFi/composable/blob/206e0da16a3543c6212f845372c926fcf49ecf21/docs/docs/technology/mantis/tutorial.md). + +Additional information for troubleshooting can be found on our Github [here](https://github.com/ComposableFi/composable/blob/206e0da16a3543c6212f845372c926fcf49ecf21/docs/docs/technology/mantis/solver-tutorial.md). + +### Trading Venues and Tokens for Testing +For the scope of testing, trading will be limited to Osmosis DEX and Astroport across the pairs outlined below. + +| **Osmosis** | **Neutron** | +| -------- | -------- | +| PICA/OSMO | NTRN/ATOM | +| ATOM/OSMO | - | +| NTRN/OSMO | - | + +Problems will be broadcasted in sizes ranging across $1, $5, $10 and $100. + +### Rewards and Incentives +Solvers participating in testnet will be awarded an incentive of $500 of PICA in addition to rewards calculated via activity during testing. The reward calculation for activity will be allocated as a percentage of funds processed through MANTIS (ie. funds exchanged via solutions to the intents that are broadcasted during testing). + +A scoring system has been implemented to rank solutions submitted via MANTIS based on a reference score and quality of solution, where `rewards = observedQuality - referenceScore`. The breakdown of this reward calculation may be referred to in the “Solver Rewards” section [here](../mantis/solvers-solutions.md). diff --git a/docs/docs/technology/mantis/solver-tutorial.md b/docs/docs/technology/mantis/solver-tutorial.md new file mode 100644 index 0000000..cbe794b --- /dev/null +++ b/docs/docs/technology/mantis/solver-tutorial.md @@ -0,0 +1,39 @@ +## How to run solver node + +Solver observes user orders on chain, and find matches, and posts solution so users get exchange. +If solver does not find match, formulates cross chain route. + +## Prerequisites + +You know how to build simple rust cargo project from git repositories or how to use nix. + +You know basics of blockchain, transactions, gas and easy can catch up with Cosmos specifics as needed based on Cosmos ecosystem docs. + +## Prepare + +1. Get wallet with PICA on Centauri + +2. Clone https://github.com/ComposableFi/cvm and `cargo run --bin mantis`. You can use `nix run "github:ComposableFi/cvm#mantis" --` as alternative. + +## Run + +Here is example of command line parameters used by solver run by us https://github.com/ComposableFi/env/blob/e9eaa098e103cb16f033e2abc26d09d79823da26/flake.nix#L49 . + +`--simulate` is optional, so is example how to provision own liquidity. + +## Troubleshoot + +In case of failure - read error. Usually it is: +1. timeout/rate limit by RP +2. bad wallet - no PICA or bad mnemonic +3. Node not hosted with process auto restart policy on failure as it should be +4. latency, if you picked slow RPC or host node on slow network - other solvers will be faster and solve instead o you + +## GTP bot + +You may consider train the bot by asking questions here https://discord.com/channels/828751308060098601/1163404253537247283 + +## How it works + +- [degen math](./degen-math.md) +- [problem solver flow](./problem-solver-flow.md) diff --git a/docs/docs/technology/mantis/solvers-solutions.md b/docs/docs/technology/mantis/solvers-solutions.md new file mode 100644 index 0000000..29bf1fa --- /dev/null +++ b/docs/docs/technology/mantis/solvers-solutions.md @@ -0,0 +1,130 @@ +# Solvers & Solutions + +## Intent Submission: Problems +Users will be able to submit their intention along the MANTIS FE/UI/UX to form a problem from their intention. This information is used to establish the problem that will be sent to solvers. The user intention is formatted as: + +*I want to [function] [asset 1]...[asset n] for [asset 2]...[asset m].* + +Beginning and destination chain/location(s) may also be specified by the user. The user can further set limits for buy and sell orders. +Thus, fulfilling the submitted user intent requires solving: +- *[Token ID][Chain ID][Amount]1…n assets* +- Token ID and Chain ID are variable +- This is resolved to *Token ID Chain ID amount 1...n assets* + +The output that must be solved for is therefore: +- *Asset [1…n]* +- *Asset [2…m]* + +:::tip MANTIS Solvers +The solver role is critical to MANTIS and the chain-agnostic execution of user intents. To summarize the role, a solver takes in data about users’ intents, comes up with a solution to fulfill these as transactions, and is incentivized to do so. +If you are interested in solving for MANTIS or simply want to learn more about how MANTIS solvers work, refer to the following: +- [Discovering MANTIS Orders](https://github.com/ComposableFi/composable/blob/main/docs/docs/technology/mantis/tutorial.md) +- [Solving for MANTIS](https://github.com/ComposableFi/composable/blob/main/docs/docs/technology/mantis/solver-tutorial.md) +- [Solver Integration](https://github.com/ComposableFi/composable/blob/main/docs/docs/technology/mantis/problem-solver-flow.md) +::: + +## Discovering MANTIS orders + +In an interface on MANTIS, an intent/problem is sent via a smart contract of the Composable Virtual Machine to solvers. Thus, solvers are able to compete to come up with the best solution. + +The information that is provided to solvers is limited to just the user account and the user problem. + +The format of the problem that is sent from the problem smart contract to solvers is: + +```ts +const give = "1100000000" +const wants = "1000000000" + +print("one side of want") +const ppica = Coin.fromPartial({ denom: "ppica", amount: give }) +print(await client.order({ + msg: { + timeout: 100, + wants: { + denom: "pdemo", + amount: wants, + }, + } +}, + "auto", + null, + [ppica] +)) +``` + +- Available automated market makers and pools: Osmosis Pool Manager +- Preloaded tokens/incentives (described in more detail later) +- Any specified user limits on the order (i.e. maximum price) + +Once solvers receive the user problem, they are able to query the escrow contract to determine sufficient user funds. + +Within this interface, solvers are able to access the information they need to create and submit their solutions. + + +## Solving for MANTIS +Solvers implement a solution algorithm (which can be modified from Composable’s solution algorithm, which will be provided) that determines an optimal solution for each user intention. The user intention is framed as “*I want to [function] [asset 1]...[asset n] for [asset 2]...[asset m1]*”. Beginning and destination chain/location(s) may also be specified by the user. The user will also set limits for buy and sell orders. Once the user submits their transaction intent, their funds are moved into their virtual wallet in the Composable ecosystem. + +Then, the solver is able to address the user intent with the aim of optimizing cross-chain intent settlement. This involves the solver solving a path between: +- State 1 = [Token ID][Chain ID][Amount]1…n assets +- State 2= Token ID and Chain ID are variable + +The solution can be formed out of a combination of any of the following settlement/execution pathways: +- **Coincidence of Wants (CoWs)** + - Intents can be fully or partially matched with other intents so that they effectively are used to settle each other’s transaction. This is done along the principle of CoWs: that user intents can coincidentally be the opposite of other user intents (i.e. one intent to swap A for B and another to swap B for A form a CoW). +- **Constant Function Market Makers (CFMMs)** + - Solutions can be executed on CFMMs such as automated market makers (AMMs). +- **Market makers’ own liquidity** + - The solver will further play a market maker role. Similar to Hashflow, solvers will settle funds themselves by sending funds to a contract and settling funds directly with the user. + +Solvers will submit their proposed solution via an interface on MANTIS to the problem smart contract. The format of the solution is as follows: + +- \_Swap(x for y)\_ +- Bridge bribes + time to execution +- These calculations determine the net result: + - Total amount of assets [2..m] available, total lost to slippage and fees, and total time associated + +Solvers’ solutions, once submitted, will be scored for maximization of volume cleared and user welfare (i.e. minimization of slippage). The optimal solution will be selected based on this score. The winning solver (e.g. the solver providing the best solution) is then given access to user funds and approved to execute the user's intention along their specified solution pathway. Winning solvers will receive incentives/rewards, as described in the following section. + +### Protocol Bidding +An additional factor that solvers must consider in the auction process of determining the optimal solution is what we term “protocol bidding”. **This is a unique form of incentive wherein we enable protocols to bid for orderflow for transactions being settled from MANTIS.** + +Essentially, protocols are able to provide a bid in the form of tokens to the MANTIS framework. The size of this bid is considered by solvers in the algorithm that they use to determine an optimal settlement route for the user transaction intent. + +The bid volume is also taken into account when potential solutions are being scored, with solutions including protocols participating in bidding being ranked higher. As a result, protocols that bid to MANTIS increase their chances that MANTIS intent transactions will be settled using their platforms. The tokens bidded by these protocols will be used to offset user gas fees. + +Protocols would participate in bidding via a 3-step UI process, loading tokens for solvers, and then loading up tokens for gas rebates for users. Then, the relayer (and solvers, if both roles are combined) can take from the contracts post-settlement (once they have proof of fulfillment). + +Overall, this would work as follows: +1. Protocols (such as DEXes) top up the problem smart contract with certain tokens into certain pools +2. Solvers take the above into account in their solution calculations +3. If protocols are successfully chosen as a component of the solution for the solver (and this solver has presented the best solution out of all solvers), then the order flow is routed through the protocol + +This requires a problem smart contract within MANTIS, which would be able to receive pre-loaded tokens. +- Our "problem" contract would have `cvm-account` like any users +- All solution will be routed by MANTIS from the problem origin contract so it will have access to `cvm-account`` on each chain +- So, the problem contract will have access to any tokens on that account +- Reasonably, these accounts to have at least native tokens for gas fees and bridge fees +- Or, protocol can have `cvm-account` and do extended allowance to MANTIS sent from problem origin so the solution can peek into allowance and pay fees + +This would also require the UI for protocols to initiate and submit tokens for their campaigns, and then to subsequently monitor these campaigns. + +There are a number of benefits from such protocol bidding. First, protocols participating in campaigns will benefit from increased order flow (in fees, liquidity, etc.). This solution also improves the chances that a user’s transaction will be fulfilled, given that there are tokens readily available from these campaigns. + +Bidded tokens can also offset user gas fees, making the transaction less expensive for the user (or for the solver, if the solver is paying for users’ gas). Composable itself will benefit as well, as we can use this process to earn revenue before the rest of the stack is fully built up, allowing us to optimally continue to build our ecosystem. + +### Solver Rewards +Solvers will earn rewards from performing their role in MANTIS, as described above. These rewards will be allocated from a percentage of user funds processed through MANTIS. Rewards for the winning solver for each intent auction are calculated as follows: + +`solver rewards = observedQuality - referenceScore` + +In this equation, `solver rewards` are the amount distributed to the winning solver of a particular intent. + +The `referenceScore` is that of the second highest solution, as determined by our scoring system. + +The `observedQuality` relates to the quality of the settlement of a winning solution; more specifically this is the sum of the surplus generated from users and fees paid to the MANTIS framework. If the settlement fails, then `observedQuality` is zero. In this case of settlement failure, then the solver could end up paying the protocol, incentivizing solvers to present only feasible solutions to MANTIS. + +### Solver Algorithm +The MANTIS solver algorithm can be viewed [here](https://github.com/ComposableFi/cvm/tree/main/mantis/node/src/solver) + +The mathematical process with which we generated and tested this algorithm is detailed [here](https://github.com/ComposableFi/cvm/tree/main/mantis/simulation) + diff --git a/docs/docs/technology/mantis/tokenomics.md b/docs/docs/technology/mantis/tokenomics.md new file mode 100644 index 0000000..d58bb6b --- /dev/null +++ b/docs/docs/technology/mantis/tokenomics.md @@ -0,0 +1,59 @@ +# MANTIS Tokenomics + +Previously known as LAYR, MANTIS acts as the lifeblood to the Mantis platform allowing for a wide range of utility for users and market participants. These functions include, solver onboarding, user staking, transaction fees & bidding, flash loans, and restaking value accrual. + +## MANTIS use cases + +### Universal Gas Token +MANTIS serves as Composable’s native gas token amongst transaction fees and orderflow auctions. Transaction fees are collected by the network in order to complete a given transaction, while orderflow auctions serve as a gated process for which searchers bid for their transaction bundles to be included in a block by builders. + +An additional auction may occur between builders, where these providers send additional MANTIS to validators in order to have their block given priority for validation within the network. Under circumstances where a gas token aside from MANTIS is required to complete a transaction (eg. OSMO for a swap on Osmosis DEX), MANTIS may be swapped for the necessary token to complete the order. + + +### Solver Bonds +In order to onboard as a solver, a MANTIS deposit needs to be made by the market participant. The solver will then be approved to operate within the protocol and participate in orderflow auctions. Securing a bond from a solver acts as a form of safeguarding for the protocol in the event of malicious behavior, or inability to repay a borrow (more detail in the flash loan section). If either of these cases are encountered, a solver bond will be slashed and will need to be topped up to continue engagement within the protocol. + +### MANTIS Staking +Users will be able to stake their MANTIS to create a pool accessible by solvers to allow for flash loans towards fees and tips. In return for staking their MANTIS, users receive access to vaults within the platform. Vaults will accrue revenue via protocol fees, MEV share, and restaking fees. Rewards will be claimable in the form of ETH. + +### Flash Loans / Borrowing +To reduce overhead for orderflow participants, solvers will be granted access to flash loans from the MANTIS pool created by stakers. These loans may be taken by solvers to supplement gas fees and tips when sending transaction bundles to blockbuilders. Ideally, this reduces the need for solvers to hold active inventory of MANTIS on top of their already committed bond. + +MANTIS borrowed from the pool is to be repaid upon successful completion of a block from which the solver can direct a portion of any profit earned through MEV to repay the pool. In the event that a solver does not generate profit from a given set of transactions, or ends up with losing PnL from their solution, the solvers bond will be slashed to replenish any MANTIS that has been borrowed. + +### Restaking +Composable supports network restaking, initially in the form of liquid staked DOT. LSDOT is Composable’s implementation of liquid staked DOT, a receipt token representing DOT staked through Composable. Tokens staked to a PoS network, such as Polkadot, receive rewards for validating blocks within the network. A portion of these rewards are charged as a fee and collected by Composable, from which X% are routed to MANTIS stakers. + +In the future, Composable will allow restaking of additional PoS tokens which will accrue block rewards that will be split with the protocol and distributed to MANTIS stakers in the same fashion as LSDOT rewards. + +### Composable Polkadot Activities + +In addition, MANTIS secures Composable Polkadot as a governance token and powering collator staking. Similar to OpenGov on Picasso, Composable Polkadot will adopt the OpenGov governance framework and powered by MANTIS will for voting on all governance decisions. Specific tracks, parameters and OpenGov behaviours will be released shortly before going live. Transaction fees generated on Composable Polkadot are split between network collators, the treasury, and MANTIS stakers. Of these fees, 25% are distributed to collators while the remaining 75% of those fees are split between MANTIS stakers and the Composable treasury. + + +## Total supply and genesis token distribution + +The total supply of 100 million MANTIS tokens are intended to be distributed and released according to the following: + + +![LAYR_distribution_diagram](./MANTIS-distribution-diagram.png) + +**Team**: 25% (25,000,000 MANTIS) of the total token supply will be distributed to founders and the core Composable team as a reward as well as incentives for their continued actions in the best interest in the Composable ecosystem. The distribution of these tokens will have a six-month cliff with linear vesting of the remaining tokens over the subsequent two and a half years. + +**Token purchasers**: 23.71% of the total token supply (23,710,772 MANTIS) will be distributed to early supporters and strategic backers. 13.36% (13,359,572 MANTIS) of this allocation will have a 20% unlock at TGE, with the rest vesting over 24 months. 10.36% (10,351,000 MANTIS) of this allocation will be locked for 6-month vesting period followed by linear vesting over 24 months. + +**Emissions**: 10% (10,000,000 MANTIS) of the total token supply will be released from the protocol as rewards and incentives for a number of actions involved in the protocol. These are programmatic incentives to bootstrap network growth (block validators, decentralized application builders and token holders from other networks) on Composable as well as token liquidity (liquidity mining programs). The full amount will be allocated upon TGE. * + +**Crowdloans**: 16% (16,000,000 MANTIS) of the total token supply will be allocated for the purposes of securing a parachain slot every two years. 16% is being utilized for the current batches of Polkadot auctions, with a 25% vesting on TGE, and the remainder vesting over two years. + +**Treasury**: ~20.2% (20209228.31 MANTIS) of the total token supply will be allocated to the Composable Treasury. The full amount will be allocated upon TGE. * + +**Polkadot vault strategy**: 5.08% (5,080,000 MANTIS) of the total token supply will be rewarded to participants in our Polkadot vault strategy. ~8.3% of this (423,333.33 MANTIS) will be released at TGE, with the remaining distributed over one year. + +## Release schedule + +MANTIS release schedule is shown below: + +![LAYR_release](./MANTIS-release-schedule.png) + +*All terms related to token allocations are subject to change. [Legal disclosures apply.](https://docs.picasso.network/faqs/disclaimers-disclosures-for-composable-tokens/) diff --git a/docs/docs/technology/mantis/tools.md b/docs/docs/technology/mantis/tools.md new file mode 100644 index 0000000..52ae000 --- /dev/null +++ b/docs/docs/technology/mantis/tools.md @@ -0,0 +1,28 @@ +# Tools +## Development Progress +As of November 15, 2023 MANTIS is in mainnet testing. Details of this testing period are as follows: + +Composable is running MANTIS and the Composable Virtual Machine (CVM) on mainnet. Osmosis, Neutron, and the Composable Cosmos chain will be accessible for cross-chain operations on the mainnet testing. + +## Testing Period +With mainnet deployment, we can begin getting user traction and initial use of MANTIS via a campaign “game”. In this campaign, users will be able to submit problems/intentions through the frontend. We will provide test tokens for this purpose, which users will be able to deposit in a basic user interface. + +Users will be given a small amount of PICA token (the native token of the Composable Cosmos chain and Picasso parachain on Kusama). Then, users can participate in the intention submission process with this PICA. A number of solvers on MANTIS will then solve and fill these orders in mainnet testing. These solvers will have needed to onboard with Composable prior to this testing period. + +At this point, we will also need validators running in order to support the network. We will have existing oracles and collators run these validators. + +Experiment/Test details are as follows: +- The goal is to have thousands of problems/intentions sent through MANTIS experimentally +- Swaps will occur between Composable and Neutron or Osmosis +- After this campaign, we will publish the results of these two weeks of mainnet testing and then ideally go to full production with Osmosis and Neutron etc. + +We will measure: + +- Swap volume +- Volume/proportion of solutions that were solved with coincidence of wants (CoWs) matching +- Volume/proportion of solutions that were solved with constant function market makers (CFMMs) +- Volume/proportion of solutions that were solved with solvers’ own liquidity + +The timeline for this is December 2023. + +Interested in participating as a solver? Join our solver channel on telegram [here](https://t.me/+Z69AYRzVTLVhNTk5). \ No newline at end of file diff --git a/docs/docs/technology/mantis/tutorial.md b/docs/docs/technology/mantis/tutorial.md new file mode 100644 index 0000000..f1920d7 --- /dev/null +++ b/docs/docs/technology/mantis/tutorial.md @@ -0,0 +1,51 @@ +# Overview + +This tutorial describes part of MANTIS describing running solver node and user to post problems. + +## Deployments + +### mantis-order contract + +| chain | stage | id | +| ---------- | ------- | ------------------------------------------------------------------- | +| centauri-1 | mainnet | centauri10tpdfqavjtskze6325ragz66z2jyr6l76vq9h9g4dkhqv748sses6pzs0a | +| osmosis-1 | mainnet | osmo1lmmer03c6m4al67782qum79ct0ajf87j23v7dpl3udhpv32mny7qhhw4qg | | +| neutron-1 | mainnet | | + +## User posts problemsni + +Example of problem you can see is here: + +```json +{ + "@type": "/cosmwasm.wasm.v1.MsgExecuteContract", + // ... + "msg": { + "order": { + "msg": { + "wants": { + "denom": "ppica", + "amount": "1000000" + }, + "transfer": null, + "timeout": 2506928, + "min_fill": null + } + } + }, + "funds": [ + { + "denom": "ibc/EF48E6B1A1A19F47ECAEA62F5670C37C0580E86A9E88498B7E393EB6F49F33C0", + "amount": "1" + } + ] +} +``` + +Or mainnet transaction https://ping.pub/composable/tx/CA9489EC961BA97AB514A74EEC6BF3B6CD9900C00A031AA3BB80DC343CE85F2D + +You can try live code with https://github.com/ComposableFi/composable/blob/main/code/cvm/mantis.ts . + +## GTP bot + +You may consider train the bot by asking questions here https://discord.com/channels/828751308060098601/1162324949277622333 diff --git a/docs/docs/technology/mosaic/images-mosaic-withdrawal-guide/contract-write-as-proxy.png b/docs/docs/technology/mosaic/images-mosaic-withdrawal-guide/contract-write-as-proxy.png new file mode 100644 index 0000000..20b3b98 --- /dev/null +++ b/docs/docs/technology/mosaic/images-mosaic-withdrawal-guide/contract-write-as-proxy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08a31a169cf879460d0d8fe40fa39f767704704e7eda32dd250412c8a601ef2e +size 209632 diff --git a/docs/docs/technology/mosaic/images-mosaic-withdrawal-guide/method-withdraw.png b/docs/docs/technology/mosaic/images-mosaic-withdrawal-guide/method-withdraw.png new file mode 100644 index 0000000..d51affe --- /dev/null +++ b/docs/docs/technology/mosaic/images-mosaic-withdrawal-guide/method-withdraw.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e65840321afc74d10c8403f83831c5b8b76f06d6b03b493902e4b7292f6a63c3 +size 227334 diff --git a/docs/docs/technology/mosaic/mosaic-withdrawal-guide.md b/docs/docs/technology/mosaic/mosaic-withdrawal-guide.md new file mode 100644 index 0000000..7634ad3 --- /dev/null +++ b/docs/docs/technology/mosaic/mosaic-withdrawal-guide.md @@ -0,0 +1,47 @@ +# Mosaic Withdrawal Guide + +:::note + +Mosaic has officially been deprecated, and the front-end and its peripheral services have been taken offline in 2023. +All funds and NFTs remain safe within their respective L1 and L2 Ethereum smart contract vaults +and can still be manually withdrawn by the account holders via Etherscan following the instructions of this guide +Additionally, if you need further assistance, feel free to contact our community managers on [Discord]. + +::: + +[Discord]: https://discord.com/invite/composable + +1. Open this link to the smart contract on etherscan in your browser: + https://etherscan.io/address/0xef4439f0fae7db0b5ce88c155fc6af50f1b38728#writeProxyContract + +2. Navigate to the "Contract" tab towards the "Write as Proxy" tab + +2. Connect your wallet to etherscan by clicking on "Connect to web3" and on the following prompt press "OK" + +![connect_wallet](./images-mosaic-withdrawal-guide/contract-write-as-proxy.png) + +3. Go to method `17. withdraw` and insert the address of the token you want to withdraw. + +![method_withdraw](./images-mosaic-withdrawal-guide/method-withdraw.png) + +- USDC - 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 + +- wETH - 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 + +- aUSDC - 0xBcca60bB61934080951369a648Fb03DF4F96263C + +- SLP-USDT - 0x06da0fd433C1A5d7a4faa01111c044910A184553 + +- SLP-USDC - 0xBcca60bB61934080951369a648Fb03DF4F96263C + +4. Click the "write" button and verify the transaction details. + +:::caution + +Remember to have sufficient funds available for gas fees! + +::: + +5. Approve the transaction in your wallet by clicking "Confirm". + + Your withdrawal is now complete diff --git a/docs/docs/technology/parachain-vault-strategy.md b/docs/docs/technology/parachain-vault-strategy.md new file mode 100644 index 0000000..cb648b3 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy.md @@ -0,0 +1,90 @@ +# Parachain Vault Strategy (Discontinued) + +Composable initially developed its parachain vault strategy for procuring its Kusama parachain, Picasso. +This strategy was then revamped for procuring our eponymous Polkadot parachain, Composable. Now, this strategy has been +repurposed again, and upon the launch of Mosaic phase 2, users will be able to migrate their staked funds to Mosaic, +where they can earn attractive yield by providing liquidity in the system’s single-sided vaults. + + +## Previous Uses of the Vault Strategy + +Our team at Composable created the Parachain Vault Strategy as a unique way to incentivize user contributions to the +tokens needed for obtaining a parachain at auction (KSM and DOT). + +Users were able to stake ETH or any ERC-20 token asset in an unlocked multisig vault. +While the assets were in the vault, the ERC-20 tokens were farmed to increase yield. 50% of the yield was collected by +the Composable Treasury and automatically routed to buying more KSM/DOT in a centralized manner in addition to +increasing the user’s stake in our parachain. These KSM/DOT were used to secure our parachains on both Kusama and +Polkadot. The rest of the yield was returned to the user as a reward. + +These strategies provided users with yield, exposure to our parachain auction, and LAYR, as the first set of strategies +spanning both the Ethereum and Polkadot ecosystems. As Composable Labs has been active in the incubation of projects +utilizing Composable’s stack, and given that Composable’s strategies had a large user base, it made sense to give our +earliest contributors and community members access to projects incubated by Composable Labs. That’s why Composable also +offered vault strategy stakers tokens from projects incubated by Composable Labs, which was mutually beneficial for the +following reasons: + +Stakers were able to get upside from the ecosystem that Composable is building, as well as earnings in LAYR. + +Our incubation projects obtained an initial token holder base that will allow them to galvanize initial support as they +go to market and ramp up for full releases. + +During this initial vault strategy, we also introduced boosts to incentivize long-term staking. The boost offered major +rewards: up to a 25% increase on users’ earned LAYR tokens (based on nominal amount), vested over one year. +The full 25% amount was earned only after staking for the full program duration, with lower boosts delivered +proportional to the number of days staked. Composable deployed this boost to users who stayed staked/deposited in our +vault strategy beyond the initial staking period, with maximal rewards being delivered to those staking for 90 days. +Withdrawing from the parachain vault strategy caused the user to forfeit the boost that was proportional to the amount +withdrawn and the time they staked. + +This vault strategy was initially launched on Tuesday 29th June at 10am CET. Users of these initial iterations of this +vault have since been able to earn STRM and ANGL rewards in addition to their LAYR rewards, with STRM being the native +token of Instrumental Finance and ANGL being the native token of Angular Finance. STRM tokens have already been +distributed to earners in this strategy, and LAYR and ANGL tokens will be distributed upon their respective token +generation events (TGEs), including any earnings generated from boosts. + +[Instrumental Finance](https://instrumental.finance) was the first protocol that began tapping into the user base that +Composable has built. This extinct program commenced the incentivization of the vaults from 3pm CET, October 18th, +2021 until December 6th, 2021, 12:00 UTC. + +_The incentivization program went as follows:_ + + + +* Instrumental Finance’s total Instrumental Token (STRM) supply is 100m tokens, with an initial FDV of $30m. +* The program ran for 8 weeks, during which time 5% of Instrumental token (STRM) was distributed. +* During the first 7 days, 3,250,000 tokens will be distributed. Afterwards, the second week saw 1,500,000 tokens distributed. + Thereafter for the remainder of the program, 250,000 tokens were distributed. + +[Angular Finance](https://www.angular.finance/) was the second protocol to leverage our extinct vault strategies to +generate traction and distribute its native tokens — ANGL. Angular Finance began incentivizing the vaults starting at +13:00pm CET on December 6, 2021 and ended on the 31st of January. + +**Below are details of the Angular incentivization program that is now expired:** + + + +* Angular Finance’s total token supply is 100m tokens, with an initial FDV of $25m +* The program ran for eight weeks, during which time 5% of ANGL tokens will be distributed. +* During the first 7 days, 3,250,000 tokens will be distributed. The following week saw the distribution of 1,500,000 + tokens, and the remaining duration of the program distributed 250,000 tokens. + + +## Migration of Vault Strategy Funds to Mosaic + +As mentioned, the launch of Mosaic phase 2 will unlock users’ ability to migrate funds from their participation in our +vault strategy onto Mosaic. Once this migration period ends, the vault strategies will end. + +In addition to the fees that liquidity providers (LPs) can earn from users transferring tokens via Mosaic, +Composable will be incentivizing asset migration with boosted rewards on stablecoin and wETH vaults. +Ahead of Mosaic’s phase 2 launch, the migration process will soon be displayed on Composable’s strategies page with a +clear breakdown of the initial steps for users to ensure a smooth transition. + +Users who participated in the original Composable vault strategies will also receive incentives in the form of LAYR +tokens to incentivize a smooth migration. Hence, we see the migration as a mutually beneficial transition that allows +Mosaic to launch with sufficient total value locked (TVL) while rewarding our users for continuing to support our core +products. + +Through these internal adjustments, Composable is setting both its projects and supporters up for success. +We appreciate everyone who has contributed to our vault strategies up to this point, and we look forward to providing +more yield as our infrastructure and projects progress. \ No newline at end of file diff --git a/docs/docs/technology/parachain-vault-strategy/composable-strategies-withdrawal-guide.md b/docs/docs/technology/parachain-vault-strategy/composable-strategies-withdrawal-guide.md new file mode 100644 index 0000000..71690ca --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/composable-strategies-withdrawal-guide.md @@ -0,0 +1,128 @@ +# Composable Strategies Withdrawal Process + +:::info + +Composable Strategies has officially been deprecated. +The front-end and its peripheral services have been taken offline in 2023. +All funds remain safe within their respective Ethereum smart contract vaults +and can still be withdrawn manually by the account holders via Etherscan following the guide on this page. +Additionally, if you need further assistance, feel free to contact our community managers on Discord. + +::: + +1. GENERIC WITHDRAW of **TOKEN ( = DAI, USDC, USDT)** + +For withdrawing **DAI**, go to the strategy address: +``` +https://etherscan.io/address/0x4A03ea61E543eC7141a3f90128B0c0c9514F8737 +``` + +For withdrawing **USDC**, go to the strategy address: +``` +https://etherscan.io/address/0xF12dA8470E2643cCb39a157e8577D9AA586a488f +``` + +For withdrawing **USDT**, go to the strategy address: +``` +https://etherscan.io/address/0x1941441d31809e9E1828Da0cE6d44175F657E215 +``` + +2. Go to ‘Contract’ Tab and click ‘Read as Proxy’ + +![contract_read_as_proxy](./images-composable-strategies-withdrawal-guide/contract-read-as-proxy.png) + +3. Go to method `19 - userInfo`. Input your wallet address and select ‘Query’ and copy the ‘amountfToken’ value. + +![query_amountfToken](./images-composable-strategies-withdrawal-guide/query-amountfToken.png) + +4. Next, go to the ‘Write as Proxy’ tab under Contract and select “Connect to Web3” and press OK to connect with metmask. + +![contract_write_as_proxy](./images-composable-strategies-withdrawal-guide/contract-write-as-proxy.png) + +5. Go to method `20 - withdraw` and fill in the following: + +| Field | Input | Details | +|----------|-----------------------|-----------------------------------| +| amount | amountfToken | value of amountfToken from step 3 | +| deadline | 100000000000000000000 | use this exact value | +| slippage | 50 | this is 0.5% | + +- ethPerToken (uint256): detailed at 5. a) +- ethPerFarm (uint256): detailed at 5. b) +- tokensPerEth (uint256): detailed at 5. c) + + Go the to UniswapV2 Router contract used by the strategy at + https://etherscan.io/address/0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D + + You can check for this address under the contract from step 1 at method `14 - sushiswapRouter` + +![sushiswapRouter_account_address](./images-composable-strategies-withdrawal-guide/sushiswapRouter-account-address.png) + +On this address, select 'Contract' and then 'Read Contract' and select method `6 - getAmountsOut` + +![contract_read_getAmountsOut](./images-composable-strategies-withdrawal-guide/contract-read-getAmountsOut.png) + +Token, Address and Decimals for reference in the following steps: + +| TOKEN | Generic Withdraw Address | Decimals | +|-------|--------------------------------------------|----------| +| DAI | 0x6B175474E89094C44Da98b954EedeAC495271d0F | 18 | +| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | 6 | +| USDT | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | 6 | + +5. a) To get the ethPerToken + + In the input field called `amountIn` insert value 1 * 10 to the power of TOKEN decimal places. + (18 decimals for DAI, 6 for USDC and 6 for USDT) + + In the second field called path `address[]` you need to enter the address of TOKEN + (address of DAI, USDC or USDT) then a comma with no space followed by the contract address of wETH + (0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) and press Query. + +![ethPerToken_getAmountsOut](./images-composable-strategies-withdrawal-guide/ethPerToken-getAmountsOut.png) + +The value after the decimal point is the input value for field 5.a + + +5. b) To get the ethPerFarm + + In the input field called `amountIn` insert value 1 * 10 to the power of FARM token decimal places. + https://etherscan.io/token/0xa0246c9032bC3A600820415aE600c6388619A14D?a=0x4A03ea61E543eC7141a3f90128B0c0c9514F8737 + (18 decimals) + + In the second field called path `address[]` you need to enter the address of FARM + (0xa0246c9032bC3A600820415aE600c6388619A14D) then a comma with no space followed by the contract address of wETH + (0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) and press Query. + +![ethPerFarm_getAmountsOut](./images-composable-strategies-withdrawal-guide/ethPerFarm-getAmountsOut.png) + +The value after the decimal point is the input value for field 5.b + +5. c) To get the tokensPerEth + + In the first input field called `amountIn` input the value 1 * 10 at power of 18. + + + In the second field called path `address[]` you need to enter the first contract address of wETH + (0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) and then add a comma with no space followed by the address of TOKEN + (address of DAI, USDC or USDT) and press Query. + +![tokensPerEth_getAmountsOut](./images-composable-strategies-withdrawal-guide/tokensPerEth-getAmountsOut.png) + +The value after the decimal point is the input value for field 5.c + +6. With all the above data filled in just press WRITE and sign the transaction with your Metmask wallet. + + Be careful we do recommend to set Gas limit to at least 1.5 mil as this is going to be a complex Tx. + Check to have enough funds to execute it. + +![confirm_transaction](./images-composable-strategies-withdrawal-guide/confirm-transaction.png) + +:::caution + +If your metmask displays the message below +You need to check all the above data as some input data is wrong and the transaction will fail automatically. + +::: + +![troubleshoot_transaction](./images-composable-strategies-withdrawal-guide/troubleshoot-transaction.png) diff --git a/docs/docs/technology/parachain-vault-strategy/contracts-technical-details.md b/docs/docs/technology/parachain-vault-strategy/contracts-technical-details.md new file mode 100644 index 0000000..8c3bc2c --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/contracts-technical-details.md @@ -0,0 +1,37 @@ +# Contracts - Technical Details + +**For transparency, we are continuing to publicize the parachain vault approach we took when bidding for our Kusama and +Polkadot parachains, as well as the contracts used in this process. This strategy is no longer being implemented to +support parachain procurement, as this milestone has already been achieved. Please note that the information in +italicized text below is outdated for this reason:** + +_Our options for vault strategies were as follows:_ + + + +1. _Harvest dai with ETH // Harvest dai with DAI_ +2. _Harvest usdc with ETH // Harvest usdc with USDC_ +3. _Harvest usdt with ETH // Harvest usdt with USDT_ + +_The contracts being used to power the vaults are as follows, with definitions below:_ + +![contracts_technical_details](./images-contracts-technical-details/contracts-technical-details.png) + +* **_HarvestBase_** _- base contract for all strategies using Harvest as the underlying strategy_ +* **_IHarvest_** _- interface for Harvest strategies_ +* **_IStrategy_** _- interface for all strategies_ +* **_ERC1967Proxy_** _- the proxy contract that points to a specific implementation_ +* **_Timelock_** _- contract to which ownership of all strategies will be transferred_ +* **_StrategyBase_** _- base contract for all strategies_ +* **_Storage_** _- base storage contract_ +* **_HarvestStorage_** _- Harvest strategies contract_ +* **_HarvestSC_** _- contract used for Harvest strategies where users enter with a stablecoin_ +* **_HarvestSCBase_** _- base contract for all Harvest strategies where users enter with a stablecoin_ + +_The following are the contract addresses for the deployed strategies:_ + +**_HarvestDaiStableCoin:_** _0x4A03ea61E543eC7141a3f90128B0c0c9514F8737 (proxy)_ + +**_HarvestUsdcStableCoin:_** _0xF12dA8470E2643cCb39a157e8577D9AA586a488f (proxy)_ + +**_HarvestUsdtStableCoin:_** _0x1941441d31809e9E1828Da0cE6d44175F657E215 (proxy)_ \ No newline at end of file diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/confirm-transaction.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/confirm-transaction.png new file mode 100644 index 0000000..a53b73e --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/confirm-transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe5664743b3c3f673a21b6166aba0203d22122a396abd3450a8a7c7a17c81088 +size 402420 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-read-as-proxy.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-read-as-proxy.png new file mode 100644 index 0000000..91b442b --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-read-as-proxy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:768b3219f57afed62a86128f1fd669dfd44c8207b12195f49c607c80480e4afe +size 289450 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-read-getAmountsOut.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-read-getAmountsOut.png new file mode 100644 index 0000000..7f1d9c8 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-read-getAmountsOut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12ca2b84c8e264736e906970116aff99182a575637b1e667868c5cfcf632c5b3 +size 176051 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-write-as-proxy.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-write-as-proxy.png new file mode 100644 index 0000000..e6d285e --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/contract-write-as-proxy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:704979bcd990222d6c65de3b82c03687c925f5e7a1bcf055e086e7efa95f9b78 +size 173032 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/ethPerFarm-getAmountsOut.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/ethPerFarm-getAmountsOut.png new file mode 100644 index 0000000..c608c47 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/ethPerFarm-getAmountsOut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea1a6af5d1f8833d4724f29ac974af70c09db3432a54f7b91546e60cfdf8f18b +size 72330 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/ethPerToken-getAmountsOut.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/ethPerToken-getAmountsOut.png new file mode 100644 index 0000000..d71063f --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/ethPerToken-getAmountsOut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9d22baf4edf9faa7f3dbf75b10c5e01f9abd2087a2fc50a12df88f84354dce2 +size 70409 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/query-amountfToken.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/query-amountfToken.png new file mode 100644 index 0000000..b00215f --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/query-amountfToken.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99bce2f7b697d38e31f076e54e8ecb126d7375a07d0c9a997934aee2cd26bd5d +size 116627 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/sushiswapRouter-account-address.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/sushiswapRouter-account-address.png new file mode 100644 index 0000000..36d6080 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/sushiswapRouter-account-address.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65e290513b74b08789d1c5552c1f12224da44b90516f640116544e9e56e4e32a +size 17123 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/tokensPerEth-getAmountsOut.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/tokensPerEth-getAmountsOut.png new file mode 100644 index 0000000..236b24e --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/tokensPerEth-getAmountsOut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7cf6cd858019b50ac5f18485e5bc9de4994cc55824a5368e073a70de0d9c34a +size 70543 diff --git a/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/troubleshoot-transaction.png b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/troubleshoot-transaction.png new file mode 100644 index 0000000..f1ed2c0 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-composable-strategies-withdrawal-guide/troubleshoot-transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d304990bfc0199629a6d677df0003d951915a64685a5431cf19dc6f9d0515f90 +size 124036 diff --git a/docs/docs/technology/parachain-vault-strategy/images-contracts-technical-details/contracts-technical-details.png b/docs/docs/technology/parachain-vault-strategy/images-contracts-technical-details/contracts-technical-details.png new file mode 100644 index 0000000..894c51c --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-contracts-technical-details/contracts-technical-details.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95a13c265b87393bd7be793375c32ab358784d007b3ad1913bf34d94b38bc977 +size 21291 diff --git a/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/general-vault-flow-deposit.png b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/general-vault-flow-deposit.png new file mode 100644 index 0000000..43ec7ce --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/general-vault-flow-deposit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4cc315c0df1d64eb56ff8215065f007373d6dbabe37f053316d9af910653544 +size 15901 diff --git a/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/general-vault-flow-withdrawal.png b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/general-vault-flow-withdrawal.png new file mode 100644 index 0000000..94d4986 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/general-vault-flow-withdrawal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c57a1a43ceaa93c4a84e828a10d2e0b21efaf239e8b7f271b8b4183b1e2fe90 +size 29481 diff --git a/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/harvest-vault-flow-deposit.png b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/harvest-vault-flow-deposit.png new file mode 100644 index 0000000..dbd351e --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/harvest-vault-flow-deposit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47025d155150dacd8f938a266ef54e28633ccda51455d4102e2654869233aad4 +size 24984 diff --git a/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/harvest-vault-flow-withdrawal.png b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/harvest-vault-flow-withdrawal.png new file mode 100644 index 0000000..4b83770 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/images-vault-process-in-detail/harvest-vault-flow-withdrawal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f00310ea5b5ba4ddd4eddc9fba29c01b2c4c306501e369309ab3eea9195090f +size 38893 diff --git a/docs/docs/technology/parachain-vault-strategy/vault-process-in-detail.md b/docs/docs/technology/parachain-vault-strategy/vault-process-in-detail.md new file mode 100644 index 0000000..c6531b8 --- /dev/null +++ b/docs/docs/technology/parachain-vault-strategy/vault-process-in-detail.md @@ -0,0 +1,121 @@ +# Vault Process in Detail + +**For transparency, we are continuing to publicize the parachain vault approach we took when bidding for our Kusama and +Polkadot parachains, as well as the infrastructure used in this process. For our Polkadot crowdloan, participation was +capped at 25 million DOT and for our Kusama crowdloan, participation was capped at 200,000 KSM.** + +**Our crowdloan strategy improved upon existing crowdloans by offering augmented flexibility and earning opportunities +for users, such as the depositing of stablecoins and enhanced incentives for participants. These strategies are no +longer being implemented to support parachain procurement, as these milestones have already been achieved. Please note +that the information in italicized text below is outdated for this reason:** + + +## General Vault Flow + + +### Deposit + +![general_vault_flow_deposit](./images-vault-process-in-detail/general-vault-flow-deposit.png) + +_The diagram above illustrates the generic flow of all the vault strategies. The user first invests ETH or a specific +stablecoin and gets back pAT. The investment is routed to specific yield farming strategies that have shown to be stable +and secure._ + +_For each one of the strategies, the detailed flow can be seen later on this page._ + + +### Withdrawal + + +![general_vault-flow-withdrawal](./images-vault-process-in-detail/general-vault-flow-withdrawal.png) + + +The above flow illustrates the generic withdrawal flow of all the strategies. The user returns either a portion of his +or her pAT (or even the entire amount) and gets back the same token they entered with(either ETH or a specific stable +coin) and 50% of the rewards obtained (in the same token they invested - ETH or a specific stable coin). The rest of +the rewards (the other half) is sent to a treasury account, and funds from that treasury are later used to participate +in the KSM/DOT auction. + +At the beginning of this process, a fee is taken from each withdrawal, encouraging users to stake for a more extended +period. + + +## Harvest Vault Flow + + +### Harvest Stablecoin Strategies + + +#### Deposit + +![harvest_vault-flow_deposit](./images-vault-process-in-detail/harvest-vault-flow-deposit.png) + + +The above diagram illustrates the summarized flow for “deposit” action of what happens internally in the case of a +Harvest strategy (ex: Harvest DAI or Harvest USDC). The average gas used by a deposit transaction for a stablecoin +Harvest strategy is 409684. Strategies that we will release initially are Harvest Dai, Harvest Usdc, and Harvest Usdt. + + +#### Withdrawal + +The “withdraw” action is a bit more complex, as you can see in the diagram below: + +![harvest_vault-flow_withdrawal](./images-vault-process-in-detail/harvest-vault-flow-withdrawal.png) + + +In the case of Harvest, when you withdraw from the Harvest Pool, you get back your fToken as well as Farm tokens. Also, +for the same amount of fToken that you withdraw from the Harvest Vault, you might get back more Token than what you +initially deposited. As an example, if you stake 100 DAI, you get back 95 fDai and after 1 year you come back with +these 95 fDAI, you will probably get more than 100 DAI, as well as Farm tokens). + +The difference between the amount of Token you got now and the amount you had initially, plus the Farm tokens, are +considered rewards. All the rewards are then converted to ETH. 50% of that ETH amount will be routed to the treasury, +and 50% is swapped with Token (Dai, in the previous example) sent to you. + +The average gas used by a withdrawal transaction for a stablecoin Harvest strategy is 819300. + +Let’s take the Harvest DAI strategy as an example where you enter with DAI and get the rewards later. A full deposit +and withdraw flow is explained below: + + + +1. _The user invests 4000 DAI._ +2. _4000 DAI are deposited to Harvest Dai Vault and you get back an amount of fDai; let’s consider you receive 3500 + fDai._ +3. _3500 fDai are invested into the Harvest Dai Reward Pool._ +4. _3500 pAT are minted and they are transferred to the user, alongside all the internal accounting done in the contract._ +5. _Two months go by._ +6. _The user wants to withdraw and sends 3500 pAT to the withdraw method._ +7. _3500 pAT is burned._ +8. _3500 fDai is retrieved from Harvest Dai Reward Pool._ +9. _At this step we now also have Farm tokens obtained from Harvest. Let’s consider that 1 Farm was obtained._ +10. _3500 fDai is sent to Harvest Dai Vault and an amount of Dai is received by the contract. At step #2 we added + 4000 DAI, but in this case, Harvest might give back more than 4000. We will consider that 4350 DAI was received._ +11. _At the current step, we have 4350 DAI and 1 Farm tokens into the contract. Given the fact that the user's + initial investment was 4000 DAI, we consider 350 DAI and 1 Farm as rewards._ +12. _175 DAI is left aside for the user._ +13. _175 DAI and 1 Farm tokens are swapped with ETH at the current ETH/DAI and ETH/Farm prices. Let’s assume total + rewards are 0.125 ETH_ +14. _50% of the rewards are marked and sent to the treasury: 0.0625 ETH._ +15. _The other 50% of the rewards are converted to DAI, so the user will be entitled to around 90 more DAI._ +16. _The user gets back 4000 DAI (initial investment) + 175 DAI (extra tokens) + 90 DAI (rewards) = 4265 DAI total._ +17. _0.0625 ETH (that was sent to the treasury) is designated to purchase KSM/DOT tokens. Besides the base APY the + user had (4265 DAI compared to 4000 DAI minus their initial investment), they are also entitled to Composable + Tokens resulting in a much greater APY._ + +_Please note that Composable Tokens will be distributed after TGE to everyone who participated in the vault strategies. +The APY entitled to each user depends on the total value locked (TVL) of all the strategies._ + + +## Parachain Auction Tokens + +Parachain Auction Tokens (or pAT) are the receipt token minted for participation in our parachain vault strategy, +representing a user’s stake in the vault. Whenever someone deposits in our vault, they get back pAT in an amount +depending upon their investment and strategy type. + +If we take Harvest stablecoins strategies as an example, whenever you invest Token (Dai/Usdc/Usdt), you’ll get back +fToken (fDai/fUsdc/fUsdt). The value of fToken is usually a bit lower than the amount of token you invested. +For example, investing $100 in DAI in the Harvest DAI strategy will get you around 95 fDai, and the amount of pAT you’ll +receive is equal to the amount of fDai, which is 95 in this case. + +Each strategy has its own pAT token, similar to how an AMM transfers LP tokens once you add liquidity. \ No newline at end of file diff --git a/docs/docs/technology/restaking.md b/docs/docs/technology/restaking.md new file mode 100644 index 0000000..689d4ce --- /dev/null +++ b/docs/docs/technology/restaking.md @@ -0,0 +1,72 @@ +# Introduction to Picasso Generalized Restaking Layer + +Restaking has been [described as a new primitive](https://consensys.io/blog/eigenlayer-a-restaking-primitive) in crypto economic security that enables the rehypothecation of a token on the consensus layer. Specifically, the process of staking involves a user staking an ecosystem’s native asset to that ecosystem’s validators. The user then receives a receipt token representing this stake. They then “restake” this receipt token with validators again. This mechanism enables users to multiply the crypto economic security (and the yield) of their initial tokens, as they are essentially able to stake the same assets twice, receiving yield and supporting PoS validation both times. + +## What is Generalized Restaking? + +Economic security is a necessary construct for applications building in the decentralized space. [Eigenlayer](https://www.eigenlayer.xyz/) introduced ETH staking. Picasso is introducing restaking of assets on multiple Proof of Stake (PoS) networks to establish cross-ecosystem pooled security to Actively Validated Services (AVSes). + +:::tip +The first opportunity for Restaking on Solana is live. Users have a chance to get in on the action early and earn boosted rewards through [MANTIS games](../technology/restaking/mantis-games.md) - a team staking competition on [mantis.app](https://mantis.app/). +::: + +Restaking has been pioneered and popularized by EigenLayer, which is a protocol for restaking ETH on Ethereum. In particular, users staking ETH are able to opt into EigenLayer’s smart contracts for restaking their ETH and thus extending the crypto economic security to additional applications within the ecosystem. EigenLayer thus addresses rising concerns of fragmented security on Ethereum, helping to bootstrap the security of various protocols/applications. EigenLayer’s total value locked (TVL) at the time of writing is over $7.5 billion, indicating that there is a clear demand for restaking. + +Despite the benefits of restaking, this concept has largely not yet expanded beyond the Ethereum ecosystem. However, there is a huge potential for restaking on other chains. Leveraging the fact that Picasso is a L1 Cosmos SDK chain that is also a hub for cross-ecosystem IBC, we are able to make this restaking layer cross-chain. Thus, vaults associated with this system will exist exclusively on IBC-enabled chains. Registration and accounting of AVSes are managed on Picasso. Vault contracts are to be deployed on Solana, Picasso and Ethereum in H1. Picasso Generalized Restaking facilitates a broad spectrum of assets from PoS networks. In effect, this will enable a larger supply of tokens with a lower opportunity cost to be restaked, and therefore, decrease the cost of acquiring AVSes. + +:::info +This documentation refers to [Composable Cosmos](../networks/composable-cosmos.md) as Picasso as we are currently undergoing a name change of the Composable Cosmos chain to Picasso. +::: + +In this network, validation is powered by operators who accept restaked tokens contributed by anyone. Operators are selected according to governance on Picasso. Their role is to check the smart contract on-chain and use these inputs to construct blocks. The block is finalized when signed by more than ⅔ of validators. Restaked funds are sent to Picasso and encoded on the block as part of the header data, which we create a proof for. The block is stored on our internal ledger in addition to being encoded on the respective chain. + +A core rationale behind creating a Restaking Layer is that it enables partial block building in every domain. This addresses the censorship and block proposer agency issues outlined previously. + +**Architecture at a Glance** + +![architecture](../technology/restaking/genz-restaking.png) + +## Generalized Restaking Flow + +The following process outlines the journey of users' LST deposits on a PoS chain, including delegation to AVSes, emission earnings, and un-staking procedures. + +1. Users holding LSTs on PoS chain (e.g. Solana) deposit into the vault contract. At this point no further action is required from the user unless they specify which AVS to delegate their stake to. + +2. The value of the deposit is propagated via IBC to the Orchestrator on Picasso and sent to the accounting contract. + +3. AVSes register and propose an amount to pay for restake in exchange for security. + +4. Restakers earn direct emissions from at least 40% of the revenue generated by AVSes. + +5. When a user un-stakes, they will have to wait for a 7 day un-bonding period and their stake will be withdrawn to their origin address on the origin network. + + + +## AVS & Operator Eligibility + +### Operator Eligibility +- Individuals with a Picasso address can join as Operators, and there is no minimum requirement for the amount of restaked tokens. +- It's possible for an address to function as both a Restaker and an Operator simultaneously, although this is optional. +- Operators have the option to engage in network activities without possessing any restaked tokens. They can receive token delegations from other Restakers or self-delegate using their own restaked tokens. +- To become an Operator, a governance proposal must be initiated on Picasso to become onboarded via on-chain governance. + + +### AVS Requirements + +The AVS onboards operators. Operators can select which AVS they wish to validate for. The exact process is detailed in the following manner: + +- Once an AVS has been successfully onboarded, their next step involves persuading operators to validate on their behalf. +- Subsequently, operators will typically delegate to the AVS by default. +- Users retain the option to abstain from delegating to the AVS, thus remaining unaligned with the operator to whom they have delegated. +- AVSes must prepare off-chain code for operators to execute customized slashing +- Comply with the verifier interface to enable slashing of any malicious or misbehaved operators and avoid Fishermen. + +**Requirements for the operators vary depending on the use case of the AVS.** + +*To initiate discussions regarding onboarding your project, please reach out to our team on Discord and complete [this AVS Questionnaire](https://forms.gle/pYv7P5of5Wb9avkC8).* \ No newline at end of file diff --git a/docs/docs/technology/restaking/architecture.md b/docs/docs/technology/restaking/architecture.md new file mode 100644 index 0000000..7a78864 --- /dev/null +++ b/docs/docs/technology/restaking/architecture.md @@ -0,0 +1,103 @@ +# Technical Architecture + +Smart contracts utilized on Picasso Cosmos for the Restaking Layer are written in CosmWasm. Contracts in domain specific PoS Blockchains are written in the smart contracting framework of the respective execution layer. + + +![architecture](../restaking/architecture.png) +### Restaking Vaults +A smart contract is deployed on each PoS chain in the system to accept restaked assets to power the restaking layer, along with staking vaults for the Cosmos ecosystem assets on Picasso Cosmos. + +Vault Contracts are designed to receive Liquid Staked Tokens (LSTs). The assets that will be initially accepted are: + +1. Solana LSTs +2. ETH and ETH LSTs +3. Monad LSTs and Native Withdrawal +4. TRX LSTs +5. lsDOT +6. BNB LSTs +7. Cosmos assets via Picasso: + - stTIA/milkTIA + - stDYDX + - stATOM + - SEI LSTs + - PICA LSTs + - Berachain LSTs + +### Operators +An actor responsible for executing off-chain software logic restaked from the AVS. These operators function between Restaking Layer and the AVS. Operators retrieve their instructions from the AVS Registration Contract, which informs them of the validation tasks. + +Upon registration, operators are stored in the Operator Assignment. Within this contract, operators also register for the AVSes they intend to validate. Subsequently, they must obtain delegations to interact with these protocols. + +Operators receive delegations from the Delegation Management contract in the following manner: + +1. Users delegate their assets to particular operators to the Vault Contract via the Delegation Management contract. +2. The total value of the user’s stake is derived from the Accounting Contract. +3. Through this delegation, users can select which Actively Validated Services (AVS) they wish to validate. +4. Operators have the option to accept or decline these delegations. +5. The Operator Assignment Contract specifies conditions that delegators must adhere to, including the percentage fee charged by operators. +6. The Delegation Management Contract facilitates asset unstake calls for users. + +:::note +When selecting an AVS, Operators and Stakers should be aware of the associated slashing conditions that are set by the AVS. +::: + +### Actively Validated Services (AVSes) +AVSes are decentralized applications that require economic security such as roll-ups, L2s, data availability layers, sequencers, dApps, cross-chain bridges, and virtual machines. AVSes define what logic they would like validated by interacting with the AVS Registration contract. In this contract, they will parameterize: + +- Amount of stake i.e. how much security they require. +- The type of asset or assets accepted. +- The set of operators they’d like to interact with. +- Slashing parameters. + - Slashing parameters and proofs of successful behaviour must adhere to a specific framework. + +Once the parameters are established, AVSes proceed to engage with the Rewards Distribution contract to allocate rewards corresponding to the desired distribution period. This process defines the rewards rate per unit of security, wherein, for instance, an AVS may pay $50 of their native token for 1 unit of security (e.g., 1 sol of security). Additionally, a length of time must be specified for each epoch by the AVS. A fraction of the rewards (20%) is automatically allocated to PICA stakers. + +### Orchestrator + +This Orchestator is a smart contract deployed on Picasso designed to execute fundamental operations including: + +- Interfacing with the AVS Registration contract which facilitates registration and unregistration processes. +- Updating the Accounting Management contract to reflect staked and unstaked amounts. +- Updating the Accounting Management contract to record the amount slashed. + - Sending a notification to the vault to transfer slashed assets to the community pool. +- Updating the Delegation Management contract with user delegations. +- Facilitating interactions between the Delegation Management contract and the Operator Assignment contract. +- Slashing Manager: + - Adding contracts authorized to perform slashing. + - Revoking slashing permissions from specified contracts. + - Monitoring historical stake updates to ensure that withdrawals are only permitted once no middlewares possess slashing rights over the withdrawn funds. + +### Verifier +The Verifier contract is responsible for verifying that operators execute the consensus of the Actively Validated Services (AVS) correctly. It dispatches slashing operations to the orchestrator and receives IBC proofs of slashing conditions from the AVS. Additionally, it forwards the slashing operations to the orchestrator for the AVS, ensuring thorough validation of the AVS's performance. + +### Accounting contract +This contract is responsible for updating the state of vaults deployed on various chains based on actions such as {stake, un-stake, slash}. + +### Fishermen Protocol +These are actors who ensure operators are being honest and signal if an operator is misbehaving and needs to be slashed. Anyone is allowed to become a Fisherman and rewards are provided to any misbehaviour reports via Slashing. + +### CVM +Send stake and un-stake messages from PoS chains to Picasso Cosmos. Users can originate these requests from the PoS chains they restake assets. Additionally, users can (un)delegate their stake to operators of AVSes. These are all operations that are executed on the chain where the user assets live, and are propagated using CVM. + +### Slashing Contract +The process involves detecting malicious behavior, initiating slashing requests, and executing specific steps based on the type of slashing chosen by the AVS. + +1. Monitors detect malicious/anomalous behavior and begin a slashing request to the involved chain. +2. A cross-chain message is sent along Picasso Cosmos, with the stakes frozen for the affected customer and deposit and withdrawals disabled. Pending deposits and withdrawals in the present epoch become invalid. +3. Proofs are given to the slashing contract +4. Dependent upon the type of slashing required, a number of steps can then happen: + - If a cryptographically provable offense occurs, it is easily proven and implemented into the smart contract. + - If consensus-driven slashing is involved, more time/additional proofs are needed. + - If a slashing veto is triggered, a lengthier sequence occurs to finalize slashing. +5. Taking into account the slashing outcome, Picasso Cosmos reaches consensus and the staked amount is updated. The resulting data is sent via Picasso Cosmos to all impacted chains. +6. User funds are slashed. + +### Fee Distribution +The fee distribution process is carried out in the following manner: + +1. The AVS sends a reward proof to the Accounting contract to begin the fee distribution process. +2. Picasso Cosmos triggers fee distribution process that are set by the AVS. +3. When consensus is reached, a fee distribution request is sent to appropriate blockchains. +4. A cross-chain message is sent over Picasso Cosmos to the restaking vault located on the network where the user has deposited their stake. +5. This bulk operation further includes fees that must be sent to PICA stakers. +6. Restakers on other networks who may have also restaked on the same AVS can claim their rewards. diff --git a/docs/docs/technology/restaking/architecture.png b/docs/docs/technology/restaking/architecture.png new file mode 100644 index 0000000..7a0e1b1 --- /dev/null +++ b/docs/docs/technology/restaking/architecture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cfc8dd6eefb5b55a13b914eed0df27a27b651b54f6c21ffc1eb4735dc961c9e +size 81846 diff --git a/docs/docs/technology/restaking/flow.png b/docs/docs/technology/restaking/flow.png new file mode 100644 index 0000000..6d446d0 --- /dev/null +++ b/docs/docs/technology/restaking/flow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d12cca837e7c29af5acc11675ac2d3f4a5131635ecb1565c17db7b6a74d6ad17 +size 119130 diff --git a/docs/docs/technology/restaking/gb.png b/docs/docs/technology/restaking/gb.png new file mode 100644 index 0000000..5bf9bbe --- /dev/null +++ b/docs/docs/technology/restaking/gb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37f09455ce0ad415cd9ec2416d226b4588f08ecbcef5e6c5a6fda62b2ff7de8d +size 165336 diff --git a/docs/docs/technology/restaking/genz-restaking.png b/docs/docs/technology/restaking/genz-restaking.png new file mode 100644 index 0000000..9cee018 --- /dev/null +++ b/docs/docs/technology/restaking/genz-restaking.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d4df47cd99df34b570e6e21061ac82309383ad38116174bf5786bad09f97beb +size 35921 diff --git a/docs/docs/technology/restaking/governance.md b/docs/docs/technology/restaking/governance.md new file mode 100644 index 0000000..9fe3a2b --- /dev/null +++ b/docs/docs/technology/restaking/governance.md @@ -0,0 +1,27 @@ +# Governance + +The onboarding process for operators occurs following approval by PICA governance on Picasso Cosmos. Similarly, AVSs are required to undergo onboarding via PICA governance. The inclusion of asset types within the restaking layer also follows the same governance process. Any assets subjected to slashing will be redirected to the community pool on Picasso Cosmos. + +Initially, the owner of the contracts on Picasso Cosmos will be set to a multisig. In the next stage of governance, the owner of the contracts on will be designated to the Upgrade Authority address. This ensures that PICA governance retains control over the contracts for the purpose of upgradability. + +The restaking vault on Solana is currently governed by a multisig until decentralised governance is established. This is composed of a 7-of-9 multisig at address `JD4dNpiv9G24jmq8XQMuxbQPKN4rYV7kue2Hzi1kNT4Q`. As we move toward the launch of SOL IBC, we will look to expand this multisig in the greater pursuit of further decentralization. The **Admin & Upgradability multisig** is responsible for the following: + +- Whitelisting tokens +- Setting the staking cap +- Setting if the guest chain is initialised or not +- Upgrading the contract + +Signers for the multisig are as follows: + +- Miguel Matos — Board member, Composable Foundation. Professor at the Universidade de Lisboa & Researcher at INESC-ID. +- Dan Edlebeck — Advisor, Composable +- Blas Rodriguez — CTO, Composable +- Joe DeTommaso — Head of Strategy, Composable +- Jafar Azam — Product Owner, Composable +- Dhruv D Jain — Research Analyst, Composable +- SolBlaze — bSOL LSD +- Don Cryptonium — Community Member +- Polkachu — Validator Operator + +### Deployed Contracts +Currently, the Solana vault contract has been deployed on mainnet and is accepting restaked Solana LSTs. The contract address is `BoNnRkatYrN7ckA9oAU4e7cHYfwKPgLEuzkKg4LWaHeH`. \ No newline at end of file diff --git a/docs/docs/technology/restaking/mantis-games.md b/docs/docs/technology/restaking/mantis-games.md new file mode 100644 index 0000000..86071c1 --- /dev/null +++ b/docs/docs/technology/restaking/mantis-games.md @@ -0,0 +1,35 @@ +# MANTIS Games + +In order to bootstrap liquidity on the [restaking layer on Solana](../restaking/vaults.md), there will be a team competion in phase 2 of MANTIS Games. The MANTIS Games involve the following phases, all designed to make participation maximally enjoyable and rewarding: + +## Phase 1 - NFT Auction +Phase 1 introduces teams: during the course of MANTIS games, users can register to join a team on the MANTIS app. Along with your team, you will be able to participate in various competitions on [MANTIS](https://mantis.app/). + +In the first phase, NFTs were auctioned on the [Tensor marketplace](https://www.tensor.trade/) to serve as a mechanism for team leaders to create teams and compete within the Mantis platform. **Only NFT holders can be team leaders** who will receive 15% of rewards from their team, along with a 1.25x boost for their own deposits. If you are in the winning team, you will get the largest stake of reward in a given rewards pool. Moreover, purchasers of the NFT will get a percentage of the NFT sale. The collection can be viewed [here](https://www.tensor.trade/trade/mantis_games). + +Users without an NFT can join an existing team by getting a referral code from a team leader. You’ll still be eligible for boosted rewards if your team wins. The remaining 85% of the rewards will be distributed according to the percentage of the TVL that each group member contributed to his team’s total TVL. + +## Phase 2 - Team Staking Competition +Phase 2 is going live on Sunday the 28th of January. Teams will compete for who can attract the highest amount of assets restaked into the restaking layer via the [MANTIS app](https://mantis.app/) (restaked assets include mSOL, jitoSOL, bSOL and SOL). In this phase, there will be three rounds of deposits with caps on the amount of tokens that can be deposited in the vaults. + +The parameters will be set in the following three rounds: + +- Round 1: 50,000 SOL +- Round 2: 150,000 SOL +- Round 3: 500,000 SOL + + +### Rewards +There will be 35,000,000 PICA allocated to reward vault participants. Once the Solana IBC connection launches, restaked assets will be allocated to validators and users begin accruing staking rewards in the form of transfer revenue. + +The team that wins the competition, will receive 80% of transfer revenue for the first 30 days of activity on the Solana IBC bridge. + +The Restaking Vaults feature a reward pool of 35 million PICA tokens. Notably, 20% of this pool, will be distributed during the Token Generation Event (TGE) of PICA on Solana coinciding with the launch of IBC on Solana. The remaining 80% will be vested evenly over a 3-month period following the conclusion of the team competition. + +**It’s essential that users are aware of the implications of entering the vaults and ramifications on their rewards, should they choose to unstake before rewards have fully vested.** During the MANTIS Games Competition (restaking vaults), user assets will be locked within the contracts until the launch of Solana IBC. + +Once IBC on Solana is launched, users will be able to unstake their assets, but their rewards will be penalized under the following conditions: + +- If a user decides to unstake some percentage of SOL before the end of the vesting period, they will forfeit a corresponding percentage of their rewards. E.g. If a user decides to unstake 10% of their SOL holdings in the first month, they will forfeit 10% of the remaining vested rewards scheduled for the second and third months +- Complete early unstaking results in forfeiture of all rewards except the initial 20% received at the launch of Solana IBC. + diff --git a/docs/docs/technology/restaking/roadmap.md b/docs/docs/technology/restaking/roadmap.md new file mode 100644 index 0000000..f684579 --- /dev/null +++ b/docs/docs/technology/restaking/roadmap.md @@ -0,0 +1,15 @@ +# Roadmap + +The rollout plan for Picasso Generalized restaking will proceed as follows: + +1. Initial implementation of the [Restaking Vaults on Solana](../restaking/vaults.md). +2. Launch of the first [AVS for Solana IBC](../restaking/sol-ibc-avs.md). +3. Expansion to include vaults for Cosmos ecosystem assets on Picasso. +4. Launch of Restaking Layer on Picasso including all the necessary contracts. +5. Begin onboarding AVSs. +6. Migration of Solana IBC AVS slashing parameters to Picasso. +7. Validators of the AVS for Solana IBC act as operators of this AVS, they have the opportunity to operate other AVSes in the future. + +:::info +As the generalized restaking layer contracts are still in the development phase, the slashing process is currently managed by the first AVS for Solana IBC. Upon the launch of the Orchestrator contract, slashing logic will transition to be overseen by the orchestrator on Picasso. +::: \ No newline at end of file diff --git a/docs/docs/technology/restaking/sol-ibc-avs.md b/docs/docs/technology/restaking/sol-ibc-avs.md new file mode 100644 index 0000000..623ee61 --- /dev/null +++ b/docs/docs/technology/restaking/sol-ibc-avs.md @@ -0,0 +1,75 @@ +# Technical Innovation: the AVS for Solana IBC + +The AVS for Solana IBC is a system developed by Composable and collaborators on the research team at INESC-ID Distributed Systems Group, associated with the University of Lisbon. We are particularly grateful for the contributions of Professor Miguel Matos to this collaboration. + +The AVS for Solana IBC concept acts as a foundational bridge, connecting previously isolated blockchains through the broader IBC. The benefits extend to increased liquidity, cross-chain DeFi opportunities, and a streamlined user experience. As we adapt and deploy this solution on additional blockchains, the vision of trust-minimized cross-chain interoperability becomes a reality, pushing blockchain towards mass adoption. + +:::info +Some blockchains (for example NEAR, Solana and TRON) do not meet IBC’s technical criteria (e.g. see [ICS-23 specification](https://github.com/cosmos/ibc/tree/main/spec/core/ics-023-vector-commitments)), preventing the implementation of IBC on their networks. In response, we created a novel AVS for Solana IBC solution which runs on top of otherwise unsupported ledgers, providing all features necessary for IBC integration. This will be deployed on Solana to retrieve provable storage and supply Solana state proofs to enable IBC. This allows for trust-minimised bridging to chains that otherwise cannot support the IBC. +::: + +At the time of writing, [over 392 million SOL are staked](https://solanacompass.com/statistics/staking), representing a staking market capitalization of over $25 billion dollars. This is a staggering 92% of the total circulating supply of SOL. Therefore, there is an incredibly large market for restaking these assets that are already staked in Solana. Yet, there has been very little use for these receipt tokens - until now. The Restaking Vault on Solana serves as the validation layer of the AVS for Solana IBC. This network needs to be validated like any other chain using the proof-of-stake (PoS) model. + +## Architecture +Our innovative approach involves creating a AVS for Solana IBC layered atop the host blockchain (Solana). This AVS for Solana IBC extends capabilities, providing state proofs for blockchains lacking IBC compatibility. This solution is not only generic, applicable to any smart-contract-supporting blockchain, but also imposes no changes on the underlying host—a significant advantage. + + +This novel AVS for Solana IBC design enables IBC Protocol communication between Solana and other IBC-supported ledgers (such as ones based on the Cosmos SDK). To operate, the system requires participation of validators who take part in block generation. The overall flow of the AVS for Solana IBC is depicted below: + +![guest_blockchain](../restaking/gb.png) + +*This figure depicts the sequence of events when successfully sending a message from a blockchain using the AVS for Solana IBC solution and an IBC-enabled counterparty blockchain. Like in any trustless example, anyone can run a relayer to pass messages between the host blockchain and the counterparty blockchain. However, to be able to provide a proof to the counterparty blockchain, a AVS for Solana IBC with provable storage is necessary.* + +### Storage Challenges and Solutions +Provable key-value storage in the AVS for Solana IBC is crucial for providing proofs to the counterparty blockchain. To manage data generation and storage costs, our solution implements sealing or pruning of subtries, ensuring efficient use of on-chain storage. The commitment of storage is represented as a hash of the Merkle trie’s root node. + +### Epoch Change: Ensuring Consistency and Syncing +Blocks are organized into epochs with specified validators. Epoch changes occur when a majority of stake signers finalize a block. Syncing to the latest state is facilitated by requesting blocks belonging to unknown epochs, ensuring efficient blockchain synchronization without fetching all blocks. + +### Validation and Validator Set Dynamics +Validators produce blocks with state proofs, relayed to the counterparty chain. Validator selection, set changes, and slashing mechanisms are seamlessly integrated. Validators stake assets with the AVS contract, ensuring commitment to block validation for at least one epoch. + +The validator network will be directed by majority where it is the responsibility of active validators to maintain uptime and sign corresponding payloads of transactions. + +#### Bonding +Joining as a validator will require a bonded stake to keep participation gated from malicious actors easily onboarding. The size of the bond will be 500 SOL. + +#### (Re) Staking +The validator set will be able to utilize liquid staking derivatives (LSD) of SOL, as well as LP tokens for this initiative. The following assets will be deemed acceptable collateral for staking as a validator: SOL, mSOL, jitoSO and bSOL. +The Pyth oracle will be used to access pricing feeds for assets staked to the platform. + +#### Slashing & Jailing: Safeguarding Integrity +Slashing is implemented as a means of disincentivizing malicious or erroneous behavior amongst the network of validators. Namely, slashing occurs under conditions where a transaction is improperly signed, or a validator fails to maintain uptime of their node. The AVS for Solana IBC system ensures validators wait for host blocks to finalize before signing virtual blocks, maintaining the integrity of the process. + +Slashing parameters are as follows: + +| Condition | Penalty | +| --------- | -------- | +| Validator in active set has 50% downtime over the the previous 100 blocks | 1% of stake slashed + Jailed | +| Validator leaves set and does not continue validating during the unbonding period | 1% of stake slashed | +| Signing incorrect validator set or transaction/batch | 95% of stake slashed | + +A validator becomes jailed as a penalty for excessive downtime, or double signing transactions. +Jailing parameters are as follows: + +| Condition | Penalty | +| --------- | -------- | +| Excessive Downtime | Slashed and jailed. May rejoin the validator set after replenishing stake | +| Double Sign | Slashed and jailed. May not rejoin validator set | + +### Fishermen +The role of fishermen in the network is to monitor the validator set for misbehavior. Fishermen may submit an attestation in the event that a validator does not perform its responsibilities or acts maliciously. + +Fishermen must put forth a stake in order to submit an attestation. The stake must be large enough to promote acting with a relative amount of certainty before challenging validator behavior. For simplicity sake, **a Fisherman must stake 50 SOL to submit an attestation.** + +The window to submit an attestation will last 1 epoch ( approximately 2-3 days ). A fisherman is rewarded or penalized based on the correctness of their attestation as follows: + +- If an attestation is deemed valid, the fisherman receives 33% of the slashed amount with the remaining 66% being distributed to the active validator set +- If an attestation is deemed erroneous, the fisherman forfeits his stake which is then distributed proportionally across the validator set +- If an attestation was correct, but a validator has already been penalized (slashed) for the same attestation submitted via multiple fisherman, the fisherman who had submitted the stale attestation will not lose their stake, but will also receive 0 reward. + +#### Validator Rewards +Validators signing transactions over the bridge will be rewarded for their participation in the form of a revenue split. These rewards will total 20% of revenue earned via bridging fees and will distribute proportionally across the active set. Validator rewards will be weighted based on the speed in which they sign a transaction. + +### Future Exploration and Optimization +While the AVS for Solana IBC concept represents a significant leap in cross-blockchain interoperability, further optimization is needed. Challenges, such as the departure of the last validator and security measures beyond the IBC trust model, warrant future exploration. diff --git a/docs/docs/technology/restaking/use-cases.md b/docs/docs/technology/restaking/use-cases.md new file mode 100644 index 0000000..cf3768f --- /dev/null +++ b/docs/docs/technology/restaking/use-cases.md @@ -0,0 +1,26 @@ +# AVS Use Cases + +This section provides a brief overview on the some of the initial AVS use cases for the Generalized Restaking layer: + +## Securing an L1 network +A major use case that can be adopted by L1 blockchains will be the ability to power an existing or launch a new PoS chain leveraging the security of the Generalized Restaking layer. This flexibility allows chains to customize their security requirements and decouple the network launch from the token launch process. In this scenario, the AVS will be the L1 network. + +## Restaked Rollups +Another application of the restaking layer is for Restaked Rollups. Initially, this will be utilized for MANTIS, with the potential for expansion to other rollups in the future. Rollups can benefit from shared security for their network and settle transactions on Picasso Cosmos. + +## Middleware Applications +Middleware protocols such as Oracles, Bridges and Sidechains will not need to devote time and resources to their own security models, and can instead focus on their respective roles/services. Importantly, the security delivered to these protocols can be tailored to their needs, so that the cost of corrupting a middleware service equals the aggregate amount of all restaked assets via Picasso’s Restaking Layer. This means middleware services can no longer be the “weakest link” when it comes to security, making them less likely targets. +This is already in production on Solana to implement IBC on previously IBC-incompatible chains. This connection will happen via the first AVS for Solana IBC. The purpose of this AVS is to provide state proofs of Solana via existing validators of the host network running a lightweight sidecar to generate these proofs. The AVS for Solana IBC is described in detail in this Composable Research forum post. + +## Reduced Solver Collateral Requirements +Within the MANTIS workflow, solver collateral will be necessary. However, solvers will have the ability to integrate with the restaking layer, significantly reducing collateral requirements. + +## Partial Block Building +Restaking could enable partial block building. If Block proposers restake LSTs, Block builders may be able to construct all or a portion of the block as they wish. Even with this flexibility, blocks will always have space, as the price of continually building full blocks exponentially increases. Block builders can assemble this portion of the block and compute a merkle root of the transactions therein. The transactions, merkle root, and bid are sent to the relay. Then, the relay enables data availability by storing the transactions and sending the merkle root and bid to the block proposer. + +From there, the proposer can select the highest bid and assembles an alternative block. They send an attestation to the merkle root of the winning bid that is linked to a commitment other than the header (i.e. the transaction root) to the proposer’s alternative block. Then, the relay sends the proposer the underlying transactions of the block builder-constructed portion of the winning bid’s merkle root. From here, the proposer assembles a new block with these transactions in the first portion, filling the remainder of the block with whatever transactions they desire. If the relay fails to release underlying transactions, the proposer then proposes their alternative block. + + +## DeFi Restaking +The restaking layer has the capability to support various use cases in DeFi such as integrating with LP tokens. +Liquidity providers can restake their LP tokens that are already providing revenue within DeFi protocols, during swaps conducted through the associated protocol. For example, when a user performs a swap and LP tokens are linked to Curve, the fees collected can be distributed exclusively to these LPs. This functionality may also be feasible through Uniswap v4. diff --git a/docs/docs/technology/restaking/vaults.md b/docs/docs/technology/restaking/vaults.md new file mode 100644 index 0000000..035b6a9 --- /dev/null +++ b/docs/docs/technology/restaking/vaults.md @@ -0,0 +1,62 @@ +# Solana Restaking Vaults + +The [Restaking Vaults on Solana](https://github.com/ComposableFi/emulated-light-client/blob/master/solana/restaking/README.md) offers users a secure and flexible way to **stake various Solana ecosystem tokens and delegate tokens to validators in order to secure the [AVS for Solana IBC](../ibc/restaking/sol-ibc-avs.md)**. Understanding the processes outlined in this documentation will enable users to be a part of implementing [IBC on Solana](../ibc/solana.md) and engage with the Restaking vaults effectively. + +The Restaking Vaults on Solana provide users the opportunity to stake SOL (Solana) and earn additional yield on Solana LSTs (Liquid Staked Solana tokens). The vaults are currently live on [mantis.app](https://www.mantis.app/) and will remain open until the launch of [Solana IBC](../ibc/solana.md). Once launch occurs, the assets will be assigned to secure the [AVS for Solana IBC](../restaking/sol-ibc-avs.md). + +:::note +Deposits in the vault will remain locked until the implementation of IBC on Solana. After this point, users can withdraw their deposits at any time; however, they need to observe a 7-day unbonding period on the AVS for Solana IBC before receiving their tokens. +::: + +## Token Types +Users can stake SOL and SOL LSTs (jitoSOL, mSOL and bSOL) in phase 1 of the restaking vault, and in phase 2, Orca LP tokens and receipt tokens from other platforms will also be eligible for staking. When users stake into the vault, they receive an NFT as a receipt token. This NFT serves as a unique identifier for the staked tokens, similar to the Uni V3 NFT receipt tokens. Once users stake their tokens in the vault, they are locked up until the launch of IBC on Solana. + +Each of the following tokens represents a significant market that can now be restaked on [mantis.app](https://www.mantis.app/). If you hold any of these tokens, you can enhance your yield by restaking them to provide security for the AVS for Solana IBC. + +**SOL:** +As mentioned, Solana (SOL) is the native token of the Solana ecosystem. Its total market cap at the time of writing is over $28 billion dollars, making SOL the 6th largest token in terms of total market cap (as per CoinMarketCap). Also as mentioned, 92% of SOL is presently staked, but the remaining 8% of the circulating amount is unstaked, and still represents a huge market (around $3 billion). Thus, we are accepting SOL staking in addition to restaking options. + +**mSOL:** +mSOL is the liquid staking token from [Marinade Finance](https://marinade.finance/), a Solana stake automation protocol monitoring all Solana validators and delegating to those that are the highest performing (e.g. provide the largest yield to users). [Blockworks Research](https://www.blockworksresearch.com/research/marinade-finance-the-base-layer-for-solana-defi) has described this token as the “...base layer of Solana DeFi”. According to Marinade’s website, they have a TVL of $659 million (nearly 10 million SOL staked), and provide users with an impressive 8.87% APY. + +**jitoSOL:** +jitoSOL is the liquid staking token from [Jito](https://www.jito.network/), which [describes itself](https://www.jito.network/docs/jitosol/overview/) as “Solana’s first staking product including MEV rewards”. Users deposit SOL into Jito’s liquid staking pool, and then SOL is delegated to validators on Solana that meet minimum criteria for performance and network resiliency. Jito’s total TVL is 6,352,926 SOL, and they provide stakers with a 6.97% APY ([as per Jito’s website](https://www.jito.network/stats/)). + +**bSOL** +BlazeStake is a Solana staking protocol that provides bSOL (liquid staked SOL tokens) that are usable in DeFi platforms. BlazeStake decentralizes Solana by automatically distributing staked SOL among validators. bSOL's value grows each epoch relative to staking APY, backed by compounding staking rewards in SOL. + +## Delegation Options +Upon the launch of the bridge, users have the option to delegate their staked tokens to a validator. Users can choose to delegate to a validator of their choice, delegate to their own validator, or if they opt for neither of these, a validator will be randomly delegated the tokens. + +Users who wish to remove their stake from the vault after IBC is live must wait until the 7 day unbonding period of the AVS for Solana IBC has elapsed. + +## Receipt Token +Once users deposit stake into the vaults, they receive a unique NFT which represents the value of their stake. To ensure accurate tracking of rewards, the decision to use NFTs for Receipt Tokens is crucial. Fungible tokens cannot make them transferable because the state would have to be connected to the staker’s public key. If they are made transferable, rewards cannot be tracked. + +The NFT would be used to derive the seeds of an account which would store the following: + +- Stake amount +- Stake token mint +- the last time they received the rewards +- validator pubkey + +NFTs can be easily transferred to anyone while retaining the state information. The NFT holder is the only account that has the ability to claim the rewards. + +## Staking Process + +1. The following process is how a user would deposit their stake, either **SOL, JitoSOL, mSOL or bSOL** +2. An NFT is minted and a new Program Derived Address (PDA) is created with the NFT mint as the seed. The stake is updated through a CPI call to the AVS for Solana IBC chain program. The PDA would store the following data: + - stake amount + - stake mint + - last epoch height at which rewards were claimed + - validator pubkey + +3. The user can claim the rewards if they own the receipt NFT. The rewards would be calculated from the height at which it was last claimed. If claiming for the first time, it will return all the rewards and store the current epoch height in the storage. + +4. While withdrawing, the rewards and stake are returned to the user and the receipt NFT is burnt. + +![vault-staking-flow](../restaking/flow.png) + +:::tip Fractionalisation +At a later time, fractionalisation will be introduced. This will allow users to transfer a part of their receipt token to another account and split the stake in the ratio mentioned and maintain the same rewards epoch height. After which each user can claim their rewards separately. Please note this is the only way a user can transfer a part of their receipt token. +::: \ No newline at end of file diff --git a/docs/docs/testSCDI/entry.mdx b/docs/docs/testSCDI/entry.mdx new file mode 100644 index 0000000..8336b07 --- /dev/null +++ b/docs/docs/testSCDI/entry.mdx @@ -0,0 +1,72 @@ + +import {VmWrapper} from '../../src/components/vm/wrappers/VmWrapper'; +import {ResetButton} from '../../src/components/vm/ResetButton'; +import { VmExecute } from '../../src/components/vm/VmExecute'; +import { VmDisplayStorageWrapper } from '../../src/components/vm/wrappers/VmDisplayStorageWrapper'; + +# SCDI test md file + +## SCDI test + +
+ +
+ + + {(vmShared) => { + if(!vmShared) return <>; + // TODO : figure out how to make mdx work with ts + const createExecuteMessage = ({recipient, amount}) => { + return { + mint: { + 'recipient': recipient, + 'amount': amount + } + } + } + return ( + <> +

nextAccountId

+
{vmShared.nextAccountId}
+
+ +
+ + ) + }} +
+
+ + {(data) => { + if(!data) return <>; + console.log(data); + return ( +
+
    + {Object.keys(data).map(key => { + return ( +
  • + {key} : {JSON.stringify(data[key])} +
  • + ) + })} +
+
+ ) + }} +
+
+
\ No newline at end of file diff --git a/docs/docs/testSCDI/widget-test.md b/docs/docs/testSCDI/widget-test.md new file mode 100644 index 0000000..de88896 --- /dev/null +++ b/docs/docs/testSCDI/widget-test.md @@ -0,0 +1,3 @@ +# Widget test + +## this is a test - won't display on prod diff --git a/docs/docs/user-guides/composableFAQ.png b/docs/docs/user-guides/composableFAQ.png new file mode 100644 index 0000000..cba1b93 --- /dev/null +++ b/docs/docs/user-guides/composableFAQ.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bad624328c0e9005b413c61f8094c6989bcdf7ed465cf46387efbfb413be5f35 +size 1335560 diff --git a/docs/docs/user-guides/dot-lp-guide.md b/docs/docs/user-guides/dot-lp-guide.md new file mode 100644 index 0000000..0485d0a --- /dev/null +++ b/docs/docs/user-guides/dot-lp-guide.md @@ -0,0 +1,40 @@ +# How to LP & stake DOT on Pablo via Trustless Zone + +The [IBC](../technology/ibc.md) DOT-KSM connection serves as the first transfer protocol between Kusama (KSM) and Polkadot (DOT), unlocks the potential for a seamless flow of liquidity between parachains on both networks. Token transfers are a prime example of this, enabling increased liquidity across protocols on both chains. It is important to note that IBC powers functionality beyond token transfers and unlocks composability between Polkadot and Kusama. One could possibly send XCM messages using IBC as a transport layer. This would enable XCM execution on Kusama or a Kusama parachain sent from Polkadot or a Polkadot parachain. + +This guide outlines the steps involved in transferring DOT from Polkadot to Picasso using XCM and IBC to provide liquidity on [Pablo](../technology/pablo-overview.md). + +There are two steps required to complete the process: + +1. Multihop DOT from Polkadot to [Picasso](../networks/picasso-parachain-overview.md) +2. Provide liquidity & stake using DOT paired with various pools on Pablo + + +## Multihop DOT from Polkadot to Picasso + +Head to [app.trustless.zone](https://app.trustless.zone/) and select `Polkadot` and `Picasso` as the source and destination chains respectively. Enter the amount you wish to transfer, press 'Send' and sign the transaction. + +![trustless-1](./images-dot-lp-guide/ibc-dot-picasso.png) +## Provide liquidity to DOT pairs on Pablo + +On [app.pablo.finance](https://app.pablo.finance/), connect your wallet and navigate to the "Provide liquidity" page. + +Choose one of the available pools (in this guide, we will use PICA/DOT). + +![pablo-1](./images-dot-lp-guide/pablo-lp-1.png) + +Enter the PICA/DOT pool page and select "Add Liquidity". Enter the amount you wish to deposit and select "Add Liquidity" once more. + +A pop-up will appear to confirm the transaction by clicking "Confirm" and then sign the transaction. + +A "Transaction success" notification will appear and you can click the notification to view the transaction on Subscan. + + +![pablo-2](./images-dot-lp-guide/pablo-lp-2.png) + +Head back to the pool overview page and click "Stake". Enter the amount of LP tokens you wish to stake and click "Stake PICA-DOT" to start earning rewards on your LP position. You will be asked to sign the transaction with your password. + +![pablo_3](./images-dot-lp-guide/stake-3.png) + + +Congratulations! You have successfully staked liquidity on Pablo. \ No newline at end of file diff --git a/docs/docs/user-guides/how-to-provide-liquidity.md b/docs/docs/user-guides/how-to-provide-liquidity.md new file mode 100644 index 0000000..a91c760 --- /dev/null +++ b/docs/docs/user-guides/how-to-provide-liquidity.md @@ -0,0 +1,45 @@ +# How to stake your LP tokens on Pablo + +Providing liquidity on a decentralized exchange (DEX) like Pablo can be a way to earn passive income by providing assets to liquidity pools. +Here is a guide on how to provide liquidity on the Pablo DEX. + +The Picasso Council has proposed a fee of 0.3% for the inaugural pools. Users who provide liquidity to these pools can earn a share of the fees that the pools generate. The fees for swapping, buying or selling tokens are calculated as a percentage of the swap size and are distributed among liquidity providers based on their share of the pool. + +To learn how to swap tokens on Pablo, you can follow a step-by-step tutorial provided in this guide. + +## How to provide liquidity + +1. On [app.pablo.finance], connect your wallet and navigate to the "Provide liquidity" page. Select one of the available pools; this guide will use the PICA/KSM pool as an example. + +[app.pablo.finance]: https://app.pablo.finance + +![pool_page](./images-how-to-provide-liquidity/pool-page.png) + +2. On the overview of the selected pool, Click 'Add liquidity'. + +![pica_ksm_pool](./images-how-to-provide-liquidity/pica-ksm-pool.png) + +3. Enter the amount of Token A. Please note that an equal amount for the corresponding asset paired (Token B) will be automatically calculated. Once you've entered the amounts, click on "Add liquidity". + +![transaction_details](./images-how-to-provide-liquidity/transaction-details.png) + +4. Review transaction details in the pop-up and click "Confirm". You will be asked to sign the transaction using your password. + +![confirm_supply](./images-how-to-provide-liquidity/confirm-supply.png) + +:::info + +The notification "Transaction in progress" will appear as the transaction is being processed. Once confirmed, users can be redirected to view their transaction on Subscan by clicking the 'click to view' in the notification. + +![transaction_finalized](./images-how-to-provide-liquidity/transaction-finalized.png) +::: + +5. You have successfully provided liquidity on Pablo. To start earning staking rewards on your LP tokens, head back to the pool overview page and select "Stake". + +![stake_mission_start](./images-how-to-provide-liquidity/stake-me-baby.png) + +6. Enter the amount of LP tokens you wish to stake and confirm your stake by pressing "Stake PICA-KSM" (PICA-KSM is the liquidity pool used in this example). You will be asked to sign the transaction using your password. + +![stake_mission_accomplished](./images-how-to-provide-liquidity/wagyu-stake.png) + +A transaction success notification will appear where you can be redirected to view your transaction on Subscan. Congratulations, you have now staked your LP tokens to earn rewards. \ No newline at end of file diff --git a/docs/docs/user-guides/how-to-trade-pica-on-pablo.md b/docs/docs/user-guides/how-to-trade-pica-on-pablo.md new file mode 100644 index 0000000..4b7bba8 --- /dev/null +++ b/docs/docs/user-guides/how-to-trade-pica-on-pablo.md @@ -0,0 +1,37 @@ +# How to trade $PICA on Pablo + +This introductory guide explores how users can trade PICA on [Pablo](https://www.pablo.finance/), as well as other tokens such as KSM, USDT and DOT. Pablo is a new-generation Decentralized Exchange (DEX) and the first protocol to launch on Picasso. + +## How to trade on Pablo + +1. On [app.pablo.finance], go to the ‘Swap’ page. Connect your wallet if necessary. Read our guides [how to create and connect a wallet]. + +[app.pablo.finance]: https://app.pablo.finance/ +[how to create and connect a wallet]: https://docs.composable.finance/accounts-wallets + +![swap_page](./images-how-to-trade/swap-page.png) + +2. To initiate a token swap for PICA, choose the token you wish to trade from the available options of USDT, KSM, and DOT. In this guide, we will use DOT for the swap. + +![token_select](./images-how-to-trade/token-select.png) + +By clicking the 'settings' ⚙️ icon, users can change the token utilized for paying gas fees, adjust their slippage tolerance and change the input to the USD value or the number of tokens. + +![transaction_settings](./images-how-to-trade/transaction-settings.png) + +:::info + +Slippage on decentralized exchanges is the difference between the expected and actual price of a trade, caused by asset volatility and low liquidity. It can impact trade cost and profitability. + +::: + +3. Once you have specified an amount for the selected pair you want to trade, press "Swap". You will be asked to sign the transaction using your password. + + +![sign_transaction](./images-how-to-trade/sign-transaction.png) + +4. Once your transaction is complete, a 'Transaction success' message will appear to confirm the transaction. You can view your transaction details on Subscan by clicking 'click to view'. + +![transaction_finalized](./images-how-to-trade/transaction-finalized.png) + +You have now successfully completed a token swap on Pablo. Further user guides are available for interacting with Picasso, Pablo and Centauri [here](../user-guides/). diff --git a/docs/docs/user-guides/images-dot-lp-guide/ibc-dot-picasso.png b/docs/docs/user-guides/images-dot-lp-guide/ibc-dot-picasso.png new file mode 100644 index 0000000..f5bd63d --- /dev/null +++ b/docs/docs/user-guides/images-dot-lp-guide/ibc-dot-picasso.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b75eeb13c4504e548b208dc2311ef79f581aa604ce56d1a2fab47f5080d9d07 +size 123440 diff --git a/docs/docs/user-guides/images-dot-lp-guide/pablo-lp-1.png b/docs/docs/user-guides/images-dot-lp-guide/pablo-lp-1.png new file mode 100644 index 0000000..e86b0f2 --- /dev/null +++ b/docs/docs/user-guides/images-dot-lp-guide/pablo-lp-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72f20386e4da563a169c7dd5586ce9cb43771a60e0ad7b08cb7cd09a195359da +size 332100 diff --git a/docs/docs/user-guides/images-dot-lp-guide/pablo-lp-2.png b/docs/docs/user-guides/images-dot-lp-guide/pablo-lp-2.png new file mode 100644 index 0000000..38f02d6 --- /dev/null +++ b/docs/docs/user-guides/images-dot-lp-guide/pablo-lp-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7058775b09ef0d8af0844210a261f39bb3e53dddb72876b0b663c7ce1c54234 +size 1140056 diff --git a/docs/docs/user-guides/images-dot-lp-guide/stake-3.png b/docs/docs/user-guides/images-dot-lp-guide/stake-3.png new file mode 100644 index 0000000..dad3773 --- /dev/null +++ b/docs/docs/user-guides/images-dot-lp-guide/stake-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25b442ba02efa7d0b473c7a0968360006350ff86c0145f8856dfaffc1498ded5 +size 422640 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/confirm-supply.png b/docs/docs/user-guides/images-how-to-provide-liquidity/confirm-supply.png new file mode 100644 index 0000000..11eb32e --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/confirm-supply.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2a139280d6b371512f5cad87c073261edb4c41c80d05516359a6bc3965b7a23 +size 454320 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/pica-ksm-pool.png b/docs/docs/user-guides/images-how-to-provide-liquidity/pica-ksm-pool.png new file mode 100644 index 0000000..fcd7bed --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/pica-ksm-pool.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57345b9b4ff0290d376a259fb8c904b1f0c9ebaaf4a362ff44019f2b637d2621 +size 1192876 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/pool-page.png b/docs/docs/user-guides/images-how-to-provide-liquidity/pool-page.png new file mode 100644 index 0000000..f0fdbb3 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/pool-page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fe1f7a22fb81afa90a1638949f28bd528d13ccd2423378e674fa8fafb3e739a4 +size 826182 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/sign-transaction.png b/docs/docs/user-guides/images-how-to-provide-liquidity/sign-transaction.png new file mode 100644 index 0000000..b03ee43 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/sign-transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9329fdcfbe7bc66f8ba3ea3ee2695fda24569aebf7a51cdff7b93f7e9ecb58f +size 1782671 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/stake-me-baby.png b/docs/docs/user-guides/images-how-to-provide-liquidity/stake-me-baby.png new file mode 100644 index 0000000..f5922c2 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/stake-me-baby.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d4903a19896bbb1a8aca770d19ffc544729a7ec883207711e8898d8467f0f2c +size 1215622 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/transaction-details.png b/docs/docs/user-guides/images-how-to-provide-liquidity/transaction-details.png new file mode 100644 index 0000000..c698049 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/transaction-details.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d6c6463648ce2ac636af619422ce871c95dcdd0c18c5167a7621cfaf116c379 +size 1604505 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/transaction-finalized.png b/docs/docs/user-guides/images-how-to-provide-liquidity/transaction-finalized.png new file mode 100644 index 0000000..5757452 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/transaction-finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87575800d26863052e77715ea84c290120352031980410e2bc934def4ba361da +size 91101 diff --git a/docs/docs/user-guides/images-how-to-provide-liquidity/wagyu-stake.png b/docs/docs/user-guides/images-how-to-provide-liquidity/wagyu-stake.png new file mode 100644 index 0000000..d63b4f6 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-provide-liquidity/wagyu-stake.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:004600ef61c42f17a0260a0c4206e7653c488fa91475043759d56b38c08b01bf +size 437591 diff --git a/docs/docs/user-guides/images-how-to-trade/sign-transaction.png b/docs/docs/user-guides/images-how-to-trade/sign-transaction.png new file mode 100644 index 0000000..48934a2 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-trade/sign-transaction.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d01f5af5bc6eff1b2ee1b70200dae4d2ea134770bbbb151f3d3ee234ad38948c +size 1865800 diff --git a/docs/docs/user-guides/images-how-to-trade/swap-page.png b/docs/docs/user-guides/images-how-to-trade/swap-page.png new file mode 100644 index 0000000..58ded32 --- /dev/null +++ b/docs/docs/user-guides/images-how-to-trade/swap-page.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23c1b64e8f340c8234a667e3219652204903ab1c56948bf0f0bb6d86dfd61d92 +size 2002926 diff --git a/docs/docs/user-guides/images-how-to-trade/token-select.png b/docs/docs/user-guides/images-how-to-trade/token-select.png new file mode 100644 index 0000000..008368a --- /dev/null +++ b/docs/docs/user-guides/images-how-to-trade/token-select.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:355609bc9822500236c7e4aa8334ba82a5771e1278167737c6d024d6fb6ec174 +size 311652 diff --git a/docs/docs/user-guides/images-how-to-trade/transaction-finalized.png b/docs/docs/user-guides/images-how-to-trade/transaction-finalized.png new file mode 100644 index 0000000..01b4f5c --- /dev/null +++ b/docs/docs/user-guides/images-how-to-trade/transaction-finalized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4810b4ad74f84cddb96f3ecaea91d0c040fe5bb3e8bd93d5aa3124074433b13f +size 94022 diff --git a/docs/docs/user-guides/images-how-to-trade/transaction-settings.png b/docs/docs/user-guides/images-how-to-trade/transaction-settings.png new file mode 100644 index 0000000..43ca0dd --- /dev/null +++ b/docs/docs/user-guides/images-how-to-trade/transaction-settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:725e026eee09386b0aa2551ef510837bd9352cad8e0279845e62a8aedc910c60 +size 419482 diff --git a/docs/docs/user-guides/images-keplr-guide/add-banksy.png b/docs/docs/user-guides/images-keplr-guide/add-banksy.png new file mode 100644 index 0000000..d69fddc --- /dev/null +++ b/docs/docs/user-guides/images-keplr-guide/add-banksy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f2674d843a6a3a7cf255d9d47ad5b0d0ce8ab960590efc6afee62476014d83c +size 104969 diff --git a/docs/docs/user-guides/images-keplr-guide/images-keplr-1.png b/docs/docs/user-guides/images-keplr-guide/images-keplr-1.png new file mode 100644 index 0000000..bdfe65e --- /dev/null +++ b/docs/docs/user-guides/images-keplr-guide/images-keplr-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3d404a86e7e28a578d8d0b3d68496603a0c03c32dedca612923b56684560a43 +size 201417 diff --git a/docs/docs/user-guides/images-keplr-guide/images-keplr-2.png b/docs/docs/user-guides/images-keplr-guide/images-keplr-2.png new file mode 100644 index 0000000..407c0d3 --- /dev/null +++ b/docs/docs/user-guides/images-keplr-guide/images-keplr-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f23c505794f39fb4c8df93cdc44d9799e668f2a7aee4cdbb1113859b8da811d0 +size 176961 diff --git a/docs/docs/user-guides/images-keplr-guide/images-keplr-5.png b/docs/docs/user-guides/images-keplr-guide/images-keplr-5.png new file mode 100644 index 0000000..e3217cc --- /dev/null +++ b/docs/docs/user-guides/images-keplr-guide/images-keplr-5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c11857942abd0378443b04eb79eb38c52859a4a12b4c8731464bd1ab230bc18d +size 115285 diff --git a/docs/docs/user-guides/images-layr-guide/layr-05.png b/docs/docs/user-guides/images-layr-guide/layr-05.png new file mode 100644 index 0000000..ad4076e --- /dev/null +++ b/docs/docs/user-guides/images-layr-guide/layr-05.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6300a6dd55295b9370f77ac4328f0aca08626d06587a8b07f364bc6d28d5f25f +size 184827 diff --git a/docs/docs/user-guides/images-layr-guide/layr-1.png b/docs/docs/user-guides/images-layr-guide/layr-1.png new file mode 100644 index 0000000..898cc91 --- /dev/null +++ b/docs/docs/user-guides/images-layr-guide/layr-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1fd1125e17eacc8c8a5f9c4d975924932844f56c73e3f4b40025dae4140818d +size 232305 diff --git a/docs/docs/user-guides/images-layr-guide/layr-2.png b/docs/docs/user-guides/images-layr-guide/layr-2.png new file mode 100644 index 0000000..63150f3 --- /dev/null +++ b/docs/docs/user-guides/images-layr-guide/layr-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34e7a238d66267b58470a1814483477654170e47256e40b88a5d857601e75097 +size 269559 diff --git a/docs/docs/user-guides/images-layr-guide/layr-3.png b/docs/docs/user-guides/images-layr-guide/layr-3.png new file mode 100644 index 0000000..1e2c663 --- /dev/null +++ b/docs/docs/user-guides/images-layr-guide/layr-3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33da6995d8d64fd9a40843003783f2867d0456a8cefc370101ee161c3a4774ee +size 295401 diff --git a/docs/docs/user-guides/images-picasso-governance/choose-account.png b/docs/docs/user-guides/images-picasso-governance/choose-account.png new file mode 100644 index 0000000..8520e0a --- /dev/null +++ b/docs/docs/user-guides/images-picasso-governance/choose-account.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:981cffd5e1d255cfb2f078f0bb377b6e823bbcdad8e9cedc7d8225a2807510b4 +size 29265 diff --git a/docs/docs/user-guides/images-picasso-governance/logged-in.png b/docs/docs/user-guides/images-picasso-governance/logged-in.png new file mode 100644 index 0000000..3e43709 --- /dev/null +++ b/docs/docs/user-guides/images-picasso-governance/logged-in.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa8357864a8bf0d00678cafa911bef6d17693a519f1fa78cca96a5af96804a8d +size 366675 diff --git a/docs/docs/user-guides/images-picasso-governance/submit-preimage.png b/docs/docs/user-guides/images-picasso-governance/submit-preimage.png new file mode 100644 index 0000000..20647b9 --- /dev/null +++ b/docs/docs/user-guides/images-picasso-governance/submit-preimage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c05b59045ced9f66d7ed48bc314769a8a07ab1fd7e885a9f5c96cbdc8e7a315 +size 204974 diff --git a/docs/docs/user-guides/images-picasso-governance/submit-proposal.png b/docs/docs/user-guides/images-picasso-governance/submit-proposal.png new file mode 100644 index 0000000..5e89681 --- /dev/null +++ b/docs/docs/user-guides/images-picasso-governance/submit-proposal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e21bf3f26c544d18e6f125d7580e4dde75db96f15b37fc3926f0ddc07e4f908d +size 297134 diff --git a/docs/docs/user-guides/images-picasso-governance/voting-2.png b/docs/docs/user-guides/images-picasso-governance/voting-2.png new file mode 100644 index 0000000..3500cb3 --- /dev/null +++ b/docs/docs/user-guides/images-picasso-governance/voting-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9eb0e934180ab5c632bce816c4c82f465a6790dc56a28898524d836d135e538 +size 411905 diff --git a/docs/docs/user-guides/images-picasso-governance/voting.png b/docs/docs/user-guides/images-picasso-governance/voting.png new file mode 100644 index 0000000..47db2bb --- /dev/null +++ b/docs/docs/user-guides/images-picasso-governance/voting.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c878a0715619e87ff6671dd156667d7366ed6d975a1eba5c7dc3e81d20bd0ca9 +size 325703 diff --git a/docs/docs/user-guides/images-polkadotjs-extension-create-account/account-credentials.png b/docs/docs/user-guides/images-polkadotjs-extension-create-account/account-credentials.png new file mode 100644 index 0000000..b126963 --- /dev/null +++ b/docs/docs/user-guides/images-polkadotjs-extension-create-account/account-credentials.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60c8d0db02cb98e1fa73a17a1f1554b2c6d6d623855d380311373291bea860d9 +size 281604 diff --git a/docs/docs/user-guides/images-polkadotjs-extension-create-account/add-account.png b/docs/docs/user-guides/images-polkadotjs-extension-create-account/add-account.png new file mode 100644 index 0000000..22bf244 --- /dev/null +++ b/docs/docs/user-guides/images-polkadotjs-extension-create-account/add-account.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cfa1c6b36578c36ba26a5f380c805eda125138441cf477a693c79a88cf8666f1 +size 499527 diff --git a/docs/docs/user-guides/images-polkadotjs-extension-create-account/create-new-account.png b/docs/docs/user-guides/images-polkadotjs-extension-create-account/create-new-account.png new file mode 100644 index 0000000..27a5d51 --- /dev/null +++ b/docs/docs/user-guides/images-polkadotjs-extension-create-account/create-new-account.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7782e3e4b21d31dfe8c54050e979f27dad976c4d312ca93c8bd579e4c61f4fa +size 339070 diff --git a/docs/docs/user-guides/images-polkadotjs-extension-create-account/extension-windowed.png b/docs/docs/user-guides/images-polkadotjs-extension-create-account/extension-windowed.png new file mode 100644 index 0000000..fe21cfe --- /dev/null +++ b/docs/docs/user-guides/images-polkadotjs-extension-create-account/extension-windowed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20fcd192b705d5fcf727d1f00916224cebbf98728fcfb28c85f15e6c42985d6d +size 556510 diff --git a/docs/docs/user-guides/images-polkadotjs-extension-create-account/mnemonic-seed-polkadotjs.png b/docs/docs/user-guides/images-polkadotjs-extension-create-account/mnemonic-seed-polkadotjs.png new file mode 100644 index 0000000..c721d44 --- /dev/null +++ b/docs/docs/user-guides/images-polkadotjs-extension-create-account/mnemonic-seed-polkadotjs.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdfdb33d294c8cfa24426c31a264e905c26a63fe76f58f901670bbb6adb474f8 +size 319852 diff --git a/docs/docs/user-guides/images-restaking-guide/restaking-1.png b/docs/docs/user-guides/images-restaking-guide/restaking-1.png new file mode 100644 index 0000000..70618eb --- /dev/null +++ b/docs/docs/user-guides/images-restaking-guide/restaking-1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a809004ce304d50481517884117750fecc07c440a076226c94a2d18f416ab1f5 +size 107825 diff --git a/docs/docs/user-guides/images-restaking-guide/restaking-2.png b/docs/docs/user-guides/images-restaking-guide/restaking-2.png new file mode 100644 index 0000000..5f1ca12 --- /dev/null +++ b/docs/docs/user-guides/images-restaking-guide/restaking-2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43d6787e890611fa7fd65ba73c0e2723113b22157882898659bd2d6b98fc6811 +size 137682 diff --git a/docs/docs/user-guides/images-staking-pica/centauri-stake-4.png b/docs/docs/user-guides/images-staking-pica/centauri-stake-4.png new file mode 100644 index 0000000..37271fa --- /dev/null +++ b/docs/docs/user-guides/images-staking-pica/centauri-stake-4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1aa914b87ab8b956109acf190b4116ceebea17d1bbe8f4b12ff06f100320d63 +size 381903 diff --git a/docs/docs/user-guides/images-staking-pica/leap.png b/docs/docs/user-guides/images-staking-pica/leap.png new file mode 100644 index 0000000..c30d2ad --- /dev/null +++ b/docs/docs/user-guides/images-staking-pica/leap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4325f721401e1c60538c148ddfa556628eebcc43c7c052e2764f9adb84f893cd +size 120522 diff --git a/docs/docs/user-guides/images-staking-pica/staking-one.png b/docs/docs/user-guides/images-staking-pica/staking-one.png new file mode 100644 index 0000000..8485463 --- /dev/null +++ b/docs/docs/user-guides/images-staking-pica/staking-one.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fae0c5396a239752b3cc373582c74cf309797e5ebbffd776a1e7deaa3b5f8b11 +size 158912 diff --git a/docs/docs/user-guides/images-talisman-create-account/backup-passphrase.png b/docs/docs/user-guides/images-talisman-create-account/backup-passphrase.png new file mode 100644 index 0000000..e2cefb9 --- /dev/null +++ b/docs/docs/user-guides/images-talisman-create-account/backup-passphrase.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb5bcd55ab8df92b25856ad0f3de0d12df8ec1b75ee82ce676d741d0e1480518 +size 451410 diff --git a/docs/docs/user-guides/images-talisman-create-account/create-new-wallet.png b/docs/docs/user-guides/images-talisman-create-account/create-new-wallet.png new file mode 100644 index 0000000..155e725 --- /dev/null +++ b/docs/docs/user-guides/images-talisman-create-account/create-new-wallet.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3545e0a3ba43c82f7cdd4e5335531b5c8016f5f2677b33c563df3074af77dd33 +size 891852 diff --git a/docs/docs/user-guides/images-talisman-create-account/download-talisman.png b/docs/docs/user-guides/images-talisman-create-account/download-talisman.png new file mode 100644 index 0000000..85f94b3 --- /dev/null +++ b/docs/docs/user-guides/images-talisman-create-account/download-talisman.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7f7b987511f22ebb8c45e3ddf19d960e447521634b307a6cf59110dcc97d553 +size 4038726 diff --git a/docs/docs/user-guides/images-talisman-create-account/mnemonic-seed-talisman.png b/docs/docs/user-guides/images-talisman-create-account/mnemonic-seed-talisman.png new file mode 100644 index 0000000..9eac522 --- /dev/null +++ b/docs/docs/user-guides/images-talisman-create-account/mnemonic-seed-talisman.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e5633a38ee732c5242d2e766892d7fd4d5e71f88344f0875007be788a09b12c +size 433093 diff --git a/docs/docs/user-guides/images-talisman-create-account/set-password.png b/docs/docs/user-guides/images-talisman-create-account/set-password.png new file mode 100644 index 0000000..c3c6e7c --- /dev/null +++ b/docs/docs/user-guides/images-talisman-create-account/set-password.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c3ad9a84a40e86556a8ef11796604f7f8b0bf0f3cdd312c8b278df508d899fb +size 925734 diff --git a/docs/docs/user-guides/images-talisman-create-account/your-privacy.png b/docs/docs/user-guides/images-talisman-create-account/your-privacy.png new file mode 100644 index 0000000..ebfa6ed --- /dev/null +++ b/docs/docs/user-guides/images-talisman-create-account/your-privacy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a712606b9fb0900e0d4cd04bd530c9bc4a22cd4f90f8197772d3655980239067 +size 1216107 diff --git a/docs/docs/user-guides/images-team-competition/create-team.png b/docs/docs/user-guides/images-team-competition/create-team.png new file mode 100644 index 0000000..ccb4e6a --- /dev/null +++ b/docs/docs/user-guides/images-team-competition/create-team.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57ab7e536ba508f3e54606e971923fe7317bb02db4961c829643dfc18d9072b0 +size 660287 diff --git a/docs/docs/user-guides/images-team-competition/dashboard.png b/docs/docs/user-guides/images-team-competition/dashboard.png new file mode 100644 index 0000000..62ac1ac --- /dev/null +++ b/docs/docs/user-guides/images-team-competition/dashboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7426b4b687ef835506fcb42c6dc4b2fb12b03fc03d26cd66e727f5d80e9f0fb5 +size 265317 diff --git a/docs/docs/user-guides/images-team-competition/join-team.png b/docs/docs/user-guides/images-team-competition/join-team.png new file mode 100644 index 0000000..53b0958 --- /dev/null +++ b/docs/docs/user-guides/images-team-competition/join-team.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a27e7841a0b6dfb6897c4b6e99c04a33b14546bef1deccd6ccc26b7ceff3801 +size 650599 diff --git a/docs/docs/user-guides/images-team-competition/team-success.png b/docs/docs/user-guides/images-team-competition/team-success.png new file mode 100644 index 0000000..e27d5b0 --- /dev/null +++ b/docs/docs/user-guides/images-team-competition/team-success.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ac43f9e4c90e4fbc14693cdae08b6ab4a25df8a76d6f95df69d5cedf55ee213 +size 628438 diff --git a/docs/docs/user-guides/images-trustless-transfer/trustless-transfer.png b/docs/docs/user-guides/images-trustless-transfer/trustless-transfer.png new file mode 100644 index 0000000..a2c8585 --- /dev/null +++ b/docs/docs/user-guides/images-trustless-transfer/trustless-transfer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7501584c68f4047acba4c1cff0c1a5ffc2fd5f3dd58b5b2f04e642939ecfcbe +size 147079 diff --git a/docs/docs/user-guides/keplr-guide.md b/docs/docs/user-guides/keplr-guide.md new file mode 100644 index 0000000..3e7780b --- /dev/null +++ b/docs/docs/user-guides/keplr-guide.md @@ -0,0 +1,43 @@ +# How to create a Keplr Wallet for Composable Cosmos + +## Download the Keplr extension​ +The following link allows you to download the Keplr extension: https://www.keplr.app/#extension + +Once downloaded and installed, navigate to the dropdown menu and click “Open in new window”. + +![keplr-1](./images-keplr-guide/images-keplr-1.png) + + + +## Create a new account​ + +Click on “Create a new wallet” and then "Create new recovery phrase". Ensure you have secured your passphrase. + +![keplr-2](./images-keplr-guide/images-keplr-2.png) + + +:::warning +Protect your seed phrase like your life depends on it, as anyone with access to it can potentially gain control of your blockchain accounts and assets. Never share your seed phrase online or with anyone you don't absolutely trust. +::: + + +Next, add a display name for the account (e.g., Picasso) and set a password. + +## Add Composable Cosmos to Keplr +After verifying your recovery phrase, you will come across a drop down menu to add support for the chains of your choice. + +In the search bar type “Composable”, choose the Composable chain and click “Save". + +:::tip +If you don't see the Composable Cosmos chain in the dropdown, head to Keplr settings. In the general section, look for the option to manage non-native chains. Here, you can add the Composable chain. +::: + +![keplr-3](./images-keplr-guide/images-keplr-5.png) + +Congratulations! You have now integrated your Keplr account with Composable cosmos. + +## Add Composable Cosmos Testnet to Keplr + +If you're interacting with the Composable Cosmos Testnet which was previously referred to as Centauri and Bansky, simply add `centauri-testnet` similar to the previous step. + +![banksy](./images-keplr-guide/add-banksy.png) \ No newline at end of file diff --git a/docs/docs/user-guides/layr-guide.md b/docs/docs/user-guides/layr-guide.md new file mode 100644 index 0000000..680d5f9 --- /dev/null +++ b/docs/docs/user-guides/layr-guide.md @@ -0,0 +1,26 @@ +# Retrieving your LAYR address + +_This guide provides a quick overview of the steps to retrieve your LAYR address for the Composable parachain._ + +To retrieve your LAYR address, select the 'Composable Finance' chain in the PolkadotJS plugin as displayed in the following image. In this example, the address beginning with `657rUbcuKamGrrvHy` is the receiving LAYR address. + +![layr_dropdown](./images-layr-guide/layr-05.png) + +In case 'Composable Finance' does not appear for you, try one of the following two options. + +Head to [PolkadotJS](https://polkadot.js.org/apps/#/explorer) and switch to the 'Composable Finance' parachain in the 'Polkadot & Parachains' section as depicted in the following image. + +![layr_down](./images-layr-guide/layr-1.png) + + +1. On PolkadotJs, click on the 'Settings' tab and then click 'Metadata'. This step may not apply to everyone however, if there is a pending update to update the Metadata, click 'Update metadata' and confirm the update. Refresh the page and the 'Composable Finance' chain should appear in the PolkadotJS plugin if it was previously missing. + +![layr_update](./images-layr-guide/layr-2.png) + + + +2. In case the previous step does not allow you to copy your address from the plugin, simply head to the 'Accounts' page on [PolkadotJs](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.composable.finance#/accounts) and copy the address of your account. + +![layr_three](./images-layr-guide/layr-3.png) + +If you're still facing issues, feel free to let us know by creating a ticket on our Discord. \ No newline at end of file diff --git a/docs/docs/user-guides/pica-staking.md b/docs/docs/user-guides/pica-staking.md new file mode 100644 index 0000000..f0ac87a --- /dev/null +++ b/docs/docs/user-guides/pica-staking.md @@ -0,0 +1,40 @@ +# Staking PICA on Composable Cosmos + +This guide demonstrates the steps to transfer PICA to [Composable Cosmos](../networks/composable-cosmos.md) and stake PICA by delegating them to validators on the network. + +## Download the Leap extension​ +The following link allows you to download the Leap extension: https://www.leapwallet.io/download + +Once downloaded and installed, click on 'Leap Cosmos Wallet' in your extensions where you will be redirected to setup your wallet. + +## Setting up an account​ + +To setup an account on your Leap extension, you have the following three options: + +1. “Create new wallet” and then "Create new recovery phrase". Ensure you have secured your passphrase. +2. Import an existing seed phrase or wallet. +3. Connect a hardware wallet (If your PICA is on a ledger device) + +To begin, you need to send PICA to Composable Cosmos. Go to https://app.trustless.zone/ and connect both your Polkadot and Leap wallet. + +![staking-uno](../user-guides/images-staking-pica/staking-one.png) + + +Head to the [staking page on Leapboard](https://cosmos.leapwallet.io/transact/stake/plain) and select the Picasso chain. Enter the amount of PICA you wish to stake, choose a validator to delegate your tokens to and press Stake. + +![staking-deus](../user-guides/images-staking-pica/leap.png) + +## Alternative Method +Head to https://ping.pub/composable and connect your wallet. Select the 'Delegate' button and the validator you wish to delegate your PICA tokens to. Enter the amount of PICA you wish to stake. + +:::tip +Ensure the 'Fees' are set to 0 after clicking the Advance option as outlined in the screenshot. +::: + +![staking-quatro](../user-guides/images-staking-pica/centauri-stake-4.png) + +You have now successfully staked PICA to secure Composable Cosmos! + +:::note +The Composable Cosmos network requires PICA to be delegated to a validator to earn staking rewards. To unstake PICA after delegation, it must undergo a 21-day "unbonding" period to receive your tokens. +::: \ No newline at end of file diff --git a/docs/docs/user-guides/picasso-governance.md b/docs/docs/user-guides/picasso-governance.md new file mode 100644 index 0000000..7270daf --- /dev/null +++ b/docs/docs/user-guides/picasso-governance.md @@ -0,0 +1,77 @@ +# Interacting with Picasso governance + +Picasso Kusama utilizes Polkassembly for on-chain governance participation. Follow the proposal roadmap if you wish to take part in initiating a proposal on Picasso. + +## Proposal Roadmap + +Any PICA token holder has the ability to create, vote and contribute to Referenda on Picasso. See [this section](../networks/picasso/governance.md) for further details on proposal parameters. + +1. A proposal author should submit their idea to Picasso’s Polkassembly governance forum, where they should be open to community feedback for at least five days before moving forward +2. Taking into account feedback, the proposal author can submit their proposal on-chain + - The proposer must first submit the preimage (if you need assistance with creating the preimage or would like secondary approval, reach out to our team on Discord) + - Note: your preimage deposit will be returned once via unnoting after the proposal is submitted + - The proposer then can submit the Referendum, and place the decision deposit (which covers the on-chain storage cost of the proposal) +3. Thus veins the lead-in period, where the community can begin voting +4. The proposal will then move to the decision period when the following are met: + - The referenda waits the duration of the prepare period (ensuring enough time for discussion) + - There is capacity in the chosen track + - A decision deposit has been submitted and meets the minimum requirements of the track +5. During the decision period, voting continues and the referendum has a set amount of days to reach approval. + - If the Referendum is rejected, the decision deposit will be returned +6. If the Referendum is approved, it enters the confirm period where it must remain approved for the duration of this period. + - If the referendum fails to meet these requirements at any time, it moves back to the decide period; if it again meets these requirements, it moves back to the confirm period and the decide period is delayed until the end of the confirm period +7. If the referendum receives enough approval and support throughout the confirm period, it will be approved and move to the enactment period +8. Once the enactment period elapses, the referendum will be executed + +## How to create a proposal + +After you have left your proposal in discussion phase for at least 5 days, you can put the referendum on-chain via Polkadotjs. Feel free to reach out to the team on Telegram or Discord for assisting with posting proposals on-chain. + +1. Head to https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.composablenodes.tech#/preimages and click 'Add preimage' + + - Choose the extrinsic you wish to execute. Your selection will be crucial for subsequent steps. In this example, the system pallet and the remark extrinsic are being used for a Root proposal. + - To submit the proposal later, copy the preimage hash, then click the "Submit preimage" button and sign the transaction. You can also view the preimage hash later on the Preimages page if it has been noted. + +![preimage](../user-guides/images-picasso-governance/submit-preimage.png) + +2. Head to https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.composablenodes.tech#/referenda and click 'Submit proposal'. + + - Select the relevant Origin class for your proposal's execution. Selecting an incorrect Track/Origin may lead to the failure of your proposal during execution. + - Select the Track for proposal submission. The associated Origin within the Track must possess authority to execute the intended action. + - Within the Origins dropdown, choose the specific Origin, which in this case is "System." + - Input the preimage hash linked to the proposal. Next, choose the moment of enactment, either after a specified number of blocks or at a specific block. + - Finally, click "Submit proposal" and proceed to sign the transaction. + +![submission](../user-guides/images-picasso-governance/submit-proposal.png) + +## How to vote on a proposal + +There are two methods to vote on Referenda: + +1. Click on 'Cast Vote Now' on the referenda's Polkassembly page as highlighted in the screenshot below. You must be signed in to use this method. + +![voteassembly](../user-guides/images-picasso-governance/voting.png) + +2. Click on 'Vote' on Referenda displayed on https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.composablenodes.tech#/referenda + +![votepdjs](../user-guides/images-picasso-governance/voting-2.png) + +When voting, select your voting preference for the referendum. Options include "Aye" to support the referendum, "Nay" to oppose it, or "Split" if you wish to allocate distinct values for both "Aye" and "Nay" votes. Then, enter your chosen vote value and the vote conviction. + +Finally, click "Vote" and proceed to sign the transaction. + +## How to create a Polkassembly account + +First, log in to Polkassembly via a web 3 wallet or a username/email. If you have used Polkassembly in the past you will still need to complete these steps to link your Picasso wallet: + +1. Visit https://picasso.polkassembly.io/ and click Login on the top right corner + +2. Choose the account you would like to participate with and click sign-up + +![polkassembly_choose_account](./images-picasso-governance/choose-account.png) + +5. Once your account has been created you can sign in by clicking on the login button and entering your details. + +6. When signed in, you can view all of the latest discussions, proposals, referenda, and upcoming events on Picasso. + +![polkassembly_logged_in](./images-picasso-governance/logged-in.png) \ No newline at end of file diff --git a/docs/docs/user-guides/polkadotjs-extension-create-account.md b/docs/docs/user-guides/polkadotjs-extension-create-account.md new file mode 100644 index 0000000..f2b6183 --- /dev/null +++ b/docs/docs/user-guides/polkadotjs-extension-create-account.md @@ -0,0 +1,68 @@ +# How to create a Polkadot.js account + +[The Polkadot.js browser extension](https://polkadot.js.org/extension/) is a means to manage accounts and sign transactions in the DotSama ecosystem. +Unlike Metamask, Polkadot.js doesn’t provide a full-featured wallet. Instead, +its primary function is to inject your Polkadot.js account into other apps, such as Pablo. + +This guide will show you how to set up a Polkadot address with the Polkadot.js extension for use on Composable Apps although it is recommended for users to interact via alternative user-friendly wallet solutions such as Nova, Talisman and SubWallet. + +We recommend reading through the complete instructions at least once before following along. + +## Download the Polkadot.js extension +Click this link to download the extension for your preferred browser +[https://polkadot.js.org/extension/](https://polkadot.js.org/extension/). + +Once downloaded and installed, you will see this screen. + +![add_account](./images-polkadotjs-extension-create-account/add-account.png) + +1. Click “Understood, let me continue” + +To avoid the extension minimizing or canceling the account creation if you navigate outside it, +you can open it in a new window. + +![extension_windowed](./images-polkadotjs-extension-create-account/extension-windowed.png) + +1. Navigate to the ⚙️ dropdown menu +2. Click “Open in new window” + +## Create a new account + +Once you have accepted the terms and conditions, you will be greeted by the extension window asking you to create an account. + +![create_new_account](./images-polkadotjs-extension-create-account/create-new-account.png) + +1. Click on “+” in the top right corner +2. Next, click on "Create new account" + +## Secure your passphrase + +This opens the “Create an account” window, showing a twelve-word mnemonic seed (passphrase). +You can use it to restore your wallet, +and we recommend you to keep your passphrase safe using a password manager of your choice to prevent losing your assets. + +Please DO NOT share your passphrase with anyone. +Your seed grants full access to ALL funds stored in that account and all accounts derived from it. + +![mnemonic_seed](./images-polkadotjs-extension-create-account/mnemonic-seed-polkadotjs.png) + +1. Once you have secured your passphrase, check the corresponding box +2. Click "Next Step" + +## Account details + +On the next page, fill in the form as follows: + +![account_credentials](./images-polkadotjs-extension-create-account/account-credentials.png) + +1. In this case, we simply choose to use it on any DotSama chain for ease of use. + You can select the network you will use with the account. + For more details on how accounts work in Polkadot/Kusama, please read the Polkadot documentation. +2. Add a display name for the account (e.g., Pablo Picasso) +3. Set a password. You will sign transactions with this password. Please note: + This password does not protect your seed phrase. If someone can get access to your mnemonic seed, + they can gain control over your account even if they do not know your password. +4. Confirm the password +5. Click “Add the account with the generated seed” to complete the account generation + +Congratulations! You can now integrate your Polkadot.js account into Composable applications to initiate transactions and sign them using your password. \ No newline at end of file diff --git a/docs/docs/user-guides/restaking-sol.md b/docs/docs/user-guides/restaking-sol.md new file mode 100644 index 0000000..4646025 --- /dev/null +++ b/docs/docs/user-guides/restaking-sol.md @@ -0,0 +1,17 @@ +# How to Restake your tokens + +The [MANTIS app](https://games.mantis.app/) enables you to restake your assets effortlessly using intents. You will need a Phantom wallet to interact with the application. Just prompt the token and amount you want to stake or follow the suggestions. + +After connecting your wallet, you will see the following screen. Currently, you can either restake bSOL, mSOL, jitoSOL or SOL (staking SOL occurs via converting SOL into wSOL and then transferring it to the vault). + +![stake-dropdown](../user-guides/images-restaking-guide/restaking-1.png) + +Once your intent is expressed as displayed below, you’ll need to approve the transaction with your wallet. + +:::info +The fee to mint an NFT is 0.03 SOL, this amount will be returned to your account once the NFT is burned. You can read more about this process [here](../technology/solana-restaking/vaults.md). +::: + +![intent](../user-guides/images-restaking-guide/restaking-2.png) + +Congratulations, you are now restaking your tokens! Compete to win the competition and receive 80% of transfer revenue for 30 days in the [Team Restaking Competition](../technology/solana-restaking/mantis-games.md). \ No newline at end of file diff --git a/docs/docs/user-guides/talisman-create-account.md b/docs/docs/user-guides/talisman-create-account.md new file mode 100644 index 0000000..4343d8f --- /dev/null +++ b/docs/docs/user-guides/talisman-create-account.md @@ -0,0 +1,56 @@ +# How to create a Talisman account +The [Talisman wallet](https://talisman.xyz/) is an easy way of interacting with the Polkadot ecosystem by providing +a parachain interoperable wallet while also connecting Substrate with EVM (Ethereum-Virtual-Machine). +Aside from the foregoing use of the Talisman wallet, it also guides users by turning complexity into transparency +through comprehensive transactions. + +It functions similarly to Metamask: take part in Polkadot and Kusama, have all your Polkadot tokens in one place, +and still be able to connect to Ethereum whenever you need to with Talisman. + +This guide will show the user how to set up a Talisman account using the browser extension. It is highly recommended to read and understand the complete instructions before following along. + +## Download the Talisman Extension + +Click this link to download the extension for your preferred browser: [https://talisman.xyz/](https://talisman.xyz/). + +![download_talisman](./images-talisman-create-account/download-talisman.png) + +## Create a new wallet +Once it is downloaded and installed, you will see this window. + +![create_new_wallet](./images-talisman-create-account/create-new-wallet.png) + +1. Click on "New wallet" + +As an option, Talisman allows you to import a wallet from Metamask. However, for purposes of this guide, +we will create a new one from the very beginning and will not be importing a wallet from Metamask. + +## Account Details & Privacy +On the following pages, you will be asked to set a password and to authorize the collection +of anonymous usage information and the sending of anonymized error reports. + +![set_password](./images-talisman-create-account/set-password.png) + +![your_privacy](./images-talisman-create-account/your-privacy.png) + +1. Set a password +2. Click “Continue” +3. Choose if you want to send anonymized usage and error information to Talisman +4. Click either “No Thanks” or “I agree” + +Secure your Passphrase: +We have arrived at the dashboard/portfolio. In the future, you will see your assets for each parachain on this page. +Since it is your first time here, Talisman will ask you to backup your twelve-word mnemonic seed (passphrase) +which is used to restore your wallet and we recommend you to keep it safe using +a password manager of your choice in order to prevent losing your assets. +Please DO NOT share your passphrase with anyone. +Your seed grants full access to ALL funds stored in that account and all accounts derived from it. + +![backup_passphrase](./images-talisman-create-account/backup-passphrase.png) + +![mnemonic_seed](./images-talisman-create-account/mnemonic-seed-talisman.png) + +Once you have secured your passphrase, check the corresponding box. + +Congratulations! You can now integrate your Talisman account into Composable applications to initiate transactions and sign them using your password. + diff --git a/docs/docs/user-guides/team-competition.md b/docs/docs/user-guides/team-competition.md new file mode 100644 index 0000000..294d317 --- /dev/null +++ b/docs/docs/user-guides/team-competition.md @@ -0,0 +1,23 @@ +# How to create & join a Team in MANTIS Games + +## How to create a team + +To create a team, you need to be an NFT holder of the [MANTIS Games collection on Tensor](https://www.tensor.trade/trade/mantis_games). First [connect your wallet](https://games.mantis.app/) and head to the Leaderboard section. + +![dashboard](../user-guides/images-team-competition/dashboard.png) + +Click on “Create team”, enter your team name and upload your MANTIS Games NFT. The app will automatically detect your NFT. Select one in the upload NFT section, if you have multiple. + +![create-team](../user-guides/images-team-competition/create-team.png) + +Congratulations, you are now a team leader! To invite users to your team, share your team code. + +![creation-complete](../user-guides/images-team-competition/team-success.png) + +## How to join a team + +Once your wallet is connected on [connect your wallet](https://games.mantis.app/), head to the Leaderboard section. You will need a referral code to join a team. + +Click on “Join team” and enter the invite code. Keep in mind that you will not be able to leave and rejoin other teams. If you don’t have a team code yet, you can try to find a team on X or via the Composable Telegram/Discord. + +![join-team](../user-guides/images-team-competition/join-team.png) \ No newline at end of file diff --git a/docs/docs/user-guides/trustless-faq.md b/docs/docs/user-guides/trustless-faq.md new file mode 100644 index 0000000..6950fd4 --- /dev/null +++ b/docs/docs/user-guides/trustless-faq.md @@ -0,0 +1,234 @@ +# Trustless FAQ + +## All about Composable Chains + +❓ **Q1:** What is Picasso, Composable Cosmos and the Composable parachain? + +📝 **A1:** Composable Cosmos, Composable Parachain, and Picasso are the cornerstones of our ecosystem, each serving a unique yet interconnected role. + +1. **[Composable Cosmos Chain](../networks/composable-cosmos.md)**: This is a native chain within the Cosmos ecosystem, specifically designed for interoperability. It connects to our Picasso parachain in the Kusama network via IBC (Inter-Blockchain Communication), facilitating seamless asset transfers and cross-chain functionalities. +2. **[Composable Parachain](../networks/composable-parachain-overview.md)**: Residing in the Polkadot ecosystem, the Composable Parachain is built for cross-chain functionality and also utilizes IBC to connect with our Picasso parachain in the Kusama network. +3. **[Picasso](../networks/picasso-parachain-overview.md)**: An infrastructure layer on Kusama aiming for DeFi interoperability. Its native token is $PICA, and it connects to Composable Cosmos and Parachain via IBC. + +Together, these chains provide a robust, secure, and seamless cross-chain experience for our users. + +--- + +❓ **Q2:** How does multihop work? + +**📝 A2:** Multihop is our network routing via multiple intermediaries in Cosmos and Dotsama ecosystems. To properly answer, how does it work, we will dive deep into two things: how are our chains connected between each other and what are the risks of the routing? + +### **1. How Chains Are Connected.** + +- **Composable Cosmos Chain is connected to Picasso on Kusama**: via IBC (Inter-Blockchain Communication). +- **Composable Parachain on Polkadot is connected to Picasso on Kusama**: also via IBC. +- **Composable Parachain is connected to Polkadot Relay Chain and other Polkadot parachains:** via XCMP (Cross-Consensus Messaging Passing). +- **Picasso is connected to Kusama Relay Chain and other Kusama parachains:** also via XCMP. + +Each of these chains has its own relay mechanisms and further connections. For example, the Composable Cosmos Chain is connected to Cosmos Hub, Osmosis and other CometBFT-based blockchains via IBC. + +### **Transaction Journey:** + +If a user wants to send an asset (e.g., DOT) from Polkadot to Osmosis, the asset would take the following journey: + +1. Polkadot → Composable Parachain, +2. Composable Parachain → Picasso, +3. Picasso → Composable Cosmos, +4. Composable Cosmos → Osmosis. + +Note: most transactions apart from Polkadot relay and parachains are just one hop away from the Composable Cosmos Chain. + +### **2. Risks of Failed Transactions:** + +In the unlikely event that a transaction fails during the multihop process, the asset could end up being lodged on one of the intermediate chains. We have automated mechanisms designed to rollback failed transactions; however, there could still be complexities that prevent a smooth return of the asset. In such cases, the relayer won't cover the gas fees, and the funds will remain in the user's wallet on the intermediary chain. From there, users have the flexibility to manage those assets as they see fit. + +To get a better understanding of our ecosystem, you might take a look at the following diagram: + +![composable.png](../user-guides/composableFAQ.png) + +--- + +❓ **Q3:** What is $PICA? + +📝 **A3:** + +**What it is:** PICA is the native token of Picasso, an infrastructure layer built on the Kusama network. + +**Use Cases:** As of now, PICA, the native token of Picasso and the Composable Cosmos chain, can be used for participating in governance decisions and staking, and LP staking on Pablo. + +**Tokenomics:** You can find more details on the **[Picasso Tokenomics Page](../networks/picasso/tokenomics.md)**. + +--- + +❓ **Q4:** What are all of the official Composable products? + +📝 **A4:** Composable Finance offers a range of products designed to enhance the interoperable DeFi landscape. Here's a rundown of the official products: + +1. **[Trustless Zone](https://trustless.zone/)**: Trustless Zone is designed to offer secure, automated, and trustless asset transfers between different blockchains. +2. **[Pablo DEX](https://app.pablo.finance/)**: Pablo serves as a Decentralized Exchange (DEX) and a cross-chain liquidity hub that is part of the Picasso platform. It facilitates secure and efficient trading between various assets. + +--- + +❓ **Q5:** What is meant by trustless transfers, and how is it different from other transfer protocols? + +📝 **A5:** Trustless transfers refer to the automated and secure process of moving assets across different blockchains without requiring a trusted intermediary or third party such as a multisig or an oracle. This is achieved through the use of transport layers like IBC and XCMP. + +Our Trustless transfer system leverages the well-established IBC (Inter-Blockchain Communication) transfer protocol, which has been in the industry for several years and has facilitated a significant number of secure transfers. For a more in-depth understanding, you're encouraged to read our **[existing blog posts](https://blog.cosmos.network/how-composable-finance-overcame-technical-barriers-to-architect-a-trust-minimized-cosmodot-cde782fda8c4)** on this topic. + +This approach stands in contrast to some other transfer protocols that may require a layer of trust or manual validation, introducing centralization risks. + +By opting for trustless transfers, you benefit from both enhanced security and decentralization. + +--- + +❓ **Q6:** What are canonical tokens? + +📝 **A6:** In the context of Trustless Zone, canonical tokens refer to assets that maintain their native properties when transferred across different blockchains. They don't fragment liquidity and remain native throughout the transfer process. + +Our system adopts the secure and industry-tested IBC (Inter-Blockchain Communication) standard, which allows for the seamless transfer of native assets between different blockchain ecosystems. This approach ensures deeper liquidity and enhanced security for cross-chain transactions. + +--- + +## Trustless transfers and fees + +❓ **Q7:** What are the max transfer limits of Trustless? + +📝 **A7:** We have implemented a dynamic rate limit based on a 30% in-and-out cap within a 24-hour period of the total asset supply in escrow. This floating rate limit allows for flexibility while maintaining network security. If you attempt to exceed these limits, you will be prompted to enter a smaller amount. Please note that these limitations are in place to ensure the stability and security of the network. + +--- + +❓ **Q8:** What is the min transfer limit of Trustless? + +📝 **A8:** The minimum transfer limit on Trustless is a dynamic value that depends on four primary factors: + +1. **Gas token on the source chain**: The type and amount of gas required to initiate the transaction. +2. **Existential Deposit (ED) on the source chain**: The minimum amount of tokens that must be kept in an account on the originating chain. +3. **ED on the destination chain**: Similar to the source chain, the destination chain also has an Existential Deposit requirement. +4. **Gas consumption on the hop chain**: The gas used on any intermediary chains that the assets cross through. + +Here's a scenario to illustrate how these factors interact: + +- Assume a multi-hop transfer from Polkadot to Picasso. +- The user has 0 DOT on Composable/Picasso. + +What we check: + +1. If the user has enough DOT left for the Existential Deposit on Polkadot after the transfer. +2. Whether the amount of gas used on Polkadot and Composable does not exceed the amount being transferred. +3. If the amount sent by the user is above the Existential Deposit on Picasso. + +The sum of these values will be the minimum transfer limit for the specific scenario on Trustless. + +--- + +❓ **Q9:** What is our transfer fee? + +**📝 A9:** Our standard transfer fee is 0.4% for using any of our transfers, applicable in both directions. However, it's important to note that for multi-hop transfers, such as those from Polkadot to Osmosis, fees apply to every connection. In this specific example: + +- From Composable parachain to Picasso: 0.4% fee +- From Picasso to Composable Cosmos Chain: 0.4% fee + +That means for a multi-hop transfer, you'll incur an around 0.8% fee in total, plus a nominal amount for gas fees associated with XCM and IBC transfers. This structure ensures the sustainability of our services while keeping fees transparent and straightforward for our users. + +--- + +❓ **Q10:** Why is my transfer stuck? + +📝 **A10:** Encountering a "stuck" transfer can understandably be worrying. The term "stuck" could mean various things: from a transaction that's still loading and hasn't been confirmed, to a failed transaction where funds seem to be missing or held up. Here are some typical scenarios and what they mean: + +1. **Temporary Network Delays**: Occasionally, network or system lags may cause short-term interruptions in the transfer process. +2. **Chain-Specific Issues**: Technical problems on any of the blockchain networks involved can contribute to delays or failed transactions. +3. **Transfer has timed out:** Can happen when an Inter-Blockchain Communication (IBC) packet, sent from Chain A to Chain B, doesn't receive an acknowledgment of successful transfer within a time frame of 1 hour. This timeout could occur due to network delays, chain congestion, or other issues. + +For more information on IBC and light clients, you may refer to this **[Cosmos IBC Tutorial](https://tutorials.cosmos.network/academy/3-ibc/5-light-client-dev.html)**. + +### **What Happens Next?** + +- **Automatic Reversal**: In cases where the transfer issue is temporary, such as network delays, your funds should automatically revert to your original account, typically within an hour. +- **Reach Out for Support**: If your transfer remains stuck or if you encounter any issues that are unclear, please don't hesitate to reach out to us on our **[Telegram](https://t.me/composable_chat)** or +**[Discord](https://discord.com/invite/composable)** channels for additional support. We're actively working to resolve any issues as quickly as possible. + +This approach ensures that you have multiple avenues for resolving your concerns while we work to make the transfer process as smooth as possible. + +--- + +## All about staking + +❓ **Q11:** Why am I staking $PICA on a Cosmos chain instead of parachain? + +📝 **A11:** Staking $PICA on our Cosmos chain is part of our broader strategy to secure the Composable Cosmos Chain. Although $PICA started as a native token of the Picasso chain, we have also designated it as the native token of the Cosmos chain. To facilitate seamless token flow, we've set up IBC middleware between the two chains, ensuring that the tokens remain native on both platforms. Over 1B $PICA tokens have been transferred from our treasury to validators on the Composable Cosmos Chain to bolster its security and robustness. It's worth noting that staking is not currently available on the Picasso chain. For more details, you can refer to our **[full tokenomics documentation](https://docs.composable.finance/networks/picasso/pica-use-cases)**. + +--- + +❓ **Q12:** What is the $PICA staking APR% on the Composable Cosmos chain? + +**📝 A12:** Understanding the APR for $PICA staking on our Composable Cosmos chain, is a bit different from what you might be used to on other Cosmos chains. This is because $PICA is a non-inflationary token, meaning it's not subject to newly minted tokens for rewards. All PICA tokens have already been minted, and only those are used for rewards. + +As a result, you won't be able to fetch APR percentages in the usual way through the Cosmos inflation endpoint, as it is floating. Instead, you can calculate the APR manually using certain metrics and a formula we've provided: + +1. **Annual Provision** ($AP$) is the total number of tokens allocated for staking rewards per year. It can be calculated as `Annual Provision = GET /cosmos/mint/v1beta1/annual_provisions` or check **[this +link](https://api-composable-ia.cosmosia.notional.ventures/cosmos/mint/v1beta1/annual_provisions)** for the API call. +2. **Bonded Tokens** ($BT$) refer to the total number of tokens currently staked in the network. It can be calculated as `Bonded Tokens = GET /cosmos/staking/v1beta1/pool` or check **[this +link](https://api-composable-ia.cosmosia.notional.ventures/cosmos/staking/v1beta1/pool**) for the API call. + +Using these, you can calculate the **Nominal APR** ($APR_N$) as follows: + +$$ +APR_N=\frac{AP\times(1−CT)}{BT}, +$$ + +Where $CT$ is **Community Tax** and it can be found **[here](https://api-composable-ia.cosmosia.notional.ventures//cosmos/distribution/v1beta1/params)**. + +To adjust this for real-world conditions, you also have to take into account the actual number of blocks minted during the year **Real Annual Provision** ($AP_R$). To calculate that we need to get **Blocks Per Year** ($BPY$) and **Real Blocks Per Year** ($BPY_R$): + +$$ +AP_R=AP\times\frac{BPY_R}{BPY}, +$$ + +$BPY$ can be found **[here](https://api-composable-ia.cosmosia.notional.ventures/cosmos/mint/v1beta1/params)** and $BPY_R$ is calculated **[here](https://github.com/giansalex/cosmos-staking-apr/blob/master/src/index.js)** in a function +`getBlocksPerYearReal,` which is an estimate of how many blocks are likely to be generated in one year, based on recent block timings. + +The **Real Staking APR** ($APR_{RS}$) is then calculated as: + +$$ +APR_{RS}=APR_N\times\frac{AP_R}{AP}=APR_N\times\frac{BPY_R}{BPY}, +$$ + +and it is the one you can see on **[trustless.zone](https://app.trustless.zone)**. + +Finally, the **Final Staking APR** ($APR_{FS}$) takes into account the **Validator's Commission** ($VC$), which can be found **[here](https://explorer.nodestake.top/composable/staking)**: + +$$ +APR_{FS}=APR_{RS}\times\left(1-VC\right). +$$ + +At present, the estimated APR stands around 13%. + +--- + +❓ **Q13:** How to choose a validator on Composable Cosmos Chain to stake with, is there any risk involved in staking? + +📝 **A13:** Choosing a validator on Composable Cosmos Chain requires thoughtful consideration of multiple factors: + +1. **Uptime**: Aim to select a validator with near-perfect uptime. A high uptime is a hallmark of reliability, and it's crucial for earning consistent staking rewards. Keep in mind that if a validator is jailed or tombstoned due to downtime or double signing, you won't receive rewards during that period. +2. **Voting Power**: Opting for a validator with a lower percentage of total voting power can contribute to the decentralization of the network. By doing so, you're distributing the voting power and reducing the risk of centralization. +3. **Commission Rate**: While a lower commission rate is preferable as it allows you to keep a higher proportion of the staking rewards, it shouldn't be the sole criterion for selection. +4. **Slashing Policy**: It's important to note that slashing parameters are set at the chain level and apply uniformly to all validators. Therefore, if a validator misbehaves, the slashing consequences will be the same regardless of which validator you've chosen. +5. **Community Presence**: Validators who are vocal, active, and have a positive reputation within the community are generally considered more trustworthy and transparent. +6. **Blockchain Contributions**: Consider selecting validators who actively contribute to the blockchain ecosystem through the development of tools, provision of services, and participation in governance. + +By taking these factors into account, you can make a more informed decision about which validator best aligns with your risk tolerance and staking goals. + +--- + +## Support and assistance + +❓ **Q14:** I need help with a product, where do I go? + +📝 **A14:** If you're experiencing issues or need assistance with any of our products, the best way to get help is through our Discord channel by opening a support ticket. You can join our Discord community **[here](https://discord.com/invite/composable)**. + +Alternatively, you can also reach out to us on Telegram at our **[Composable Chat](https://t.me/composable_chat)**. + +Either way, our team is readily available to assist you with your queries and concerns. + +--- diff --git a/docs/docs/user-guides/trustless-transfers.md b/docs/docs/user-guides/trustless-transfers.md new file mode 100644 index 0000000..1fc67b5 --- /dev/null +++ b/docs/docs/user-guides/trustless-transfers.md @@ -0,0 +1,13 @@ +# How to transfer assets between Picasso & Osmosis + +Composable implemented the first IBC implementation that operates outside of the Cosmos ecosystem. This guide will demonstrate how to transfer assets between Picasso and Osmosis. + +In this guide, PICA will be transferred between Picasso and Osmosis however, you can also transfer DOT from Polkadot to Osmosis in one click. + +Head to https://app.trustless.zone/ and connect both, your Polkadot and Cosmos wallets. + +![transfer](./images-trustless-transfer/trustless-transfer.png) + +Enter the amount of PICA and click 'Transfer'. A pop-up asking you to sign your transaction will appear, approve the transaction. + +Transactions can take up to 2-5 minutes to complete, you can view the progress on https://explorer.trustless.zone/ \ No newline at end of file diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js new file mode 100644 index 0000000..c765ed7 --- /dev/null +++ b/docs/docusaurus.config.js @@ -0,0 +1,182 @@ +// @ts-check +// Note: type annotations allow type checking and IDEs autocompletion + +const lightCodeTheme = require('prism-react-renderer/themes/duotoneLight') +const darkCodeTheme = require('prism-react-renderer/themes/duotoneDark') +const math = require('remark-math') +const katex = require('rehype-katex') + +/** @type {import('@docusaurus/types').Config} */ +const config = { + title: 'Picasso Documentation', + tagline: 'The Cross-Ecosystem IBC & Restaking Hub', + url: 'https://docs.picasso.network', + baseUrl: '/', + onBrokenLinks: 'warn', + onBrokenMarkdownLinks: 'warn', + favicon: 'img/favicon.ico', + // GitHub pages deployment config. + // If you aren't using GitHub pages, you don't need these. + organizationName: 'Composable Finance', // Usually your GitHub org/user name. + projectName: 'composable', // Usually your repo name. + + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + '@docusaurus/preset-classic', + /** @type {import('@docusaurus/preset-classic').Options} */ + ({ + docs: { + breadcrumbs: true, + sidebarPath: require.resolve('./sidebars.js'), + routeBasePath: '/', + editUrl: 'https://github.com/ComposableFi/composable/tree/main/docs/', + remarkPlugins: [math], + rehypePlugins: [katex] + }, + blog: false, + theme: { + customCss: require.resolve('./src/css/custom.css'), + }, + }), + ], + ], + stylesheets: [ + { + href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css', + type: 'text/css', + integrity: + 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM', + crossorigin: 'anonymous', + }, + ], + + themeConfig: + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + algolia: { + // The application ID provided by Algolia + appId: '1GMXVIRCBW', + // Public API key: it is safe to commit it + apiKey: 'de939a9de56cd5e30ef4a25b9f61a641', + indexName: 'composable', + }, + navbar: { + logo: { + alt: 'Picasso Logo', + src: 'img/picasso-dark.svg', + srcDark: 'img/picasso-light.svg', + + }, + items: [ + { + to: '/concepts/picasso', + position: 'left', + label: 'Concepts', + }, + { + to: '/technology/ibc', + position: 'left', + label: 'IBC', + }, + { + to: '/technology/restaking', + position: 'left', + label: 'Restaking', + }, + { + to: '/governance-&-token/use-cases', + position: 'left', + label: 'Governance & Token', + }, + { + to: '/user-guides', + position: 'left', + label: 'Guides', + }, + { + to: '/technology/mantis', + position: 'left', + label: 'MANTIS', + }, + { + href: 'https://research.composable.finance', + label: 'Research', + position: 'right', + }, + { + href: 'https://github.com/ComposableFi/composable', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Community', + items: [ + { + label: 'Twitter', + href: 'https://twitter.com/Picasso_Network', + }, + { + label: 'Telegram', + href: 'https://t.me/https://t.me/composablefinance', + }, + { + label: 'Discord', + href: 'https://discord.gg/composable', + }, + { + label: 'LinkedIn', + href: 'https://www.linkedin.com/company/composable-finance/', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'Medium', + href: 'https://medium.com/@picasso_network', + }, + { + label: 'Press Kit', + href: 'https://docs.composable.finance/ecosystem/press-kit', + }, + { + label: 'Risk Factors', + href: 'https://docs.composable.finance/faqs/risk-factors', + }, + { + label: 'Terms of Use', + href: 'https://docs.composable.finance/faqs/terms-of-use', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} Composable Foundation`, + }, + prism: { + additionalLanguages: ['rust', 'haskell', 'nix', 'typescript', 'tsx', 'toml', 'yaml', 'json', 'bash'], + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }), + plugins: ['docusaurus-plugin-sass', 'my-loaders'], + markdown: { + mermaid: true, + }, + themes: ['@docusaurus/theme-mermaid'], +}; + +module.exports = config; \ No newline at end of file diff --git a/docs/firebase.json b/docs/firebase.json new file mode 100644 index 0000000..3818405 --- /dev/null +++ b/docs/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "result", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} diff --git a/docs/flake-module.nix b/docs/flake-module.nix new file mode 100644 index 0000000..8a5bb2c --- /dev/null +++ b/docs/flake-module.nix @@ -0,0 +1,38 @@ +{ self, ... }: { + perSystem = { config, self', inputs', pkgs, system, ... }: { + packages = rec { + docs-static = pkgs.buildNpmPackage { + src = ./.; + npmBuild = '' + npm run build + ''; + installPhase = '' + mkdir --parents $out + ls + cp --archive ./build/. $out + ''; + }; + + docs-server = let PORT = 8008; + in pkgs.writeShellApplication { + name = "docs-server"; + runtimeInputs = [ pkgs.miniserve ]; + text = '' + miniserve -p ${ + builtins.toString PORT + } --spa --index index.html ${docs-static} + ''; + }; + docs-dev = pkgs.writeShellApplication { + name = "docs-dev"; + runtimeInputs = [ pkgs.nodejs ]; + text = '' + cd docs + npm install + npm run start + ''; + }; + + }; + }; +} diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000..a4daaad --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,25365 @@ +{ + "name": "docs", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "docs", + "version": "0.0.0", + "dependencies": { + "@composable-finance/cosmwasm-vm": "^0.0.6", + "@docusaurus/core": "2.4.3", + "@docusaurus/preset-classic": "2.4.3", + "@docusaurus/theme-mermaid": "^2.4.3", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "docusaurus-tailwindcss": "^0.1.0", + "hast-util-is-element": "^1.1.0", + "idb-keyval": "^6.2.0", + "lodash": "^4.17.21", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "rehype-katex": "^5.0.0", + "remark-math": "^3.0.1", + "rfdc": "^1.3.0", + "sha256-uint8array": "^0.10.3", + "zustand": "^4.1.4" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.3", + "@tsconfig/docusaurus": "2.0.1", + "@types/lodash": "^4.14.189", + "autoprefixer": "^10.4.13", + "docusaurus-plugin-sass": "0.2.5", + "import-sort-style-module": "^6.0.0", + "import-sort-style-react": "^5.1.0", + "my-loaders": "file:plugins/my-loaders", + "postcss": "^8.4.19", + "postcss-import": "^15.0.0", + "postcss-loader": "^7.0.1", + "postcss-preset-env": "^7.8.3", + "prettier": "^2.7.1", + "sass": "^1.56.1", + "tailwindcss": "npm:@tailwindcss/postcss7-compat", + "typescript": "^4.8.4" + }, + "engines": { + "node": ">=18.14" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", + "dependencies": { + "@algolia/cache-common": "4.20.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", + "dependencies": { + "@algolia/cache-common": "4.20.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", + "dependencies": { + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", + "dependencies": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "node_modules/@algolia/logger-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", + "dependencies": { + "@algolia/logger-common": "4.20.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", + "dependencies": { + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", + "dependencies": { + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", + "dependencies": { + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "dependencies": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dependencies": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "dependencies": { + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", + "dependencies": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", + "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", + "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", + "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "dependencies": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz", + "integrity": "sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@composable-finance/cosmwasm-vm": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@composable-finance/cosmwasm-vm/-/cosmwasm-vm-0.0.6.tgz", + "integrity": "sha512-tT4knxdAgm9VwC159Bd/MNaBMJgTGfjjvke2k/cAQbRT7ywJUgSxqRbCvJ7o91hLSbAdCuHqOVKVk1rx4rRALg==", + "dependencies": { + "wasmi": "^0.0.2" + }, + "engines": { + "node": ">=18.12.1", + "pnpm": ">=7.14.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@docsearch/css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" + }, + "node_modules/@docsearch/react": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.3.tgz", + "integrity": "sha512-dWH5P7cgeNSIg9ufReX6gaCl/TmrGKD38Orbwuz05WPhAQtFXHd5B8Qym1TiXfvUNvwoYKkAJOJuGe8ou0Z7PA==", + "dependencies": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^2.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.3.tgz", + "integrity": "sha512-ZvGSRCi7z9wLnZrXNPG6DmVPHdKGd8dIn9pYbEOFiYihfv4uDR3UtxogmKf+rT8ZlKFf5Lqne8E8nt08zNM8CA==", + "dependencies": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/logger": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.3.tgz", + "integrity": "sha512-Zxws7r3yLufk9xM1zq9ged0YHs65mlRmtsobnFkdZTxWXdTYlWWLWdKyNKAsVC+D7zg+pv2fGbyabdOnyZOM3w==", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.3.tgz", + "integrity": "sha512-b1+fDnWtl3GiqkL0BRjYtc94FZrcDDBV1j8446+4tptB9BAOlePwG2p/pK6vGvfL53lkOsszXMghr2g67M0vCw==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.3.tgz", + "integrity": "sha512-cwkBkt1UCiduuvEAo7XZY01dJfRn7UR/75mBgOdb1hKknhrabJZ8YH+7savd/y9kLExPyrhe0QwdS9GuzsRRIA==", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.4.3", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.3.tgz", + "integrity": "sha512-PVhypqaA0t98zVDpOeTqWUTvRqCEjJubtfFUQ7zJNYdbYTbS/E/ytq6zbLVsN/dImvemtO/5JQgjLxsh8XLo8Q==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.3.tgz", + "integrity": "sha512-N7Po2LSH6UejQhzTCsvuX5NOzlC+HiXOVvofnEPj0WhMu1etpLEXE6a4aTxrtg95lQ5kf0xUIdjX9sh3d3G76A==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.3.tgz", + "integrity": "sha512-txtDVz7y3zGk67q0HjG0gRttVPodkHqE0bpJ+7dOaTH40CQFLSh7+aBeGnPOTl+oCPG+hxkim4SndqPqXjQ8Bg==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.3.tgz", + "integrity": "sha512-LkUbuq3zCmINlFb+gAd4ZvYr+bPAzMC0hwND4F7V9bZ852dCX8YoWyovVUBKq4er1XsOwSQaHmNGtObtn8Av8Q==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.3.tgz", + "integrity": "sha512-KzBV3k8lDkWOhg/oYGxlK5o9bOwX7KpPc/FTWoB+SfKhlHfhq7qcQdMi1elAaVEIop8tgK6gD1E58Q+XC6otSQ==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.3.tgz", + "integrity": "sha512-5FMg0rT7sDy4i9AGsvJC71MQrqQZwgLNdDetLEGDHLfSHLvJhQbTCUGbGXknUgWXQJckcV/AILYeJy+HhxeIFA==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.3.tgz", + "integrity": "sha512-1jTzp71yDGuQiX9Bi0pVp3alArV0LSnHXempvQTxwCGAEzUWWaBg4d8pocAlTpbP9aULQQqhgzrs8hgTRPOM0A==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.3.tgz", + "integrity": "sha512-LRQYrK1oH1rNfr4YvWBmRzTL0LN9UAPxBbghgeFRBm5yloF6P+zv1tm2pe2hQTX/QP5bSKdnajCvfnScgKXMZQ==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.3.tgz", + "integrity": "sha512-tRyMliepY11Ym6hB1rAFSNGwQDpmszvWYJvlK1E+md4SW8i6ylNHtpZjaYFff9Mdk3i/Pg8ItQq9P0daOJAvQw==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/plugin-content-blog": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/plugin-content-pages": "2.4.3", + "@docusaurus/plugin-debug": "2.4.3", + "@docusaurus/plugin-google-analytics": "2.4.3", + "@docusaurus/plugin-google-gtag": "2.4.3", + "@docusaurus/plugin-google-tag-manager": "2.4.3", + "@docusaurus/plugin-sitemap": "2.4.3", + "@docusaurus/theme-classic": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/theme-search-algolia": "2.4.3", + "@docusaurus/types": "2.4.3" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.3.tgz", + "integrity": "sha512-QKRAJPSGPfDY2yCiPMIVyr+MqwZCIV2lxNzqbyUW0YkrlmdzzP3WuQJPMGLCjWgQp/5c9kpWMvMxjhpZx1R32Q==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/plugin-content-blog": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/plugin-content-pages": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/theme-translations": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.43", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.3.tgz", + "integrity": "sha512-7KaDJBXKBVGXw5WOVt84FtN8czGWhM0lbyWEZXGp8AFfL6sZQfRTluFp4QriR97qwzSyOfQb+nzcDZZU4tezUw==", + "dependencies": { + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/plugin-content-blog": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/plugin-content-pages": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-mermaid": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-2.4.3.tgz", + "integrity": "sha512-S1tZ3xpowtFiTrpTKmvVbRHUYGOlEG5CnPzWlO4huJT1sAwLR+pD6f9DYUlPv2+9NezF3EfUrUyW9xLH0UP58w==", + "dependencies": { + "@docusaurus/core": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@mdx-js/react": "^1.6.22", + "mermaid": "^9.2.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.3.tgz", + "integrity": "sha512-jziq4f6YVUB5hZOB85ELATwnxBz/RmSLD3ksGQOLDPKVzat4pmI8tddNWtriPpxR04BNT+ZfpPUMFkNFetSW1Q==", + "dependencies": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/theme-translations": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^2.0.0", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.3.tgz", + "integrity": "sha512-H4D+lbZbjbKNS/Zw1Lel64PioUAIT3cLYYJLUf3KkuO/oc9e0QCVhIYVtUI2SfBCF2NNdlyhBDQEEMygsCedIg==", + "dependencies": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/types": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.3.tgz", + "integrity": "sha512-W6zNLGQqfrp/EoPD0bhb9n7OobP+RHpmvVzpA+Z/IuU3Q63njJM24hmT0GYboovWcDtFmnIJC9wcyx4RVPQscw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.3.tgz", + "integrity": "sha512-fKcXsjrD86Smxv8Pt0TBFqYieZZCPh4cbf9oszUq/AMhZn3ujwpKaVYZACPX8mmjtYx0JOgNx52CREBfiGQB4A==", + "dependencies": { + "@docusaurus/logger": "2.4.3", + "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.3.tgz", + "integrity": "sha512-/jascp4GbLQCPVmcGkPzEQjNaAk3ADVfMtudk49Ggb+131B1WDD6HqlSmDf8MxGdy7Dja2gc+StHf01kiWoTDQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.3.tgz", + "integrity": "sha512-G2+Vt3WR5E/9drAobP+hhZQMaswRwDlp6qOMi7o7ZypB+VO7N//DZWhZEwhcRGepMDJGQEwtPv7UxtYwPL9PBw==", + "dependencies": { + "@docusaurus/logger": "2.4.3", + "@docusaurus/utils": "2.4.3", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", + "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", + "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.46", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.46.tgz", + "integrity": "sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz", + "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz", + "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz", + "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz", + "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz", + "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz", + "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz", + "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz", + "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.4.0.tgz", + "integrity": "sha512-Ytuh7N282fv2Cy1JePf6HZ29/G5Hb8mQAjx4iykPjvfFl9NK6o5lZavmewgjOGT8kNPtwgvheuOQn4CifHRUhQ==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1", + "@svgr/babel-plugin-transform-svg-component": "^6.3.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.4.0.tgz", + "integrity": "sha512-wU9uyF6BUnwAqG7fDOowmDQzmbvovj1uq/iETfMK9xwQNaT+e7yN7SmDDcETXC72dnOrMcRuEWw0JEvpJha+yg==", + "dependencies": { + "@svgr/babel-preset": "^6.4.0", + "@svgr/plugin-jsx": "^6.4.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.4.0.tgz", + "integrity": "sha512-PjcU8jCneKXJnrREycsgfgQ/bzR1ogSKC5MBeUu2wmEoJIjzXX7X14DDktUjU9bkBy26yMDiVHn46Nl82P3WEg==", + "dependencies": { + "@babel/types": "^7.18.4", + "entities": "^4.3.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.4.0.tgz", + "integrity": "sha512-gu6E7v8qRAtCxbymI1et3G7athogvKvzsJkSWiHVZsuVZbyx5O2b7+DIkKvAGh2RvEzgSvfGf8QD1BaHal2vBw==", + "dependencies": { + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.4.0", + "@svgr/hast-util-to-babel-ast": "^6.4.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz", + "integrity": "sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==", + "dependencies": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/webpack": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.4.0.tgz", + "integrity": "sha512-ejt2JdVX6k0XzUjVObMcTzTgsaCadEVCHBvOt3J0Vcp3eFirf0nqsjQCUD+ogFep25+ICDMZa1nLlotbXxKDXw==", + "dependencies": { + "@babel/core": "^7.18.5", + "@babel/plugin-transform-react-constant-elements": "^7.17.12", + "@babel/preset-env": "^7.18.2", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", + "@svgr/core": "^6.4.0", + "@svgr/plugin-jsx": "^6.4.0", + "@svgr/plugin-svgo": "^6.3.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/docusaurus": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-2.0.1.tgz", + "integrity": "sha512-7JrI61bTZ37DWrHx1qhOW+kPxSG95+/q+EiDCMIahh8Aqbk03+nVu+Z6YGOj3O5e6lXHJuf/LHJ/lc6j8IEQyA==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz", + "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "node_modules/@types/katex": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz", + "integrity": "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" + }, + "node_modules/@types/lodash": { + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", + "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "node_modules/@types/node": { + "version": "18.8.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.5.tgz", + "integrity": "sha512-Bq7G3AErwe5A/Zki5fdD3O6+0zDChhg671NfPjtIcbtzDNZTv4NPKMRFr7gtYPG7y+B8uTiNK4Ngd9T0FTar6Q==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", + "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", + "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/sax": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.5.tgz", + "integrity": "sha512-9jWta97bBVC027/MShr3gLab8gPhKy4l6qpb+UJLF5pDm3501NvA7uvqVCW+REFtx00oTi6Cq9JzLwgq6evVgw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz", + "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + }, + "node_modules/clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compressible/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.1.tgz", + "integrity": "sha512-ub12STsk3uXfHFTn9dtkI9nebvUKQ9rB0pn/6WNMRV77nqAOlOOJrrvsP8S8jngcnu+8ll3/9/xa7RCUNBVdOA==", + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", + "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "dependencies": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", + "dependencies": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/cytoscape": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.26.0.tgz", + "integrity": "sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", + "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus-plugin-sass": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.5.tgz", + "integrity": "sha512-Z+D0fLFUKcFpM+bqSUmqKIU+vO+YF1xoEQh5hoFreg2eMf722+siwXDD+sqtwU8E4MvVpuvsQfaHwODNlxJAEg==", + "dev": true, + "dependencies": { + "sass-loader": "^10.1.1" + }, + "peerDependencies": { + "@docusaurus/core": "^2.0.0-beta || ^3.0.0-alpha", + "sass": "^1.30.0" + } + }, + "node_modules/docusaurus-tailwindcss": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/docusaurus-tailwindcss/-/docusaurus-tailwindcss-0.1.0.tgz", + "integrity": "sha512-Vz2bDMhRUwp4+iro+JlRM9kaOJ2Wjk3ZZYl1C9yydSx1iuTSgXS0beA1v/7cXyBV5VrIN5ZGwvRXev9IheWU7A==", + "dependencies": { + "autoprefixer": "10.3.4", + "postcss": "8.3.6", + "tailwindcss": "2.2.15" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@docusaurus/core": "^2.0.0-alpha.0" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/autoprefixer": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.4.tgz", + "integrity": "sha512-EKjKDXOq7ug+jagLzmnoTRpTT0q1KVzEJqrJd0hCBa7FiG0WbFOBCcJCy2QkW1OckpO3qgttA1aWjVbeIPAecw==", + "dependencies": { + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001252", + "colorette": "^1.3.0", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/docusaurus-tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dependencies": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docusaurus-tailwindcss/node_modules/tailwindcss": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.15.tgz", + "integrity": "sha512-WgV41xTMbnSoTNMNnJvShQZ+8GmY86DmXTrCgnsveNZJdlybfwCItV8kAqjYmU49YiFr+ofzmT1JlAKajBZboQ==", + "dependencies": { + "arg": "^5.0.1", + "bytes": "^3.0.0", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.1", + "html-tags": "^3.1.0", + "is-color-stop": "^1.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.11.0", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.0.9" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.281", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.281.tgz", + "integrity": "sha512-yer0w5wCYdFoZytfmbNhwiGI/3cW06+RV7E23ln4490DVMxs7PvYpbsrSmAiBn/V6gode8wvJlST2YfWgvzWIg==" + }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz", + "integrity": "sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==", + "dependencies": { + "hast-util-is-element": "^1.0.0", + "repeat-string": "^1.0.0", + "unist-util-find-after": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", + "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", + "dependencies": { + "safari-14-idb-fix": "^3.0.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-sort-style-module": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/import-sort-style-module/-/import-sort-style-module-6.0.0.tgz", + "integrity": "sha512-Oxd256EVt6TAgawhIDuKnNHWumzHMHFWhVncBBvlHVnx69B4GP/Gu4Xo+gjxtqSEKEvam5ajUkNvnsXLDMDjKg==", + "dev": true + }, + "node_modules/import-sort-style-react": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/import-sort-style-react/-/import-sort-style-react-5.1.0.tgz", + "integrity": "sha512-Huhy19WpJar6DjEZLbRz1K54qiOVW6ihYcK2tYaSIufUeZyak94TauIn/rXteAdcwDX4mLwyf6++bcT/Ok4E1g==", + "dev": true + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz", + "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==", + "dependencies": { + "@jest/types": "^29.1.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz", + "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.1.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.6.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", + "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/katex": { + "version": "0.13.24", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", + "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.0.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", + "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", + "dependencies": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "dagre-d3-es": "7.0.9", + "dayjs": "^1.11.7", + "dompurify": "2.4.3", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/my-loaders": { + "resolved": "plugins/my-loaders", + "link": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", + "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", + "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.7" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dev": true, + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "dependencies": { + "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "node_modules/purgecss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", + "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", + "dependencies": { + "commander": "^8.0.0", + "glob": "^7.1.7", + "postcss": "^8.3.5", + "postcss-selector-parser": "^6.0.6" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-katex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-5.0.0.tgz", + "integrity": "sha512-ksSuEKCql/IiIadOHiKRMjypva9BLhuwQNascMqaoGLDVd0k2NlE2wMvgZ3rpItzRKCd6vs8s7MFbb8pcR0AEg==", + "dependencies": { + "@types/katex": "^0.11.0", + "hast-util-to-text": "^2.0.0", + "katex": "^0.13.0", + "rehype-parse": "^7.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", + "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", + "dependencies": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-3.0.1.tgz", + "integrity": "sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "dependencies": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safari-14-idb-fix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", + "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.3.1.tgz", + "integrity": "sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/search-insights": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.8.3.tgz", + "integrity": "sha512-W9rZfQ9XEfF0O6ntgQOTI7Txc8nkZrO4eJ/pTHK0Br6wWND2sPGPoWg+yGhdIW7wMbLqk8dc23IyEtLlNGpeNw==", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha256-uint8array": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.3.tgz", + "integrity": "sha512-SFTs87RfXVulKrhhP6B5/qcFruOKQZaKf6jY9V4PJ7NOG0qIlQP6XL4pQq5xagsuP/Wd55S7tUBJpRajEsDUEQ==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.2.1.tgz", + "integrity": "sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/tailwindcss": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", + "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "deprecated": "Use String.prototype.trim() instead" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz", + "integrity": "sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/update-notifier/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/wasmi": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wasmi/-/wasmi-0.0.2.tgz", + "integrity": "sha512-dxEnLNp7M7ilX8Q8KJkvAadawhb6jxWQPcjR2ljd+nY0lYTutUuKvVMWEOChtTeOr32MunPjhwXLfPh/hoUjlg==", + "engines": { + "node": ">=18.12.0", + "pnpm": ">=7.14.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", + "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "node_modules/wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zustand": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.4.tgz", + "integrity": "sha512-k2jVOlWo8p4R83mQ+/uyB8ILPO2PCJOf+QVjcL+1PbMCk1w5OoPYpAIxy9zd93FSfmJqoH6lGdwzzjwqJIRU5A==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "immer": ">=9.0", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "plugins/my-loaders": { + "version": "0.0.1", + "dev": true + } + }, + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "requires": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "requires": { + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "requires": { + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "requires": {} + }, + "@algolia/cache-browser-local-storage": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", + "requires": { + "@algolia/cache-common": "4.20.0" + } + }, + "@algolia/cache-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" + }, + "@algolia/cache-in-memory": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", + "requires": { + "@algolia/cache-common": "4.20.0" + } + }, + "@algolia/client-account": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", + "requires": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "@algolia/client-analytics": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", + "requires": { + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "@algolia/client-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", + "requires": { + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "@algolia/client-personalization": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", + "requires": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "@algolia/client-search": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", + "requires": { + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "@algolia/logger-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" + }, + "@algolia/logger-console": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", + "requires": { + "@algolia/logger-common": "4.20.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", + "requires": { + "@algolia/requester-common": "4.20.0" + } + }, + "@algolia/requester-common": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" + }, + "@algolia/requester-node-http": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", + "requires": { + "@algolia/requester-common": "4.20.0" + } + }, + "@algolia/transporter": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", + "requires": { + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" + }, + "@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/generator": { + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "requires": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "requires": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", + "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helper-wrap-function": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", + "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", + "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", + "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", + "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", + "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", + "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", + "requires": { + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.19.4", + "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.19.4", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "requires": { + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + } + } + }, + "@babel/runtime-corejs3": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz", + "integrity": "sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==", + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==" + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true + }, + "@composable-finance/cosmwasm-vm": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@composable-finance/cosmwasm-vm/-/cosmwasm-vm-0.0.6.tgz", + "integrity": "sha512-tT4knxdAgm9VwC159Bd/MNaBMJgTGfjjvke2k/cAQbRT7ywJUgSxqRbCvJ7o91hLSbAdCuHqOVKVk1rx4rRALg==", + "requires": { + "wasmi": "^0.0.2" + } + }, + "@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dev": true, + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dev": true, + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dev": true, + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "dev": true, + "requires": {} + }, + "@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "requires": {} + }, + "@docsearch/css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" + }, + "@docsearch/react": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", + "requires": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" + } + }, + "@docusaurus/core": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.3.tgz", + "integrity": "sha512-dWH5P7cgeNSIg9ufReX6gaCl/TmrGKD38Orbwuz05WPhAQtFXHd5B8Qym1TiXfvUNvwoYKkAJOJuGe8ou0Z7PA==", + "requires": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^2.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.3.tgz", + "integrity": "sha512-ZvGSRCi7z9wLnZrXNPG6DmVPHdKGd8dIn9pYbEOFiYihfv4uDR3UtxogmKf+rT8ZlKFf5Lqne8E8nt08zNM8CA==", + "requires": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + } + }, + "@docusaurus/logger": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.3.tgz", + "integrity": "sha512-Zxws7r3yLufk9xM1zq9ged0YHs65mlRmtsobnFkdZTxWXdTYlWWLWdKyNKAsVC+D7zg+pv2fGbyabdOnyZOM3w==", + "requires": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + } + }, + "@docusaurus/mdx-loader": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.3.tgz", + "integrity": "sha512-b1+fDnWtl3GiqkL0BRjYtc94FZrcDDBV1j8446+4tptB9BAOlePwG2p/pK6vGvfL53lkOsszXMghr2g67M0vCw==", + "requires": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + } + }, + "@docusaurus/module-type-aliases": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.3.tgz", + "integrity": "sha512-cwkBkt1UCiduuvEAo7XZY01dJfRn7UR/75mBgOdb1hKknhrabJZ8YH+7savd/y9kLExPyrhe0QwdS9GuzsRRIA==", + "requires": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.4.3", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + } + }, + "@docusaurus/plugin-content-blog": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.3.tgz", + "integrity": "sha512-PVhypqaA0t98zVDpOeTqWUTvRqCEjJubtfFUQ7zJNYdbYTbS/E/ytq6zbLVsN/dImvemtO/5JQgjLxsh8XLo8Q==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + } + }, + "@docusaurus/plugin-content-docs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.3.tgz", + "integrity": "sha512-N7Po2LSH6UejQhzTCsvuX5NOzlC+HiXOVvofnEPj0WhMu1etpLEXE6a4aTxrtg95lQ5kf0xUIdjX9sh3d3G76A==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + } + }, + "@docusaurus/plugin-content-pages": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.3.tgz", + "integrity": "sha512-txtDVz7y3zGk67q0HjG0gRttVPodkHqE0bpJ+7dOaTH40CQFLSh7+aBeGnPOTl+oCPG+hxkim4SndqPqXjQ8Bg==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" + } + }, + "@docusaurus/plugin-debug": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.3.tgz", + "integrity": "sha512-LkUbuq3zCmINlFb+gAd4ZvYr+bPAzMC0hwND4F7V9bZ852dCX8YoWyovVUBKq4er1XsOwSQaHmNGtObtn8Av8Q==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" + } + }, + "@docusaurus/plugin-google-analytics": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.3.tgz", + "integrity": "sha512-KzBV3k8lDkWOhg/oYGxlK5o9bOwX7KpPc/FTWoB+SfKhlHfhq7qcQdMi1elAaVEIop8tgK6gD1E58Q+XC6otSQ==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "tslib": "^2.4.0" + } + }, + "@docusaurus/plugin-google-gtag": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.3.tgz", + "integrity": "sha512-5FMg0rT7sDy4i9AGsvJC71MQrqQZwgLNdDetLEGDHLfSHLvJhQbTCUGbGXknUgWXQJckcV/AILYeJy+HhxeIFA==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "tslib": "^2.4.0" + } + }, + "@docusaurus/plugin-google-tag-manager": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.3.tgz", + "integrity": "sha512-1jTzp71yDGuQiX9Bi0pVp3alArV0LSnHXempvQTxwCGAEzUWWaBg4d8pocAlTpbP9aULQQqhgzrs8hgTRPOM0A==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "tslib": "^2.4.0" + } + }, + "@docusaurus/plugin-sitemap": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.3.tgz", + "integrity": "sha512-LRQYrK1oH1rNfr4YvWBmRzTL0LN9UAPxBbghgeFRBm5yloF6P+zv1tm2pe2hQTX/QP5bSKdnajCvfnScgKXMZQ==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" + } + }, + "@docusaurus/preset-classic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.3.tgz", + "integrity": "sha512-tRyMliepY11Ym6hB1rAFSNGwQDpmszvWYJvlK1E+md4SW8i6ylNHtpZjaYFff9Mdk3i/Pg8ItQq9P0daOJAvQw==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/plugin-content-blog": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/plugin-content-pages": "2.4.3", + "@docusaurus/plugin-debug": "2.4.3", + "@docusaurus/plugin-google-analytics": "2.4.3", + "@docusaurus/plugin-google-gtag": "2.4.3", + "@docusaurus/plugin-google-tag-manager": "2.4.3", + "@docusaurus/plugin-sitemap": "2.4.3", + "@docusaurus/theme-classic": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/theme-search-algolia": "2.4.3", + "@docusaurus/types": "2.4.3" + } + }, + "@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + }, + "@docusaurus/theme-classic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.3.tgz", + "integrity": "sha512-QKRAJPSGPfDY2yCiPMIVyr+MqwZCIV2lxNzqbyUW0YkrlmdzzP3WuQJPMGLCjWgQp/5c9kpWMvMxjhpZx1R32Q==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/plugin-content-blog": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/plugin-content-pages": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/theme-translations": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.43", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + } + }, + "@docusaurus/theme-common": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.3.tgz", + "integrity": "sha512-7KaDJBXKBVGXw5WOVt84FtN8czGWhM0lbyWEZXGp8AFfL6sZQfRTluFp4QriR97qwzSyOfQb+nzcDZZU4tezUw==", + "requires": { + "@docusaurus/mdx-loader": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/plugin-content-blog": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/plugin-content-pages": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-common": "2.4.3", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", + "utility-types": "^3.10.0" + } + }, + "@docusaurus/theme-mermaid": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-2.4.3.tgz", + "integrity": "sha512-S1tZ3xpowtFiTrpTKmvVbRHUYGOlEG5CnPzWlO4huJT1sAwLR+pD6f9DYUlPv2+9NezF3EfUrUyW9xLH0UP58w==", + "requires": { + "@docusaurus/core": "2.4.3", + "@docusaurus/module-type-aliases": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/types": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "@mdx-js/react": "^1.6.22", + "mermaid": "^9.2.2", + "tslib": "^2.4.0" + } + }, + "@docusaurus/theme-search-algolia": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.3.tgz", + "integrity": "sha512-jziq4f6YVUB5hZOB85ELATwnxBz/RmSLD3ksGQOLDPKVzat4pmI8tddNWtriPpxR04BNT+ZfpPUMFkNFetSW1Q==", + "requires": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.4.3", + "@docusaurus/logger": "2.4.3", + "@docusaurus/plugin-content-docs": "2.4.3", + "@docusaurus/theme-common": "2.4.3", + "@docusaurus/theme-translations": "2.4.3", + "@docusaurus/utils": "2.4.3", + "@docusaurus/utils-validation": "2.4.3", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^2.0.0", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + } + }, + "@docusaurus/theme-translations": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.3.tgz", + "integrity": "sha512-H4D+lbZbjbKNS/Zw1Lel64PioUAIT3cLYYJLUf3KkuO/oc9e0QCVhIYVtUI2SfBCF2NNdlyhBDQEEMygsCedIg==", + "requires": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + } + }, + "@docusaurus/types": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.3.tgz", + "integrity": "sha512-W6zNLGQqfrp/EoPD0bhb9n7OobP+RHpmvVzpA+Z/IuU3Q63njJM24hmT0GYboovWcDtFmnIJC9wcyx4RVPQscw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + }, + "@docusaurus/utils": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.3.tgz", + "integrity": "sha512-fKcXsjrD86Smxv8Pt0TBFqYieZZCPh4cbf9oszUq/AMhZn3ujwpKaVYZACPX8mmjtYx0JOgNx52CREBfiGQB4A==", + "requires": { + "@docusaurus/logger": "2.4.3", + "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + } + }, + "@docusaurus/utils-common": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.3.tgz", + "integrity": "sha512-/jascp4GbLQCPVmcGkPzEQjNaAk3ADVfMtudk49Ggb+131B1WDD6HqlSmDf8MxGdy7Dja2gc+StHf01kiWoTDQ==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.3.tgz", + "integrity": "sha512-G2+Vt3WR5E/9drAobP+hhZQMaswRwDlp6qOMi7o7ZypB+VO7N//DZWhZEwhcRGepMDJGQEwtPv7UxtYwPL9PBw==", + "requires": { + "@docusaurus/logger": "2.4.3", + "@docusaurus/utils": "2.4.3", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", + "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", + "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "requires": {} + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sinclair/typebox": { + "version": "0.24.46", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.46.tgz", + "integrity": "sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw==" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "requires": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz", + "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==", + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz", + "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==", + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz", + "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==", + "requires": {} + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz", + "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==", + "requires": {} + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz", + "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==", + "requires": {} + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz", + "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==", + "requires": {} + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz", + "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==", + "requires": {} + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz", + "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==", + "requires": {} + }, + "@svgr/babel-preset": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.4.0.tgz", + "integrity": "sha512-Ytuh7N282fv2Cy1JePf6HZ29/G5Hb8mQAjx4iykPjvfFl9NK6o5lZavmewgjOGT8kNPtwgvheuOQn4CifHRUhQ==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1", + "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1", + "@svgr/babel-plugin-transform-svg-component": "^6.3.1" + } + }, + "@svgr/core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.4.0.tgz", + "integrity": "sha512-wU9uyF6BUnwAqG7fDOowmDQzmbvovj1uq/iETfMK9xwQNaT+e7yN7SmDDcETXC72dnOrMcRuEWw0JEvpJha+yg==", + "requires": { + "@svgr/babel-preset": "^6.4.0", + "@svgr/plugin-jsx": "^6.4.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.4.0.tgz", + "integrity": "sha512-PjcU8jCneKXJnrREycsgfgQ/bzR1ogSKC5MBeUu2wmEoJIjzXX7X14DDktUjU9bkBy26yMDiVHn46Nl82P3WEg==", + "requires": { + "@babel/types": "^7.18.4", + "entities": "^4.3.0" + } + }, + "@svgr/plugin-jsx": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.4.0.tgz", + "integrity": "sha512-gu6E7v8qRAtCxbymI1et3G7athogvKvzsJkSWiHVZsuVZbyx5O2b7+DIkKvAGh2RvEzgSvfGf8QD1BaHal2vBw==", + "requires": { + "@babel/core": "^7.18.5", + "@svgr/babel-preset": "^6.4.0", + "@svgr/hast-util-to-babel-ast": "^6.4.0", + "svg-parser": "^2.0.4" + } + }, + "@svgr/plugin-svgo": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz", + "integrity": "sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==", + "requires": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + } + }, + "@svgr/webpack": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.4.0.tgz", + "integrity": "sha512-ejt2JdVX6k0XzUjVObMcTzTgsaCadEVCHBvOt3J0Vcp3eFirf0nqsjQCUD+ogFep25+ICDMZa1nLlotbXxKDXw==", + "requires": { + "@babel/core": "^7.18.5", + "@babel/plugin-transform-react-constant-elements": "^7.17.12", + "@babel/preset-env": "^7.18.2", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", + "@svgr/core": "^6.4.0", + "@svgr/plugin-jsx": "^6.4.0", + "@svgr/plugin-svgo": "^6.3.1" + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@tsconfig/docusaurus": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-2.0.1.tgz", + "integrity": "sha512-7JrI61bTZ37DWrHx1qhOW+kPxSG95+/q+EiDCMIahh8Aqbk03+nVu+Z6YGOj3O5e6lXHJuf/LHJ/lc6j8IEQyA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "@types/express": { + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", + "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.31", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", + "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/hast": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz", + "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==", + "requires": { + "@types/unist": "^2" + } + }, + "@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/katex": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.11.1.tgz", + "integrity": "sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==" + }, + "@types/lodash": { + "version": "4.14.189", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.189.tgz", + "integrity": "sha512-kb9/98N6X8gyME9Cf7YaqIMvYGnBSWqEci6tiettE6iJWH1XdJz/PO8LB0GtLCG7x8dU3KWhZT+lA1a35127tA==", + "dev": true + }, + "@types/mdast": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", + "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", + "requires": { + "@types/unist": "^2" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "@types/node": { + "version": "18.8.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.5.tgz", + "integrity": "sha512-Bq7G3AErwe5A/Zki5fdD3O6+0zDChhg671NfPjtIcbtzDNZTv4NPKMRFr7gtYPG7y+B8uTiNK4Ngd9T0FTar6Q==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-router": { + "version": "5.1.19", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", + "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "@types/react-router-config": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", + "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "@types/sax": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.5.tgz", + "integrity": "sha512-9jWta97bBVC027/MShr3gLab8gPhKy4l6qpb+UJLF5pDm3501NvA7uvqVCW+REFtx00oTi6Cq9JzLwgq6evVgw==", + "requires": { + "@types/node": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "requires": { + "@types/node": "*" + } + }, + "@types/unist": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" + }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + } + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + } + } + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} + }, + "algoliasearch": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "requires": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" + } + }, + "algoliasearch-helper": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz", + "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==", + "requires": { + "@algolia/events": "^4.0.1" + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "requires": { + "string-width": "^4.1.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" + } + }, + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "ci-info": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + } + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==" + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, + "core-js": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==" + }, + "core-js-compat": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-js-pure": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "requires": { + "layout-base": "^1.0.0" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==" + }, + "css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} + }, + "css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + } + }, + "css-minimizer-webpack-plugin": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.1.tgz", + "integrity": "sha512-ub12STsk3uXfHFTn9dtkI9nebvUKQ9rB0pn/6WNMRV77nqAOlOOJrrvsP8S8jngcnu+8ll3/9/xa7RCUNBVdOA==", + "requires": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "requires": {} + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssdb": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz", + "integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "requires": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-advanced": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", + "requires": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "cytoscape": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.26.0.tgz", + "integrity": "sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==", + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + } + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "requires": { + "cose-base": "^1.0.0" + } + }, + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "requires": { + "layout-base": "^2.0.0" + } + }, + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + } + } + }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre-d3-es": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", + "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "requires": { + "execa": "^5.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" + }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "requires": { + "robust-predicates": "^3.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "requires": { + "address": "^1.0.1", + "debug": "4" + } + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "docusaurus-plugin-sass": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.5.tgz", + "integrity": "sha512-Z+D0fLFUKcFpM+bqSUmqKIU+vO+YF1xoEQh5hoFreg2eMf722+siwXDD+sqtwU8E4MvVpuvsQfaHwODNlxJAEg==", + "dev": true, + "requires": { + "sass-loader": "^10.1.1" + } + }, + "docusaurus-tailwindcss": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/docusaurus-tailwindcss/-/docusaurus-tailwindcss-0.1.0.tgz", + "integrity": "sha512-Vz2bDMhRUwp4+iro+JlRM9kaOJ2Wjk3ZZYl1C9yydSx1iuTSgXS0beA1v/7cXyBV5VrIN5ZGwvRXev9IheWU7A==", + "requires": { + "autoprefixer": "10.3.4", + "postcss": "8.3.6", + "tailwindcss": "2.2.15" + }, + "dependencies": { + "autoprefixer": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.4.tgz", + "integrity": "sha512-EKjKDXOq7ug+jagLzmnoTRpTT0q1KVzEJqrJd0hCBa7FiG0WbFOBCcJCy2QkW1OckpO3qgttA1aWjVbeIPAecw==", + "requires": { + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001252", + "colorette": "^1.3.0", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", + "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "requires": { + "camelcase-css": "^2.0.1", + "postcss": "^8.1.6" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, + "tailwindcss": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.15.tgz", + "integrity": "sha512-WgV41xTMbnSoTNMNnJvShQZ+8GmY86DmXTrCgnsveNZJdlybfwCItV8kAqjYmU49YiFr+ofzmT1JlAKajBZboQ==", + "requires": { + "arg": "^5.0.1", + "bytes": "^3.0.0", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", + "detective": "^5.2.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.1", + "html-tags": "^3.1.0", + "is-color-stop": "^1.1.0", + "is-glob": "^4.0.1", + "lodash": "^4.17.21", + "lodash.topath": "^4.5.2", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.11.0", + "normalize-path": "^3.0.0", + "object-hash": "^2.2.0", + "postcss-js": "^3.0.3", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0", + "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", + "quick-lru": "^5.1.1", + "reduce-css-calc": "^2.1.8", + "resolve": "^1.20.0", + "tmp": "^0.2.1" + } + } + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + } + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.4.281", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.281.tgz", + "integrity": "sha512-yer0w5wCYdFoZytfmbNhwiGI/3cW06+RV7E23ln4490DVMxs7PvYpbsrSmAiBn/V6gode8wvJlST2YfWgvzWIg==" + }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "requires": { + "@types/node": "*", + "require-like": ">= 0.1.1" + } + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + } + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "requires": { + "punycode": "^1.3.2" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "requires": { + "fbjs": "^3.0.0" + } + }, + "fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "requires": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "requires": { + "xml-js": "^1.6.11" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "requires": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + } + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + } + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-text": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz", + "integrity": "sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ==", + "requires": { + "hast-util-is-element": "^1.0.0", + "repeat-string": "^1.0.0", + "unist-util-find-after": "^3.0.0" + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + } + } + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "idb-keyval": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.0.tgz", + "integrity": "sha512-uw+MIyQn2jl3+hroD7hF8J7PUviBU7BPKWw4f/ISf32D4LoGu98yHjrzWWJDASu9QNrX10tCJqk9YY0ClWm8Ng==", + "requires": { + "safari-14-idb-fix": "^3.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + }, + "image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "requires": { + "queue": "6.0.2" + } + }, + "immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" + }, + "import-sort-style-module": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/import-sort-style-module/-/import-sort-style-module-6.0.0.tgz", + "integrity": "sha512-Oxd256EVt6TAgawhIDuKnNHWumzHMHFWhVncBBvlHVnx69B4GP/Gu4Xo+gjxtqSEKEvam5ajUkNvnsXLDMDjKg==", + "dev": true + }, + "import-sort-style-react": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/import-sort-style-react/-/import-sort-style-react-5.1.0.tgz", + "integrity": "sha512-Huhy19WpJar6DjEZLbRz1K54qiOVW6ihYcK2tYaSIufUeZyak94TauIn/rXteAdcwDX4mLwyf6++bcT/Ok4E1g==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "infima": { + "version": "0.2.0-alpha.43", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", + "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + } + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + }, + "jest-util": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz", + "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==", + "requires": { + "@jest/types": "^29.1.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz", + "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==", + "requires": { + "@types/node": "*", + "jest-util": "^29.1.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.6.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", + "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "katex": { + "version": "0.13.24", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", + "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", + "requires": { + "commander": "^8.0.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + } + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "mermaid": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", + "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", + "requires": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "dagre-d3-es": "7.0.9", + "dayjs": "^1.11.7", + "dompurify": "2.4.3", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "my-loaders": { + "version": "file:plugins/my-loaders" + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, + "postcss": { + "version": "8.4.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", + "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-properties": { + "version": "12.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz", + "integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} + }, + "postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dev": true, + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "requires": {} + }, + "postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "dev": true, + "requires": {} + }, + "postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-import": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", + "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "requires": {} + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dev": true, + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-loader": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.7" + } + }, + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "requires": {} + }, + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "requires": {} + }, + "postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "dev": true + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "requires": {} + }, + "postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dev": true, + "requires": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "requires": {} + }, + "postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-sort-media-queries": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "requires": { + "sort-css-media-queries": "2.1.0" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "requires": {} + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==" + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + }, + "prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "requires": {} + }, + "prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "purgecss": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", + "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", + "requires": { + "commander": "^8.0.0", + "glob": "^7.1.7", + "postcss": "^8.3.5", + "postcss-selector-parser": "^6.0.6" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + } + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + } + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "requires": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "requires": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "requires": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + } + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-loadable": { + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + }, + "react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "requires": { + "@babel/runtime": "^7.10.3" + } + }, + "react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "requires": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "requires": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "requires": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "requires": { + "resolve": "^1.1.6" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "requires": { + "rc": "1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + } + } + }, + "rehype-katex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-5.0.0.tgz", + "integrity": "sha512-ksSuEKCql/IiIadOHiKRMjypva9BLhuwQNascMqaoGLDVd0k2NlE2wMvgZ3rpItzRKCd6vs8s7MFbb8pcR0AEg==", + "requires": { + "@types/katex": "^0.11.0", + "hast-util-to-text": "^2.0.0", + "katex": "^0.13.0", + "rehype-parse": "^7.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "rehype-parse": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-7.0.1.tgz", + "integrity": "sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==", + "requires": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "requires": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + }, + "remark-math": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-3.0.1.tgz", + "integrity": "sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q==" + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "requires": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "rxjs": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safari-14-idb-fix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-3.0.0.tgz", + "integrity": "sha512-eBNFLob4PMq8JA1dGyFn6G97q3/WzNtFK4RnzT1fnLq+9RyrGknzYiM/9B12MnKAxuj1IXr7UKYtTNtjyKMBog==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.3.1.tgz", + "integrity": "sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "search-insights": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.8.3.tgz", + "integrity": "sha512-W9rZfQ9XEfF0O6ntgQOTI7Txc8nkZrO4eJ/pTHK0Br6wWND2sPGPoWg+yGhdIW7wMbLqk8dc23IyEtLlNGpeNw==", + "peer": true + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "requires": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "sha256-uint8array": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.3.tgz", + "integrity": "sha512-SFTs87RfXVulKrhhP6B5/qcFruOKQZaKf6jY9V4PJ7NOG0qIlQP6XL4pQq5xagsuP/Wd55S7tUBJpRajEsDUEQ==" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "requires": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "dependencies": { + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "std-env": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.2.1.tgz", + "integrity": "sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "tailwindcss": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", + "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + }, + "terser": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + } + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" + }, + "ua-parser-js": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==" + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "unist-util-find-after": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz", + "integrity": "sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + }, + "unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "requires": {} + }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} + }, + "use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "requires": { + "use-isomorphic-layout-effect": "^1.1.1" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "requires": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + } + }, + "wasmi": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wasmi/-/wasmi-0.0.2.tgz", + "integrity": "sha512-dxEnLNp7M7ilX8Q8KJkvAadawhb6jxWQPcjR2ljd+nY0lYTutUuKvVMWEOChtTeOr32MunPjhwXLfPh/hoUjlg==" + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", + "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==", + "requires": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + }, + "webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "requires": { + "string-width": "^5.0.1" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "requires": { + "sax": "^1.2.4" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "zustand": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.4.tgz", + "integrity": "sha512-k2jVOlWo8p4R83mQ+/uyB8ILPO2PCJOf+QVjcL+1PbMCk1w5OoPYpAIxy9zd93FSfmJqoH6lGdwzzjwqJIRU5A==", + "requires": { + "use-sync-external-store": "1.2.0" + } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..462831a --- /dev/null +++ b/docs/package.json @@ -0,0 +1,70 @@ +{ + "name": "docs", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "prettify": "prettier --write './**/*.{js,jsx,ts,tsx,scss,md,json}' --config ./.prettierrc" + }, + "dependencies": { + "@composable-finance/cosmwasm-vm": "^0.0.6", + "@docusaurus/core": "2.4.3", + "@docusaurus/preset-classic": "2.4.3", + "@docusaurus/theme-mermaid": "^2.4.3", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "docusaurus-tailwindcss": "^0.1.0", + "hast-util-is-element": "^1.1.0", + "idb-keyval": "^6.2.0", + "lodash": "^4.17.21", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "rehype-katex": "^5.0.0", + "remark-math": "^3.0.1", + "rfdc": "^1.3.0", + "sha256-uint8array": "^0.10.3", + "zustand": "^4.1.4" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.3", + "@tsconfig/docusaurus": "2.0.1", + "@types/lodash": "^4.14.189", + "autoprefixer": "^10.4.13", + "docusaurus-plugin-sass": "0.2.5", + "import-sort-style-module": "^6.0.0", + "import-sort-style-react": "^5.1.0", + "my-loaders": "file:plugins/my-loaders", + "postcss": "^8.4.19", + "postcss-import": "^15.0.0", + "postcss-loader": "^7.0.1", + "postcss-preset-env": "^7.8.3", + "prettier": "^2.7.1", + "sass": "^1.56.1", + "tailwindcss": "npm:@tailwindcss/postcss7-compat", + "typescript": "^4.8.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "engines": { + "node": ">=18.14" + } +} diff --git a/docs/plugins/my-loaders/index.js b/docs/plugins/my-loaders/index.js new file mode 100644 index 0000000..893190a --- /dev/null +++ b/docs/plugins/my-loaders/index.js @@ -0,0 +1,19 @@ +// from https://github.com/facebook/docusaurus/issues/2961#issuecomment-735355912 +module.exports = function (context, options) { + return { + name: 'postcss-tailwindcss-loader', + configurePostCss(postcssOptions) { + postcssOptions.plugins.push( + require('postcss-import'), + require('tailwindcss'), + require('postcss-preset-env')({ + autoprefixer: { + flexbox: 'no-2009', + }, + stage: 4, + }) + ); + return postcssOptions; + }, + }; +}; diff --git a/docs/sidebars.js b/docs/sidebars.js new file mode 100644 index 0000000..117824c --- /dev/null +++ b/docs/sidebars.js @@ -0,0 +1,220 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + + const isProd = process.env.NODE_ENV === "production"; + + // @ts-check + + /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ + const sidebars = { + // By default, Docusaurus generates a sidebar from the docs folder structure + // tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + + // But you can create a sidebar manually + internalSidebar: [{ type: "autogenerated", dirName: "internal" }], + user_guides: [ + { + type: "category", + label: "User Guides", + link: { + type: "generated-index", + slug: "user-guides", + }, + collapsible: false, + items: [ + { + type: "category", + label: "Accounts and Wallets", + link: { + type: "generated-index", + slug: "accounts-wallets", + }, + collapsible: true, + items: [ + "user-guides/polkadotjs-extension-create-account", + "user-guides/talisman-create-account", + "user-guides/keplr-guide", + "user-guides/layr-guide", + ], + }, + { + type: "category", + label: "Solana Restaking", + link: { + type: "generated-index", + slug: "solana-restaking", + }, + collapsible: true, + items: [ + "user-guides/restaking-sol", + "user-guides/team-competition", + ], + }, + { + type: "category", + label: "Transactions and Trading", + link: { + type: "generated-index", + slug: "transactions-and-trading", + }, + collapsible: true, + items: [ + "user-guides/pica-staking", + "user-guides/how-to-provide-liquidity", + "user-guides/how-to-trade-pica-on-pablo", + "user-guides/dot-lp-guide", + "user-guides/trustless-transfers", + ], + }, + "user-guides/picasso-governance", + ], + }, + { + type: "category", + label: "Developer Guides", + link: { + type: "generated-index", + slug: "developer-guides", + }, + collapsible: false, + items: [ + "develop/composable-cosmos", + "develop/solana-avs-testnet", + "develop/local-picasso-guide", + "develop/oracle-set-up-guide", + "develop/collator-guide", + "develop/nix", + "develop/codespaces", + + ], + }, + ], + ibc: [ + { + type: "category", + label: "Inter-Blockchain Communication Protocol (IBC)", + link: { + type: "doc", + id: "technology/ibc", + }, + collapsible: false, + collapsed: false, + items: [ + "technology/ibc/ethereum", + "technology/ibc/solana", + "technology/ibc/polkadot", + "technology/ibc/polkadot-kusama", + "technology/ibc/near", + "technology/ibc/hyperspace-relayer", + "technology/ibc/light-clients", + "technology/ibc/merkle-mountain-ranges", + "technology/ibc/beefy-light-client", + ], + }, + +], + +concepts: [ + + "concepts/picasso", + "concepts/ibc", + "concepts/restaking", + "concepts/definitions", + + +], + +token: [ + + "governance-&-token/use-cases", + "governance-&-token/tokenomics", + "governance-&-token/governance", + "governance-&-token/opengov", + "governance-&-token/token-transparency", + +], + +restaking: [ +{ + type: "category", + label: "Generalized Restaking", + link: { + type: "doc", + id: "technology/restaking", + }, + collapsible: false, + collapsed: false, + items: [ + "technology/restaking/architecture", + "technology/restaking/governance", + "technology/restaking/use-cases", + "technology/restaking/sol-ibc-avs", + "technology/restaking/vaults", + "technology/restaking/mantis-games", + "technology/restaking/roadmap" + ], +}, + +], + +mantis: [ + { + type: "doc", + id: "technology/mantis", + }, + "technology/mantis/benefits-use-cases", + "technology/mantis/protocol-architecture", + "technology/mantis/protocol-flow", + "technology/mantis/solvers-solutions", + "technology/mantis/solver-integration", + "technology/mantis/solver-guide", + "technology/mantis/integration-guide", + "technology/mantis/tools", + "technology/mantis/tokenomics", + { + type: "category", + label: "CVM", + link: { + type: "doc", + id: "technology/cvm", + }, + collapsible: true, + collapsed: true, + items: [ + "technology/cvm/tutorial", + ], +}, + +], + + }; + + // if (!isProd) { + // sidebars.tutorialSidebar.unshift({ + // type: 'category', + // label: 'test-SCDI', + // link: { + // type: 'doc', + // id: 'testSCDI/entry', + // }, + // collapsible: true, + // collapsed: true, + // items: [ + // { + // type: 'link', + // label: 'test-SCDI', + // href: '/test-vm', + // }, + // ], + // }); + // } + + module.exports = sidebars; \ No newline at end of file diff --git a/docs/src/components/HomepageFeatures/index.js b/docs/src/components/HomepageFeatures/index.js new file mode 100644 index 0000000..11767b2 --- /dev/null +++ b/docs/src/components/HomepageFeatures/index.js @@ -0,0 +1,64 @@ +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; + +const FeatureList = [ + { + title: 'Easy to Use', + Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, + description: ( + <> + Docusaurus was designed from the ground up to be easily installed and used to get your website up and running + quickly. + + ), + }, + { + title: 'Focus on What Matters', + Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, + description: ( + <> + Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the{' '} + docs directory. + + ), + }, + { + title: 'Powered by React', + Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, + description: ( + <> + Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same + header and footer. + + ), + }, +]; + +function Feature({ Svg, title, description }) { + return ( +
+
+ +
+
+

{title}

+

{description}

+
+
+ ); +} + +export default function HomepageFeatures() { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/docs/src/components/HomepageFeatures/styles.module.css b/docs/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 0000000..b248eb2 --- /dev/null +++ b/docs/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,11 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} diff --git a/docs/src/components/vm/ResetButton.tsx b/docs/src/components/vm/ResetButton.tsx new file mode 100644 index 0000000..379a6ac --- /dev/null +++ b/docs/src/components/vm/ResetButton.tsx @@ -0,0 +1,12 @@ +import { vmStoreMethods } from '../../utils/cosmwasm-vm/store/storeMethods'; +import React from 'react'; + +export const ResetButton = () => { + return ( + + ); +}; diff --git a/docs/src/components/vm/VmExecute.tsx b/docs/src/components/vm/VmExecute.tsx new file mode 100644 index 0000000..abfad90 --- /dev/null +++ b/docs/src/components/vm/VmExecute.tsx @@ -0,0 +1,74 @@ +import { StorageId } from '@site/src/utils/cosmwasm-vm/store/state'; +import { VMHostShared } from '../../utils/cosmwasm-vm/vm/types'; +import React, { useCallback, useState } from 'react'; +import { vmMethods } from '../../utils/cosmwasm-vm/vm/vmMethods'; +import { vmStoreMethods } from '../../utils/cosmwasm-vm/store/storeMethods'; +import { RawContractEvent } from '../../utils/cosmwasm-vm/types'; + +const clone = require('rfdc')(); + +interface VmExecuteProps { + vmShared: VMHostShared; + + readonly storageId: StorageId; + + // params are keys, default values for input are values + readonly inputParams: Record; + readonly placeholders?: Partial>; + + readonly createExecuteMessage: (input: Record) => Object; // returns the execute params passed to execute an instantiation +} + +// TODO : make this headless +// 1. Execute the contract in the way specified with a limit of how many times it can be executed +export function VmExecute({ storageId, vmShared, inputParams, placeholders, createExecuteMessage }: VmExecuteProps) { + const [state, setState] = useState>(() => ({ ...inputParams })); + // console.log('vmExecute >>> ', vmShared, inputParams, placeholders); + + // TODO : update to work when multiple contracts are instantiated + const executeMessage = useCallback( + (input: Record) => { + const codeHash = vmShared.codes.get(0)!; + const msg = createExecuteMessage(input); + const clonedVmShared = clone(vmShared); + const res = vmMethods.execute(codeHash, msg, clonedVmShared, { + codeId: 0, + senderAddress: 0, + contractAddress: 10000, + }); + if ('Ok' in res) { + console.log(clonedVmShared); + vmStoreMethods.vmStateUpdate(storageId, clonedVmShared, res.Ok.events as RawContractEvent[]); + } + console.log(res); + }, + [vmShared, createExecuteMessage] + ); + + return ( +
+
    + {Object.keys(inputParams).map(key => { + return ( +
  • + + { + e.preventDefault(); + setState(prevState => ({ ...prevState, [key]: (e.target as HTMLInputElement)?.value })); + }} + value={state[key]} + type={'text'} + id={key} + placeholder={placeholders?.[key]} + /> +
  • + ); + })} +
+ +
+ ); +} diff --git a/docs/src/components/vm/helpers.ts b/docs/src/components/vm/helpers.ts new file mode 100644 index 0000000..6642b4d --- /dev/null +++ b/docs/src/components/vm/helpers.ts @@ -0,0 +1,31 @@ +// TODO : update to make other values editable +import { Env } from '@composable-finance/cosmwasm-vm'; +import { VMHostShared } from '../../utils/cosmwasm-vm/vm/types'; + +export const getVmEnv = (accountId: string): Env => { + return { + block: { + height: 0, + time: '0', + chain_id: 'cosmwasm-vm', + }, + transaction: { + index: 0, + }, + contract: { + address: accountId.toString(), + }, + }; +}; + +export const getDefaultVmMessageOptions = () => ({ + messageInfo: { + sender: '0', + funds: [], + }, + contractMeta: { + code_id: 0, + admin: null, + label: '', + }, +}); diff --git a/docs/src/components/vm/wrappers/VmDisplayStorageWrapper.tsx b/docs/src/components/vm/wrappers/VmDisplayStorageWrapper.tsx new file mode 100644 index 0000000..74bba8f --- /dev/null +++ b/docs/src/components/vm/wrappers/VmDisplayStorageWrapper.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { useMemo, useState } from 'react'; +import { unhexifyKeys } from '../../../utils/cosmwasm-vm/parsers'; +import { VmWrapper } from './VmWrapper'; + +interface VmDisplayStorageWrapperProps { + readonly children: (data: Record | null) => JSX.Element; + readonly storageId: string; +} +export const VmDisplayStorageWrapper = ({ storageId, children }: VmDisplayStorageWrapperProps) => { + return ( + + {vmShared => { + const ret = useMemo(() => { + if (!vmShared) return null; + const storage = vmShared.storage.get('10000'); + if (!storage) return null; + return unhexifyKeys(Object.fromEntries(storage.entries())); + }, [vmShared]); + + return children(ret); + }} + + ); +}; diff --git a/docs/src/components/vm/wrappers/VmWrapper.tsx b/docs/src/components/vm/wrappers/VmWrapper.tsx new file mode 100644 index 0000000..53a6ce2 --- /dev/null +++ b/docs/src/components/vm/wrappers/VmWrapper.tsx @@ -0,0 +1,26 @@ +import { useVmContext, VmContextInit } from './useVmContext'; +import { VMHostShared } from '../../../utils/cosmwasm-vm/vm/types'; +import { vmMethods } from '../../../utils/cosmwasm-vm/vm/vmMethods'; + +// TODO : update the storageId to different value if contract code or contractUrl is changed +// premise is that only a single contract is uploaded with a single instantiation(for the time being) +// since the instantiation part and execution part is decoupled, should not be too difficult to extend to do other stuff ie) IBC-ready instantiation with multiple contracts and instances +// no fallback is provided since fallback / loading state should be handled by the children components themselves +type VmWrapperProps = { + // add relevant props to pass to children + readonly children: (vmShared: VMHostShared | null) => JSX.Element; +} & VmContextInit; + +if (typeof window !== 'undefined') { + vmMethods.safeSingleRunVmSetup(); +} + +// This wrapper component will do the following +// 1. Initialize the VM with the storageId(if not already initialized) +// 2. Load the contract from the URL provided +// 3. instantiate the contract with the provided params & message +export function VmWrapper({ storageId, initOptions, children }: VmWrapperProps): JSX.Element { + const vmShared = useVmContext({ storageId, initOptions }); + + return children(vmShared); +} diff --git a/docs/src/components/vm/wrappers/useVmContext.tsx b/docs/src/components/vm/wrappers/useVmContext.tsx new file mode 100644 index 0000000..b0905c3 --- /dev/null +++ b/docs/src/components/vm/wrappers/useVmContext.tsx @@ -0,0 +1,69 @@ +import { StorageId, useVmStore, vmStore } from '../../../utils/cosmwasm-vm/store/state'; +import { Result, VMStep } from '@composable-finance/cosmwasm-vm'; +import { getInitVmHostShared, VMHostShared } from '../../../utils/cosmwasm-vm/vm/types'; +import { useEffect, useLayoutEffect, useMemo, useState } from 'react'; +import { loadRemoteContract } from '../../../utils/cosmwasm-vm/code/utils'; +import { vmStoreMethods } from '../../../utils/cosmwasm-vm/store/storeMethods'; +import { vmMethods } from '../../../utils/cosmwasm-vm/vm/vmMethods'; +import { RawContractEvent } from '../../../utils/cosmwasm-vm/types'; + +export interface VmContextInit { + readonly storageId: StorageId; + + // if initOptions is not provided, it waits until the sharedVm is populated at the storageId + readonly initOptions?: { + readonly contractUrl: string; + readonly instantiateObj: Object; + }; +} + +export const useVmContext = ({ storageId, initOptions }: VmContextInit): VMHostShared | null => { + const vmShared = useVmStore(state => state.vmStates[storageId]); + + useEffect(() => { + if (!initOptions) return; + fetchContract(storageId, initOptions.contractUrl).then(() => { + getVmShared(storageId, initOptions.instantiateObj); + }); + }, []); + + return vmShared?.state; +}; + +// TODO : currently uploads only one code to address 0, update to process array of codeIds +// maybe extract code upload logic out to separate function +const getVmShared = (storageId: StorageId, instantiateObj?: Object) => { + const codeHash = vmStore.getState().codeHashMap[storageId]; + if (!codeHash) { + console.log('code hash should be loaded by here'); + return; + } + + const storedVmShared = vmStore.getState().vmStates[storageId]; + if (storedVmShared) return; + + const vmShared = getInitVmHostShared(); + const codeId = 0; + vmShared.codes.set(codeId, codeHash); + let res: Result; + if (instantiateObj) { + res = vmMethods.instantiate(codeHash, instantiateObj, vmShared, { senderAddress: 0, codeId }); + if ('Ok' in res) { + vmStoreMethods.vmStateUpdate(storageId, vmShared, res.Ok.events as RawContractEvent[]); + } else { + // TODO : handle error + console.error('instantiate error', res.Err); + } + } +}; + +const fetchContract = async (storageId: StorageId, contractUrl: string): Promise => { + let codeHash: string; + codeHash = vmStore.getState().codeHashMap[storageId]; + if (codeHash) return; + + console.log('fetch contract'); + codeHash = await loadRemoteContract(contractUrl); + if (codeHash === '') return; + vmStoreMethods.codeUpload(storageId, codeHash); +}; diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 0000000..e5632aa --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,156 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* EkMukta Font */ +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-ExtraLight.ttf') format('truetype'); + font-weight: 200; /* normal */ + font-style: normal; +} + +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-Light.ttf') format('truetype'); + font-weight: 300; /* normal */ + font-style: normal; +} + +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-Regular.ttf') format('truetype'); + font-weight: 400; /* normal */ + font-style: normal; +} + +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-SemiBold.ttf') format('truetype'); + font-weight: 600; + font-style: normal; +} + +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-Bold.ttf') format('truetype'); + font-weight: 700; /* bold */ + font-style: normal; +} + +@font-face { + font-family: "EkMukta"; + src: url('/fonts/EkMukta-ExtraBold.ttf') format('truetype'); + font-weight: 800; + font-style: normal; +} + + +/* CitaPro Font */ +@font-face { + font-family: "CitaPro"; + src: url('/fonts/CitaPro-Regular.otf') format('truetype'); + font-weight: 400; /* normal */ + font-style: normal; +} + +/* source for mapping numbers to files: https://qr.ae/pGVP9G */ + +h1, h2, h3, h4 { + margin-bottom: 4px !important; +} + +p { + margin-bottom: 16px !important; +} + +.markdown a { + text-decoration: underline; +} + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #5C57A2; + --ifm-color-primary-dark: #534e92; + --ifm-color-primary-darker: #4e4a8a; + --ifm-color-primary-darkest: #403d71; + --ifm-color-primary-light: #6a65ad; + --ifm-color-primary-lighter: #726db1; + --ifm-color-primary-lightest: #8a86be; + --ifm-code-font-size: 95%; + + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --ifm-heading-font-family:"EkMukta", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + --ifm-heading-font-weight: 700; +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #726db1; + --ifm-color-primary-dark: #605aa7; + --ifm-color-primary-darker: #5a559e; + --ifm-color-primary-darkest: #4a4682; + --ifm-color-primary-light: #8480bb; + --ifm-color-primary-lighter: #8d89c0; + --ifm-color-primary-lightest: #a8a5cf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} + +/* Cards */ +.card { + margin: 2em 0em; + border: 0; + border-radius: 0; +} + +a .card { + color: var(--near-font-color); +} + +a:hover { + text-decoration: none; +} + +.card:hover { + -webkit-transform: translateY(-0.5em); + -moz-transform: translateY(-0.5em); + -o-transform: translateY(-0.5em); + -ms-transform: translateY(-0.5em); + transform: translateY(-0.5em); +} + +.card__image { + overflow: hidden; + border: 0; + max-height: 215px; +} + +.card__image img { + min-width: 100%; +} + +.card__body h3 { + margin: 0em 0 0.3em 0 !important; + color: var(--ifm-font-color-base); +} + +.card__body { + color: var(--ifm-font-color-base); +} + +.into-cards { + zoom: 90%; +} + +.intro_image { + zoom: 55%; +} \ No newline at end of file diff --git a/docs/src/pages/markdown-page.md b/docs/src/pages/markdown-page.md new file mode 100644 index 0000000..9756c5b --- /dev/null +++ b/docs/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/docs/src/pages/test-vm.tsx b/docs/src/pages/test-vm.tsx new file mode 100644 index 0000000..0e9b53e --- /dev/null +++ b/docs/src/pages/test-vm.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import BrowserOnly from '@docusaurus/BrowserOnly'; +export default function TestVM() { + return ( + +
+

+ Edit src/pages/test-vm/index.tsx and save to reload. +

+
+ + {() => { + const vmMethods = require('@site/src/utils/cosmwasm-vm/vm/vmMethods').vmMethods; + vmMethods.safeSingleRunVmSetup(); + return <>; + }} + +
+ ); +} diff --git a/docs/src/types/helpers.d.ts b/docs/src/types/helpers.d.ts new file mode 100644 index 0000000..1999ff1 --- /dev/null +++ b/docs/src/types/helpers.d.ts @@ -0,0 +1,12 @@ +// copy paste from https://fettblog.eu/typescript-better-object-keys/ +type ObjectKeys = T extends object + ? (keyof T)[] + : T extends number + ? [] + : T extends Array | string + ? string[] + : never; + +interface ObjectConstructor { + keys(o: T): ObjectKeys; +} diff --git a/docs/src/utils/cosmwasm-vm/README.md b/docs/src/utils/cosmwasm-vm/README.md new file mode 100644 index 0000000..4357e15 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/README.md @@ -0,0 +1,20 @@ +# How to use the VM + +## Components + +### VMInput + +--------- +Component that has all the initialization related code as props. +Has its own ID which will be referenced by other components displaying the vm state. + +### SingleValue + +--------- +Component that displays anything from the VmState. Typically returns a single value wrapped in a component. +Headless by default. + + +## Misc + +- imports are relative due to spending too much time trying to make tsconfig import properly while keeping the docusaurus weird `@site` import work \ No newline at end of file diff --git a/docs/src/utils/cosmwasm-vm/code/memoryStore.ts b/docs/src/utils/cosmwasm-vm/code/memoryStore.ts new file mode 100644 index 0000000..d57f155 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/code/memoryStore.ts @@ -0,0 +1,51 @@ +// this exists so that you don't have to await fetching contract code from idb +// has the exact same contents as the persistentStore +/* eslint-disable no-param-reassign */ // -> because this is state definitions + +import { devtools } from 'zustand/middleware'; +import createVanilla from 'zustand/vanilla'; + +export type CodeKeyValue = { + [key: UUID]: Uint8Array; +}; + +interface CodeState { + state: CodeKeyValue; + getKeys: () => UUID[]; + getAllCodes: () => CodeKeyValue; + getCode: (id: UUID) => Uint8Array | undefined; + setCode: (id: UUID, code: Uint8Array) => void; + delCode: (id: UUID) => void; +} + +const store = createVanilla()( + devtools((set, get) => ({ + state: {} as CodeKeyValue, + getKeys: (): UUID[] => Object.keys(get().state) as UUID[], + getAllCodes: (): CodeKeyValue => { + return get().state; + }, + delCode: (id: UUID): void => { + set(state => { + delete state.state[id]; + return state; + }); + }, + getCode: (id: UUID): Uint8Array => get().state[id], + setCode: (id: UUID, code: Uint8Array): void => { + set(storeState => { + storeState.state[id] = code; + return storeState; + }); + }, + })) +); + +export const memoryStore = { + getKeys: (): UUID[] => store.getState().getKeys(), + delCode: (id: UUID): void => store.getState().delCode(id), + getAllCodes: (): CodeKeyValue => store.getState().getAllCodes(), + getCode: (id: UUID): Uint8Array | undefined => store.getState().getCode(id), + setCode: (id: UUID, code: Uint8Array): void => store.getState().setCode(id, code), + clearCodes: (): void => store.setState({ state: {} }), +}; diff --git a/docs/src/utils/cosmwasm-vm/code/methods.ts b/docs/src/utils/cosmwasm-vm/code/methods.ts new file mode 100644 index 0000000..e481ac4 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/code/methods.ts @@ -0,0 +1,50 @@ +import { CodeKeyValue, memoryStore } from './memoryStore'; +import { persistentStore } from './persistentStore'; +import { UUID } from '../vm/types'; + +// TODO : currently codeStore never discards any contracts, implement if needed +// This was created purely so that code can be stored in IDB instead of local Storage +// While keeping the code in memory so that code can be retrieved synchronously without being stored inside the VM +export const codeStore = { + setCode: async (id: UUID, code: Uint8Array): Promise => { + try { + const res = await persistentStore.setCode(id, code); + if (res) memoryStore.setCode(id, code); + return res; + } catch (e) { + console.error(e); + throw new Error('failed to set code'); + } + }, + getCode: (id: UUID): Uint8Array => { + const code = memoryStore.getCode(id); + if (code) return code; + console.log(memoryStore.getAllCodes()); + throw new Error(`code not found - ${id}`); + }, + getAllCodes: (): CodeKeyValue => { + return memoryStore.getAllCodes(); + }, + getKeys: async (): Promise => { + const keys = memoryStore.getKeys(); + if (keys.length) return keys; + return persistentStore.getKeys(); + }, + deleteCode: async (id: UUID): Promise => { + try { + await persistentStore.delCode(id); + memoryStore.delCode(id); + } catch (e) { + console.error(e); + throw new Error('failed to delete code'); + } + }, + clearCodes: async (): Promise => { + memoryStore.clearCodes(); + persistentStore.clearCodes().then(); + }, + loadPersistentToMemory: async (): Promise => { + const codes = await persistentStore.getAllCodes(); + codes.forEach(([id, code]) => memoryStore.setCode(id, code)); + }, +}; diff --git a/docs/src/utils/cosmwasm-vm/code/persistentStore.ts b/docs/src/utils/cosmwasm-vm/code/persistentStore.ts new file mode 100644 index 0000000..7cd7635 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/code/persistentStore.ts @@ -0,0 +1,63 @@ +import { + UseStore, + createStore, + clear as idbClear, + del as idbDel, + entries as idbEntries, + get as idbGet, + keys as idbKeys, + set as idbSet, +} from 'idb-keyval'; + +import { UUID } from '../vm/types'; + +// the shit you have to do because SSR +let hashStore: UseStore; +const getHashStore = (): UseStore | undefined => { + if (typeof window === 'undefined') return undefined; + if (!hashStore) hashStore = createStore('hashCode', 'hashCode'); + return hashStore; +}; + +const persistentStore = { + getKeys: async (): Promise => { + try { + const keys = await idbKeys(getHashStore()); + return keys as string[]; + } catch (e) { + console.error(e); + throw new Error('failed to fetch keys'); + } + }, + setCode: async (id: UUID, code: Uint8Array): Promise => { + try { + const search = await idbGet(id, getHashStore()); + if (search) return false; + await idbSet(id, code, getHashStore()); + return true; + } catch (e) { + console.error(e); + throw new Error('failed to set code in idb'); + } + }, + delCode: async (id: UUID): Promise => { + try { + await idbDel(id, getHashStore()); + } catch (e) { + console.error(e); + throw new Error('failed to remove code from idb'); + } + }, + getCode: async (id: UUID): Promise => { + const code = await idbGet(id, getHashStore()); + return code; + }, + getAllCodes: async (): Promise<[string, Uint8Array][]> => { + return idbEntries(getHashStore()); + }, + clearCodes: async (): Promise => { + await idbClear(getHashStore()); + }, +}; + +export { persistentStore }; diff --git a/docs/src/utils/cosmwasm-vm/code/utils.ts b/docs/src/utils/cosmwasm-vm/code/utils.ts new file mode 100644 index 0000000..9c79d97 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/code/utils.ts @@ -0,0 +1,26 @@ +import { createHash } from 'sha256-uint8array'; +import { codeStore } from './methods'; + +export const sha256 = (input: Uint8Array) => { + return createHash().update(input).digest('hex'); +}; + +export const loadRemoteContract = async (url: string): Promise => { + let response = await fetch(url); + try { + if (response.status !== 200) throw new Error(`response status was ${response.status}`); + if (!response) throw new Error(`Couldn't read file in - ${url}`); + } catch (ex) { + console.error(ex); + return ''; + } + const code = new Uint8Array(await response.arrayBuffer()); + const id = sha256(code); + try { + await codeStore.setCode(id, code); + } catch (ex) { + console.error(ex); + return ''; + } + return id; +}; diff --git a/docs/src/utils/cosmwasm-vm/parsers.ts b/docs/src/utils/cosmwasm-vm/parsers.ts new file mode 100644 index 0000000..d6cdaaa --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/parsers.ts @@ -0,0 +1,54 @@ +import { RawContractEvent, ContractEvent } from './types'; +import deburr from 'lodash/deburr'; + +export function hexToString(hex: string): string { + let str = ''; + for (let n = 0; n < hex.length; n += 2) { + const int = parseInt(hex.substr(n, 2), 16); + // to prevent \u0001 & \u0007 appearing in front + if (int !== 0 && int !== 7) str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); + } + console.log(hex, str); + return str; +} + +/* eslint-disable no-param-reassign */ +export const unhexifyKeys = (data: Record): Record => { + Object.keys(data).forEach((key: string) => { + data[hexToString(key)] = data[key]; + delete data[key]; + }); + return data; +}; +export function jsonReplacer(key: string, value: any) { + if (value instanceof Map) { + return { + dataType: 'Map', + value: Array.from(value.entries()), // or with spread: value: [...value] + }; + } + return value; +} + +export function jsonReviver(key: string, value: any) { + if (typeof value === 'object' && value !== null) { + if (value.dataType === 'Map') { + return new Map(value.value); + } + } + return value; +} + +export function getRefinedEvents(events: RawContractEvent[]): ContractEvent[] { + const refinedEvents: ContractEvent[] = events.map(event => { + const ret: ContractEvent = { + type: event.type, + attributes: {}, + }; + event.attributes.forEach(attr => { + ret.attributes[attr.key] = attr.value; + }); + return ret; + }); + return refinedEvents; +} diff --git a/docs/src/utils/cosmwasm-vm/store/state.ts b/docs/src/utils/cosmwasm-vm/store/state.ts new file mode 100644 index 0000000..b3c944d --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/store/state.ts @@ -0,0 +1,67 @@ +import { VMHostShared } from '@site/src/utils/cosmwasm-vm/vm/types'; +import { ContractEvent, RawContractEvent } from '@site/src/utils/cosmwasm-vm/types'; +import createVanilla from 'zustand/vanilla'; +import { devtools, persist, subscribeWithSelector } from 'zustand/middleware'; +import { immer } from 'zustand/middleware/immer'; +import create from 'zustand'; +import { persistentStore } from '../code/persistentStore'; +import { memoryStore } from '../code/memoryStore'; +import { jsonReplacer, jsonReviver } from '../parsers'; + +export type StorageId = string; +interface GlobalState { + vmStates: Record; + codeHashMap: Record; + hydrated: boolean; +} + +export interface VmState { + state: VMHostShared; + events: RawContractEvent[]; +} + +export const getInitialState = (hydrated: boolean = false): GlobalState => { + return { + vmStates: {}, + codeHashMap: {}, + hydrated, + }; +}; + +export const vmStore = createVanilla()( + devtools( + persist(subscribeWithSelector(immer((set, get) => getInitialState())), { + name: 'cosmwasm-vm', // unique name + getStorage: () => localStorage, // (optional) by default, 'localStorage' is used + serialize: state => { + state.state.hydrated = false; + return JSON.stringify(state, jsonReplacer); + }, + deserialize: (str: string) => JSON.parse(str, jsonReviver), + onRehydrateStorage: () => async (state, error) => { + if (error) { + console.log('Error rehydrating vm store state'); + console.error(error); + } + if (state) { + // load code into the store + const promiseArr: Promise[] = []; + state.hydrated = true; + const codes = await persistentStore.getAllCodes(); + codes.forEach(([hash, codeArr]) => { + promiseArr.push( + new Promise(resolve => { + memoryStore.setCode(hash, codeArr); + resolve(); + }) + ); + }); + await Promise.all(promiseArr); + console.log('storage hydrated'); + } + }, + }) + ) +); + +export const useVmStore = create(vmStore); diff --git a/docs/src/utils/cosmwasm-vm/store/storeMethods.ts b/docs/src/utils/cosmwasm-vm/store/storeMethods.ts new file mode 100644 index 0000000..e67de32 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/store/storeMethods.ts @@ -0,0 +1,28 @@ +import { getInitialState, StorageId, vmStore } from './state'; +import { VMHostShared } from '../vm/types'; +import { ContractEvent, RawContractEvent } from '../types'; +import { codeStore } from '../code/methods'; +const codeUpload = (storageId: StorageId, codeHash: string) => { + vmStore.setState(state => { + // TODO : update to work with multiple contract uploads to single VM + state.codeHashMap[storageId] = codeHash; + }); +}; + +const vmStateUpdate = (storageId: StorageId, vmShared: VMHostShared, contractEvents?: RawContractEvent[]) => { + vmStore.setState(state => { + state.vmStates[storageId] = { state: vmShared, events: contractEvents || [] }; + }); +}; + +const resetStore = async () => { + vmStore.setState(getInitialState(true)); + await codeStore.clearCodes(); + console.log('store reset'); +}; + +export const vmStoreMethods = { + codeUpload, + vmStateUpdate, + resetStore, +}; diff --git a/docs/src/utils/cosmwasm-vm/types.ts b/docs/src/utils/cosmwasm-vm/types.ts new file mode 100644 index 0000000..8592902 --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/types.ts @@ -0,0 +1,21 @@ +import { Option } from '@composable-finance/cosmwasm-vm'; + +export interface SetupState { + loaded: boolean; + promise: Option>; +} +export interface RawContractEvent { + type: ContractEventType; + attributes: KeyValue[]; +} + +export interface ContractEvent { + type: ContractEventType; + attributes: Record; +} + +export type ContractEventType = 'vm-initialize' | 'instantiate' | 'execute' | 'contract-upload'; +interface KeyValue { + key: string; + value: string; +} diff --git a/docs/src/utils/cosmwasm-vm/vm/types.ts b/docs/src/utils/cosmwasm-vm/vm/types.ts new file mode 100644 index 0000000..4487e5d --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/vm/types.ts @@ -0,0 +1,58 @@ +import { Addr, CodeId, ContractMeta, Env, MessageInfo } from '@composable-finance/cosmwasm-vm'; + +export type UUID = string; +export interface VMHostShared { + storage: Map>; // generates a map for each instantiations I think + codes: Map; // codeId - contract hash + contracts: Map; // instantiated contracts + nextAccountId: number; +} + +export const getInitVmHostShared = (): VMHostShared => ({ + storage: new Map>(), + codes: new Map(), + contracts: new Map(), + nextAccountId: 10000, +}); + +export interface VmInitParams { + codeId: number; + initialMessageInfo: MessageInfo; + getInitialEnv: (addr: number) => Env; + meta: ContractMeta; +} + +export interface VmRunEnv { + contractAddress?: number; // mandatory for execute, optional for instantiate + senderAddress: number; + codeId: number; + label?: string; +} + +export const getVmInitParams = (params: VmRunEnv): VmInitParams => { + return { + codeId: params.codeId, + initialMessageInfo: { + sender: params.senderAddress.toString(), + funds: [], + }, + getInitialEnv: (addr: number) => ({ + block: { + height: 0, + time: '0', + chain_id: 'html-chain', + }, + transaction: { + index: 0, + }, + contract: { + address: addr.toString(), + }, + }), + meta: { + code_id: params.codeId, + admin: null, + label: params?.label || '', + }, + }; +}; diff --git a/docs/src/utils/cosmwasm-vm/vm/vmMethods.ts b/docs/src/utils/cosmwasm-vm/vm/vmMethods.ts new file mode 100644 index 0000000..9532e4e --- /dev/null +++ b/docs/src/utils/cosmwasm-vm/vm/vmMethods.ts @@ -0,0 +1,193 @@ +// deliberate eslint disable due to how functions work here +/* eslint-disable no-param-reassign */ +import { + Coin, + ContractMeta, + Env, + Err, + MessageInfo, + None, + Ok, + Result, + Some, + StorageValue, + VMHost, + VMStep, + decode, + encode, + toHex, + unit, + vmContinueInstantiate, + vmExecute, + vmInstantiate, + vmSetup, +} from '@composable-finance/cosmwasm-vm'; + +import { SetRequired } from 'type-fest'; + +import { codeStore } from '../code/methods'; +import { VMHostShared, VmRunEnv, getVmInitParams } from './types'; +import { SetupState } from '../types'; + +const createVM = (info: MessageInfo, env: Env, metadata: ContractMeta, shared: VMHostShared): Partial => { + const getStore = (address: string): Map => { + const value = shared.storage.get(address); + if (value) return value; + shared.storage.set(address, new Map()); + return shared.storage.get(address)!; + }; + const newContractAddress = (): number => ++shared.nextAccountId; + const setMetadata = (address: string, newMetadata: ContractMeta) => { + shared.contracts.set(address, newMetadata); + }; + return { + info: () => info, + env: () => env, + db_write: (key: Array, value: Array) => { + const store = getStore(env.contract.address); + store.set(toHex(key), JSON.parse(decode(value))); + shared.storage.set(env.contract.address, store); + return Ok(unit); + }, + db_read: (key: Array) => { + const store = getStore(env.contract.address); + const entryKey = toHex(key); + if (store.has(entryKey)) return Ok(Some(encode(store.get(entryKey)!))); + return Ok(None()); + }, + continue_instantiate: ( + newContractMeta: ContractMeta, + funds: Array, + message: Array, + event_handler: any + ) => { + const newAccountId = newContractAddress(); + setMetadata(newAccountId.toString(), newContractMeta); + const newInfo: MessageInfo = { + sender: env.contract.address, + funds, + }; + const newEnv: Env = { + block: env.block, + transaction: env.transaction, + contract: { + address: newAccountId.toString(), + }, + }; + const subVM = createVM(newInfo, newEnv, newContractMeta, shared); + // TODO: check existence of code + console.log('continue_instantiate', newContractMeta); + const codeHash = shared.codes.get(newContractMeta.code_id)!; + // TODO: normally we reload a new host with the new meta for the newly running contract, we update the env to reflect sender/funds + const result = vmContinueInstantiate( + subVM as VMHost, + codeStore.getCode(codeHash), + JSON.parse(decode(message)), + event_handler + ); + // new contract address and result of instantiate call + if ('Ok' in result) { + // eslint-disable-next-line prettier/prettier + return Ok([newAccountId.toString(), result.Ok!]); // no idea why prettier bitches about this one + } + return Err(result.Err); + }, + + // TODO: implement the rest when necessary + transaction_begin: () => Ok(unit), + transaction_rollback: () => Ok(unit), + transaction_commit: () => Ok(unit), + charge: (value: object) => Ok(unit), + gas_checkpoint_push: () => Ok(unit), + gas_checkpoint_pop: () => Ok(unit), + addr_validate: (input: string) => Ok(Ok(unit)), + running_contract_meta: () => Ok(metadata), + }; +}; + +const setupState: SetupState = { + loaded: false, + promise: null, +}; +const safeSingleRunVmSetup = async (): Promise => { + if (setupState.loaded) return Promise.resolve(); + if (setupState.promise) return setupState.promise; + const promise = vmSetup(); + setupState.promise = new Promise(async (res, rej) => { + await promise; + setupState.loaded = true; + console.log('vm setup success'); + res(); + }); + return setupState.promise; +}; + +export const vmMethods = { + createVM: (info: MessageInfo, env: Env, metadata: ContractMeta, shared: VMHostShared): Partial => { + const vm = createVM(info, env, metadata, shared); + return vm; + }, + safeSingleRunVmSetup, + instantiate: ( + codeHash: string, + message: T, + vmShared: VMHostShared, + getInitParamsParams: VmRunEnv + ): Result => { + const params = getVmInitParams(getInitParamsParams); + const env = params.getInitialEnv(vmShared.nextAccountId++); + const vm = vmMethods.createVM(params.initialMessageInfo, env, params.meta, vmShared); + let ret; + try { + ret = vmInstantiate(vm as VMHost, codeStore.getCode(codeHash), message); + } catch (ex) { + console.error('instantiate error', ex); + return { Err: new Error('Instantiate VM critical Error') }; + } + vmShared.contracts.set(env.contract.address, params.meta); + if ('Err' in ret) { + console.log(ret.Err); + console.error('instantiate error', ret.Err); + + return { Err: ret.Err }; + } + const codeId = Array.from(vmShared.codes.entries()).find(([key, hash]) => hash === codeHash)?.[0]; + if (codeId === undefined) { + console.log(Array.from(vmShared.codes.entries()), codeHash); + throw new Error(`codeId not found for codeHash ${codeHash}`); + } + + // const refinedEvents = getRefinedEvents(ret.Ok.events as RawContractEvent[]); + + return ret; + }, + execute: ( + codeHash: string, + message: T, + vmShared: VMHostShared, + getInitParamsParams: SetRequired + ): Result => { + const params = getVmInitParams(getInitParamsParams); + const vm = vmMethods.createVM( + params.initialMessageInfo, + params.getInitialEnv(getInitParamsParams.contractAddress || vmShared.nextAccountId), + params.meta, + vmShared + ); + let ret; + try { + ret = vmExecute(vm as VMHost, codeStore.getCode(codeHash), message); + } catch (ex) { + return { Err: new Error('Execution VM critical Error') }; + } + if ('Err' in ret) { + console.error('execute error', ret.Err); + const errorMsg = JSON.stringify(ret.Err); + return { Err: new Error('Execution VM critical Error') }; + } + const codeId = Array.from(vmShared.codes.entries()).find(([key, hash]) => hash === codeHash)?.[0]; + if (codeId === undefined) throw new Error(`codeId not found for codeHash ${codeHash}`); + + return ret; + }, +}; diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/static/fonts/CitaPro-Bold.otf b/docs/static/fonts/CitaPro-Bold.otf new file mode 100644 index 0000000..747b640 Binary files /dev/null and b/docs/static/fonts/CitaPro-Bold.otf differ diff --git a/docs/static/fonts/CitaPro-BoldItalic.otf b/docs/static/fonts/CitaPro-BoldItalic.otf new file mode 100644 index 0000000..782c2ba Binary files /dev/null and b/docs/static/fonts/CitaPro-BoldItalic.otf differ diff --git a/docs/static/fonts/CitaPro-Italic.otf b/docs/static/fonts/CitaPro-Italic.otf new file mode 100644 index 0000000..0d4f170 Binary files /dev/null and b/docs/static/fonts/CitaPro-Italic.otf differ diff --git a/docs/static/fonts/CitaPro-Regular.otf b/docs/static/fonts/CitaPro-Regular.otf new file mode 100644 index 0000000..fd9c086 Binary files /dev/null and b/docs/static/fonts/CitaPro-Regular.otf differ diff --git a/docs/static/fonts/CitaPro-Thin.otf b/docs/static/fonts/CitaPro-Thin.otf new file mode 100644 index 0000000..b0fd3a6 Binary files /dev/null and b/docs/static/fonts/CitaPro-Thin.otf differ diff --git a/docs/static/fonts/CitaPro-ThinItalic.otf b/docs/static/fonts/CitaPro-ThinItalic.otf new file mode 100644 index 0000000..e67cd36 Binary files /dev/null and b/docs/static/fonts/CitaPro-ThinItalic.otf differ diff --git a/docs/static/fonts/EkMukta-Bold.ttf b/docs/static/fonts/EkMukta-Bold.ttf new file mode 100644 index 0000000..1ac957d --- /dev/null +++ b/docs/static/fonts/EkMukta-Bold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ca2a6550ba32a5d0974b977be65d0f474ee941951e3c69808b6c61c8111ac90 +size 1011196 diff --git a/docs/static/fonts/EkMukta-ExtraBold.ttf b/docs/static/fonts/EkMukta-ExtraBold.ttf new file mode 100644 index 0000000..2b3b82f --- /dev/null +++ b/docs/static/fonts/EkMukta-ExtraBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07d6e05670f7e87cf9a9c78174a5c5032bf6f065ff0266427afbf99e668d9d6f +size 1065564 diff --git a/docs/static/fonts/EkMukta-ExtraLight.ttf b/docs/static/fonts/EkMukta-ExtraLight.ttf new file mode 100644 index 0000000..2f8344d --- /dev/null +++ b/docs/static/fonts/EkMukta-ExtraLight.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3cc3884d3fd19fbfeec24a03258ea633112a8b15a5eca0a76806f9c0134b8b8 +size 969428 diff --git a/docs/static/fonts/EkMukta-Light.ttf b/docs/static/fonts/EkMukta-Light.ttf new file mode 100644 index 0000000..2b60aef --- /dev/null +++ b/docs/static/fonts/EkMukta-Light.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1a76232643de9c36d7b4f83fd8ef0f2b12855c6a7b1296cc8c5db02812f851e +size 979484 diff --git a/docs/static/fonts/EkMukta-Medium.ttf b/docs/static/fonts/EkMukta-Medium.ttf new file mode 100644 index 0000000..d9c47d7 --- /dev/null +++ b/docs/static/fonts/EkMukta-Medium.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a96d5cb03f3411305807f989c763094a2062ac0db7c3f59da633d8602f5238cb +size 1006912 diff --git a/docs/static/fonts/EkMukta-Regular.ttf b/docs/static/fonts/EkMukta-Regular.ttf new file mode 100644 index 0000000..4764942 --- /dev/null +++ b/docs/static/fonts/EkMukta-Regular.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24ac8938e51576ab0baa140dc84796f6d2d6a3eb5b296d0cc0ab54c1a922814c +size 1022884 diff --git a/docs/static/fonts/EkMukta-SemiBold.ttf b/docs/static/fonts/EkMukta-SemiBold.ttf new file mode 100644 index 0000000..436f495 --- /dev/null +++ b/docs/static/fonts/EkMukta-SemiBold.ttf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5050129cf08e0432099900a13698e9be3c49cc7767079d934422736ae855a881 +size 992936 diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico new file mode 100644 index 0000000..48c9e7a Binary files /dev/null and b/docs/static/img/favicon.ico differ diff --git a/docs/static/img/picasso-dark.svg b/docs/static/img/picasso-dark.svg new file mode 100644 index 0000000..c8ce441 --- /dev/null +++ b/docs/static/img/picasso-dark.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2358da0a62b6612d847b0370514035cbe55ac3ace5ecf5c19d2ba350e40088d5 +size 11221 diff --git a/docs/static/img/picasso-light.svg b/docs/static/img/picasso-light.svg new file mode 100644 index 0000000..8f56387 --- /dev/null +++ b/docs/static/img/picasso-light.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb3e03d28469bf2fe71ca1d36469e46e64dd44d7cc1827124e2d6cd0885134ee +size 8270 diff --git a/docs/static/img/thumbnail.svg b/docs/static/img/thumbnail.svg new file mode 100644 index 0000000..0d6ce64 --- /dev/null +++ b/docs/static/img/thumbnail.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc1e3f6da5457308f736cdd3f683562033f05ca4ba85980b8a86cfbd3eb3737 +size 1514 diff --git a/docs/static/img/undraw_docusaurus_mountain.svg b/docs/static/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000..cf59832 --- /dev/null +++ b/docs/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d63a81ff3dd5ea266e99156f8e33f76cc02df0f04e1a4487240663704660b7f +size 31486 diff --git a/docs/static/img/undraw_docusaurus_react.svg b/docs/static/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000..eac081d --- /dev/null +++ b/docs/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f2c1d7bcdd4219c9869d94b45c052e2856464e91c3e0704d99b4714d32cc668 +size 36002 diff --git a/docs/static/img/undraw_docusaurus_tree.svg b/docs/static/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000..60f82cf --- /dev/null +++ b/docs/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09704d88ef849647bf2ee02a4cb1b1b413f000de059a8d794019238ef2c5e4a7 +size 11887 diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js new file mode 100644 index 0000000..dca6c0a --- /dev/null +++ b/docs/tailwind.config.js @@ -0,0 +1,22 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + jit: true, + content: ['./src/**/*.{js,jsx,ts,tsx}', './docs/**/*.mdx'], + darkMode: 'media', + theme: { + extend: {}, + }, + plugins: [ + async function myPlugin(context, options) { + return { + name: 'docusaurus-tailwindcss', + configurePostCss(postcssOptions) { + // Appends TailwindCSS and AutoPrefixer. + postcssOptions.plugins.push(require('tailwindcss')); + postcssOptions.plugins.push(require('autoprefixer')); + return postcssOptions; + }, + }; + }, + ], +}; diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 0000000..38d288d --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "target": "ES2021", + "lib": [ + "dom", + "dom.iterable", + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "typeRoots": [ + "./node_modules/@types" + ], + "incremental": true, + "baseUrl": ".", + "paths": { + "@site/src/*": [ + "src/*" + ] + } + } +} \ No newline at end of file