diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml
new file mode 100644
index 00000000..680fba0c
--- /dev/null
+++ b/.github/actions/setup/action.yml
@@ -0,0 +1,19 @@
+name: Setup
+
+runs:
+ using: composite
+ steps:
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 14.x
+ - uses: actions/cache@v3
+ id: cache
+ with:
+ path: '**/node_modules'
+ key: npm-v3-${{ hashFiles('**/package-lock.json') }}
+ - name: Install dependencies
+ run: npm ci
+ shell: bash
+ if: steps.cache.outputs.cache-hit != 'true'
+ env:
+ SKIP_COMPILE: true
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 00000000..4b54ea6e
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,19 @@
+name: Build Docs
+
+on:
+ push:
+ branches: [release-v*]
+
+permissions:
+ contents: write
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up environment
+ uses: ./.github/actions/setup
+ - run: bash scripts/git-user-config.sh
+ - run: node scripts/update-docs-branch.js
+ - run: git push --all origin
diff --git a/.gitignore b/.gitignore
index 354cbe22..727804ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,7 @@ tmp/
.vscode/launch.json
etherisc*.tgz
+
+#hardhat
+/cache
+/artifacts
diff --git a/contracts/flows/README.adoc b/contracts/flows/README.adoc
new file mode 100644
index 00000000..20c8056f
--- /dev/null
+++ b/contracts/flows/README.adoc
@@ -0,0 +1,8 @@
+= Flows
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/flows
+
+== Contracts
+
+{{PolicyDefaultFlow}}
\ No newline at end of file
diff --git a/contracts/modules/README.adoc b/contracts/modules/README.adoc
new file mode 100644
index 00000000..5bc9cc2a
--- /dev/null
+++ b/contracts/modules/README.adoc
@@ -0,0 +1,25 @@
+= Modules
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/modules
+
+== Contracts
+
+{{AccessController}}
+
+{{BundleController}}
+
+{{ComponentController}}
+
+{{LicenseController}}
+
+{{PolicyController}}
+
+{{PoolController}}
+
+{{QueryModule}}
+
+{{RegistryController}}
+
+{{TreasuryModule}}
+
diff --git a/contracts/services/README.adoc b/contracts/services/README.adoc
new file mode 100644
index 00000000..3cbee757
--- /dev/null
+++ b/contracts/services/README.adoc
@@ -0,0 +1,18 @@
+= Services
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/services
+
+== Contracts
+
+{{ComponentOwnerService}}
+
+{{InstanceOperatorService}}
+
+{{InstanceService}}
+
+{{OracleService}}
+
+{{ProductService}}
+
+{{RiskpoolService}}
diff --git a/contracts/shared/README.adoc b/contracts/shared/README.adoc
new file mode 100644
index 00000000..edbed26c
--- /dev/null
+++ b/contracts/shared/README.adoc
@@ -0,0 +1,14 @@
+= Shared
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/shared
+
+== Contracts
+
+{{CoreController}}
+
+{{CoreProxy}}
+
+{{TransferHelper}}
+
+{{WithRegistry}}
diff --git a/contracts/test/README.adoc b/contracts/test/README.adoc
new file mode 100644
index 00000000..d48cc873
--- /dev/null
+++ b/contracts/test/README.adoc
@@ -0,0 +1,24 @@
+= Test
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/test
+
+== Contracts
+
+{{TestCoin}}
+
+{{TestCoinAlternativeImplementation}}
+
+{{TestCompromisedProduct}}
+
+{{TestOracle}}
+
+{{TestProduct}}
+
+{{TestRegistryCompromisedController}}
+
+{{TestRegistryControllerUpdated}}
+
+{{TestRiskpool}}
+
+{{TestTransferFrom}}
\ No newline at end of file
diff --git a/contracts/tokens/README.adoc b/contracts/tokens/README.adoc
new file mode 100644
index 00000000..16591ee8
--- /dev/null
+++ b/contracts/tokens/README.adoc
@@ -0,0 +1,10 @@
+= Tokens
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/tokens
+
+== Contracts
+
+{{BundleToken}}
+
+{{RiskpoolToken}}
\ No newline at end of file
diff --git a/docs/antora.yml b/docs/antora.yml
new file mode 100644
index 00000000..3c6dbe13
--- /dev/null
+++ b/docs/antora.yml
@@ -0,0 +1,6 @@
+name: contracts
+title: Contracts
+version: 2.x
+nav:
+ - modules/ROOT/nav.adoc
+ - modules/api/nav.adoc
diff --git a/docs/config.js b/docs/config.js
new file mode 100644
index 00000000..fbea3e2d
--- /dev/null
+++ b/docs/config.js
@@ -0,0 +1,22 @@
+const path = require('path');
+const fs = require('fs');
+
+/** @type import('solidity-docgen/dist/config').UserConfig */
+module.exports = {
+ outputDir: 'docs/modules/api/pages',
+ templates: 'docs/templates',
+ exclude: ['mocks'],
+ pageExtension: '.adoc',
+ pages: (_, file, config) => {
+ // For each contract file, find the closest README.adoc and return its location as the output page path.
+ const sourcesDir = path.resolve(config.root, config.sourcesDir);
+ let dir = path.resolve(config.root, file.absolutePath);
+ while (dir.startsWith(sourcesDir)) {
+ dir = path.dirname(dir);
+ if (fs.existsSync(path.join(dir, 'README.adoc'))) {
+ const result = path.relative(sourcesDir, dir) + config.pageExtension;
+ return result;
+ }
+ }
+ },
+};
diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc
new file mode 100644
index 00000000..6e115007
--- /dev/null
+++ b/docs/modules/ROOT/nav.adoc
@@ -0,0 +1,21 @@
+* xref:index.adoc[Overview]
+////
+* xref:extending-contracts.adoc[Extending Contracts]
+* xref:upgradeable.adoc[Using with Upgrades]
+
+* xref:releases-stability.adoc[Releases & Stability]
+
+* xref:access-control.adoc[Access Control]
+
+* xref:tokens.adoc[Tokens]
+** xref:erc20.adoc[ERC20]
+*** xref:erc20-supply.adoc[Creating Supply]
+** xref:erc721.adoc[ERC721]
+** xref:erc777.adoc[ERC777]
+** xref:erc1155.adoc[ERC1155]
+
+* xref:gsn.adoc[Gas Station Network]
+** xref:gsn-strategies.adoc[Strategies]
+
+* xref:utilities.adoc[Utilities]
+////
\ No newline at end of file
diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc
new file mode 100644
index 00000000..3106b163
--- /dev/null
+++ b/docs/modules/ROOT/pages/index.adoc
@@ -0,0 +1,73 @@
+= GIF Contracts
+
+*Secure and audited smart contracts to develop decentralized insurance applications.*
+
+ * GIF Contracts is a library of smart contracts for decentralized insurance applications.
+
+
+
+== Overview
+
+[[install]]
+=== Installation
+
+```console
+$ npm install @etherisc/gif-contracts
+```
+
+Etherisc GIF Contracts features a xref:releases-stability.adoc#api-stability[stable API], which means your contracts won't break unexpectedly when upgrading to a newer minor version.
+
+[[usage]]
+=== Usage
+
+Once installed, you can use the contracts in the library by importing them:
+
+[source,solidity]
+----
+// contracts/MyProduct.sol
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.2;
+
+import "@etherisc/gif-interface/contracts/components/Product.sol";
+
+contract MyProduct is Product {
+
+ bytes32 public constant POLICY_FLOW = "PolicyDefaultFlow";
+
+ constructor(
+ bytes32 productName,
+ address token,
+ address registry,
+ uint256 riskpoolId,
+ )
+ Product(productName, token, POLICY_FLOW, riskpoolId, registry)
+ {
+ }
+}
+----
+
+TIP: If you're new to smart contract development, head to ...
+// TODO: Add resource here
+to learn about creating a new project and compiling your contracts.
+
+To keep your system secure, you should **always** use the installed code as-is, and neither copy-paste it from online sources, nor modify it yourself. The library is designed so that only the contracts and functions you use are deployed, so you don't need to worry about it needlessly increasing gas costs.
+
+[[next-steps]]
+== Learn More
+
+The guides in the sidebar will teach about different concepts, and how to use the related contracts that GIF Contracts provides:
+
+////
+* xref:access-control.adoc[Access Control]: decide who can perform each of the actions on your system.
+* xref:tokens.adoc[Tokens]: create tradable assets or collectibles, like the well known xref:erc20.adoc[ERC20] and xref:erc721.adoc[ERC721] standards.
+* xref:gsn.adoc[Gas Station Network]: let your users interact with your contracts without having to pay for gas themselves.
+* xref:utilities.adoc[Utilities]: generic useful tools, including non-overflowing math, signature verification, and trustless paying systems.
+
+The xref:api:token/ERC20.adoc[full API] is also thoroughly documented, and serves as a great reference when developing your smart contract application. You can also ask for help or follow Contracts' development in the https://forum.openzeppelin.com[community forum].
+
+Finally, you may want to take a look at the https://blog.openzeppelin.com/guides/[guides on our blog], which cover several common use cases and good practices.. The following articles provide great background reading, though please note, some of the referenced tools have changed as the tooling in the ecosystem continues to rapidly evolve.
+
+* https://blog.openzeppelin.com/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05[The Hitchhiker’s Guide to Smart Contracts in Ethereum] will help you get an overview of the various tools available for smart contract development, and help you set up your environment.
+* https://blog.openzeppelin.com/a-gentle-introduction-to-ethereum-programming-part-1-783cc7796094[A Gentle Introduction to Ethereum Programming, Part 1] provides very useful information on an introductory level, including many basic concepts from the Ethereum platform.
+* For a more in-depth dive, you may read the guide https://blog.openzeppelin.com/designing-the-architecture-for-your-ethereum-application-9cec086f8317[Designing the architecture for your Ethereum application], which discusses how to better structure your application and its relationship to the real world.
+////
diff --git a/docs/modules/api/nav.adoc b/docs/modules/api/nav.adoc
new file mode 100644
index 00000000..1191f469
--- /dev/null
+++ b/docs/modules/api/nav.adoc
@@ -0,0 +1,7 @@
+.API
+* xref:flows.adoc[Flows]
+* xref:modules.adoc[Modules]
+* xref:services.adoc[Services]
+* xref:shared.adoc[Shared]
+* xref:test.adoc[Test]
+* xref:tokens.adoc[Tokens]
diff --git a/docs/modules/api/pages/flows.adoc b/docs/modules/api/pages/flows.adoc
new file mode 100644
index 00000000..ee910b2c
--- /dev/null
+++ b/docs/modules/api/pages/flows.adoc
@@ -0,0 +1,249 @@
+:github-icon: pass:[]
+:xref-PolicyDefaultFlow-onlyActivePolicy-bytes32-: xref:flows.adoc#PolicyDefaultFlow-onlyActivePolicy-bytes32-
+:xref-PolicyDefaultFlow-onlyExpiredPolicy-bytes32-: xref:flows.adoc#PolicyDefaultFlow-onlyExpiredPolicy-bytes32-
+:xref-PolicyDefaultFlow-notClosedPolicy-bytes32-: xref:flows.adoc#PolicyDefaultFlow-notClosedPolicy-bytes32-
+:xref-PolicyDefaultFlow-onlyResponsibleProduct-bytes32-: xref:flows.adoc#PolicyDefaultFlow-onlyResponsibleProduct-bytes32-
+:xref-PolicyDefaultFlow-onlyMatchingProduct-uint256-: xref:flows.adoc#PolicyDefaultFlow-onlyMatchingProduct-uint256-
+:xref-PolicyDefaultFlow-constructor-address-: xref:flows.adoc#PolicyDefaultFlow-constructor-address-
+:xref-PolicyDefaultFlow-newApplication-address-uint256-uint256-bytes-bytes-: xref:flows.adoc#PolicyDefaultFlow-newApplication-address-uint256-uint256-bytes-bytes-
+:xref-PolicyDefaultFlow-revoke-bytes32-: xref:flows.adoc#PolicyDefaultFlow-revoke-bytes32-
+:xref-PolicyDefaultFlow-underwrite-bytes32-: xref:flows.adoc#PolicyDefaultFlow-underwrite-bytes32-
+:xref-PolicyDefaultFlow-collectPremium-bytes32-uint256-: xref:flows.adoc#PolicyDefaultFlow-collectPremium-bytes32-uint256-
+:xref-PolicyDefaultFlow-adjustPremiumSumInsured-bytes32-uint256-uint256-: xref:flows.adoc#PolicyDefaultFlow-adjustPremiumSumInsured-bytes32-uint256-uint256-
+:xref-PolicyDefaultFlow-decline-bytes32-: xref:flows.adoc#PolicyDefaultFlow-decline-bytes32-
+:xref-PolicyDefaultFlow-expire-bytes32-: xref:flows.adoc#PolicyDefaultFlow-expire-bytes32-
+:xref-PolicyDefaultFlow-close-bytes32-: xref:flows.adoc#PolicyDefaultFlow-close-bytes32-
+:xref-PolicyDefaultFlow-newClaim-bytes32-uint256-bytes-: xref:flows.adoc#PolicyDefaultFlow-newClaim-bytes32-uint256-bytes-
+:xref-PolicyDefaultFlow-confirmClaim-bytes32-uint256-uint256-: xref:flows.adoc#PolicyDefaultFlow-confirmClaim-bytes32-uint256-uint256-
+:xref-PolicyDefaultFlow-declineClaim-bytes32-uint256-: xref:flows.adoc#PolicyDefaultFlow-declineClaim-bytes32-uint256-
+:xref-PolicyDefaultFlow-closeClaim-bytes32-uint256-: xref:flows.adoc#PolicyDefaultFlow-closeClaim-bytes32-uint256-
+:xref-PolicyDefaultFlow-newPayout-bytes32-uint256-uint256-bytes-: xref:flows.adoc#PolicyDefaultFlow-newPayout-bytes32-uint256-uint256-bytes-
+:xref-PolicyDefaultFlow-processPayout-bytes32-uint256-: xref:flows.adoc#PolicyDefaultFlow-processPayout-bytes32-uint256-
+:xref-PolicyDefaultFlow-request-bytes32-bytes-string-address-uint256-: xref:flows.adoc#PolicyDefaultFlow-request-bytes32-bytes-string-address-uint256-
+:xref-PolicyDefaultFlow-cancelRequest-uint256-: xref:flows.adoc#PolicyDefaultFlow-cancelRequest-uint256-
+:xref-PolicyDefaultFlow-getApplicationData-bytes32-: xref:flows.adoc#PolicyDefaultFlow-getApplicationData-bytes32-
+:xref-PolicyDefaultFlow-getClaimData-bytes32-uint256-: xref:flows.adoc#PolicyDefaultFlow-getClaimData-bytes32-uint256-
+:xref-PolicyDefaultFlow-getPayoutData-bytes32-uint256-: xref:flows.adoc#PolicyDefaultFlow-getPayoutData-bytes32-uint256-
+:xref-PolicyDefaultFlow-getComponentContract--: xref:flows.adoc#PolicyDefaultFlow-getComponentContract--
+:xref-PolicyDefaultFlow-getPoolContract--: xref:flows.adoc#PolicyDefaultFlow-getPoolContract--
+:xref-PolicyDefaultFlow-getPolicyContract--: xref:flows.adoc#PolicyDefaultFlow-getPolicyContract--
+:xref-PolicyDefaultFlow-getQueryContract--: xref:flows.adoc#PolicyDefaultFlow-getQueryContract--
+:xref-PolicyDefaultFlow-getTreasuryContract--: xref:flows.adoc#PolicyDefaultFlow-getTreasuryContract--
+:xref-WithRegistry-getContractFromRegistry-bytes32-: xref:shared.adoc#WithRegistry-getContractFromRegistry-bytes32-
+:xref-WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-: xref:shared.adoc#WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-
+:xref-WithRegistry-getReleaseFromRegistry--: xref:shared.adoc#WithRegistry-getReleaseFromRegistry--
+= Flows
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/flows
+
+== Contracts
+
+:NAME: pass:normal[xref:#PolicyDefaultFlow-NAME-bytes32[`++NAME++`]]
+:onlyActivePolicy: pass:normal[xref:#PolicyDefaultFlow-onlyActivePolicy-bytes32-[`++onlyActivePolicy++`]]
+:onlyExpiredPolicy: pass:normal[xref:#PolicyDefaultFlow-onlyExpiredPolicy-bytes32-[`++onlyExpiredPolicy++`]]
+:notClosedPolicy: pass:normal[xref:#PolicyDefaultFlow-notClosedPolicy-bytes32-[`++notClosedPolicy++`]]
+:onlyResponsibleProduct: pass:normal[xref:#PolicyDefaultFlow-onlyResponsibleProduct-bytes32-[`++onlyResponsibleProduct++`]]
+:onlyMatchingProduct: pass:normal[xref:#PolicyDefaultFlow-onlyMatchingProduct-uint256-[`++onlyMatchingProduct++`]]
+:constructor: pass:normal[xref:#PolicyDefaultFlow-constructor-address-[`++constructor++`]]
+:newApplication: pass:normal[xref:#PolicyDefaultFlow-newApplication-address-uint256-uint256-bytes-bytes-[`++newApplication++`]]
+:revoke: pass:normal[xref:#PolicyDefaultFlow-revoke-bytes32-[`++revoke++`]]
+:underwrite: pass:normal[xref:#PolicyDefaultFlow-underwrite-bytes32-[`++underwrite++`]]
+:collectPremium: pass:normal[xref:#PolicyDefaultFlow-collectPremium-bytes32-uint256-[`++collectPremium++`]]
+:adjustPremiumSumInsured: pass:normal[xref:#PolicyDefaultFlow-adjustPremiumSumInsured-bytes32-uint256-uint256-[`++adjustPremiumSumInsured++`]]
+:decline: pass:normal[xref:#PolicyDefaultFlow-decline-bytes32-[`++decline++`]]
+:expire: pass:normal[xref:#PolicyDefaultFlow-expire-bytes32-[`++expire++`]]
+:close: pass:normal[xref:#PolicyDefaultFlow-close-bytes32-[`++close++`]]
+:newClaim: pass:normal[xref:#PolicyDefaultFlow-newClaim-bytes32-uint256-bytes-[`++newClaim++`]]
+:confirmClaim: pass:normal[xref:#PolicyDefaultFlow-confirmClaim-bytes32-uint256-uint256-[`++confirmClaim++`]]
+:declineClaim: pass:normal[xref:#PolicyDefaultFlow-declineClaim-bytes32-uint256-[`++declineClaim++`]]
+:closeClaim: pass:normal[xref:#PolicyDefaultFlow-closeClaim-bytes32-uint256-[`++closeClaim++`]]
+:newPayout: pass:normal[xref:#PolicyDefaultFlow-newPayout-bytes32-uint256-uint256-bytes-[`++newPayout++`]]
+:processPayout: pass:normal[xref:#PolicyDefaultFlow-processPayout-bytes32-uint256-[`++processPayout++`]]
+:request: pass:normal[xref:#PolicyDefaultFlow-request-bytes32-bytes-string-address-uint256-[`++request++`]]
+:cancelRequest: pass:normal[xref:#PolicyDefaultFlow-cancelRequest-uint256-[`++cancelRequest++`]]
+:getApplicationData: pass:normal[xref:#PolicyDefaultFlow-getApplicationData-bytes32-[`++getApplicationData++`]]
+:getClaimData: pass:normal[xref:#PolicyDefaultFlow-getClaimData-bytes32-uint256-[`++getClaimData++`]]
+:getPayoutData: pass:normal[xref:#PolicyDefaultFlow-getPayoutData-bytes32-uint256-[`++getPayoutData++`]]
+:getComponentContract: pass:normal[xref:#PolicyDefaultFlow-getComponentContract--[`++getComponentContract++`]]
+:getPoolContract: pass:normal[xref:#PolicyDefaultFlow-getPoolContract--[`++getPoolContract++`]]
+:getPolicyContract: pass:normal[xref:#PolicyDefaultFlow-getPolicyContract--[`++getPolicyContract++`]]
+:getQueryContract: pass:normal[xref:#PolicyDefaultFlow-getQueryContract--[`++getQueryContract++`]]
+:getTreasuryContract: pass:normal[xref:#PolicyDefaultFlow-getTreasuryContract--[`++getTreasuryContract++`]]
+
+[.contract]
+[[PolicyDefaultFlow]]
+=== `++PolicyDefaultFlow++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/flows/PolicyDefaultFlow.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/flows/PolicyDefaultFlow.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-PolicyDefaultFlow-onlyActivePolicy-bytes32-}[`++onlyActivePolicy(processId)++`]
+* {xref-PolicyDefaultFlow-onlyExpiredPolicy-bytes32-}[`++onlyExpiredPolicy(processId)++`]
+* {xref-PolicyDefaultFlow-notClosedPolicy-bytes32-}[`++notClosedPolicy(processId)++`]
+* {xref-PolicyDefaultFlow-onlyResponsibleProduct-bytes32-}[`++onlyResponsibleProduct(processId)++`]
+* {xref-PolicyDefaultFlow-onlyMatchingProduct-uint256-}[`++onlyMatchingProduct(requestId)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-PolicyDefaultFlow-constructor-address-}[`++constructor(_registry)++`]
+* {xref-PolicyDefaultFlow-newApplication-address-uint256-uint256-bytes-bytes-}[`++newApplication(owner, premiumAmount, sumInsuredAmount, metaData, applicationData)++`]
+* {xref-PolicyDefaultFlow-revoke-bytes32-}[`++revoke(processId)++`]
+* {xref-PolicyDefaultFlow-underwrite-bytes32-}[`++underwrite(processId)++`]
+* {xref-PolicyDefaultFlow-collectPremium-bytes32-uint256-}[`++collectPremium(processId, amount)++`]
+* {xref-PolicyDefaultFlow-adjustPremiumSumInsured-bytes32-uint256-uint256-}[`++adjustPremiumSumInsured(processId, expectedPremiumAmount, sumInsuredAmount)++`]
+* {xref-PolicyDefaultFlow-decline-bytes32-}[`++decline(processId)++`]
+* {xref-PolicyDefaultFlow-expire-bytes32-}[`++expire(processId)++`]
+* {xref-PolicyDefaultFlow-close-bytes32-}[`++close(processId)++`]
+* {xref-PolicyDefaultFlow-newClaim-bytes32-uint256-bytes-}[`++newClaim(processId, claimAmount, data)++`]
+* {xref-PolicyDefaultFlow-confirmClaim-bytes32-uint256-uint256-}[`++confirmClaim(processId, claimId, confirmedAmount)++`]
+* {xref-PolicyDefaultFlow-declineClaim-bytes32-uint256-}[`++declineClaim(processId, claimId)++`]
+* {xref-PolicyDefaultFlow-closeClaim-bytes32-uint256-}[`++closeClaim(processId, claimId)++`]
+* {xref-PolicyDefaultFlow-newPayout-bytes32-uint256-uint256-bytes-}[`++newPayout(processId, claimId, amount, data)++`]
+* {xref-PolicyDefaultFlow-processPayout-bytes32-uint256-}[`++processPayout(processId, payoutId)++`]
+* {xref-PolicyDefaultFlow-request-bytes32-bytes-string-address-uint256-}[`++request(processId, _input, _callbackMethodName, _callbackContractAddress, _responsibleOracleId)++`]
+* {xref-PolicyDefaultFlow-cancelRequest-uint256-}[`++cancelRequest(requestId)++`]
+* {xref-PolicyDefaultFlow-getApplicationData-bytes32-}[`++getApplicationData(processId)++`]
+* {xref-PolicyDefaultFlow-getClaimData-bytes32-uint256-}[`++getClaimData(processId, claimId)++`]
+* {xref-PolicyDefaultFlow-getPayoutData-bytes32-uint256-}[`++getPayoutData(processId, payoutId)++`]
+* {xref-PolicyDefaultFlow-getComponentContract--}[`++getComponentContract()++`]
+* {xref-PolicyDefaultFlow-getPoolContract--}[`++getPoolContract()++`]
+* {xref-PolicyDefaultFlow-getPolicyContract--}[`++getPolicyContract()++`]
+* {xref-PolicyDefaultFlow-getQueryContract--}[`++getQueryContract()++`]
+* {xref-PolicyDefaultFlow-getTreasuryContract--}[`++getTreasuryContract()++`]
+
+[.contract-subindex-inherited]
+.WithRegistry
+* {xref-WithRegistry-getContractFromRegistry-bytes32-}[`++getContractFromRegistry(_contractName)++`]
+* {xref-WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-}[`++getContractInReleaseFromRegistry(_release, _contractName)++`]
+* {xref-WithRegistry-getReleaseFromRegistry--}[`++getReleaseFromRegistry()++`]
+
+--
+
+[.contract-item]
+[[PolicyDefaultFlow-onlyActivePolicy-bytes32-]]
+==== `[.contract-item-name]#++onlyActivePolicy++#++(bytes32 processId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PolicyDefaultFlow-onlyExpiredPolicy-bytes32-]]
+==== `[.contract-item-name]#++onlyExpiredPolicy++#++(bytes32 processId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PolicyDefaultFlow-notClosedPolicy-bytes32-]]
+==== `[.contract-item-name]#++notClosedPolicy++#++(bytes32 processId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PolicyDefaultFlow-onlyResponsibleProduct-bytes32-]]
+==== `[.contract-item-name]#++onlyResponsibleProduct++#++(bytes32 processId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PolicyDefaultFlow-onlyMatchingProduct-uint256-]]
+==== `[.contract-item-name]#++onlyMatchingProduct++#++(uint256 requestId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PolicyDefaultFlow-constructor-address-]]
+==== `[.contract-item-name]#++constructor++#++(address _registry)++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyDefaultFlow-newApplication-address-uint256-uint256-bytes-bytes-]]
+==== `[.contract-item-name]#++newApplication++#++(address owner, uint256 premiumAmount, uint256 sumInsuredAmount, bytes metaData, bytes applicationData) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-revoke-bytes32-]]
+==== `[.contract-item-name]#++revoke++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-underwrite-bytes32-]]
+==== `[.contract-item-name]#++underwrite++#++(bytes32 processId) → bool success++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-collectPremium-bytes32-uint256-]]
+==== `[.contract-item-name]#++collectPremium++#++(bytes32 processId, uint256 amount) → bool success, uint256 feeAmount, uint256 netPremiumAmount++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyDefaultFlow-adjustPremiumSumInsured-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++adjustPremiumSumInsured++#++(bytes32 processId, uint256 expectedPremiumAmount, uint256 sumInsuredAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-decline-bytes32-]]
+==== `[.contract-item-name]#++decline++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-expire-bytes32-]]
+==== `[.contract-item-name]#++expire++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-close-bytes32-]]
+==== `[.contract-item-name]#++close++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-newClaim-bytes32-uint256-bytes-]]
+==== `[.contract-item-name]#++newClaim++#++(bytes32 processId, uint256 claimAmount, bytes data) → uint256 claimId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-confirmClaim-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++confirmClaim++#++(bytes32 processId, uint256 claimId, uint256 confirmedAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-declineClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++declineClaim++#++(bytes32 processId, uint256 claimId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-closeClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++closeClaim++#++(bytes32 processId, uint256 claimId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-newPayout-bytes32-uint256-uint256-bytes-]]
+==== `[.contract-item-name]#++newPayout++#++(bytes32 processId, uint256 claimId, uint256 amount, bytes data) → uint256 payoutId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-processPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(bytes32 processId, uint256 payoutId) → bool success, uint256 feeAmount, uint256 netPayoutAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-request-bytes32-bytes-string-address-uint256-]]
+==== `[.contract-item-name]#++request++#++(bytes32 processId, bytes _input, string _callbackMethodName, address _callbackContractAddress, uint256 _responsibleOracleId) → uint256 _requestId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-cancelRequest-uint256-]]
+==== `[.contract-item-name]#++cancelRequest++#++(uint256 requestId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-getApplicationData-bytes32-]]
+==== `[.contract-item-name]#++getApplicationData++#++(bytes32 processId) → bytes++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-getClaimData-bytes32-uint256-]]
+==== `[.contract-item-name]#++getClaimData++#++(bytes32 processId, uint256 claimId) → bytes++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-getPayoutData-bytes32-uint256-]]
+==== `[.contract-item-name]#++getPayoutData++#++(bytes32 processId, uint256 payoutId) → bytes++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyDefaultFlow-getComponentContract--]]
+==== `[.contract-item-name]#++getComponentContract++#++() → contract ComponentController++` [.item-kind]#internal#
+
+[.contract-item]
+[[PolicyDefaultFlow-getPoolContract--]]
+==== `[.contract-item-name]#++getPoolContract++#++() → contract PoolController++` [.item-kind]#internal#
+
+[.contract-item]
+[[PolicyDefaultFlow-getPolicyContract--]]
+==== `[.contract-item-name]#++getPolicyContract++#++() → contract PolicyController++` [.item-kind]#internal#
+
+[.contract-item]
+[[PolicyDefaultFlow-getQueryContract--]]
+==== `[.contract-item-name]#++getQueryContract++#++() → contract QueryModule++` [.item-kind]#internal#
+
+[.contract-item]
+[[PolicyDefaultFlow-getTreasuryContract--]]
+==== `[.contract-item-name]#++getTreasuryContract++#++() → contract TreasuryModule++` [.item-kind]#internal#
+
diff --git a/docs/modules/api/pages/modules.adoc b/docs/modules/api/pages/modules.adoc
new file mode 100644
index 00000000..e4de26c1
--- /dev/null
+++ b/docs/modules/api/pages/modules.adoc
@@ -0,0 +1,1909 @@
+:github-icon: pass:[]
+:xref-AccessController-_afterInitialize--: xref:modules.adoc#AccessController-_afterInitialize--
+:xref-AccessController-_getName--: xref:modules.adoc#AccessController-_getName--
+:xref-AccessController-setDefaultAdminRole-address-: xref:modules.adoc#AccessController-setDefaultAdminRole-address-
+:xref-AccessController-grantRole-bytes32-address-: xref:modules.adoc#AccessController-grantRole-bytes32-address-
+:xref-AccessController-revokeRole-bytes32-address-: xref:modules.adoc#AccessController-revokeRole-bytes32-address-
+:xref-AccessController-renounceRole-bytes32-address-: xref:modules.adoc#AccessController-renounceRole-bytes32-address-
+:xref-AccessController-addRole-bytes32-: xref:modules.adoc#AccessController-addRole-bytes32-
+:xref-AccessController-invalidateRole-bytes32-: xref:modules.adoc#AccessController-invalidateRole-bytes32-
+:xref-AccessController-hasRole-bytes32-address-: xref:modules.adoc#AccessController-hasRole-bytes32-address-
+:xref-AccessController-getDefaultAdminRole--: xref:modules.adoc#AccessController-getDefaultAdminRole--
+:xref-AccessController-getProductOwnerRole--: xref:modules.adoc#AccessController-getProductOwnerRole--
+:xref-AccessController-getOracleProviderRole--: xref:modules.adoc#AccessController-getOracleProviderRole--
+:xref-AccessController-getRiskpoolKeeperRole--: xref:modules.adoc#AccessController-getRiskpoolKeeperRole--
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-BundleController-onlyRiskpoolService--: xref:modules.adoc#BundleController-onlyRiskpoolService--
+:xref-BundleController-onlyFundableBundle-uint256-: xref:modules.adoc#BundleController-onlyFundableBundle-uint256-
+:xref-BundleController-_afterInitialize--: xref:modules.adoc#BundleController-_afterInitialize--
+:xref-BundleController-create-address-uint256-bytes-uint256-: xref:modules.adoc#BundleController-create-address-uint256-bytes-uint256-
+:xref-BundleController-fund-uint256-uint256-: xref:modules.adoc#BundleController-fund-uint256-uint256-
+:xref-BundleController-defund-uint256-uint256-: xref:modules.adoc#BundleController-defund-uint256-uint256-
+:xref-BundleController-lock-uint256-: xref:modules.adoc#BundleController-lock-uint256-
+:xref-BundleController-unlock-uint256-: xref:modules.adoc#BundleController-unlock-uint256-
+:xref-BundleController-close-uint256-: xref:modules.adoc#BundleController-close-uint256-
+:xref-BundleController-burn-uint256-: xref:modules.adoc#BundleController-burn-uint256-
+:xref-BundleController-collateralizePolicy-uint256-bytes32-uint256-: xref:modules.adoc#BundleController-collateralizePolicy-uint256-bytes32-uint256-
+:xref-BundleController-processPremium-uint256-bytes32-uint256-: xref:modules.adoc#BundleController-processPremium-uint256-bytes32-uint256-
+:xref-BundleController-processPayout-uint256-bytes32-uint256-: xref:modules.adoc#BundleController-processPayout-uint256-bytes32-uint256-
+:xref-BundleController-releasePolicy-uint256-bytes32-: xref:modules.adoc#BundleController-releasePolicy-uint256-bytes32-
+:xref-BundleController-getOwner-uint256-: xref:modules.adoc#BundleController-getOwner-uint256-
+:xref-BundleController-getState-uint256-: xref:modules.adoc#BundleController-getState-uint256-
+:xref-BundleController-getFilter-uint256-: xref:modules.adoc#BundleController-getFilter-uint256-
+:xref-BundleController-getCapacity-uint256-: xref:modules.adoc#BundleController-getCapacity-uint256-
+:xref-BundleController-getTotalValueLocked-uint256-: xref:modules.adoc#BundleController-getTotalValueLocked-uint256-
+:xref-BundleController-getBalance-uint256-: xref:modules.adoc#BundleController-getBalance-uint256-
+:xref-BundleController-getToken--: xref:modules.adoc#BundleController-getToken--
+:xref-BundleController-getBundle-uint256-: xref:modules.adoc#BundleController-getBundle-uint256-
+:xref-BundleController-bundles--: xref:modules.adoc#BundleController-bundles--
+:xref-BundleController-unburntBundles-uint256-: xref:modules.adoc#BundleController-unburntBundles-uint256-
+:xref-BundleController-_getPoolController--: xref:modules.adoc#BundleController-_getPoolController--
+:xref-BundleController-_changeState-uint256-enum-IBundle-BundleState-: xref:modules.adoc#BundleController-_changeState-uint256-enum-IBundle-BundleState-
+:xref-BundleController-_setState-uint256-enum-IBundle-BundleState-: xref:modules.adoc#BundleController-_setState-uint256-enum-IBundle-BundleState-
+:xref-BundleController-_checkStateTransition-enum-IBundle-BundleState-enum-IBundle-BundleState-: xref:modules.adoc#BundleController-_checkStateTransition-enum-IBundle-BundleState-enum-IBundle-BundleState-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-ComponentController-onlyComponentOwnerService--: xref:modules.adoc#ComponentController-onlyComponentOwnerService--
+:xref-ComponentController-onlyInstanceOperatorService--: xref:modules.adoc#ComponentController-onlyInstanceOperatorService--
+:xref-ComponentController-propose-contract-IComponent-: xref:modules.adoc#ComponentController-propose-contract-IComponent-
+:xref-ComponentController-_persistComponent-contract-IComponent-: xref:modules.adoc#ComponentController-_persistComponent-contract-IComponent-
+:xref-ComponentController-exists-uint256-: xref:modules.adoc#ComponentController-exists-uint256-
+:xref-ComponentController-approve-uint256-: xref:modules.adoc#ComponentController-approve-uint256-
+:xref-ComponentController-decline-uint256-: xref:modules.adoc#ComponentController-decline-uint256-
+:xref-ComponentController-suspend-uint256-: xref:modules.adoc#ComponentController-suspend-uint256-
+:xref-ComponentController-resume-uint256-: xref:modules.adoc#ComponentController-resume-uint256-
+:xref-ComponentController-pause-uint256-: xref:modules.adoc#ComponentController-pause-uint256-
+:xref-ComponentController-unpause-uint256-: xref:modules.adoc#ComponentController-unpause-uint256-
+:xref-ComponentController-archiveFromComponentOwner-uint256-: xref:modules.adoc#ComponentController-archiveFromComponentOwner-uint256-
+:xref-ComponentController-archiveFromInstanceOperator-uint256-: xref:modules.adoc#ComponentController-archiveFromInstanceOperator-uint256-
+:xref-ComponentController-getComponent-uint256-: xref:modules.adoc#ComponentController-getComponent-uint256-
+:xref-ComponentController-getComponentId-address-: xref:modules.adoc#ComponentController-getComponentId-address-
+:xref-ComponentController-getComponentType-uint256-: xref:modules.adoc#ComponentController-getComponentType-uint256-
+:xref-ComponentController-getComponentState-uint256-: xref:modules.adoc#ComponentController-getComponentState-uint256-
+:xref-ComponentController-getOracleId-uint256-: xref:modules.adoc#ComponentController-getOracleId-uint256-
+:xref-ComponentController-getRiskpoolId-uint256-: xref:modules.adoc#ComponentController-getRiskpoolId-uint256-
+:xref-ComponentController-getProductId-uint256-: xref:modules.adoc#ComponentController-getProductId-uint256-
+:xref-ComponentController-getRequiredRole-enum-IComponent-ComponentType-: xref:modules.adoc#ComponentController-getRequiredRole-enum-IComponent-ComponentType-
+:xref-ComponentController-components--: xref:modules.adoc#ComponentController-components--
+:xref-ComponentController-products--: xref:modules.adoc#ComponentController-products--
+:xref-ComponentController-oracles--: xref:modules.adoc#ComponentController-oracles--
+:xref-ComponentController-riskpools--: xref:modules.adoc#ComponentController-riskpools--
+:xref-ComponentController-isProduct-uint256-: xref:modules.adoc#ComponentController-isProduct-uint256-
+:xref-ComponentController-isOracle-uint256-: xref:modules.adoc#ComponentController-isOracle-uint256-
+:xref-ComponentController-isRiskpool-uint256-: xref:modules.adoc#ComponentController-isRiskpool-uint256-
+:xref-ComponentController-getPolicyFlow-uint256-: xref:modules.adoc#ComponentController-getPolicyFlow-uint256-
+:xref-ComponentController-_changeState-uint256-enum-IComponent-ComponentState-: xref:modules.adoc#ComponentController-_changeState-uint256-enum-IComponent-ComponentState-
+:xref-ComponentController-_checkStateTransition-enum-IComponent-ComponentState-enum-IComponent-ComponentState-: xref:modules.adoc#ComponentController-_checkStateTransition-enum-IComponent-ComponentState-enum-IComponent-ComponentState-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_afterInitialize--: xref:shared.adoc#CoreController-_afterInitialize--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-LicenseController-_afterInitialize--: xref:modules.adoc#LicenseController-_afterInitialize--
+:xref-LicenseController-getAuthorizationStatus-address-: xref:modules.adoc#LicenseController-getAuthorizationStatus-address-
+:xref-LicenseController-_isValidCall-uint256-: xref:modules.adoc#LicenseController-_isValidCall-uint256-
+:xref-LicenseController-_getProduct-uint256-: xref:modules.adoc#LicenseController-_getProduct-uint256-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-PolicyController-_afterInitialize--: xref:modules.adoc#PolicyController-_afterInitialize--
+:xref-PolicyController-createPolicyFlow-address-uint256-bytes-: xref:modules.adoc#PolicyController-createPolicyFlow-address-uint256-bytes-
+:xref-PolicyController-createApplication-bytes32-uint256-uint256-bytes-: xref:modules.adoc#PolicyController-createApplication-bytes32-uint256-uint256-bytes-
+:xref-PolicyController-collectPremium-bytes32-uint256-: xref:modules.adoc#PolicyController-collectPremium-bytes32-uint256-
+:xref-PolicyController-revokeApplication-bytes32-: xref:modules.adoc#PolicyController-revokeApplication-bytes32-
+:xref-PolicyController-underwriteApplication-bytes32-: xref:modules.adoc#PolicyController-underwriteApplication-bytes32-
+:xref-PolicyController-declineApplication-bytes32-: xref:modules.adoc#PolicyController-declineApplication-bytes32-
+:xref-PolicyController-createPolicy-bytes32-: xref:modules.adoc#PolicyController-createPolicy-bytes32-
+:xref-PolicyController-adjustPremiumSumInsured-bytes32-uint256-uint256-: xref:modules.adoc#PolicyController-adjustPremiumSumInsured-bytes32-uint256-uint256-
+:xref-PolicyController-expirePolicy-bytes32-: xref:modules.adoc#PolicyController-expirePolicy-bytes32-
+:xref-PolicyController-closePolicy-bytes32-: xref:modules.adoc#PolicyController-closePolicy-bytes32-
+:xref-PolicyController-createClaim-bytes32-uint256-bytes-: xref:modules.adoc#PolicyController-createClaim-bytes32-uint256-bytes-
+:xref-PolicyController-confirmClaim-bytes32-uint256-uint256-: xref:modules.adoc#PolicyController-confirmClaim-bytes32-uint256-uint256-
+:xref-PolicyController-declineClaim-bytes32-uint256-: xref:modules.adoc#PolicyController-declineClaim-bytes32-uint256-
+:xref-PolicyController-closeClaim-bytes32-uint256-: xref:modules.adoc#PolicyController-closeClaim-bytes32-uint256-
+:xref-PolicyController-createPayout-bytes32-uint256-uint256-bytes-: xref:modules.adoc#PolicyController-createPayout-bytes32-uint256-uint256-bytes-
+:xref-PolicyController-processPayout-bytes32-uint256-: xref:modules.adoc#PolicyController-processPayout-bytes32-uint256-
+:xref-PolicyController-getMetadata-bytes32-: xref:modules.adoc#PolicyController-getMetadata-bytes32-
+:xref-PolicyController-getApplication-bytes32-: xref:modules.adoc#PolicyController-getApplication-bytes32-
+:xref-PolicyController-getNumberOfClaims-bytes32-: xref:modules.adoc#PolicyController-getNumberOfClaims-bytes32-
+:xref-PolicyController-getNumberOfPayouts-bytes32-: xref:modules.adoc#PolicyController-getNumberOfPayouts-bytes32-
+:xref-PolicyController-getPolicy-bytes32-: xref:modules.adoc#PolicyController-getPolicy-bytes32-
+:xref-PolicyController-getClaim-bytes32-uint256-: xref:modules.adoc#PolicyController-getClaim-bytes32-uint256-
+:xref-PolicyController-getPayout-bytes32-uint256-: xref:modules.adoc#PolicyController-getPayout-bytes32-uint256-
+:xref-PolicyController-processIds--: xref:modules.adoc#PolicyController-processIds--
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-PoolController-onlyInstanceOperatorService--: xref:modules.adoc#PoolController-onlyInstanceOperatorService--
+:xref-PoolController-onlyRiskpoolService--: xref:modules.adoc#PoolController-onlyRiskpoolService--
+:xref-PoolController-onlyActivePool-uint256-: xref:modules.adoc#PoolController-onlyActivePool-uint256-
+:xref-PoolController-onlyActivePoolForProcess-bytes32-: xref:modules.adoc#PoolController-onlyActivePoolForProcess-bytes32-
+:xref-PoolController-_afterInitialize--: xref:modules.adoc#PoolController-_afterInitialize--
+:xref-PoolController-registerRiskpool-uint256-address-address-uint256-uint256-: xref:modules.adoc#PoolController-registerRiskpool-uint256-address-address-uint256-uint256-
+:xref-PoolController-setRiskpoolForProduct-uint256-uint256-: xref:modules.adoc#PoolController-setRiskpoolForProduct-uint256-uint256-
+:xref-PoolController-fund-uint256-uint256-: xref:modules.adoc#PoolController-fund-uint256-uint256-
+:xref-PoolController-defund-uint256-uint256-: xref:modules.adoc#PoolController-defund-uint256-uint256-
+:xref-PoolController-underwrite-bytes32-: xref:modules.adoc#PoolController-underwrite-bytes32-
+:xref-PoolController-calculateCollateral-uint256-uint256-: xref:modules.adoc#PoolController-calculateCollateral-uint256-uint256-
+:xref-PoolController-processPremium-bytes32-uint256-: xref:modules.adoc#PoolController-processPremium-bytes32-uint256-
+:xref-PoolController-processPayout-bytes32-uint256-: xref:modules.adoc#PoolController-processPayout-bytes32-uint256-
+:xref-PoolController-release-bytes32-: xref:modules.adoc#PoolController-release-bytes32-
+:xref-PoolController-setMaximumNumberOfActiveBundles-uint256-uint256-: xref:modules.adoc#PoolController-setMaximumNumberOfActiveBundles-uint256-uint256-
+:xref-PoolController-getMaximumNumberOfActiveBundles-uint256-: xref:modules.adoc#PoolController-getMaximumNumberOfActiveBundles-uint256-
+:xref-PoolController-riskpools--: xref:modules.adoc#PoolController-riskpools--
+:xref-PoolController-getRiskpool-uint256-: xref:modules.adoc#PoolController-getRiskpool-uint256-
+:xref-PoolController-getRiskPoolForProduct-uint256-: xref:modules.adoc#PoolController-getRiskPoolForProduct-uint256-
+:xref-PoolController-activeBundles-uint256-: xref:modules.adoc#PoolController-activeBundles-uint256-
+:xref-PoolController-getActiveBundleId-uint256-uint256-: xref:modules.adoc#PoolController-getActiveBundleId-uint256-uint256-
+:xref-PoolController-addBundleIdToActiveSet-uint256-uint256-: xref:modules.adoc#PoolController-addBundleIdToActiveSet-uint256-uint256-
+:xref-PoolController-removeBundleIdFromActiveSet-uint256-uint256-: xref:modules.adoc#PoolController-removeBundleIdFromActiveSet-uint256-uint256-
+:xref-PoolController-getFullCollateralizationLevel--: xref:modules.adoc#PoolController-getFullCollateralizationLevel--
+:xref-PoolController-_getRiskpoolComponent-struct-IPolicy-Metadata-: xref:modules.adoc#PoolController-_getRiskpoolComponent-struct-IPolicy-Metadata-
+:xref-PoolController-_getRiskpoolForId-uint256-: xref:modules.adoc#PoolController-_getRiskpoolForId-uint256-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-QueryModule-onlyOracleService--: xref:modules.adoc#QueryModule-onlyOracleService--
+:xref-QueryModule-onlyResponsibleOracle-uint256-address-: xref:modules.adoc#QueryModule-onlyResponsibleOracle-uint256-address-
+:xref-QueryModule-_afterInitialize--: xref:modules.adoc#QueryModule-_afterInitialize--
+:xref-QueryModule-request-bytes32-bytes-string-address-uint256-: xref:modules.adoc#QueryModule-request-bytes32-bytes-string-address-uint256-
+:xref-QueryModule-respond-uint256-address-bytes-: xref:modules.adoc#QueryModule-respond-uint256-address-bytes-
+:xref-QueryModule-cancel-uint256-: xref:modules.adoc#QueryModule-cancel-uint256-
+:xref-QueryModule-getProcessId-uint256-: xref:modules.adoc#QueryModule-getProcessId-uint256-
+:xref-QueryModule-getOracleRequestCount--: xref:modules.adoc#QueryModule-getOracleRequestCount--
+:xref-QueryModule-_getOracle-uint256-: xref:modules.adoc#QueryModule-_getOracle-uint256-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-RegistryController-initializeRegistry-bytes32-: xref:modules.adoc#RegistryController-initializeRegistry-bytes32-
+:xref-RegistryController-ensureSender-address-bytes32-: xref:modules.adoc#RegistryController-ensureSender-address-bytes32-
+:xref-RegistryController-getRelease--: xref:modules.adoc#RegistryController-getRelease--
+:xref-RegistryController-getContract-bytes32-: xref:modules.adoc#RegistryController-getContract-bytes32-
+:xref-RegistryController-register-bytes32-address-: xref:modules.adoc#RegistryController-register-bytes32-address-
+:xref-RegistryController-deregister-bytes32-: xref:modules.adoc#RegistryController-deregister-bytes32-
+:xref-RegistryController-getContractInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-getContractInRelease-bytes32-bytes32-
+:xref-RegistryController-registerInRelease-bytes32-bytes32-address-: xref:modules.adoc#RegistryController-registerInRelease-bytes32-bytes32-address-
+:xref-RegistryController-deregisterInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-deregisterInRelease-bytes32-bytes32-
+:xref-RegistryController-prepareRelease-bytes32-: xref:modules.adoc#RegistryController-prepareRelease-bytes32-
+:xref-RegistryController-contracts--: xref:modules.adoc#RegistryController-contracts--
+:xref-RegistryController-contractName-uint256-: xref:modules.adoc#RegistryController-contractName-uint256-
+:xref-RegistryController-_getContractInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-_getContractInRelease-bytes32-bytes32-
+:xref-RegistryController-_registerInRelease-bytes32-bool-bytes32-address-: xref:modules.adoc#RegistryController-_registerInRelease-bytes32-bool-bytes32-address-
+:xref-RegistryController-_deregisterInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-_deregisterInRelease-bytes32-bytes32-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_afterInitialize--: xref:shared.adoc#CoreController-_afterInitialize--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-TreasuryModule-instanceWalletDefined--: xref:modules.adoc#TreasuryModule-instanceWalletDefined--
+:xref-TreasuryModule-riskpoolWalletDefinedForProcess-bytes32-: xref:modules.adoc#TreasuryModule-riskpoolWalletDefinedForProcess-bytes32-
+:xref-TreasuryModule-riskpoolWalletDefinedForBundle-uint256-: xref:modules.adoc#TreasuryModule-riskpoolWalletDefinedForBundle-uint256-
+:xref-TreasuryModule-whenNotSuspended--: xref:modules.adoc#TreasuryModule-whenNotSuspended--
+:xref-TreasuryModule-onlyRiskpoolService--: xref:modules.adoc#TreasuryModule-onlyRiskpoolService--
+:xref-TreasuryModule-_afterInitialize--: xref:modules.adoc#TreasuryModule-_afterInitialize--
+:xref-TreasuryModule-suspend--: xref:modules.adoc#TreasuryModule-suspend--
+:xref-TreasuryModule-resume--: xref:modules.adoc#TreasuryModule-resume--
+:xref-TreasuryModule-setProductToken-uint256-address-: xref:modules.adoc#TreasuryModule-setProductToken-uint256-address-
+:xref-TreasuryModule-setInstanceWallet-address-: xref:modules.adoc#TreasuryModule-setInstanceWallet-address-
+:xref-TreasuryModule-setRiskpoolWallet-uint256-address-: xref:modules.adoc#TreasuryModule-setRiskpoolWallet-uint256-address-
+:xref-TreasuryModule-createFeeSpecification-uint256-uint256-uint256-bytes-: xref:modules.adoc#TreasuryModule-createFeeSpecification-uint256-uint256-uint256-bytes-
+:xref-TreasuryModule-setPremiumFees-struct-ITreasury-FeeSpecification-: xref:modules.adoc#TreasuryModule-setPremiumFees-struct-ITreasury-FeeSpecification-
+:xref-TreasuryModule-setCapitalFees-struct-ITreasury-FeeSpecification-: xref:modules.adoc#TreasuryModule-setCapitalFees-struct-ITreasury-FeeSpecification-
+:xref-TreasuryModule-calculateFee-uint256-uint256-: xref:modules.adoc#TreasuryModule-calculateFee-uint256-uint256-
+:xref-TreasuryModule-processPremium-bytes32-: xref:modules.adoc#TreasuryModule-processPremium-bytes32-
+:xref-TreasuryModule-processPremium-bytes32-uint256-: xref:modules.adoc#TreasuryModule-processPremium-bytes32-uint256-
+:xref-TreasuryModule-processPayout-bytes32-uint256-: xref:modules.adoc#TreasuryModule-processPayout-bytes32-uint256-
+:xref-TreasuryModule-processCapital-uint256-uint256-: xref:modules.adoc#TreasuryModule-processCapital-uint256-uint256-
+:xref-TreasuryModule-processWithdrawal-uint256-uint256-: xref:modules.adoc#TreasuryModule-processWithdrawal-uint256-uint256-
+:xref-TreasuryModule-getComponentToken-uint256-: xref:modules.adoc#TreasuryModule-getComponentToken-uint256-
+:xref-TreasuryModule-getFeeSpecification-uint256-: xref:modules.adoc#TreasuryModule-getFeeSpecification-uint256-
+:xref-TreasuryModule-getFractionFullUnit--: xref:modules.adoc#TreasuryModule-getFractionFullUnit--
+:xref-TreasuryModule-getInstanceWallet--: xref:modules.adoc#TreasuryModule-getInstanceWallet--
+:xref-TreasuryModule-getRiskpoolWallet-uint256-: xref:modules.adoc#TreasuryModule-getRiskpoolWallet-uint256-
+:xref-TreasuryModule-_calculatePremiumFee-struct-ITreasury-FeeSpecification-bytes32-: xref:modules.adoc#TreasuryModule-_calculatePremiumFee-struct-ITreasury-FeeSpecification-bytes32-
+:xref-TreasuryModule-_calculateFee-struct-ITreasury-FeeSpecification-uint256-: xref:modules.adoc#TreasuryModule-_calculateFee-struct-ITreasury-FeeSpecification-uint256-
+:xref-TreasuryModule-_getRiskpoolWallet-bytes32-: xref:modules.adoc#TreasuryModule-_getRiskpoolWallet-bytes32-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-TreasuryModule-LogTransferHelperInputValidation1Failed-bool-address-address-: xref:modules.adoc#TreasuryModule-LogTransferHelperInputValidation1Failed-bool-address-address-
+:xref-TreasuryModule-LogTransferHelperInputValidation2Failed-uint256-uint256-: xref:modules.adoc#TreasuryModule-LogTransferHelperInputValidation2Failed-uint256-uint256-
+:xref-TreasuryModule-LogTransferHelperCallFailed-bool-uint256-bytes-: xref:modules.adoc#TreasuryModule-LogTransferHelperCallFailed-bool-uint256-bytes-
+= Modules
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/modules
+
+== Contracts
+
+:PRODUCT_OWNER_ROLE: pass:normal[xref:#AccessController-PRODUCT_OWNER_ROLE-bytes32[`++PRODUCT_OWNER_ROLE++`]]
+:ORACLE_PROVIDER_ROLE: pass:normal[xref:#AccessController-ORACLE_PROVIDER_ROLE-bytes32[`++ORACLE_PROVIDER_ROLE++`]]
+:RISKPOOL_KEEPER_ROLE: pass:normal[xref:#AccessController-RISKPOOL_KEEPER_ROLE-bytes32[`++RISKPOOL_KEEPER_ROLE++`]]
+:validRole: pass:normal[xref:#AccessController-validRole-mapping-bytes32----bool-[`++validRole++`]]
+:_afterInitialize: pass:normal[xref:#AccessController-_afterInitialize--[`++_afterInitialize++`]]
+:_getName: pass:normal[xref:#AccessController-_getName--[`++_getName++`]]
+:setDefaultAdminRole: pass:normal[xref:#AccessController-setDefaultAdminRole-address-[`++setDefaultAdminRole++`]]
+:grantRole: pass:normal[xref:#AccessController-grantRole-bytes32-address-[`++grantRole++`]]
+:revokeRole: pass:normal[xref:#AccessController-revokeRole-bytes32-address-[`++revokeRole++`]]
+:renounceRole: pass:normal[xref:#AccessController-renounceRole-bytes32-address-[`++renounceRole++`]]
+:addRole: pass:normal[xref:#AccessController-addRole-bytes32-[`++addRole++`]]
+:invalidateRole: pass:normal[xref:#AccessController-invalidateRole-bytes32-[`++invalidateRole++`]]
+:hasRole: pass:normal[xref:#AccessController-hasRole-bytes32-address-[`++hasRole++`]]
+:getDefaultAdminRole: pass:normal[xref:#AccessController-getDefaultAdminRole--[`++getDefaultAdminRole++`]]
+:getProductOwnerRole: pass:normal[xref:#AccessController-getProductOwnerRole--[`++getProductOwnerRole++`]]
+:getOracleProviderRole: pass:normal[xref:#AccessController-getOracleProviderRole--[`++getOracleProviderRole++`]]
+:getRiskpoolKeeperRole: pass:normal[xref:#AccessController-getRiskpoolKeeperRole--[`++getRiskpoolKeeperRole++`]]
+
+[.contract]
+[[AccessController]]
+=== `++AccessController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/AccessController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/AccessController.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-AccessController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-AccessController-_getName--}[`++_getName()++`]
+* {xref-AccessController-setDefaultAdminRole-address-}[`++setDefaultAdminRole(defaultAdmin)++`]
+* {xref-AccessController-grantRole-bytes32-address-}[`++grantRole(role, principal)++`]
+* {xref-AccessController-revokeRole-bytes32-address-}[`++revokeRole(role, principal)++`]
+* {xref-AccessController-renounceRole-bytes32-address-}[`++renounceRole(role, principal)++`]
+* {xref-AccessController-addRole-bytes32-}[`++addRole(role)++`]
+* {xref-AccessController-invalidateRole-bytes32-}[`++invalidateRole(role)++`]
+* {xref-AccessController-hasRole-bytes32-address-}[`++hasRole(role, principal)++`]
+* {xref-AccessController-getDefaultAdminRole--}[`++getDefaultAdminRole()++`]
+* {xref-AccessController-getProductOwnerRole--}[`++getProductOwnerRole()++`]
+* {xref-AccessController-getOracleProviderRole--}[`++getOracleProviderRole()++`]
+* {xref-AccessController-getRiskpoolKeeperRole--}[`++getRiskpoolKeeperRole()++`]
+
+[.contract-subindex-inherited]
+.AccessControlEnumerable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControlEnumerable-supportsInterface-bytes4-[`++supportsInterface(interfaceId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControlEnumerable-getRoleMember-bytes32-uint256-[`++getRoleMember(role, index)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControlEnumerable-getRoleMemberCount-bytes32-[`++getRoleMemberCount(role)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControlEnumerable-_grantRole-bytes32-address-[`++_grantRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControlEnumerable-_revokeRole-bytes32-address-[`++_revokeRole(role, account)++`]
+
+[.contract-subindex-inherited]
+.AccessControl
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-hasRole-bytes32-address-[`++hasRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-_checkRole-bytes32-[`++_checkRole(role)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-_checkRole-bytes32-address-[`++_checkRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-getRoleAdmin-bytes32-[`++getRoleAdmin(role)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-grantRole-bytes32-address-[`++grantRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-revokeRole-bytes32-address-[`++revokeRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-renounceRole-bytes32-address-[`++renounceRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-_setupRole-bytes32-address-[`++_setupRole(role, account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-_setRoleAdmin-bytes32-bytes32-[`++_setRoleAdmin(role, adminRole)++`]
+
+[.contract-subindex-inherited]
+.ERC165
+
+[.contract-subindex-inherited]
+.IERC165
+
+[.contract-subindex-inherited]
+.IAccessControlEnumerable
+
+[.contract-subindex-inherited]
+.IAccessControl
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IAccess
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.AccessControlEnumerable
+
+[.contract-subindex-inherited]
+.AccessControl
+
+[.contract-subindex-inherited]
+.ERC165
+
+[.contract-subindex-inherited]
+.IERC165
+
+[.contract-subindex-inherited]
+.IAccessControlEnumerable
+
+[.contract-subindex-inherited]
+.IAccessControl
+* https://docs.openzeppelin.com/contracts/3.x/api/access#IAccessControl-RoleAdminChanged-bytes32-bytes32-bytes32-[`++RoleAdminChanged(role, previousAdminRole, newAdminRole)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#IAccessControl-RoleGranted-bytes32-address-address-[`++RoleGranted(role, account, sender)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#IAccessControl-RoleRevoked-bytes32-address-address-[`++RoleRevoked(role, account, sender)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IAccess
+
+--
+
+[.contract-item]
+[[AccessController-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[AccessController-_getName--]]
+==== `[.contract-item-name]#++_getName++#++() → bytes32++` [.item-kind]#internal#
+
+[.contract-item]
+[[AccessController-setDefaultAdminRole-address-]]
+==== `[.contract-item-name]#++setDefaultAdminRole++#++(address defaultAdmin)++` [.item-kind]#external#
+
+[.contract-item]
+[[AccessController-grantRole-bytes32-address-]]
+==== `[.contract-item-name]#++grantRole++#++(bytes32 role, address principal)++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-revokeRole-bytes32-address-]]
+==== `[.contract-item-name]#++revokeRole++#++(bytes32 role, address principal)++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-renounceRole-bytes32-address-]]
+==== `[.contract-item-name]#++renounceRole++#++(bytes32 role, address principal)++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-addRole-bytes32-]]
+==== `[.contract-item-name]#++addRole++#++(bytes32 role)++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-invalidateRole-bytes32-]]
+==== `[.contract-item-name]#++invalidateRole++#++(bytes32 role)++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-hasRole-bytes32-address-]]
+==== `[.contract-item-name]#++hasRole++#++(bytes32 role, address principal) → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-getDefaultAdminRole--]]
+==== `[.contract-item-name]#++getDefaultAdminRole++#++() → bytes32++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-getProductOwnerRole--]]
+==== `[.contract-item-name]#++getProductOwnerRole++#++() → bytes32++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-getOracleProviderRole--]]
+==== `[.contract-item-name]#++getOracleProviderRole++#++() → bytes32++` [.item-kind]#public#
+
+[.contract-item]
+[[AccessController-getRiskpoolKeeperRole--]]
+==== `[.contract-item-name]#++getRiskpoolKeeperRole++#++() → bytes32++` [.item-kind]#public#
+
+:onlyRiskpoolService: pass:normal[xref:#BundleController-onlyRiskpoolService--[`++onlyRiskpoolService++`]]
+:onlyFundableBundle: pass:normal[xref:#BundleController-onlyFundableBundle-uint256-[`++onlyFundableBundle++`]]
+:_afterInitialize: pass:normal[xref:#BundleController-_afterInitialize--[`++_afterInitialize++`]]
+:create: pass:normal[xref:#BundleController-create-address-uint256-bytes-uint256-[`++create++`]]
+:fund: pass:normal[xref:#BundleController-fund-uint256-uint256-[`++fund++`]]
+:defund: pass:normal[xref:#BundleController-defund-uint256-uint256-[`++defund++`]]
+:lock: pass:normal[xref:#BundleController-lock-uint256-[`++lock++`]]
+:unlock: pass:normal[xref:#BundleController-unlock-uint256-[`++unlock++`]]
+:close: pass:normal[xref:#BundleController-close-uint256-[`++close++`]]
+:burn: pass:normal[xref:#BundleController-burn-uint256-[`++burn++`]]
+:collateralizePolicy: pass:normal[xref:#BundleController-collateralizePolicy-uint256-bytes32-uint256-[`++collateralizePolicy++`]]
+:processPremium: pass:normal[xref:#BundleController-processPremium-uint256-bytes32-uint256-[`++processPremium++`]]
+:processPayout: pass:normal[xref:#BundleController-processPayout-uint256-bytes32-uint256-[`++processPayout++`]]
+:releasePolicy: pass:normal[xref:#BundleController-releasePolicy-uint256-bytes32-[`++releasePolicy++`]]
+:getOwner: pass:normal[xref:#BundleController-getOwner-uint256-[`++getOwner++`]]
+:getState: pass:normal[xref:#BundleController-getState-uint256-[`++getState++`]]
+:getFilter: pass:normal[xref:#BundleController-getFilter-uint256-[`++getFilter++`]]
+:getCapacity: pass:normal[xref:#BundleController-getCapacity-uint256-[`++getCapacity++`]]
+:getTotalValueLocked: pass:normal[xref:#BundleController-getTotalValueLocked-uint256-[`++getTotalValueLocked++`]]
+:getBalance: pass:normal[xref:#BundleController-getBalance-uint256-[`++getBalance++`]]
+:getToken: pass:normal[xref:#BundleController-getToken--[`++getToken++`]]
+:getBundle: pass:normal[xref:#BundleController-getBundle-uint256-[`++getBundle++`]]
+:bundles: pass:normal[xref:#BundleController-bundles--[`++bundles++`]]
+:unburntBundles: pass:normal[xref:#BundleController-unburntBundles-uint256-[`++unburntBundles++`]]
+:_getPoolController: pass:normal[xref:#BundleController-_getPoolController--[`++_getPoolController++`]]
+:_changeState: pass:normal[xref:#BundleController-_changeState-uint256-enum-IBundle-BundleState-[`++_changeState++`]]
+:_setState: pass:normal[xref:#BundleController-_setState-uint256-enum-IBundle-BundleState-[`++_setState++`]]
+:_checkStateTransition: pass:normal[xref:#BundleController-_checkStateTransition-enum-IBundle-BundleState-enum-IBundle-BundleState-[`++_checkStateTransition++`]]
+
+[.contract]
+[[BundleController]]
+=== `++BundleController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/BundleController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/BundleController.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-BundleController-onlyRiskpoolService--}[`++onlyRiskpoolService()++`]
+* {xref-BundleController-onlyFundableBundle-uint256-}[`++onlyFundableBundle(bundleId)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-BundleController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-BundleController-create-address-uint256-bytes-uint256-}[`++create(owner_, riskpoolId_, filter_, amount_)++`]
+* {xref-BundleController-fund-uint256-uint256-}[`++fund(bundleId, amount)++`]
+* {xref-BundleController-defund-uint256-uint256-}[`++defund(bundleId, amount)++`]
+* {xref-BundleController-lock-uint256-}[`++lock(bundleId)++`]
+* {xref-BundleController-unlock-uint256-}[`++unlock(bundleId)++`]
+* {xref-BundleController-close-uint256-}[`++close(bundleId)++`]
+* {xref-BundleController-burn-uint256-}[`++burn(bundleId)++`]
+* {xref-BundleController-collateralizePolicy-uint256-bytes32-uint256-}[`++collateralizePolicy(bundleId, processId, amount)++`]
+* {xref-BundleController-processPremium-uint256-bytes32-uint256-}[`++processPremium(bundleId, processId, amount)++`]
+* {xref-BundleController-processPayout-uint256-bytes32-uint256-}[`++processPayout(bundleId, processId, amount)++`]
+* {xref-BundleController-releasePolicy-uint256-bytes32-}[`++releasePolicy(bundleId, processId)++`]
+* {xref-BundleController-getOwner-uint256-}[`++getOwner(bundleId)++`]
+* {xref-BundleController-getState-uint256-}[`++getState(bundleId)++`]
+* {xref-BundleController-getFilter-uint256-}[`++getFilter(bundleId)++`]
+* {xref-BundleController-getCapacity-uint256-}[`++getCapacity(bundleId)++`]
+* {xref-BundleController-getTotalValueLocked-uint256-}[`++getTotalValueLocked(bundleId)++`]
+* {xref-BundleController-getBalance-uint256-}[`++getBalance(bundleId)++`]
+* {xref-BundleController-getToken--}[`++getToken()++`]
+* {xref-BundleController-getBundle-uint256-}[`++getBundle(bundleId)++`]
+* {xref-BundleController-bundles--}[`++bundles()++`]
+* {xref-BundleController-unburntBundles-uint256-}[`++unburntBundles(riskpoolId)++`]
+* {xref-BundleController-_getPoolController--}[`++_getPoolController()++`]
+* {xref-BundleController-_changeState-uint256-enum-IBundle-BundleState-}[`++_changeState(bundleId, newState)++`]
+* {xref-BundleController-_setState-uint256-enum-IBundle-BundleState-}[`++_setState(bundleId, newState)++`]
+* {xref-BundleController-_checkStateTransition-enum-IBundle-BundleState-enum-IBundle-BundleState-}[`++_checkStateTransition(oldState, newState)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IBundle
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IBundle
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundleCreated(bundleId, riskpoolId, owner, state, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundleStateChanged(bundleId, oldState, newState)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundleCapitalProvided(bundleId, sender, amount, capacity)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundleCapitalWithdrawn(bundleId, recipient, amount, capacity)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundlePolicyCollateralized(bundleId, processId, amount, capacity)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundlePayoutProcessed(bundleId, processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IBundle.sol[`++LogBundlePolicyReleased(bundleId, processId, amount, capacity)++`]
+
+--
+
+[.contract-item]
+[[BundleController-onlyRiskpoolService--]]
+==== `[.contract-item-name]#++onlyRiskpoolService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[BundleController-onlyFundableBundle-uint256-]]
+==== `[.contract-item-name]#++onlyFundableBundle++#++(uint256 bundleId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[BundleController-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[BundleController-create-address-uint256-bytes-uint256-]]
+==== `[.contract-item-name]#++create++#++(address owner_, uint256 riskpoolId_, bytes filter_, uint256 amount_) → uint256 bundleId++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-fund-uint256-uint256-]]
+==== `[.contract-item-name]#++fund++#++(uint256 bundleId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-defund-uint256-uint256-]]
+==== `[.contract-item-name]#++defund++#++(uint256 bundleId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-lock-uint256-]]
+==== `[.contract-item-name]#++lock++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-unlock-uint256-]]
+==== `[.contract-item-name]#++unlock++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-close-uint256-]]
+==== `[.contract-item-name]#++close++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-burn-uint256-]]
+==== `[.contract-item-name]#++burn++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-collateralizePolicy-uint256-bytes32-uint256-]]
+==== `[.contract-item-name]#++collateralizePolicy++#++(uint256 bundleId, bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-processPremium-uint256-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPremium++#++(uint256 bundleId, bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-processPayout-uint256-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(uint256 bundleId, bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-releasePolicy-uint256-bytes32-]]
+==== `[.contract-item-name]#++releasePolicy++#++(uint256 bundleId, bytes32 processId) → uint256 remainingCollateralAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-getOwner-uint256-]]
+==== `[.contract-item-name]#++getOwner++#++(uint256 bundleId) → address++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-getState-uint256-]]
+==== `[.contract-item-name]#++getState++#++(uint256 bundleId) → enum IBundle.BundleState++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-getFilter-uint256-]]
+==== `[.contract-item-name]#++getFilter++#++(uint256 bundleId) → bytes++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-getCapacity-uint256-]]
+==== `[.contract-item-name]#++getCapacity++#++(uint256 bundleId) → uint256++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-getTotalValueLocked-uint256-]]
+==== `[.contract-item-name]#++getTotalValueLocked++#++(uint256 bundleId) → uint256++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-getBalance-uint256-]]
+==== `[.contract-item-name]#++getBalance++#++(uint256 bundleId) → uint256++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-getToken--]]
+==== `[.contract-item-name]#++getToken++#++() → contract BundleToken++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-getBundle-uint256-]]
+==== `[.contract-item-name]#++getBundle++#++(uint256 bundleId) → struct IBundle.Bundle++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-bundles--]]
+==== `[.contract-item-name]#++bundles++#++() → uint256++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleController-unburntBundles-uint256-]]
+==== `[.contract-item-name]#++unburntBundles++#++(uint256 riskpoolId) → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleController-_getPoolController--]]
+==== `[.contract-item-name]#++_getPoolController++#++() → contract PoolController _poolController++` [.item-kind]#internal#
+
+[.contract-item]
+[[BundleController-_changeState-uint256-enum-IBundle-BundleState-]]
+==== `[.contract-item-name]#++_changeState++#++(uint256 bundleId, enum IBundle.BundleState newState)++` [.item-kind]#internal#
+
+[.contract-item]
+[[BundleController-_setState-uint256-enum-IBundle-BundleState-]]
+==== `[.contract-item-name]#++_setState++#++(uint256 bundleId, enum IBundle.BundleState newState)++` [.item-kind]#internal#
+
+[.contract-item]
+[[BundleController-_checkStateTransition-enum-IBundle-BundleState-enum-IBundle-BundleState-]]
+==== `[.contract-item-name]#++_checkStateTransition++#++(enum IBundle.BundleState oldState, enum IBundle.BundleState newState)++` [.item-kind]#internal#
+
+:onlyComponentOwnerService: pass:normal[xref:#ComponentController-onlyComponentOwnerService--[`++onlyComponentOwnerService++`]]
+:onlyInstanceOperatorService: pass:normal[xref:#ComponentController-onlyInstanceOperatorService--[`++onlyInstanceOperatorService++`]]
+:propose: pass:normal[xref:#ComponentController-propose-contract-IComponent-[`++propose++`]]
+:_persistComponent: pass:normal[xref:#ComponentController-_persistComponent-contract-IComponent-[`++_persistComponent++`]]
+:exists: pass:normal[xref:#ComponentController-exists-uint256-[`++exists++`]]
+:approve: pass:normal[xref:#ComponentController-approve-uint256-[`++approve++`]]
+:decline: pass:normal[xref:#ComponentController-decline-uint256-[`++decline++`]]
+:suspend: pass:normal[xref:#ComponentController-suspend-uint256-[`++suspend++`]]
+:resume: pass:normal[xref:#ComponentController-resume-uint256-[`++resume++`]]
+:pause: pass:normal[xref:#ComponentController-pause-uint256-[`++pause++`]]
+:unpause: pass:normal[xref:#ComponentController-unpause-uint256-[`++unpause++`]]
+:archiveFromComponentOwner: pass:normal[xref:#ComponentController-archiveFromComponentOwner-uint256-[`++archiveFromComponentOwner++`]]
+:archiveFromInstanceOperator: pass:normal[xref:#ComponentController-archiveFromInstanceOperator-uint256-[`++archiveFromInstanceOperator++`]]
+:getComponent: pass:normal[xref:#ComponentController-getComponent-uint256-[`++getComponent++`]]
+:getComponentId: pass:normal[xref:#ComponentController-getComponentId-address-[`++getComponentId++`]]
+:getComponentType: pass:normal[xref:#ComponentController-getComponentType-uint256-[`++getComponentType++`]]
+:getComponentState: pass:normal[xref:#ComponentController-getComponentState-uint256-[`++getComponentState++`]]
+:getOracleId: pass:normal[xref:#ComponentController-getOracleId-uint256-[`++getOracleId++`]]
+:getRiskpoolId: pass:normal[xref:#ComponentController-getRiskpoolId-uint256-[`++getRiskpoolId++`]]
+:getProductId: pass:normal[xref:#ComponentController-getProductId-uint256-[`++getProductId++`]]
+:getRequiredRole: pass:normal[xref:#ComponentController-getRequiredRole-enum-IComponent-ComponentType-[`++getRequiredRole++`]]
+:components: pass:normal[xref:#ComponentController-components--[`++components++`]]
+:products: pass:normal[xref:#ComponentController-products--[`++products++`]]
+:oracles: pass:normal[xref:#ComponentController-oracles--[`++oracles++`]]
+:riskpools: pass:normal[xref:#ComponentController-riskpools--[`++riskpools++`]]
+:isProduct: pass:normal[xref:#ComponentController-isProduct-uint256-[`++isProduct++`]]
+:isOracle: pass:normal[xref:#ComponentController-isOracle-uint256-[`++isOracle++`]]
+:isRiskpool: pass:normal[xref:#ComponentController-isRiskpool-uint256-[`++isRiskpool++`]]
+:getPolicyFlow: pass:normal[xref:#ComponentController-getPolicyFlow-uint256-[`++getPolicyFlow++`]]
+:_changeState: pass:normal[xref:#ComponentController-_changeState-uint256-enum-IComponent-ComponentState-[`++_changeState++`]]
+:_checkStateTransition: pass:normal[xref:#ComponentController-_checkStateTransition-enum-IComponent-ComponentState-enum-IComponent-ComponentState-[`++_checkStateTransition++`]]
+
+[.contract]
+[[ComponentController]]
+=== `++ComponentController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/ComponentController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/ComponentController.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-ComponentController-onlyComponentOwnerService--}[`++onlyComponentOwnerService()++`]
+* {xref-ComponentController-onlyInstanceOperatorService--}[`++onlyInstanceOperatorService()++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-ComponentController-propose-contract-IComponent-}[`++propose(component)++`]
+* {xref-ComponentController-_persistComponent-contract-IComponent-}[`++_persistComponent(component)++`]
+* {xref-ComponentController-exists-uint256-}[`++exists(id)++`]
+* {xref-ComponentController-approve-uint256-}[`++approve(id)++`]
+* {xref-ComponentController-decline-uint256-}[`++decline(id)++`]
+* {xref-ComponentController-suspend-uint256-}[`++suspend(id)++`]
+* {xref-ComponentController-resume-uint256-}[`++resume(id)++`]
+* {xref-ComponentController-pause-uint256-}[`++pause(id)++`]
+* {xref-ComponentController-unpause-uint256-}[`++unpause(id)++`]
+* {xref-ComponentController-archiveFromComponentOwner-uint256-}[`++archiveFromComponentOwner(id)++`]
+* {xref-ComponentController-archiveFromInstanceOperator-uint256-}[`++archiveFromInstanceOperator(id)++`]
+* {xref-ComponentController-getComponent-uint256-}[`++getComponent(id)++`]
+* {xref-ComponentController-getComponentId-address-}[`++getComponentId(componentAddress)++`]
+* {xref-ComponentController-getComponentType-uint256-}[`++getComponentType(id)++`]
+* {xref-ComponentController-getComponentState-uint256-}[`++getComponentState(id)++`]
+* {xref-ComponentController-getOracleId-uint256-}[`++getOracleId(idx)++`]
+* {xref-ComponentController-getRiskpoolId-uint256-}[`++getRiskpoolId(idx)++`]
+* {xref-ComponentController-getProductId-uint256-}[`++getProductId(idx)++`]
+* {xref-ComponentController-getRequiredRole-enum-IComponent-ComponentType-}[`++getRequiredRole(componentType)++`]
+* {xref-ComponentController-components--}[`++components()++`]
+* {xref-ComponentController-products--}[`++products()++`]
+* {xref-ComponentController-oracles--}[`++oracles()++`]
+* {xref-ComponentController-riskpools--}[`++riskpools()++`]
+* {xref-ComponentController-isProduct-uint256-}[`++isProduct(id)++`]
+* {xref-ComponentController-isOracle-uint256-}[`++isOracle(id)++`]
+* {xref-ComponentController-isRiskpool-uint256-}[`++isRiskpool(id)++`]
+* {xref-ComponentController-getPolicyFlow-uint256-}[`++getPolicyFlow(productId)++`]
+* {xref-ComponentController-_changeState-uint256-enum-IComponent-ComponentState-}[`++_changeState(componentId, newState)++`]
+* {xref-ComponentController-_checkStateTransition-enum-IComponent-ComponentState-enum-IComponent-ComponentState-}[`++_checkStateTransition(oldState, newState)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentProposed(componentName, componentType, componentAddress, id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentApproved(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentDeclined(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentSuspended(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentResumed(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentPaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentUnpaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentArchived(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentStateChanged(id, stateOld, stateNew)++`]
+
+--
+
+[.contract-item]
+[[ComponentController-onlyComponentOwnerService--]]
+==== `[.contract-item-name]#++onlyComponentOwnerService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[ComponentController-onlyInstanceOperatorService--]]
+==== `[.contract-item-name]#++onlyInstanceOperatorService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[ComponentController-propose-contract-IComponent-]]
+==== `[.contract-item-name]#++propose++#++(contract IComponent component)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-_persistComponent-contract-IComponent-]]
+==== `[.contract-item-name]#++_persistComponent++#++(contract IComponent component) → uint256 id++` [.item-kind]#internal#
+
+[.contract-item]
+[[ComponentController-exists-uint256-]]
+==== `[.contract-item-name]#++exists++#++(uint256 id) → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-approve-uint256-]]
+==== `[.contract-item-name]#++approve++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-decline-uint256-]]
+==== `[.contract-item-name]#++decline++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-suspend-uint256-]]
+==== `[.contract-item-name]#++suspend++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-resume-uint256-]]
+==== `[.contract-item-name]#++resume++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-pause-uint256-]]
+==== `[.contract-item-name]#++pause++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-unpause-uint256-]]
+==== `[.contract-item-name]#++unpause++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-archiveFromComponentOwner-uint256-]]
+==== `[.contract-item-name]#++archiveFromComponentOwner++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-archiveFromInstanceOperator-uint256-]]
+==== `[.contract-item-name]#++archiveFromInstanceOperator++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-getComponent-uint256-]]
+==== `[.contract-item-name]#++getComponent++#++(uint256 id) → contract IComponent component++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getComponentId-address-]]
+==== `[.contract-item-name]#++getComponentId++#++(address componentAddress) → uint256 id++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getComponentType-uint256-]]
+==== `[.contract-item-name]#++getComponentType++#++(uint256 id) → enum IComponent.ComponentType componentType++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getComponentState-uint256-]]
+==== `[.contract-item-name]#++getComponentState++#++(uint256 id) → enum IComponent.ComponentState componentState++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getOracleId-uint256-]]
+==== `[.contract-item-name]#++getOracleId++#++(uint256 idx) → uint256 oracleId++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getRiskpoolId-uint256-]]
+==== `[.contract-item-name]#++getRiskpoolId++#++(uint256 idx) → uint256 riskpoolId++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getProductId-uint256-]]
+==== `[.contract-item-name]#++getProductId++#++(uint256 idx) → uint256 productId++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getRequiredRole-enum-IComponent-ComponentType-]]
+==== `[.contract-item-name]#++getRequiredRole++#++(enum IComponent.ComponentType componentType) → bytes32++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentController-components--]]
+==== `[.contract-item-name]#++components++#++() → uint256 count++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-products--]]
+==== `[.contract-item-name]#++products++#++() → uint256 count++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-oracles--]]
+==== `[.contract-item-name]#++oracles++#++() → uint256 count++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-riskpools--]]
+==== `[.contract-item-name]#++riskpools++#++() → uint256 count++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-isProduct-uint256-]]
+==== `[.contract-item-name]#++isProduct++#++(uint256 id) → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-isOracle-uint256-]]
+==== `[.contract-item-name]#++isOracle++#++(uint256 id) → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-isRiskpool-uint256-]]
+==== `[.contract-item-name]#++isRiskpool++#++(uint256 id) → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-getPolicyFlow-uint256-]]
+==== `[.contract-item-name]#++getPolicyFlow++#++(uint256 productId) → address _policyFlow++` [.item-kind]#public#
+
+[.contract-item]
+[[ComponentController-_changeState-uint256-enum-IComponent-ComponentState-]]
+==== `[.contract-item-name]#++_changeState++#++(uint256 componentId, enum IComponent.ComponentState newState)++` [.item-kind]#internal#
+
+[.contract-item]
+[[ComponentController-_checkStateTransition-enum-IComponent-ComponentState-enum-IComponent-ComponentState-]]
+==== `[.contract-item-name]#++_checkStateTransition++#++(enum IComponent.ComponentState oldState, enum IComponent.ComponentState newState)++` [.item-kind]#internal#
+
+:_afterInitialize: pass:normal[xref:#LicenseController-_afterInitialize--[`++_afterInitialize++`]]
+:getAuthorizationStatus: pass:normal[xref:#LicenseController-getAuthorizationStatus-address-[`++getAuthorizationStatus++`]]
+:_isValidCall: pass:normal[xref:#LicenseController-_isValidCall-uint256-[`++_isValidCall++`]]
+:_getProduct: pass:normal[xref:#LicenseController-_getProduct-uint256-[`++_getProduct++`]]
+
+[.contract]
+[[LicenseController]]
+=== `++LicenseController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/LicenseController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/LicenseController.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-LicenseController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-LicenseController-getAuthorizationStatus-address-}[`++getAuthorizationStatus(productAddress)++`]
+* {xref-LicenseController-_isValidCall-uint256-}[`++_isValidCall(productId)++`]
+* {xref-LicenseController-_getProduct-uint256-}[`++_getProduct(id)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.ILicense
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.ILicense
+
+--
+
+[.contract-item]
+[[LicenseController-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[LicenseController-getAuthorizationStatus-address-]]
+==== `[.contract-item-name]#++getAuthorizationStatus++#++(address productAddress) → uint256 productId, bool isAuthorized, address policyFlow++` [.item-kind]#public#
+
+[.contract-item]
+[[LicenseController-_isValidCall-uint256-]]
+==== `[.contract-item-name]#++_isValidCall++#++(uint256 productId) → bool++` [.item-kind]#internal#
+
+[.contract-item]
+[[LicenseController-_getProduct-uint256-]]
+==== `[.contract-item-name]#++_getProduct++#++(uint256 id) → contract IProduct product++` [.item-kind]#internal#
+
+:metadata: pass:normal[xref:#PolicyController-metadata-mapping-bytes32----struct-IPolicy-Metadata-[`++metadata++`]]
+:applications: pass:normal[xref:#PolicyController-applications-mapping-bytes32----struct-IPolicy-Application-[`++applications++`]]
+:policies: pass:normal[xref:#PolicyController-policies-mapping-bytes32----struct-IPolicy-Policy-[`++policies++`]]
+:claims: pass:normal[xref:#PolicyController-claims-mapping-bytes32----mapping-uint256----struct-IPolicy-Claim--[`++claims++`]]
+:payouts: pass:normal[xref:#PolicyController-payouts-mapping-bytes32----mapping-uint256----struct-IPolicy-Payout--[`++payouts++`]]
+:payoutCount: pass:normal[xref:#PolicyController-payoutCount-mapping-bytes32----uint256-[`++payoutCount++`]]
+:_afterInitialize: pass:normal[xref:#PolicyController-_afterInitialize--[`++_afterInitialize++`]]
+:createPolicyFlow: pass:normal[xref:#PolicyController-createPolicyFlow-address-uint256-bytes-[`++createPolicyFlow++`]]
+:createApplication: pass:normal[xref:#PolicyController-createApplication-bytes32-uint256-uint256-bytes-[`++createApplication++`]]
+:collectPremium: pass:normal[xref:#PolicyController-collectPremium-bytes32-uint256-[`++collectPremium++`]]
+:revokeApplication: pass:normal[xref:#PolicyController-revokeApplication-bytes32-[`++revokeApplication++`]]
+:underwriteApplication: pass:normal[xref:#PolicyController-underwriteApplication-bytes32-[`++underwriteApplication++`]]
+:declineApplication: pass:normal[xref:#PolicyController-declineApplication-bytes32-[`++declineApplication++`]]
+:createPolicy: pass:normal[xref:#PolicyController-createPolicy-bytes32-[`++createPolicy++`]]
+:adjustPremiumSumInsured: pass:normal[xref:#PolicyController-adjustPremiumSumInsured-bytes32-uint256-uint256-[`++adjustPremiumSumInsured++`]]
+:expirePolicy: pass:normal[xref:#PolicyController-expirePolicy-bytes32-[`++expirePolicy++`]]
+:closePolicy: pass:normal[xref:#PolicyController-closePolicy-bytes32-[`++closePolicy++`]]
+:createClaim: pass:normal[xref:#PolicyController-createClaim-bytes32-uint256-bytes-[`++createClaim++`]]
+:confirmClaim: pass:normal[xref:#PolicyController-confirmClaim-bytes32-uint256-uint256-[`++confirmClaim++`]]
+:declineClaim: pass:normal[xref:#PolicyController-declineClaim-bytes32-uint256-[`++declineClaim++`]]
+:closeClaim: pass:normal[xref:#PolicyController-closeClaim-bytes32-uint256-[`++closeClaim++`]]
+:createPayout: pass:normal[xref:#PolicyController-createPayout-bytes32-uint256-uint256-bytes-[`++createPayout++`]]
+:processPayout: pass:normal[xref:#PolicyController-processPayout-bytes32-uint256-[`++processPayout++`]]
+:getMetadata: pass:normal[xref:#PolicyController-getMetadata-bytes32-[`++getMetadata++`]]
+:getApplication: pass:normal[xref:#PolicyController-getApplication-bytes32-[`++getApplication++`]]
+:getNumberOfClaims: pass:normal[xref:#PolicyController-getNumberOfClaims-bytes32-[`++getNumberOfClaims++`]]
+:getNumberOfPayouts: pass:normal[xref:#PolicyController-getNumberOfPayouts-bytes32-[`++getNumberOfPayouts++`]]
+:getPolicy: pass:normal[xref:#PolicyController-getPolicy-bytes32-[`++getPolicy++`]]
+:getClaim: pass:normal[xref:#PolicyController-getClaim-bytes32-uint256-[`++getClaim++`]]
+:getPayout: pass:normal[xref:#PolicyController-getPayout-bytes32-uint256-[`++getPayout++`]]
+:processIds: pass:normal[xref:#PolicyController-processIds--[`++processIds++`]]
+
+[.contract]
+[[PolicyController]]
+=== `++PolicyController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/PolicyController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/PolicyController.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-PolicyController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-PolicyController-createPolicyFlow-address-uint256-bytes-}[`++createPolicyFlow(owner, productId, data)++`]
+* {xref-PolicyController-createApplication-bytes32-uint256-uint256-bytes-}[`++createApplication(processId, premiumAmount, sumInsuredAmount, data)++`]
+* {xref-PolicyController-collectPremium-bytes32-uint256-}[`++collectPremium(processId, amount)++`]
+* {xref-PolicyController-revokeApplication-bytes32-}[`++revokeApplication(processId)++`]
+* {xref-PolicyController-underwriteApplication-bytes32-}[`++underwriteApplication(processId)++`]
+* {xref-PolicyController-declineApplication-bytes32-}[`++declineApplication(processId)++`]
+* {xref-PolicyController-createPolicy-bytes32-}[`++createPolicy(processId)++`]
+* {xref-PolicyController-adjustPremiumSumInsured-bytes32-uint256-uint256-}[`++adjustPremiumSumInsured(processId, expectedPremiumAmount, sumInsuredAmount)++`]
+* {xref-PolicyController-expirePolicy-bytes32-}[`++expirePolicy(processId)++`]
+* {xref-PolicyController-closePolicy-bytes32-}[`++closePolicy(processId)++`]
+* {xref-PolicyController-createClaim-bytes32-uint256-bytes-}[`++createClaim(processId, claimAmount, data)++`]
+* {xref-PolicyController-confirmClaim-bytes32-uint256-uint256-}[`++confirmClaim(processId, claimId, confirmedAmount)++`]
+* {xref-PolicyController-declineClaim-bytes32-uint256-}[`++declineClaim(processId, claimId)++`]
+* {xref-PolicyController-closeClaim-bytes32-uint256-}[`++closeClaim(processId, claimId)++`]
+* {xref-PolicyController-createPayout-bytes32-uint256-uint256-bytes-}[`++createPayout(processId, claimId, payoutAmount, data)++`]
+* {xref-PolicyController-processPayout-bytes32-uint256-}[`++processPayout(processId, payoutId)++`]
+* {xref-PolicyController-getMetadata-bytes32-}[`++getMetadata(processId)++`]
+* {xref-PolicyController-getApplication-bytes32-}[`++getApplication(processId)++`]
+* {xref-PolicyController-getNumberOfClaims-bytes32-}[`++getNumberOfClaims(processId)++`]
+* {xref-PolicyController-getNumberOfPayouts-bytes32-}[`++getNumberOfPayouts(processId)++`]
+* {xref-PolicyController-getPolicy-bytes32-}[`++getPolicy(processId)++`]
+* {xref-PolicyController-getClaim-bytes32-uint256-}[`++getClaim(processId, claimId)++`]
+* {xref-PolicyController-getPayout-bytes32-uint256-}[`++getPayout(processId, payoutId)++`]
+* {xref-PolicyController-processIds--}[`++processIds()++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IPolicy
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IPolicy
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogMetadataCreated(owner, processId, productId, state)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogMetadataStateChanged(processId, state)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogApplicationCreated(processId, premiumAmount, sumInsuredAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogApplicationRevoked(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogApplicationUnderwritten(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogApplicationDeclined(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPolicyCreated(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPolicyExpired(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPolicyClosed(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPremiumCollected(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogApplicationSumInsuredAdjusted(processId, sumInsuredAmountOld, sumInsuredAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogApplicationPremiumAdjusted(processId, premiumAmountOld, premiumAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPolicyPremiumAdjusted(processId, premiumExpectedAmountOld, premiumExpectedAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogClaimCreated(processId, claimId, claimAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogClaimConfirmed(processId, claimId, confirmedAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogClaimDeclined(processId, claimId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogClaimClosed(processId, claimId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPayoutCreated(processId, claimId, payoutId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPolicy.sol[`++LogPayoutProcessed(processId, payoutId)++`]
+
+--
+
+[.contract-item]
+[[PolicyController-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[PolicyController-createPolicyFlow-address-uint256-bytes-]]
+==== `[.contract-item-name]#++createPolicyFlow++#++(address owner, uint256 productId, bytes data) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-createApplication-bytes32-uint256-uint256-bytes-]]
+==== `[.contract-item-name]#++createApplication++#++(bytes32 processId, uint256 premiumAmount, uint256 sumInsuredAmount, bytes data)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-collectPremium-bytes32-uint256-]]
+==== `[.contract-item-name]#++collectPremium++#++(bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-revokeApplication-bytes32-]]
+==== `[.contract-item-name]#++revokeApplication++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-underwriteApplication-bytes32-]]
+==== `[.contract-item-name]#++underwriteApplication++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-declineApplication-bytes32-]]
+==== `[.contract-item-name]#++declineApplication++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-createPolicy-bytes32-]]
+==== `[.contract-item-name]#++createPolicy++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-adjustPremiumSumInsured-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++adjustPremiumSumInsured++#++(bytes32 processId, uint256 expectedPremiumAmount, uint256 sumInsuredAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-expirePolicy-bytes32-]]
+==== `[.contract-item-name]#++expirePolicy++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-closePolicy-bytes32-]]
+==== `[.contract-item-name]#++closePolicy++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-createClaim-bytes32-uint256-bytes-]]
+==== `[.contract-item-name]#++createClaim++#++(bytes32 processId, uint256 claimAmount, bytes data) → uint256 claimId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-confirmClaim-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++confirmClaim++#++(bytes32 processId, uint256 claimId, uint256 confirmedAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-declineClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++declineClaim++#++(bytes32 processId, uint256 claimId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-closeClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++closeClaim++#++(bytes32 processId, uint256 claimId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-createPayout-bytes32-uint256-uint256-bytes-]]
+==== `[.contract-item-name]#++createPayout++#++(bytes32 processId, uint256 claimId, uint256 payoutAmount, bytes data) → uint256 payoutId++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-processPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(bytes32 processId, uint256 payoutId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-getMetadata-bytes32-]]
+==== `[.contract-item-name]#++getMetadata++#++(bytes32 processId) → struct IPolicy.Metadata _metadata++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyController-getApplication-bytes32-]]
+==== `[.contract-item-name]#++getApplication++#++(bytes32 processId) → struct IPolicy.Application application++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyController-getNumberOfClaims-bytes32-]]
+==== `[.contract-item-name]#++getNumberOfClaims++#++(bytes32 processId) → uint256 numberOfClaims++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-getNumberOfPayouts-bytes32-]]
+==== `[.contract-item-name]#++getNumberOfPayouts++#++(bytes32 processId) → uint256 numberOfPayouts++` [.item-kind]#external#
+
+[.contract-item]
+[[PolicyController-getPolicy-bytes32-]]
+==== `[.contract-item-name]#++getPolicy++#++(bytes32 processId) → struct IPolicy.Policy policy++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyController-getClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++getClaim++#++(bytes32 processId, uint256 claimId) → struct IPolicy.Claim claim++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyController-getPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++getPayout++#++(bytes32 processId, uint256 payoutId) → struct IPolicy.Payout payout++` [.item-kind]#public#
+
+[.contract-item]
+[[PolicyController-processIds--]]
+==== `[.contract-item-name]#++processIds++#++() → uint256++` [.item-kind]#external#
+
+:FULL_COLLATERALIZATION_LEVEL: pass:normal[xref:#PoolController-FULL_COLLATERALIZATION_LEVEL-uint256[`++FULL_COLLATERALIZATION_LEVEL++`]]
+:COLLATERALIZATION_LEVEL_CAP: pass:normal[xref:#PoolController-COLLATERALIZATION_LEVEL_CAP-uint256[`++COLLATERALIZATION_LEVEL_CAP++`]]
+:DEFAULT_MAX_NUMBER_OF_ACTIVE_BUNDLES: pass:normal[xref:#PoolController-DEFAULT_MAX_NUMBER_OF_ACTIVE_BUNDLES-uint256[`++DEFAULT_MAX_NUMBER_OF_ACTIVE_BUNDLES++`]]
+:onlyInstanceOperatorService: pass:normal[xref:#PoolController-onlyInstanceOperatorService--[`++onlyInstanceOperatorService++`]]
+:onlyRiskpoolService: pass:normal[xref:#PoolController-onlyRiskpoolService--[`++onlyRiskpoolService++`]]
+:onlyActivePool: pass:normal[xref:#PoolController-onlyActivePool-uint256-[`++onlyActivePool++`]]
+:onlyActivePoolForProcess: pass:normal[xref:#PoolController-onlyActivePoolForProcess-bytes32-[`++onlyActivePoolForProcess++`]]
+:_afterInitialize: pass:normal[xref:#PoolController-_afterInitialize--[`++_afterInitialize++`]]
+:registerRiskpool: pass:normal[xref:#PoolController-registerRiskpool-uint256-address-address-uint256-uint256-[`++registerRiskpool++`]]
+:setRiskpoolForProduct: pass:normal[xref:#PoolController-setRiskpoolForProduct-uint256-uint256-[`++setRiskpoolForProduct++`]]
+:fund: pass:normal[xref:#PoolController-fund-uint256-uint256-[`++fund++`]]
+:defund: pass:normal[xref:#PoolController-defund-uint256-uint256-[`++defund++`]]
+:underwrite: pass:normal[xref:#PoolController-underwrite-bytes32-[`++underwrite++`]]
+:calculateCollateral: pass:normal[xref:#PoolController-calculateCollateral-uint256-uint256-[`++calculateCollateral++`]]
+:processPremium: pass:normal[xref:#PoolController-processPremium-bytes32-uint256-[`++processPremium++`]]
+:processPayout: pass:normal[xref:#PoolController-processPayout-bytes32-uint256-[`++processPayout++`]]
+:release: pass:normal[xref:#PoolController-release-bytes32-[`++release++`]]
+:setMaximumNumberOfActiveBundles: pass:normal[xref:#PoolController-setMaximumNumberOfActiveBundles-uint256-uint256-[`++setMaximumNumberOfActiveBundles++`]]
+:getMaximumNumberOfActiveBundles: pass:normal[xref:#PoolController-getMaximumNumberOfActiveBundles-uint256-[`++getMaximumNumberOfActiveBundles++`]]
+:riskpools: pass:normal[xref:#PoolController-riskpools--[`++riskpools++`]]
+:getRiskpool: pass:normal[xref:#PoolController-getRiskpool-uint256-[`++getRiskpool++`]]
+:getRiskPoolForProduct: pass:normal[xref:#PoolController-getRiskPoolForProduct-uint256-[`++getRiskPoolForProduct++`]]
+:activeBundles: pass:normal[xref:#PoolController-activeBundles-uint256-[`++activeBundles++`]]
+:getActiveBundleId: pass:normal[xref:#PoolController-getActiveBundleId-uint256-uint256-[`++getActiveBundleId++`]]
+:addBundleIdToActiveSet: pass:normal[xref:#PoolController-addBundleIdToActiveSet-uint256-uint256-[`++addBundleIdToActiveSet++`]]
+:removeBundleIdFromActiveSet: pass:normal[xref:#PoolController-removeBundleIdFromActiveSet-uint256-uint256-[`++removeBundleIdFromActiveSet++`]]
+:getFullCollateralizationLevel: pass:normal[xref:#PoolController-getFullCollateralizationLevel--[`++getFullCollateralizationLevel++`]]
+:_getRiskpoolComponent: pass:normal[xref:#PoolController-_getRiskpoolComponent-struct-IPolicy-Metadata-[`++_getRiskpoolComponent++`]]
+:_getRiskpoolForId: pass:normal[xref:#PoolController-_getRiskpoolForId-uint256-[`++_getRiskpoolForId++`]]
+
+[.contract]
+[[PoolController]]
+=== `++PoolController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/PoolController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/PoolController.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-PoolController-onlyInstanceOperatorService--}[`++onlyInstanceOperatorService()++`]
+* {xref-PoolController-onlyRiskpoolService--}[`++onlyRiskpoolService()++`]
+* {xref-PoolController-onlyActivePool-uint256-}[`++onlyActivePool(riskpoolId)++`]
+* {xref-PoolController-onlyActivePoolForProcess-bytes32-}[`++onlyActivePoolForProcess(processId)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-PoolController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-PoolController-registerRiskpool-uint256-address-address-uint256-uint256-}[`++registerRiskpool(riskpoolId, wallet, erc20Token, collateralizationLevel, sumOfSumInsuredCap)++`]
+* {xref-PoolController-setRiskpoolForProduct-uint256-uint256-}[`++setRiskpoolForProduct(productId, riskpoolId)++`]
+* {xref-PoolController-fund-uint256-uint256-}[`++fund(riskpoolId, amount)++`]
+* {xref-PoolController-defund-uint256-uint256-}[`++defund(riskpoolId, amount)++`]
+* {xref-PoolController-underwrite-bytes32-}[`++underwrite(processId)++`]
+* {xref-PoolController-calculateCollateral-uint256-uint256-}[`++calculateCollateral(riskpoolId, sumInsuredAmount)++`]
+* {xref-PoolController-processPremium-bytes32-uint256-}[`++processPremium(processId, amount)++`]
+* {xref-PoolController-processPayout-bytes32-uint256-}[`++processPayout(processId, amount)++`]
+* {xref-PoolController-release-bytes32-}[`++release(processId)++`]
+* {xref-PoolController-setMaximumNumberOfActiveBundles-uint256-uint256-}[`++setMaximumNumberOfActiveBundles(riskpoolId, maxNumberOfActiveBundles)++`]
+* {xref-PoolController-getMaximumNumberOfActiveBundles-uint256-}[`++getMaximumNumberOfActiveBundles(riskpoolId)++`]
+* {xref-PoolController-riskpools--}[`++riskpools()++`]
+* {xref-PoolController-getRiskpool-uint256-}[`++getRiskpool(riskpoolId)++`]
+* {xref-PoolController-getRiskPoolForProduct-uint256-}[`++getRiskPoolForProduct(productId)++`]
+* {xref-PoolController-activeBundles-uint256-}[`++activeBundles(riskpoolId)++`]
+* {xref-PoolController-getActiveBundleId-uint256-uint256-}[`++getActiveBundleId(riskpoolId, bundleIdx)++`]
+* {xref-PoolController-addBundleIdToActiveSet-uint256-uint256-}[`++addBundleIdToActiveSet(riskpoolId, bundleId)++`]
+* {xref-PoolController-removeBundleIdFromActiveSet-uint256-uint256-}[`++removeBundleIdFromActiveSet(riskpoolId, bundleId)++`]
+* {xref-PoolController-getFullCollateralizationLevel--}[`++getFullCollateralizationLevel()++`]
+* {xref-PoolController-_getRiskpoolComponent-struct-IPolicy-Metadata-}[`++_getRiskpoolComponent(metadata)++`]
+* {xref-PoolController-_getRiskpoolForId-uint256-}[`++_getRiskpoolForId(riskpoolId)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IPool
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IPool
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPool.sol[`++LogRiskpoolRegistered(riskpoolId, wallet, erc20Token, collateralizationLevel, sumOfSumInsuredCap)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPool.sol[`++LogRiskpoolRequiredCollateral(processId, sumInsured, collateral)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPool.sol[`++LogRiskpoolCollateralizationFailed(riskpoolId, processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPool.sol[`++LogRiskpoolCollateralizationSucceeded(riskpoolId, processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IPool.sol[`++LogRiskpoolCollateralReleased(riskpoolId, processId, amount)++`]
+
+--
+
+[.contract-item]
+[[PoolController-onlyInstanceOperatorService--]]
+==== `[.contract-item-name]#++onlyInstanceOperatorService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PoolController-onlyRiskpoolService--]]
+==== `[.contract-item-name]#++onlyRiskpoolService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PoolController-onlyActivePool-uint256-]]
+==== `[.contract-item-name]#++onlyActivePool++#++(uint256 riskpoolId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PoolController-onlyActivePoolForProcess-bytes32-]]
+==== `[.contract-item-name]#++onlyActivePoolForProcess++#++(bytes32 processId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[PoolController-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[PoolController-registerRiskpool-uint256-address-address-uint256-uint256-]]
+==== `[.contract-item-name]#++registerRiskpool++#++(uint256 riskpoolId, address wallet, address erc20Token, uint256 collateralizationLevel, uint256 sumOfSumInsuredCap)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-setRiskpoolForProduct-uint256-uint256-]]
+==== `[.contract-item-name]#++setRiskpoolForProduct++#++(uint256 productId, uint256 riskpoolId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-fund-uint256-uint256-]]
+==== `[.contract-item-name]#++fund++#++(uint256 riskpoolId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-defund-uint256-uint256-]]
+==== `[.contract-item-name]#++defund++#++(uint256 riskpoolId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-underwrite-bytes32-]]
+==== `[.contract-item-name]#++underwrite++#++(bytes32 processId) → bool success++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-calculateCollateral-uint256-uint256-]]
+==== `[.contract-item-name]#++calculateCollateral++#++(uint256 riskpoolId, uint256 sumInsuredAmount) → uint256 collateralAmount++` [.item-kind]#public#
+
+[.contract-item]
+[[PoolController-processPremium-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPremium++#++(bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-processPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-release-bytes32-]]
+==== `[.contract-item-name]#++release++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-setMaximumNumberOfActiveBundles-uint256-uint256-]]
+==== `[.contract-item-name]#++setMaximumNumberOfActiveBundles++#++(uint256 riskpoolId, uint256 maxNumberOfActiveBundles)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-getMaximumNumberOfActiveBundles-uint256-]]
+==== `[.contract-item-name]#++getMaximumNumberOfActiveBundles++#++(uint256 riskpoolId) → uint256 maximumNumberOfActiveBundles++` [.item-kind]#public#
+
+[.contract-item]
+[[PoolController-riskpools--]]
+==== `[.contract-item-name]#++riskpools++#++() → uint256 idx++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-getRiskpool-uint256-]]
+==== `[.contract-item-name]#++getRiskpool++#++(uint256 riskpoolId) → struct IPool.Pool riskPool++` [.item-kind]#public#
+
+[.contract-item]
+[[PoolController-getRiskPoolForProduct-uint256-]]
+==== `[.contract-item-name]#++getRiskPoolForProduct++#++(uint256 productId) → uint256 riskpoolId++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-activeBundles-uint256-]]
+==== `[.contract-item-name]#++activeBundles++#++(uint256 riskpoolId) → uint256 numberOfActiveBundles++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-getActiveBundleId-uint256-uint256-]]
+==== `[.contract-item-name]#++getActiveBundleId++#++(uint256 riskpoolId, uint256 bundleIdx) → uint256 bundleId++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-addBundleIdToActiveSet-uint256-uint256-]]
+==== `[.contract-item-name]#++addBundleIdToActiveSet++#++(uint256 riskpoolId, uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-removeBundleIdFromActiveSet-uint256-uint256-]]
+==== `[.contract-item-name]#++removeBundleIdFromActiveSet++#++(uint256 riskpoolId, uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-getFullCollateralizationLevel--]]
+==== `[.contract-item-name]#++getFullCollateralizationLevel++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[PoolController-_getRiskpoolComponent-struct-IPolicy-Metadata-]]
+==== `[.contract-item-name]#++_getRiskpoolComponent++#++(struct IPolicy.Metadata metadata) → contract IRiskpool riskpool++` [.item-kind]#internal#
+
+[.contract-item]
+[[PoolController-_getRiskpoolForId-uint256-]]
+==== `[.contract-item-name]#++_getRiskpoolForId++#++(uint256 riskpoolId) → contract IRiskpool riskpool++` [.item-kind]#internal#
+
+:onlyOracleService: pass:normal[xref:#QueryModule-onlyOracleService--[`++onlyOracleService++`]]
+:onlyResponsibleOracle: pass:normal[xref:#QueryModule-onlyResponsibleOracle-uint256-address-[`++onlyResponsibleOracle++`]]
+:_afterInitialize: pass:normal[xref:#QueryModule-_afterInitialize--[`++_afterInitialize++`]]
+:request: pass:normal[xref:#QueryModule-request-bytes32-bytes-string-address-uint256-[`++request++`]]
+:respond: pass:normal[xref:#QueryModule-respond-uint256-address-bytes-[`++respond++`]]
+:cancel: pass:normal[xref:#QueryModule-cancel-uint256-[`++cancel++`]]
+:getProcessId: pass:normal[xref:#QueryModule-getProcessId-uint256-[`++getProcessId++`]]
+:getOracleRequestCount: pass:normal[xref:#QueryModule-getOracleRequestCount--[`++getOracleRequestCount++`]]
+:_getOracle: pass:normal[xref:#QueryModule-_getOracle-uint256-[`++_getOracle++`]]
+
+[.contract]
+[[QueryModule]]
+=== `++QueryModule++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/QueryModule.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/QueryModule.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-QueryModule-onlyOracleService--}[`++onlyOracleService()++`]
+* {xref-QueryModule-onlyResponsibleOracle-uint256-address-}[`++onlyResponsibleOracle(requestId, responder)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-QueryModule-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-QueryModule-request-bytes32-bytes-string-address-uint256-}[`++request(processId, input, callbackMethodName, callbackContractAddress, responsibleOracleId)++`]
+* {xref-QueryModule-respond-uint256-address-bytes-}[`++respond(requestId, responder, data)++`]
+* {xref-QueryModule-cancel-uint256-}[`++cancel(requestId)++`]
+* {xref-QueryModule-getProcessId-uint256-}[`++getProcessId(requestId)++`]
+* {xref-QueryModule-getOracleRequestCount--}[`++getOracleRequestCount()++`]
+* {xref-QueryModule-_getOracle-uint256-}[`++_getOracle(id)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IQuery
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IQuery
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IQuery.sol[`++LogOracleRequested(processId, requestId, responsibleOracleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IQuery.sol[`++LogOracleResponded(processId, requestId, responder, success)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IQuery.sol[`++LogOracleCanceled(requestId)++`]
+
+--
+
+[.contract-item]
+[[QueryModule-onlyOracleService--]]
+==== `[.contract-item-name]#++onlyOracleService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[QueryModule-onlyResponsibleOracle-uint256-address-]]
+==== `[.contract-item-name]#++onlyResponsibleOracle++#++(uint256 requestId, address responder)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[QueryModule-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[QueryModule-request-bytes32-bytes-string-address-uint256-]]
+==== `[.contract-item-name]#++request++#++(bytes32 processId, bytes input, string callbackMethodName, address callbackContractAddress, uint256 responsibleOracleId) → uint256 requestId++` [.item-kind]#external#
+
+[.contract-item]
+[[QueryModule-respond-uint256-address-bytes-]]
+==== `[.contract-item-name]#++respond++#++(uint256 requestId, address responder, bytes data)++` [.item-kind]#external#
+
+[.contract-item]
+[[QueryModule-cancel-uint256-]]
+==== `[.contract-item-name]#++cancel++#++(uint256 requestId)++` [.item-kind]#external#
+
+[.contract-item]
+[[QueryModule-getProcessId-uint256-]]
+==== `[.contract-item-name]#++getProcessId++#++(uint256 requestId) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[QueryModule-getOracleRequestCount--]]
+==== `[.contract-item-name]#++getOracleRequestCount++#++() → uint256 _count++` [.item-kind]#public#
+
+[.contract-item]
+[[QueryModule-_getOracle-uint256-]]
+==== `[.contract-item-name]#++_getOracle++#++(uint256 id) → contract IOracle oracle++` [.item-kind]#internal#
+
+:MAX_CONTRACTS: pass:normal[xref:#RegistryController-MAX_CONTRACTS-uint256[`++MAX_CONTRACTS++`]]
+:release: pass:normal[xref:#RegistryController-release-bytes32[`++release++`]]
+:startBlock: pass:normal[xref:#RegistryController-startBlock-uint256[`++startBlock++`]]
+:_contracts: pass:normal[xref:#RegistryController-_contracts-mapping-bytes32----mapping-bytes32----address--[`++_contracts++`]]
+:_contractsInRelease: pass:normal[xref:#RegistryController-_contractsInRelease-mapping-bytes32----uint256-[`++_contractsInRelease++`]]
+:initializeRegistry: pass:normal[xref:#RegistryController-initializeRegistry-bytes32-[`++initializeRegistry++`]]
+:ensureSender: pass:normal[xref:#RegistryController-ensureSender-address-bytes32-[`++ensureSender++`]]
+:getRelease: pass:normal[xref:#RegistryController-getRelease--[`++getRelease++`]]
+:getContract: pass:normal[xref:#RegistryController-getContract-bytes32-[`++getContract++`]]
+:register: pass:normal[xref:#RegistryController-register-bytes32-address-[`++register++`]]
+:deregister: pass:normal[xref:#RegistryController-deregister-bytes32-[`++deregister++`]]
+:getContractInRelease: pass:normal[xref:#RegistryController-getContractInRelease-bytes32-bytes32-[`++getContractInRelease++`]]
+:registerInRelease: pass:normal[xref:#RegistryController-registerInRelease-bytes32-bytes32-address-[`++registerInRelease++`]]
+:deregisterInRelease: pass:normal[xref:#RegistryController-deregisterInRelease-bytes32-bytes32-[`++deregisterInRelease++`]]
+:prepareRelease: pass:normal[xref:#RegistryController-prepareRelease-bytes32-[`++prepareRelease++`]]
+:contracts: pass:normal[xref:#RegistryController-contracts--[`++contracts++`]]
+:contractName: pass:normal[xref:#RegistryController-contractName-uint256-[`++contractName++`]]
+:_getContractInRelease: pass:normal[xref:#RegistryController-_getContractInRelease-bytes32-bytes32-[`++_getContractInRelease++`]]
+:_registerInRelease: pass:normal[xref:#RegistryController-_registerInRelease-bytes32-bool-bytes32-address-[`++_registerInRelease++`]]
+:_deregisterInRelease: pass:normal[xref:#RegistryController-_deregisterInRelease-bytes32-bytes32-[`++_deregisterInRelease++`]]
+
+[.contract]
+[[RegistryController]]
+=== `++RegistryController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/RegistryController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/RegistryController.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-RegistryController-initializeRegistry-bytes32-}[`++initializeRegistry(_initialRelease)++`]
+* {xref-RegistryController-ensureSender-address-bytes32-}[`++ensureSender(sender, _contractName)++`]
+* {xref-RegistryController-getRelease--}[`++getRelease()++`]
+* {xref-RegistryController-getContract-bytes32-}[`++getContract(_contractName)++`]
+* {xref-RegistryController-register-bytes32-address-}[`++register(_contractName, _contractAddress)++`]
+* {xref-RegistryController-deregister-bytes32-}[`++deregister(_contractName)++`]
+* {xref-RegistryController-getContractInRelease-bytes32-bytes32-}[`++getContractInRelease(_release, _contractName)++`]
+* {xref-RegistryController-registerInRelease-bytes32-bytes32-address-}[`++registerInRelease(_release, _contractName, _contractAddress)++`]
+* {xref-RegistryController-deregisterInRelease-bytes32-bytes32-}[`++deregisterInRelease(_release, _contractName)++`]
+* {xref-RegistryController-prepareRelease-bytes32-}[`++prepareRelease(_newRelease)++`]
+* {xref-RegistryController-contracts--}[`++contracts()++`]
+* {xref-RegistryController-contractName-uint256-}[`++contractName(idx)++`]
+* {xref-RegistryController-_getContractInRelease-bytes32-bytes32-}[`++_getContractInRelease(_release, _contractName)++`]
+* {xref-RegistryController-_registerInRelease-bytes32-bool-bytes32-address-}[`++_registerInRelease(_release, isNewRelease, _contractName, _contractAddress)++`]
+* {xref-RegistryController-_deregisterInRelease-bytes32-bytes32-}[`++_deregisterInRelease(_release, _contractName)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IRegistry
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IRegistry
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IRegistry.sol[`++LogContractRegistered(release, contractName, contractAddress, isNew)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IRegistry.sol[`++LogContractDeregistered(release, contractName)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IRegistry.sol[`++LogReleasePrepared(release)++`]
+
+--
+
+[.contract-item]
+[[RegistryController-initializeRegistry-bytes32-]]
+==== `[.contract-item-name]#++initializeRegistry++#++(bytes32 _initialRelease)++` [.item-kind]#public#
+
+[.contract-item]
+[[RegistryController-ensureSender-address-bytes32-]]
+==== `[.contract-item-name]#++ensureSender++#++(address sender, bytes32 _contractName) → bool _senderMatches++` [.item-kind]#external#
+
+[.contract-item]
+[[RegistryController-getRelease--]]
+==== `[.contract-item-name]#++getRelease++#++() → bytes32 _release++` [.item-kind]#external#
+
+get current release
+
+[.contract-item]
+[[RegistryController-getContract-bytes32-]]
+==== `[.contract-item-name]#++getContract++#++(bytes32 _contractName) → address _addr++` [.item-kind]#public#
+
+Get contract's address in the current release
+
+[.contract-item]
+[[RegistryController-register-bytes32-address-]]
+==== `[.contract-item-name]#++register++#++(bytes32 _contractName, address _contractAddress)++` [.item-kind]#external#
+
+Register contract in the current release
+
+[.contract-item]
+[[RegistryController-deregister-bytes32-]]
+==== `[.contract-item-name]#++deregister++#++(bytes32 _contractName)++` [.item-kind]#external#
+
+Deregister contract in the current release
+
+[.contract-item]
+[[RegistryController-getContractInRelease-bytes32-bytes32-]]
+==== `[.contract-item-name]#++getContractInRelease++#++(bytes32 _release, bytes32 _contractName) → address _addr++` [.item-kind]#external#
+
+Get contract's address in certain release
+
+[.contract-item]
+[[RegistryController-registerInRelease-bytes32-bytes32-address-]]
+==== `[.contract-item-name]#++registerInRelease++#++(bytes32 _release, bytes32 _contractName, address _contractAddress)++` [.item-kind]#external#
+
+Register contract in certain release
+
+[.contract-item]
+[[RegistryController-deregisterInRelease-bytes32-bytes32-]]
+==== `[.contract-item-name]#++deregisterInRelease++#++(bytes32 _release, bytes32 _contractName)++` [.item-kind]#external#
+
+[.contract-item]
+[[RegistryController-prepareRelease-bytes32-]]
+==== `[.contract-item-name]#++prepareRelease++#++(bytes32 _newRelease)++` [.item-kind]#external#
+
+Create new release, copy contracts from previous release
+
+[.contract-item]
+[[RegistryController-contracts--]]
+==== `[.contract-item-name]#++contracts++#++() → uint256 _numberOfContracts++` [.item-kind]#external#
+
+[.contract-item]
+[[RegistryController-contractName-uint256-]]
+==== `[.contract-item-name]#++contractName++#++(uint256 idx) → bytes32 _contractName++` [.item-kind]#external#
+
+[.contract-item]
+[[RegistryController-_getContractInRelease-bytes32-bytes32-]]
+==== `[.contract-item-name]#++_getContractInRelease++#++(bytes32 _release, bytes32 _contractName) → address _addr++` [.item-kind]#internal#
+
+Get contract's address in certain release
+
+[.contract-item]
+[[RegistryController-_registerInRelease-bytes32-bool-bytes32-address-]]
+==== `[.contract-item-name]#++_registerInRelease++#++(bytes32 _release, bool isNewRelease, bytes32 _contractName, address _contractAddress)++` [.item-kind]#internal#
+
+Register contract in certain release
+
+[.contract-item]
+[[RegistryController-_deregisterInRelease-bytes32-bytes32-]]
+==== `[.contract-item-name]#++_deregisterInRelease++#++(bytes32 _release, bytes32 _contractName)++` [.item-kind]#internal#
+
+Deregister contract in certain release
+
+:FRACTION_FULL_UNIT: pass:normal[xref:#TreasuryModule-FRACTION_FULL_UNIT-uint256[`++FRACTION_FULL_UNIT++`]]
+:FRACTIONAL_FEE_MAX: pass:normal[xref:#TreasuryModule-FRACTIONAL_FEE_MAX-uint256[`++FRACTIONAL_FEE_MAX++`]]
+:LogTransferHelperInputValidation1Failed: pass:normal[xref:#TreasuryModule-LogTransferHelperInputValidation1Failed-bool-address-address-[`++LogTransferHelperInputValidation1Failed++`]]
+:LogTransferHelperInputValidation2Failed: pass:normal[xref:#TreasuryModule-LogTransferHelperInputValidation2Failed-uint256-uint256-[`++LogTransferHelperInputValidation2Failed++`]]
+:LogTransferHelperCallFailed: pass:normal[xref:#TreasuryModule-LogTransferHelperCallFailed-bool-uint256-bytes-[`++LogTransferHelperCallFailed++`]]
+:instanceWalletDefined: pass:normal[xref:#TreasuryModule-instanceWalletDefined--[`++instanceWalletDefined++`]]
+:riskpoolWalletDefinedForProcess: pass:normal[xref:#TreasuryModule-riskpoolWalletDefinedForProcess-bytes32-[`++riskpoolWalletDefinedForProcess++`]]
+:riskpoolWalletDefinedForBundle: pass:normal[xref:#TreasuryModule-riskpoolWalletDefinedForBundle-uint256-[`++riskpoolWalletDefinedForBundle++`]]
+:whenNotSuspended: pass:normal[xref:#TreasuryModule-whenNotSuspended--[`++whenNotSuspended++`]]
+:onlyRiskpoolService: pass:normal[xref:#TreasuryModule-onlyRiskpoolService--[`++onlyRiskpoolService++`]]
+:_afterInitialize: pass:normal[xref:#TreasuryModule-_afterInitialize--[`++_afterInitialize++`]]
+:suspend: pass:normal[xref:#TreasuryModule-suspend--[`++suspend++`]]
+:resume: pass:normal[xref:#TreasuryModule-resume--[`++resume++`]]
+:setProductToken: pass:normal[xref:#TreasuryModule-setProductToken-uint256-address-[`++setProductToken++`]]
+:setInstanceWallet: pass:normal[xref:#TreasuryModule-setInstanceWallet-address-[`++setInstanceWallet++`]]
+:setRiskpoolWallet: pass:normal[xref:#TreasuryModule-setRiskpoolWallet-uint256-address-[`++setRiskpoolWallet++`]]
+:createFeeSpecification: pass:normal[xref:#TreasuryModule-createFeeSpecification-uint256-uint256-uint256-bytes-[`++createFeeSpecification++`]]
+:setPremiumFees: pass:normal[xref:#TreasuryModule-setPremiumFees-struct-ITreasury-FeeSpecification-[`++setPremiumFees++`]]
+:setCapitalFees: pass:normal[xref:#TreasuryModule-setCapitalFees-struct-ITreasury-FeeSpecification-[`++setCapitalFees++`]]
+:calculateFee: pass:normal[xref:#TreasuryModule-calculateFee-uint256-uint256-[`++calculateFee++`]]
+:processPremium: pass:normal[xref:#TreasuryModule-processPremium-bytes32-[`++processPremium++`]]
+:processPremium: pass:normal[xref:#TreasuryModule-processPremium-bytes32-uint256-[`++processPremium++`]]
+:processPayout: pass:normal[xref:#TreasuryModule-processPayout-bytes32-uint256-[`++processPayout++`]]
+:processCapital: pass:normal[xref:#TreasuryModule-processCapital-uint256-uint256-[`++processCapital++`]]
+:processWithdrawal: pass:normal[xref:#TreasuryModule-processWithdrawal-uint256-uint256-[`++processWithdrawal++`]]
+:getComponentToken: pass:normal[xref:#TreasuryModule-getComponentToken-uint256-[`++getComponentToken++`]]
+:getFeeSpecification: pass:normal[xref:#TreasuryModule-getFeeSpecification-uint256-[`++getFeeSpecification++`]]
+:getFractionFullUnit: pass:normal[xref:#TreasuryModule-getFractionFullUnit--[`++getFractionFullUnit++`]]
+:getInstanceWallet: pass:normal[xref:#TreasuryModule-getInstanceWallet--[`++getInstanceWallet++`]]
+:getRiskpoolWallet: pass:normal[xref:#TreasuryModule-getRiskpoolWallet-uint256-[`++getRiskpoolWallet++`]]
+:_calculatePremiumFee: pass:normal[xref:#TreasuryModule-_calculatePremiumFee-struct-ITreasury-FeeSpecification-bytes32-[`++_calculatePremiumFee++`]]
+:_calculateFee: pass:normal[xref:#TreasuryModule-_calculateFee-struct-ITreasury-FeeSpecification-uint256-[`++_calculateFee++`]]
+:_getRiskpoolWallet: pass:normal[xref:#TreasuryModule-_getRiskpoolWallet-bytes32-[`++_getRiskpoolWallet++`]]
+
+[.contract]
+[[TreasuryModule]]
+=== `++TreasuryModule++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/modules/TreasuryModule.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/modules/TreasuryModule.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-TreasuryModule-instanceWalletDefined--}[`++instanceWalletDefined()++`]
+* {xref-TreasuryModule-riskpoolWalletDefinedForProcess-bytes32-}[`++riskpoolWalletDefinedForProcess(processId)++`]
+* {xref-TreasuryModule-riskpoolWalletDefinedForBundle-uint256-}[`++riskpoolWalletDefinedForBundle(bundleId)++`]
+* {xref-TreasuryModule-whenNotSuspended--}[`++whenNotSuspended()++`]
+* {xref-TreasuryModule-onlyRiskpoolService--}[`++onlyRiskpoolService()++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-TreasuryModule-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-TreasuryModule-suspend--}[`++suspend()++`]
+* {xref-TreasuryModule-resume--}[`++resume()++`]
+* {xref-TreasuryModule-setProductToken-uint256-address-}[`++setProductToken(productId, erc20Address)++`]
+* {xref-TreasuryModule-setInstanceWallet-address-}[`++setInstanceWallet(instanceWalletAddress)++`]
+* {xref-TreasuryModule-setRiskpoolWallet-uint256-address-}[`++setRiskpoolWallet(riskpoolId, riskpoolWalletAddress)++`]
+* {xref-TreasuryModule-createFeeSpecification-uint256-uint256-uint256-bytes-}[`++createFeeSpecification(componentId, fixedFee, fractionalFee, feeCalculationData)++`]
+* {xref-TreasuryModule-setPremiumFees-struct-ITreasury-FeeSpecification-}[`++setPremiumFees(feeSpec)++`]
+* {xref-TreasuryModule-setCapitalFees-struct-ITreasury-FeeSpecification-}[`++setCapitalFees(feeSpec)++`]
+* {xref-TreasuryModule-calculateFee-uint256-uint256-}[`++calculateFee(componentId, amount)++`]
+* {xref-TreasuryModule-processPremium-bytes32-}[`++processPremium(processId)++`]
+* {xref-TreasuryModule-processPremium-bytes32-uint256-}[`++processPremium(processId, amount)++`]
+* {xref-TreasuryModule-processPayout-bytes32-uint256-}[`++processPayout(processId, payoutId)++`]
+* {xref-TreasuryModule-processCapital-uint256-uint256-}[`++processCapital(bundleId, capitalAmount)++`]
+* {xref-TreasuryModule-processWithdrawal-uint256-uint256-}[`++processWithdrawal(bundleId, amount)++`]
+* {xref-TreasuryModule-getComponentToken-uint256-}[`++getComponentToken(componentId)++`]
+* {xref-TreasuryModule-getFeeSpecification-uint256-}[`++getFeeSpecification(componentId)++`]
+* {xref-TreasuryModule-getFractionFullUnit--}[`++getFractionFullUnit()++`]
+* {xref-TreasuryModule-getInstanceWallet--}[`++getInstanceWallet()++`]
+* {xref-TreasuryModule-getRiskpoolWallet-uint256-}[`++getRiskpoolWallet(riskpoolId)++`]
+* {xref-TreasuryModule-_calculatePremiumFee-struct-ITreasury-FeeSpecification-bytes32-}[`++_calculatePremiumFee(feeSpec, processId)++`]
+* {xref-TreasuryModule-_calculateFee-struct-ITreasury-FeeSpecification-uint256-}[`++_calculateFee(feeSpec, amount)++`]
+* {xref-TreasuryModule-_getRiskpoolWallet-bytes32-}[`++_getRiskpoolWallet(processId)++`]
+
+[.contract-subindex-inherited]
+.Pausable
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-paused--[`++paused()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-_requireNotPaused--[`++_requireNotPaused()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-_requirePaused--[`++_requirePaused()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-_pause--[`++_pause()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-_unpause--[`++_unpause()++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.ITreasury
+
+--
+
+[.contract-index]
+.Events
+--
+* {xref-TreasuryModule-LogTransferHelperInputValidation1Failed-bool-address-address-}[`++LogTransferHelperInputValidation1Failed(tokenIsContract, from, to)++`]
+* {xref-TreasuryModule-LogTransferHelperInputValidation2Failed-uint256-uint256-}[`++LogTransferHelperInputValidation2Failed(balance, allowance)++`]
+* {xref-TreasuryModule-LogTransferHelperCallFailed-bool-uint256-bytes-}[`++LogTransferHelperCallFailed(callSuccess, returnDataLength, returnData)++`]
+
+[.contract-subindex-inherited]
+.Pausable
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-Paused-address-[`++Paused(account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/security#Pausable-Unpaused-address-[`++Unpaused(account)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.ITreasury
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasurySuspended()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryResumed()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryProductTokenSet(productId, riskpoolId, erc20Address)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryInstanceWalletSet(walletAddress)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryRiskpoolWalletSet(riskpoolId, walletAddress)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryPremiumFeesSet(productId, fixedFee, fractionalFee)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryCapitalFeesSet(riskpoolId, fixedFee, fractionalFee)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryPremiumTransferred(from, riskpoolWalletAddress, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryPayoutTransferred(riskpoolWalletAddress, to, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryCapitalTransferred(from, riskpoolWalletAddress, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryFeesTransferred(from, instanceWalletAddress, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryWithdrawalTransferred(riskpoolWalletAddress, to, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryPremiumProcessed(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryPayoutProcessed(riskpoolId, to, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryCapitalProcessed(riskpoolId, bundleId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/ITreasury.sol[`++LogTreasuryWithdrawalProcessed(riskpoolId, bundleId, amount)++`]
+
+--
+
+[.contract-item]
+[[TreasuryModule-instanceWalletDefined--]]
+==== `[.contract-item-name]#++instanceWalletDefined++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[TreasuryModule-riskpoolWalletDefinedForProcess-bytes32-]]
+==== `[.contract-item-name]#++riskpoolWalletDefinedForProcess++#++(bytes32 processId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[TreasuryModule-riskpoolWalletDefinedForBundle-uint256-]]
+==== `[.contract-item-name]#++riskpoolWalletDefinedForBundle++#++(uint256 bundleId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[TreasuryModule-whenNotSuspended--]]
+==== `[.contract-item-name]#++whenNotSuspended++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[TreasuryModule-onlyRiskpoolService--]]
+==== `[.contract-item-name]#++onlyRiskpoolService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[TreasuryModule-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[TreasuryModule-suspend--]]
+==== `[.contract-item-name]#++suspend++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-resume--]]
+==== `[.contract-item-name]#++resume++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-setProductToken-uint256-address-]]
+==== `[.contract-item-name]#++setProductToken++#++(uint256 productId, address erc20Address)++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-setInstanceWallet-address-]]
+==== `[.contract-item-name]#++setInstanceWallet++#++(address instanceWalletAddress)++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-setRiskpoolWallet-uint256-address-]]
+==== `[.contract-item-name]#++setRiskpoolWallet++#++(uint256 riskpoolId, address riskpoolWalletAddress)++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-createFeeSpecification-uint256-uint256-uint256-bytes-]]
+==== `[.contract-item-name]#++createFeeSpecification++#++(uint256 componentId, uint256 fixedFee, uint256 fractionalFee, bytes feeCalculationData) → struct ITreasury.FeeSpecification++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-setPremiumFees-struct-ITreasury-FeeSpecification-]]
+==== `[.contract-item-name]#++setPremiumFees++#++(struct ITreasury.FeeSpecification feeSpec)++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-setCapitalFees-struct-ITreasury-FeeSpecification-]]
+==== `[.contract-item-name]#++setCapitalFees++#++(struct ITreasury.FeeSpecification feeSpec)++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-calculateFee-uint256-uint256-]]
+==== `[.contract-item-name]#++calculateFee++#++(uint256 componentId, uint256 amount) → uint256 feeAmount, uint256 netAmount++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-processPremium-bytes32-]]
+==== `[.contract-item-name]#++processPremium++#++(bytes32 processId) → bool success, uint256 feeAmount, uint256 netPremiumAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-processPremium-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPremium++#++(bytes32 processId, uint256 amount) → bool success, uint256 feeAmount, uint256 netAmount++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-processPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(bytes32 processId, uint256 payoutId) → uint256 feeAmount, uint256 netPayoutAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-processCapital-uint256-uint256-]]
+==== `[.contract-item-name]#++processCapital++#++(uint256 bundleId, uint256 capitalAmount) → uint256 feeAmount, uint256 netCapitalAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-processWithdrawal-uint256-uint256-]]
+==== `[.contract-item-name]#++processWithdrawal++#++(uint256 bundleId, uint256 amount) → uint256 feeAmount, uint256 netAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[TreasuryModule-getComponentToken-uint256-]]
+==== `[.contract-item-name]#++getComponentToken++#++(uint256 componentId) → contract IERC20 token++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-getFeeSpecification-uint256-]]
+==== `[.contract-item-name]#++getFeeSpecification++#++(uint256 componentId) → struct ITreasury.FeeSpecification++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-getFractionFullUnit--]]
+==== `[.contract-item-name]#++getFractionFullUnit++#++() → uint256++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-getInstanceWallet--]]
+==== `[.contract-item-name]#++getInstanceWallet++#++() → address++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-getRiskpoolWallet-uint256-]]
+==== `[.contract-item-name]#++getRiskpoolWallet++#++(uint256 riskpoolId) → address++` [.item-kind]#public#
+
+[.contract-item]
+[[TreasuryModule-_calculatePremiumFee-struct-ITreasury-FeeSpecification-bytes32-]]
+==== `[.contract-item-name]#++_calculatePremiumFee++#++(struct ITreasury.FeeSpecification feeSpec, bytes32 processId) → struct IPolicy.Application application, uint256 feeAmount++` [.item-kind]#internal#
+
+[.contract-item]
+[[TreasuryModule-_calculateFee-struct-ITreasury-FeeSpecification-uint256-]]
+==== `[.contract-item-name]#++_calculateFee++#++(struct ITreasury.FeeSpecification feeSpec, uint256 amount) → uint256 feeAmount++` [.item-kind]#internal#
+
+[.contract-item]
+[[TreasuryModule-_getRiskpoolWallet-bytes32-]]
+==== `[.contract-item-name]#++_getRiskpoolWallet++#++(bytes32 processId) → uint256 riskpoolId, address riskpoolWalletAddress++` [.item-kind]#internal#
+
+[.contract-item]
+[[TreasuryModule-LogTransferHelperInputValidation1Failed-bool-address-address-]]
+==== `[.contract-item-name]#++LogTransferHelperInputValidation1Failed++#++(bool tokenIsContract, address from, address to)++` [.item-kind]#event#
+
+[.contract-item]
+[[TreasuryModule-LogTransferHelperInputValidation2Failed-uint256-uint256-]]
+==== `[.contract-item-name]#++LogTransferHelperInputValidation2Failed++#++(uint256 balance, uint256 allowance)++` [.item-kind]#event#
+
+[.contract-item]
+[[TreasuryModule-LogTransferHelperCallFailed-bool-uint256-bytes-]]
+==== `[.contract-item-name]#++LogTransferHelperCallFailed++#++(bool callSuccess, uint256 returnDataLength, bytes returnData)++` [.item-kind]#event#
+
diff --git a/docs/modules/api/pages/services.adoc b/docs/modules/api/pages/services.adoc
new file mode 100644
index 00000000..056b0f8b
--- /dev/null
+++ b/docs/modules/api/pages/services.adoc
@@ -0,0 +1,1134 @@
+:github-icon: pass:[]
+:xref-ComponentOwnerService-onlyOwnerWithRoleFromComponent-contract-IComponent-: xref:services.adoc#ComponentOwnerService-onlyOwnerWithRoleFromComponent-contract-IComponent-
+:xref-ComponentOwnerService-onlyOwnerWithRole-uint256-: xref:services.adoc#ComponentOwnerService-onlyOwnerWithRole-uint256-
+:xref-ComponentOwnerService-_afterInitialize--: xref:services.adoc#ComponentOwnerService-_afterInitialize--
+:xref-ComponentOwnerService-propose-contract-IComponent-: xref:services.adoc#ComponentOwnerService-propose-contract-IComponent-
+:xref-ComponentOwnerService-stake-uint256-: xref:services.adoc#ComponentOwnerService-stake-uint256-
+:xref-ComponentOwnerService-withdraw-uint256-: xref:services.adoc#ComponentOwnerService-withdraw-uint256-
+:xref-ComponentOwnerService-pause-uint256-: xref:services.adoc#ComponentOwnerService-pause-uint256-
+:xref-ComponentOwnerService-unpause-uint256-: xref:services.adoc#ComponentOwnerService-unpause-uint256-
+:xref-ComponentOwnerService-archive-uint256-: xref:services.adoc#ComponentOwnerService-archive-uint256-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-InstanceOperatorService-onlyInstanceOperatorAddress--: xref:services.adoc#InstanceOperatorService-onlyInstanceOperatorAddress--
+:xref-InstanceOperatorService-_afterInitialize--: xref:services.adoc#InstanceOperatorService-_afterInitialize--
+:xref-InstanceOperatorService-prepareRelease-bytes32-: xref:services.adoc#InstanceOperatorService-prepareRelease-bytes32-
+:xref-InstanceOperatorService-register-bytes32-address-: xref:services.adoc#InstanceOperatorService-register-bytes32-address-
+:xref-InstanceOperatorService-deregister-bytes32-: xref:services.adoc#InstanceOperatorService-deregister-bytes32-
+:xref-InstanceOperatorService-registerInRelease-bytes32-bytes32-address-: xref:services.adoc#InstanceOperatorService-registerInRelease-bytes32-bytes32-address-
+:xref-InstanceOperatorService-deregisterInRelease-bytes32-bytes32-: xref:services.adoc#InstanceOperatorService-deregisterInRelease-bytes32-bytes32-
+:xref-InstanceOperatorService-createRole-bytes32-: xref:services.adoc#InstanceOperatorService-createRole-bytes32-
+:xref-InstanceOperatorService-invalidateRole-bytes32-: xref:services.adoc#InstanceOperatorService-invalidateRole-bytes32-
+:xref-InstanceOperatorService-grantRole-bytes32-address-: xref:services.adoc#InstanceOperatorService-grantRole-bytes32-address-
+:xref-InstanceOperatorService-revokeRole-bytes32-address-: xref:services.adoc#InstanceOperatorService-revokeRole-bytes32-address-
+:xref-InstanceOperatorService-approve-uint256-: xref:services.adoc#InstanceOperatorService-approve-uint256-
+:xref-InstanceOperatorService-decline-uint256-: xref:services.adoc#InstanceOperatorService-decline-uint256-
+:xref-InstanceOperatorService-suspend-uint256-: xref:services.adoc#InstanceOperatorService-suspend-uint256-
+:xref-InstanceOperatorService-resume-uint256-: xref:services.adoc#InstanceOperatorService-resume-uint256-
+:xref-InstanceOperatorService-archive-uint256-: xref:services.adoc#InstanceOperatorService-archive-uint256-
+:xref-InstanceOperatorService-setDefaultStaking-uint16-bytes-: xref:services.adoc#InstanceOperatorService-setDefaultStaking-uint16-bytes-
+:xref-InstanceOperatorService-adjustStakingRequirements-uint256-bytes-: xref:services.adoc#InstanceOperatorService-adjustStakingRequirements-uint256-bytes-
+:xref-InstanceOperatorService-suspendTreasury--: xref:services.adoc#InstanceOperatorService-suspendTreasury--
+:xref-InstanceOperatorService-resumeTreasury--: xref:services.adoc#InstanceOperatorService-resumeTreasury--
+:xref-InstanceOperatorService-setInstanceWallet-address-: xref:services.adoc#InstanceOperatorService-setInstanceWallet-address-
+:xref-InstanceOperatorService-setRiskpoolWallet-uint256-address-: xref:services.adoc#InstanceOperatorService-setRiskpoolWallet-uint256-address-
+:xref-InstanceOperatorService-setProductToken-uint256-address-: xref:services.adoc#InstanceOperatorService-setProductToken-uint256-address-
+:xref-InstanceOperatorService-createFeeSpecification-uint256-uint256-uint256-bytes-: xref:services.adoc#InstanceOperatorService-createFeeSpecification-uint256-uint256-uint256-bytes-
+:xref-InstanceOperatorService-setPremiumFees-struct-ITreasury-FeeSpecification-: xref:services.adoc#InstanceOperatorService-setPremiumFees-struct-ITreasury-FeeSpecification-
+:xref-InstanceOperatorService-setCapitalFees-struct-ITreasury-FeeSpecification-: xref:services.adoc#InstanceOperatorService-setCapitalFees-struct-ITreasury-FeeSpecification-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-InstanceService-_afterInitialize--: xref:services.adoc#InstanceService-_afterInitialize--
+:xref-InstanceService-_setChainNames--: xref:services.adoc#InstanceService-_setChainNames--
+:xref-InstanceService-getChainId--: xref:services.adoc#InstanceService-getChainId--
+:xref-InstanceService-getChainName--: xref:services.adoc#InstanceService-getChainName--
+:xref-InstanceService-getInstanceId--: xref:services.adoc#InstanceService-getInstanceId--
+:xref-InstanceService-getInstanceOperator--: xref:services.adoc#InstanceService-getInstanceOperator--
+:xref-InstanceService-getComponentOwnerService--: xref:services.adoc#InstanceService-getComponentOwnerService--
+:xref-InstanceService-getInstanceOperatorService--: xref:services.adoc#InstanceService-getInstanceOperatorService--
+:xref-InstanceService-getOracleService--: xref:services.adoc#InstanceService-getOracleService--
+:xref-InstanceService-getProductService--: xref:services.adoc#InstanceService-getProductService--
+:xref-InstanceService-getRiskpoolService--: xref:services.adoc#InstanceService-getRiskpoolService--
+:xref-InstanceService-getRegistry--: xref:services.adoc#InstanceService-getRegistry--
+:xref-InstanceService-contracts--: xref:services.adoc#InstanceService-contracts--
+:xref-InstanceService-contractName-uint256-: xref:services.adoc#InstanceService-contractName-uint256-
+:xref-InstanceService-getDefaultAdminRole--: xref:services.adoc#InstanceService-getDefaultAdminRole--
+:xref-InstanceService-getProductOwnerRole--: xref:services.adoc#InstanceService-getProductOwnerRole--
+:xref-InstanceService-getOracleProviderRole--: xref:services.adoc#InstanceService-getOracleProviderRole--
+:xref-InstanceService-getRiskpoolKeeperRole--: xref:services.adoc#InstanceService-getRiskpoolKeeperRole--
+:xref-InstanceService-hasRole-bytes32-address-: xref:services.adoc#InstanceService-hasRole-bytes32-address-
+:xref-InstanceService-products--: xref:services.adoc#InstanceService-products--
+:xref-InstanceService-oracles--: xref:services.adoc#InstanceService-oracles--
+:xref-InstanceService-riskpools--: xref:services.adoc#InstanceService-riskpools--
+:xref-InstanceService-getComponentId-address-: xref:services.adoc#InstanceService-getComponentId-address-
+:xref-InstanceService-getComponentType-uint256-: xref:services.adoc#InstanceService-getComponentType-uint256-
+:xref-InstanceService-getComponentState-uint256-: xref:services.adoc#InstanceService-getComponentState-uint256-
+:xref-InstanceService-getComponent-uint256-: xref:services.adoc#InstanceService-getComponent-uint256-
+:xref-InstanceService-getOracleId-uint256-: xref:services.adoc#InstanceService-getOracleId-uint256-
+:xref-InstanceService-getRiskpoolId-uint256-: xref:services.adoc#InstanceService-getRiskpoolId-uint256-
+:xref-InstanceService-getProductId-uint256-: xref:services.adoc#InstanceService-getProductId-uint256-
+:xref-InstanceService-getStakingRequirements-uint256-: xref:services.adoc#InstanceService-getStakingRequirements-uint256-
+:xref-InstanceService-getStakedAssets-uint256-: xref:services.adoc#InstanceService-getStakedAssets-uint256-
+:xref-InstanceService-processIds--: xref:services.adoc#InstanceService-processIds--
+:xref-InstanceService-getMetadata-bytes32-: xref:services.adoc#InstanceService-getMetadata-bytes32-
+:xref-InstanceService-getApplication-bytes32-: xref:services.adoc#InstanceService-getApplication-bytes32-
+:xref-InstanceService-getPolicy-bytes32-: xref:services.adoc#InstanceService-getPolicy-bytes32-
+:xref-InstanceService-claims-bytes32-: xref:services.adoc#InstanceService-claims-bytes32-
+:xref-InstanceService-payouts-bytes32-: xref:services.adoc#InstanceService-payouts-bytes32-
+:xref-InstanceService-getClaim-bytes32-uint256-: xref:services.adoc#InstanceService-getClaim-bytes32-uint256-
+:xref-InstanceService-getPayout-bytes32-uint256-: xref:services.adoc#InstanceService-getPayout-bytes32-uint256-
+:xref-InstanceService-getRiskpool-uint256-: xref:services.adoc#InstanceService-getRiskpool-uint256-
+:xref-InstanceService-getFullCollateralizationLevel--: xref:services.adoc#InstanceService-getFullCollateralizationLevel--
+:xref-InstanceService-getCapital-uint256-: xref:services.adoc#InstanceService-getCapital-uint256-
+:xref-InstanceService-getTotalValueLocked-uint256-: xref:services.adoc#InstanceService-getTotalValueLocked-uint256-
+:xref-InstanceService-getCapacity-uint256-: xref:services.adoc#InstanceService-getCapacity-uint256-
+:xref-InstanceService-getBalance-uint256-: xref:services.adoc#InstanceService-getBalance-uint256-
+:xref-InstanceService-activeBundles-uint256-: xref:services.adoc#InstanceService-activeBundles-uint256-
+:xref-InstanceService-getActiveBundleId-uint256-uint256-: xref:services.adoc#InstanceService-getActiveBundleId-uint256-uint256-
+:xref-InstanceService-getMaximumNumberOfActiveBundles-uint256-: xref:services.adoc#InstanceService-getMaximumNumberOfActiveBundles-uint256-
+:xref-InstanceService-getBundleToken--: xref:services.adoc#InstanceService-getBundleToken--
+:xref-InstanceService-getBundle-uint256-: xref:services.adoc#InstanceService-getBundle-uint256-
+:xref-InstanceService-bundles--: xref:services.adoc#InstanceService-bundles--
+:xref-InstanceService-unburntBundles-uint256-: xref:services.adoc#InstanceService-unburntBundles-uint256-
+:xref-InstanceService-getTreasuryAddress--: xref:services.adoc#InstanceService-getTreasuryAddress--
+:xref-InstanceService-getInstanceWallet--: xref:services.adoc#InstanceService-getInstanceWallet--
+:xref-InstanceService-getRiskpoolWallet-uint256-: xref:services.adoc#InstanceService-getRiskpoolWallet-uint256-
+:xref-InstanceService-getComponentToken-uint256-: xref:services.adoc#InstanceService-getComponentToken-uint256-
+:xref-InstanceService-getFeeFractionFullUnit--: xref:services.adoc#InstanceService-getFeeFractionFullUnit--
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-OracleService-_afterInitialize--: xref:services.adoc#OracleService-_afterInitialize--
+:xref-OracleService-respond-uint256-bytes-: xref:services.adoc#OracleService-respond-uint256-bytes-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-ProductService-constructor-address-: xref:services.adoc#ProductService-constructor-address-
+:xref-ProductService-fallback--: xref:services.adoc#ProductService-fallback--
+:xref-ProductService-_delegate-address-: xref:services.adoc#ProductService-_delegate-address-
+:xref-ProductService-_license--: xref:services.adoc#ProductService-_license--
+:xref-WithRegistry-getContractFromRegistry-bytes32-: xref:shared.adoc#WithRegistry-getContractFromRegistry-bytes32-
+:xref-WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-: xref:shared.adoc#WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-
+:xref-WithRegistry-getReleaseFromRegistry--: xref:shared.adoc#WithRegistry-getReleaseFromRegistry--
+:xref-RiskpoolService-onlyProposedRiskpool--: xref:services.adoc#RiskpoolService-onlyProposedRiskpool--
+:xref-RiskpoolService-onlyActiveRiskpool--: xref:services.adoc#RiskpoolService-onlyActiveRiskpool--
+:xref-RiskpoolService-onlyOwningRiskpool-uint256-bool-: xref:services.adoc#RiskpoolService-onlyOwningRiskpool-uint256-bool-
+:xref-RiskpoolService-onlyOwningRiskpoolId-uint256-bool-: xref:services.adoc#RiskpoolService-onlyOwningRiskpoolId-uint256-bool-
+:xref-RiskpoolService-_afterInitialize--: xref:services.adoc#RiskpoolService-_afterInitialize--
+:xref-RiskpoolService-registerRiskpool-address-address-uint256-uint256-: xref:services.adoc#RiskpoolService-registerRiskpool-address-address-uint256-uint256-
+:xref-RiskpoolService-createBundle-address-bytes-uint256-: xref:services.adoc#RiskpoolService-createBundle-address-bytes-uint256-
+:xref-RiskpoolService-fundBundle-uint256-uint256-: xref:services.adoc#RiskpoolService-fundBundle-uint256-uint256-
+:xref-RiskpoolService-defundBundle-uint256-uint256-: xref:services.adoc#RiskpoolService-defundBundle-uint256-uint256-
+:xref-RiskpoolService-lockBundle-uint256-: xref:services.adoc#RiskpoolService-lockBundle-uint256-
+:xref-RiskpoolService-unlockBundle-uint256-: xref:services.adoc#RiskpoolService-unlockBundle-uint256-
+:xref-RiskpoolService-closeBundle-uint256-: xref:services.adoc#RiskpoolService-closeBundle-uint256-
+:xref-RiskpoolService-burnBundle-uint256-: xref:services.adoc#RiskpoolService-burnBundle-uint256-
+:xref-RiskpoolService-collateralizePolicy-uint256-bytes32-uint256-: xref:services.adoc#RiskpoolService-collateralizePolicy-uint256-bytes32-uint256-
+:xref-RiskpoolService-processPremium-uint256-bytes32-uint256-: xref:services.adoc#RiskpoolService-processPremium-uint256-bytes32-uint256-
+:xref-RiskpoolService-processPayout-uint256-bytes32-uint256-: xref:services.adoc#RiskpoolService-processPayout-uint256-bytes32-uint256-
+:xref-RiskpoolService-releasePolicy-uint256-bytes32-: xref:services.adoc#RiskpoolService-releasePolicy-uint256-bytes32-
+:xref-RiskpoolService-setMaximumNumberOfActiveBundles-uint256-uint256-: xref:services.adoc#RiskpoolService-setMaximumNumberOfActiveBundles-uint256-uint256-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+= Services
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/services
+
+== Contracts
+
+:onlyOwnerWithRoleFromComponent: pass:normal[xref:#ComponentOwnerService-onlyOwnerWithRoleFromComponent-contract-IComponent-[`++onlyOwnerWithRoleFromComponent++`]]
+:onlyOwnerWithRole: pass:normal[xref:#ComponentOwnerService-onlyOwnerWithRole-uint256-[`++onlyOwnerWithRole++`]]
+:_afterInitialize: pass:normal[xref:#ComponentOwnerService-_afterInitialize--[`++_afterInitialize++`]]
+:propose: pass:normal[xref:#ComponentOwnerService-propose-contract-IComponent-[`++propose++`]]
+:stake: pass:normal[xref:#ComponentOwnerService-stake-uint256-[`++stake++`]]
+:withdraw: pass:normal[xref:#ComponentOwnerService-withdraw-uint256-[`++withdraw++`]]
+:pause: pass:normal[xref:#ComponentOwnerService-pause-uint256-[`++pause++`]]
+:unpause: pass:normal[xref:#ComponentOwnerService-unpause-uint256-[`++unpause++`]]
+:archive: pass:normal[xref:#ComponentOwnerService-archive-uint256-[`++archive++`]]
+
+[.contract]
+[[ComponentOwnerService]]
+=== `++ComponentOwnerService++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/services/ComponentOwnerService.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/services/ComponentOwnerService.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-ComponentOwnerService-onlyOwnerWithRoleFromComponent-contract-IComponent-}[`++onlyOwnerWithRoleFromComponent(component)++`]
+* {xref-ComponentOwnerService-onlyOwnerWithRole-uint256-}[`++onlyOwnerWithRole(id)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-ComponentOwnerService-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-ComponentOwnerService-propose-contract-IComponent-}[`++propose(component)++`]
+* {xref-ComponentOwnerService-stake-uint256-}[`++stake(id)++`]
+* {xref-ComponentOwnerService-withdraw-uint256-}[`++withdraw(id)++`]
+* {xref-ComponentOwnerService-pause-uint256-}[`++pause(id)++`]
+* {xref-ComponentOwnerService-unpause-uint256-}[`++unpause(id)++`]
+* {xref-ComponentOwnerService-archive-uint256-}[`++archive(id)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IComponentOwnerService
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IComponentOwnerService
+
+--
+
+[.contract-item]
+[[ComponentOwnerService-onlyOwnerWithRoleFromComponent-contract-IComponent-]]
+==== `[.contract-item-name]#++onlyOwnerWithRoleFromComponent++#++(contract IComponent component)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[ComponentOwnerService-onlyOwnerWithRole-uint256-]]
+==== `[.contract-item-name]#++onlyOwnerWithRole++#++(uint256 id)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[ComponentOwnerService-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[ComponentOwnerService-propose-contract-IComponent-]]
+==== `[.contract-item-name]#++propose++#++(contract IComponent component)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentOwnerService-stake-uint256-]]
+==== `[.contract-item-name]#++stake++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentOwnerService-withdraw-uint256-]]
+==== `[.contract-item-name]#++withdraw++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentOwnerService-pause-uint256-]]
+==== `[.contract-item-name]#++pause++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentOwnerService-unpause-uint256-]]
+==== `[.contract-item-name]#++unpause++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[ComponentOwnerService-archive-uint256-]]
+==== `[.contract-item-name]#++archive++#++(uint256 id)++` [.item-kind]#external#
+
+:onlyInstanceOperatorAddress: pass:normal[xref:#InstanceOperatorService-onlyInstanceOperatorAddress--[`++onlyInstanceOperatorAddress++`]]
+:_afterInitialize: pass:normal[xref:#InstanceOperatorService-_afterInitialize--[`++_afterInitialize++`]]
+:prepareRelease: pass:normal[xref:#InstanceOperatorService-prepareRelease-bytes32-[`++prepareRelease++`]]
+:register: pass:normal[xref:#InstanceOperatorService-register-bytes32-address-[`++register++`]]
+:deregister: pass:normal[xref:#InstanceOperatorService-deregister-bytes32-[`++deregister++`]]
+:registerInRelease: pass:normal[xref:#InstanceOperatorService-registerInRelease-bytes32-bytes32-address-[`++registerInRelease++`]]
+:deregisterInRelease: pass:normal[xref:#InstanceOperatorService-deregisterInRelease-bytes32-bytes32-[`++deregisterInRelease++`]]
+:createRole: pass:normal[xref:#InstanceOperatorService-createRole-bytes32-[`++createRole++`]]
+:invalidateRole: pass:normal[xref:#InstanceOperatorService-invalidateRole-bytes32-[`++invalidateRole++`]]
+:grantRole: pass:normal[xref:#InstanceOperatorService-grantRole-bytes32-address-[`++grantRole++`]]
+:revokeRole: pass:normal[xref:#InstanceOperatorService-revokeRole-bytes32-address-[`++revokeRole++`]]
+:approve: pass:normal[xref:#InstanceOperatorService-approve-uint256-[`++approve++`]]
+:decline: pass:normal[xref:#InstanceOperatorService-decline-uint256-[`++decline++`]]
+:suspend: pass:normal[xref:#InstanceOperatorService-suspend-uint256-[`++suspend++`]]
+:resume: pass:normal[xref:#InstanceOperatorService-resume-uint256-[`++resume++`]]
+:archive: pass:normal[xref:#InstanceOperatorService-archive-uint256-[`++archive++`]]
+:setDefaultStaking: pass:normal[xref:#InstanceOperatorService-setDefaultStaking-uint16-bytes-[`++setDefaultStaking++`]]
+:adjustStakingRequirements: pass:normal[xref:#InstanceOperatorService-adjustStakingRequirements-uint256-bytes-[`++adjustStakingRequirements++`]]
+:suspendTreasury: pass:normal[xref:#InstanceOperatorService-suspendTreasury--[`++suspendTreasury++`]]
+:resumeTreasury: pass:normal[xref:#InstanceOperatorService-resumeTreasury--[`++resumeTreasury++`]]
+:setInstanceWallet: pass:normal[xref:#InstanceOperatorService-setInstanceWallet-address-[`++setInstanceWallet++`]]
+:setRiskpoolWallet: pass:normal[xref:#InstanceOperatorService-setRiskpoolWallet-uint256-address-[`++setRiskpoolWallet++`]]
+:setProductToken: pass:normal[xref:#InstanceOperatorService-setProductToken-uint256-address-[`++setProductToken++`]]
+:createFeeSpecification: pass:normal[xref:#InstanceOperatorService-createFeeSpecification-uint256-uint256-uint256-bytes-[`++createFeeSpecification++`]]
+:setPremiumFees: pass:normal[xref:#InstanceOperatorService-setPremiumFees-struct-ITreasury-FeeSpecification-[`++setPremiumFees++`]]
+:setCapitalFees: pass:normal[xref:#InstanceOperatorService-setCapitalFees-struct-ITreasury-FeeSpecification-[`++setCapitalFees++`]]
+
+[.contract]
+[[InstanceOperatorService]]
+=== `++InstanceOperatorService++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/services/InstanceOperatorService.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/services/InstanceOperatorService.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-InstanceOperatorService-onlyInstanceOperatorAddress--}[`++onlyInstanceOperatorAddress()++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-InstanceOperatorService-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-InstanceOperatorService-prepareRelease-bytes32-}[`++prepareRelease(_newRelease)++`]
+* {xref-InstanceOperatorService-register-bytes32-address-}[`++register(_contractName, _contractAddress)++`]
+* {xref-InstanceOperatorService-deregister-bytes32-}[`++deregister(_contractName)++`]
+* {xref-InstanceOperatorService-registerInRelease-bytes32-bytes32-address-}[`++registerInRelease(_release, _contractName, _contractAddress)++`]
+* {xref-InstanceOperatorService-deregisterInRelease-bytes32-bytes32-}[`++deregisterInRelease(_release, _contractName)++`]
+* {xref-InstanceOperatorService-createRole-bytes32-}[`++createRole(_role)++`]
+* {xref-InstanceOperatorService-invalidateRole-bytes32-}[`++invalidateRole(_role)++`]
+* {xref-InstanceOperatorService-grantRole-bytes32-address-}[`++grantRole(role, principal)++`]
+* {xref-InstanceOperatorService-revokeRole-bytes32-address-}[`++revokeRole(role, principal)++`]
+* {xref-InstanceOperatorService-approve-uint256-}[`++approve(id)++`]
+* {xref-InstanceOperatorService-decline-uint256-}[`++decline(id)++`]
+* {xref-InstanceOperatorService-suspend-uint256-}[`++suspend(id)++`]
+* {xref-InstanceOperatorService-resume-uint256-}[`++resume(id)++`]
+* {xref-InstanceOperatorService-archive-uint256-}[`++archive(id)++`]
+* {xref-InstanceOperatorService-setDefaultStaking-uint16-bytes-}[`++setDefaultStaking(componentType, data)++`]
+* {xref-InstanceOperatorService-adjustStakingRequirements-uint256-bytes-}[`++adjustStakingRequirements(id, data)++`]
+* {xref-InstanceOperatorService-suspendTreasury--}[`++suspendTreasury()++`]
+* {xref-InstanceOperatorService-resumeTreasury--}[`++resumeTreasury()++`]
+* {xref-InstanceOperatorService-setInstanceWallet-address-}[`++setInstanceWallet(walletAddress)++`]
+* {xref-InstanceOperatorService-setRiskpoolWallet-uint256-address-}[`++setRiskpoolWallet(riskpoolId, riskpoolWalletAddress)++`]
+* {xref-InstanceOperatorService-setProductToken-uint256-address-}[`++setProductToken(productId, erc20Address)++`]
+* {xref-InstanceOperatorService-createFeeSpecification-uint256-uint256-uint256-bytes-}[`++createFeeSpecification(componentId, fixedFee, fractionalFee, feeCalculationData)++`]
+* {xref-InstanceOperatorService-setPremiumFees-struct-ITreasury-FeeSpecification-}[`++setPremiumFees(feeSpec)++`]
+* {xref-InstanceOperatorService-setCapitalFees-struct-ITreasury-FeeSpecification-}[`++setCapitalFees(feeSpec)++`]
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-owner--[`++owner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_checkOwner--[`++_checkOwner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-renounceOwnership--[`++renounceOwnership()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-transferOwnership-address-[`++transferOwnership(newOwner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_transferOwnership-address-[`++_transferOwnership(newOwner)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IInstanceOperatorService
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-OwnershipTransferred-address-address-[`++OwnershipTransferred(previousOwner, newOwner)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IInstanceOperatorService
+
+--
+
+[.contract-item]
+[[InstanceOperatorService-onlyInstanceOperatorAddress--]]
+==== `[.contract-item-name]#++onlyInstanceOperatorAddress++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[InstanceOperatorService-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[InstanceOperatorService-prepareRelease-bytes32-]]
+==== `[.contract-item-name]#++prepareRelease++#++(bytes32 _newRelease)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-register-bytes32-address-]]
+==== `[.contract-item-name]#++register++#++(bytes32 _contractName, address _contractAddress)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-deregister-bytes32-]]
+==== `[.contract-item-name]#++deregister++#++(bytes32 _contractName)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-registerInRelease-bytes32-bytes32-address-]]
+==== `[.contract-item-name]#++registerInRelease++#++(bytes32 _release, bytes32 _contractName, address _contractAddress)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-deregisterInRelease-bytes32-bytes32-]]
+==== `[.contract-item-name]#++deregisterInRelease++#++(bytes32 _release, bytes32 _contractName)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-createRole-bytes32-]]
+==== `[.contract-item-name]#++createRole++#++(bytes32 _role)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-invalidateRole-bytes32-]]
+==== `[.contract-item-name]#++invalidateRole++#++(bytes32 _role)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-grantRole-bytes32-address-]]
+==== `[.contract-item-name]#++grantRole++#++(bytes32 role, address principal)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-revokeRole-bytes32-address-]]
+==== `[.contract-item-name]#++revokeRole++#++(bytes32 role, address principal)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-approve-uint256-]]
+==== `[.contract-item-name]#++approve++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-decline-uint256-]]
+==== `[.contract-item-name]#++decline++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-suspend-uint256-]]
+==== `[.contract-item-name]#++suspend++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-resume-uint256-]]
+==== `[.contract-item-name]#++resume++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-archive-uint256-]]
+==== `[.contract-item-name]#++archive++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-setDefaultStaking-uint16-bytes-]]
+==== `[.contract-item-name]#++setDefaultStaking++#++(uint16 componentType, bytes data)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-adjustStakingRequirements-uint256-bytes-]]
+==== `[.contract-item-name]#++adjustStakingRequirements++#++(uint256 id, bytes data)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-suspendTreasury--]]
+==== `[.contract-item-name]#++suspendTreasury++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-resumeTreasury--]]
+==== `[.contract-item-name]#++resumeTreasury++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-setInstanceWallet-address-]]
+==== `[.contract-item-name]#++setInstanceWallet++#++(address walletAddress)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-setRiskpoolWallet-uint256-address-]]
+==== `[.contract-item-name]#++setRiskpoolWallet++#++(uint256 riskpoolId, address riskpoolWalletAddress)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-setProductToken-uint256-address-]]
+==== `[.contract-item-name]#++setProductToken++#++(uint256 productId, address erc20Address)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-createFeeSpecification-uint256-uint256-uint256-bytes-]]
+==== `[.contract-item-name]#++createFeeSpecification++#++(uint256 componentId, uint256 fixedFee, uint256 fractionalFee, bytes feeCalculationData) → struct ITreasury.FeeSpecification++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-setPremiumFees-struct-ITreasury-FeeSpecification-]]
+==== `[.contract-item-name]#++setPremiumFees++#++(struct ITreasury.FeeSpecification feeSpec)++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceOperatorService-setCapitalFees-struct-ITreasury-FeeSpecification-]]
+==== `[.contract-item-name]#++setCapitalFees++#++(struct ITreasury.FeeSpecification feeSpec)++` [.item-kind]#external#
+
+:BUNDLE_NAME: pass:normal[xref:#InstanceService-BUNDLE_NAME-bytes32[`++BUNDLE_NAME++`]]
+:COMPONENT_NAME: pass:normal[xref:#InstanceService-COMPONENT_NAME-bytes32[`++COMPONENT_NAME++`]]
+:POLICY_NAME: pass:normal[xref:#InstanceService-POLICY_NAME-bytes32[`++POLICY_NAME++`]]
+:POOL_NAME: pass:normal[xref:#InstanceService-POOL_NAME-bytes32[`++POOL_NAME++`]]
+:TREASURY_NAME: pass:normal[xref:#InstanceService-TREASURY_NAME-bytes32[`++TREASURY_NAME++`]]
+:COMPONENT_OWNER_SERVICE_NAME: pass:normal[xref:#InstanceService-COMPONENT_OWNER_SERVICE_NAME-bytes32[`++COMPONENT_OWNER_SERVICE_NAME++`]]
+:INSTANCE_OPERATOR_SERVICE_NAME: pass:normal[xref:#InstanceService-INSTANCE_OPERATOR_SERVICE_NAME-bytes32[`++INSTANCE_OPERATOR_SERVICE_NAME++`]]
+:ORACLE_SERVICE_NAME: pass:normal[xref:#InstanceService-ORACLE_SERVICE_NAME-bytes32[`++ORACLE_SERVICE_NAME++`]]
+:PRODUCT_SERVICE_NAME: pass:normal[xref:#InstanceService-PRODUCT_SERVICE_NAME-bytes32[`++PRODUCT_SERVICE_NAME++`]]
+:RISKPOOL_SERVICE_NAME: pass:normal[xref:#InstanceService-RISKPOOL_SERVICE_NAME-bytes32[`++RISKPOOL_SERVICE_NAME++`]]
+:_bundle: pass:normal[xref:#InstanceService-_bundle-contract-BundleController[`++_bundle++`]]
+:_component: pass:normal[xref:#InstanceService-_component-contract-ComponentController[`++_component++`]]
+:_policy: pass:normal[xref:#InstanceService-_policy-contract-PolicyController[`++_policy++`]]
+:_pool: pass:normal[xref:#InstanceService-_pool-contract-PoolController[`++_pool++`]]
+:_afterInitialize: pass:normal[xref:#InstanceService-_afterInitialize--[`++_afterInitialize++`]]
+:_setChainNames: pass:normal[xref:#InstanceService-_setChainNames--[`++_setChainNames++`]]
+:getChainId: pass:normal[xref:#InstanceService-getChainId--[`++getChainId++`]]
+:getChainName: pass:normal[xref:#InstanceService-getChainName--[`++getChainName++`]]
+:getInstanceId: pass:normal[xref:#InstanceService-getInstanceId--[`++getInstanceId++`]]
+:getInstanceOperator: pass:normal[xref:#InstanceService-getInstanceOperator--[`++getInstanceOperator++`]]
+:getComponentOwnerService: pass:normal[xref:#InstanceService-getComponentOwnerService--[`++getComponentOwnerService++`]]
+:getInstanceOperatorService: pass:normal[xref:#InstanceService-getInstanceOperatorService--[`++getInstanceOperatorService++`]]
+:getOracleService: pass:normal[xref:#InstanceService-getOracleService--[`++getOracleService++`]]
+:getProductService: pass:normal[xref:#InstanceService-getProductService--[`++getProductService++`]]
+:getRiskpoolService: pass:normal[xref:#InstanceService-getRiskpoolService--[`++getRiskpoolService++`]]
+:getRegistry: pass:normal[xref:#InstanceService-getRegistry--[`++getRegistry++`]]
+:contracts: pass:normal[xref:#InstanceService-contracts--[`++contracts++`]]
+:contractName: pass:normal[xref:#InstanceService-contractName-uint256-[`++contractName++`]]
+:getDefaultAdminRole: pass:normal[xref:#InstanceService-getDefaultAdminRole--[`++getDefaultAdminRole++`]]
+:getProductOwnerRole: pass:normal[xref:#InstanceService-getProductOwnerRole--[`++getProductOwnerRole++`]]
+:getOracleProviderRole: pass:normal[xref:#InstanceService-getOracleProviderRole--[`++getOracleProviderRole++`]]
+:getRiskpoolKeeperRole: pass:normal[xref:#InstanceService-getRiskpoolKeeperRole--[`++getRiskpoolKeeperRole++`]]
+:hasRole: pass:normal[xref:#InstanceService-hasRole-bytes32-address-[`++hasRole++`]]
+:products: pass:normal[xref:#InstanceService-products--[`++products++`]]
+:oracles: pass:normal[xref:#InstanceService-oracles--[`++oracles++`]]
+:riskpools: pass:normal[xref:#InstanceService-riskpools--[`++riskpools++`]]
+:getComponentId: pass:normal[xref:#InstanceService-getComponentId-address-[`++getComponentId++`]]
+:getComponentType: pass:normal[xref:#InstanceService-getComponentType-uint256-[`++getComponentType++`]]
+:getComponentState: pass:normal[xref:#InstanceService-getComponentState-uint256-[`++getComponentState++`]]
+:getComponent: pass:normal[xref:#InstanceService-getComponent-uint256-[`++getComponent++`]]
+:getOracleId: pass:normal[xref:#InstanceService-getOracleId-uint256-[`++getOracleId++`]]
+:getRiskpoolId: pass:normal[xref:#InstanceService-getRiskpoolId-uint256-[`++getRiskpoolId++`]]
+:getProductId: pass:normal[xref:#InstanceService-getProductId-uint256-[`++getProductId++`]]
+:getStakingRequirements: pass:normal[xref:#InstanceService-getStakingRequirements-uint256-[`++getStakingRequirements++`]]
+:getStakedAssets: pass:normal[xref:#InstanceService-getStakedAssets-uint256-[`++getStakedAssets++`]]
+:processIds: pass:normal[xref:#InstanceService-processIds--[`++processIds++`]]
+:getMetadata: pass:normal[xref:#InstanceService-getMetadata-bytes32-[`++getMetadata++`]]
+:getApplication: pass:normal[xref:#InstanceService-getApplication-bytes32-[`++getApplication++`]]
+:getPolicy: pass:normal[xref:#InstanceService-getPolicy-bytes32-[`++getPolicy++`]]
+:claims: pass:normal[xref:#InstanceService-claims-bytes32-[`++claims++`]]
+:payouts: pass:normal[xref:#InstanceService-payouts-bytes32-[`++payouts++`]]
+:getClaim: pass:normal[xref:#InstanceService-getClaim-bytes32-uint256-[`++getClaim++`]]
+:getPayout: pass:normal[xref:#InstanceService-getPayout-bytes32-uint256-[`++getPayout++`]]
+:getRiskpool: pass:normal[xref:#InstanceService-getRiskpool-uint256-[`++getRiskpool++`]]
+:getFullCollateralizationLevel: pass:normal[xref:#InstanceService-getFullCollateralizationLevel--[`++getFullCollateralizationLevel++`]]
+:getCapital: pass:normal[xref:#InstanceService-getCapital-uint256-[`++getCapital++`]]
+:getTotalValueLocked: pass:normal[xref:#InstanceService-getTotalValueLocked-uint256-[`++getTotalValueLocked++`]]
+:getCapacity: pass:normal[xref:#InstanceService-getCapacity-uint256-[`++getCapacity++`]]
+:getBalance: pass:normal[xref:#InstanceService-getBalance-uint256-[`++getBalance++`]]
+:activeBundles: pass:normal[xref:#InstanceService-activeBundles-uint256-[`++activeBundles++`]]
+:getActiveBundleId: pass:normal[xref:#InstanceService-getActiveBundleId-uint256-uint256-[`++getActiveBundleId++`]]
+:getMaximumNumberOfActiveBundles: pass:normal[xref:#InstanceService-getMaximumNumberOfActiveBundles-uint256-[`++getMaximumNumberOfActiveBundles++`]]
+:getBundleToken: pass:normal[xref:#InstanceService-getBundleToken--[`++getBundleToken++`]]
+:getBundle: pass:normal[xref:#InstanceService-getBundle-uint256-[`++getBundle++`]]
+:bundles: pass:normal[xref:#InstanceService-bundles--[`++bundles++`]]
+:unburntBundles: pass:normal[xref:#InstanceService-unburntBundles-uint256-[`++unburntBundles++`]]
+:getTreasuryAddress: pass:normal[xref:#InstanceService-getTreasuryAddress--[`++getTreasuryAddress++`]]
+:getInstanceWallet: pass:normal[xref:#InstanceService-getInstanceWallet--[`++getInstanceWallet++`]]
+:getRiskpoolWallet: pass:normal[xref:#InstanceService-getRiskpoolWallet-uint256-[`++getRiskpoolWallet++`]]
+:getComponentToken: pass:normal[xref:#InstanceService-getComponentToken-uint256-[`++getComponentToken++`]]
+:getFeeFractionFullUnit: pass:normal[xref:#InstanceService-getFeeFractionFullUnit--[`++getFeeFractionFullUnit++`]]
+
+[.contract]
+[[InstanceService]]
+=== `++InstanceService++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/services/InstanceService.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/services/InstanceService.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-InstanceService-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-InstanceService-_setChainNames--}[`++_setChainNames()++`]
+* {xref-InstanceService-getChainId--}[`++getChainId()++`]
+* {xref-InstanceService-getChainName--}[`++getChainName()++`]
+* {xref-InstanceService-getInstanceId--}[`++getInstanceId()++`]
+* {xref-InstanceService-getInstanceOperator--}[`++getInstanceOperator()++`]
+* {xref-InstanceService-getComponentOwnerService--}[`++getComponentOwnerService()++`]
+* {xref-InstanceService-getInstanceOperatorService--}[`++getInstanceOperatorService()++`]
+* {xref-InstanceService-getOracleService--}[`++getOracleService()++`]
+* {xref-InstanceService-getProductService--}[`++getProductService()++`]
+* {xref-InstanceService-getRiskpoolService--}[`++getRiskpoolService()++`]
+* {xref-InstanceService-getRegistry--}[`++getRegistry()++`]
+* {xref-InstanceService-contracts--}[`++contracts()++`]
+* {xref-InstanceService-contractName-uint256-}[`++contractName(idx)++`]
+* {xref-InstanceService-getDefaultAdminRole--}[`++getDefaultAdminRole()++`]
+* {xref-InstanceService-getProductOwnerRole--}[`++getProductOwnerRole()++`]
+* {xref-InstanceService-getOracleProviderRole--}[`++getOracleProviderRole()++`]
+* {xref-InstanceService-getRiskpoolKeeperRole--}[`++getRiskpoolKeeperRole()++`]
+* {xref-InstanceService-hasRole-bytes32-address-}[`++hasRole(role, principal)++`]
+* {xref-InstanceService-products--}[`++products()++`]
+* {xref-InstanceService-oracles--}[`++oracles()++`]
+* {xref-InstanceService-riskpools--}[`++riskpools()++`]
+* {xref-InstanceService-getComponentId-address-}[`++getComponentId(componentAddress)++`]
+* {xref-InstanceService-getComponentType-uint256-}[`++getComponentType(componentId)++`]
+* {xref-InstanceService-getComponentState-uint256-}[`++getComponentState(componentId)++`]
+* {xref-InstanceService-getComponent-uint256-}[`++getComponent(id)++`]
+* {xref-InstanceService-getOracleId-uint256-}[`++getOracleId(idx)++`]
+* {xref-InstanceService-getRiskpoolId-uint256-}[`++getRiskpoolId(idx)++`]
+* {xref-InstanceService-getProductId-uint256-}[`++getProductId(idx)++`]
+* {xref-InstanceService-getStakingRequirements-uint256-}[`++getStakingRequirements(id)++`]
+* {xref-InstanceService-getStakedAssets-uint256-}[`++getStakedAssets(id)++`]
+* {xref-InstanceService-processIds--}[`++processIds()++`]
+* {xref-InstanceService-getMetadata-bytes32-}[`++getMetadata(bpKey)++`]
+* {xref-InstanceService-getApplication-bytes32-}[`++getApplication(processId)++`]
+* {xref-InstanceService-getPolicy-bytes32-}[`++getPolicy(processId)++`]
+* {xref-InstanceService-claims-bytes32-}[`++claims(processId)++`]
+* {xref-InstanceService-payouts-bytes32-}[`++payouts(processId)++`]
+* {xref-InstanceService-getClaim-bytes32-uint256-}[`++getClaim(processId, claimId)++`]
+* {xref-InstanceService-getPayout-bytes32-uint256-}[`++getPayout(processId, payoutId)++`]
+* {xref-InstanceService-getRiskpool-uint256-}[`++getRiskpool(riskpoolId)++`]
+* {xref-InstanceService-getFullCollateralizationLevel--}[`++getFullCollateralizationLevel()++`]
+* {xref-InstanceService-getCapital-uint256-}[`++getCapital(riskpoolId)++`]
+* {xref-InstanceService-getTotalValueLocked-uint256-}[`++getTotalValueLocked(riskpoolId)++`]
+* {xref-InstanceService-getCapacity-uint256-}[`++getCapacity(riskpoolId)++`]
+* {xref-InstanceService-getBalance-uint256-}[`++getBalance(riskpoolId)++`]
+* {xref-InstanceService-activeBundles-uint256-}[`++activeBundles(riskpoolId)++`]
+* {xref-InstanceService-getActiveBundleId-uint256-uint256-}[`++getActiveBundleId(riskpoolId, bundleIdx)++`]
+* {xref-InstanceService-getMaximumNumberOfActiveBundles-uint256-}[`++getMaximumNumberOfActiveBundles(riskpoolId)++`]
+* {xref-InstanceService-getBundleToken--}[`++getBundleToken()++`]
+* {xref-InstanceService-getBundle-uint256-}[`++getBundle(bundleId)++`]
+* {xref-InstanceService-bundles--}[`++bundles()++`]
+* {xref-InstanceService-unburntBundles-uint256-}[`++unburntBundles(riskpoolId)++`]
+* {xref-InstanceService-getTreasuryAddress--}[`++getTreasuryAddress()++`]
+* {xref-InstanceService-getInstanceWallet--}[`++getInstanceWallet()++`]
+* {xref-InstanceService-getRiskpoolWallet-uint256-}[`++getRiskpoolWallet(riskpoolId)++`]
+* {xref-InstanceService-getComponentToken-uint256-}[`++getComponentToken(componentId)++`]
+* {xref-InstanceService-getFeeFractionFullUnit--}[`++getFeeFractionFullUnit()++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IInstanceService
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IInstanceService
+
+--
+
+[.contract-item]
+[[InstanceService-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[InstanceService-_setChainNames--]]
+==== `[.contract-item-name]#++_setChainNames++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[InstanceService-getChainId--]]
+==== `[.contract-item-name]#++getChainId++#++() → uint256 chainId++` [.item-kind]#public#
+
+[.contract-item]
+[[InstanceService-getChainName--]]
+==== `[.contract-item-name]#++getChainName++#++() → string chainName++` [.item-kind]#public#
+
+[.contract-item]
+[[InstanceService-getInstanceId--]]
+==== `[.contract-item-name]#++getInstanceId++#++() → bytes32 instanceId++` [.item-kind]#public#
+
+[.contract-item]
+[[InstanceService-getInstanceOperator--]]
+==== `[.contract-item-name]#++getInstanceOperator++#++() → address++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getComponentOwnerService--]]
+==== `[.contract-item-name]#++getComponentOwnerService++#++() → contract IComponentOwnerService service++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getInstanceOperatorService--]]
+==== `[.contract-item-name]#++getInstanceOperatorService++#++() → contract IInstanceOperatorService service++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getOracleService--]]
+==== `[.contract-item-name]#++getOracleService++#++() → contract IOracleService service++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getProductService--]]
+==== `[.contract-item-name]#++getProductService++#++() → contract IProductService service++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getRiskpoolService--]]
+==== `[.contract-item-name]#++getRiskpoolService++#++() → contract IRiskpoolService service++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getRegistry--]]
+==== `[.contract-item-name]#++getRegistry++#++() → contract IRegistry service++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-contracts--]]
+==== `[.contract-item-name]#++contracts++#++() → uint256 numberOfContracts++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-contractName-uint256-]]
+==== `[.contract-item-name]#++contractName++#++(uint256 idx) → bytes32 name++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getDefaultAdminRole--]]
+==== `[.contract-item-name]#++getDefaultAdminRole++#++() → bytes32++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getProductOwnerRole--]]
+==== `[.contract-item-name]#++getProductOwnerRole++#++() → bytes32++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getOracleProviderRole--]]
+==== `[.contract-item-name]#++getOracleProviderRole++#++() → bytes32++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getRiskpoolKeeperRole--]]
+==== `[.contract-item-name]#++getRiskpoolKeeperRole++#++() → bytes32++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-hasRole-bytes32-address-]]
+==== `[.contract-item-name]#++hasRole++#++(bytes32 role, address principal) → bool++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-products--]]
+==== `[.contract-item-name]#++products++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-oracles--]]
+==== `[.contract-item-name]#++oracles++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-riskpools--]]
+==== `[.contract-item-name]#++riskpools++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getComponentId-address-]]
+==== `[.contract-item-name]#++getComponentId++#++(address componentAddress) → uint256 componentId++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getComponentType-uint256-]]
+==== `[.contract-item-name]#++getComponentType++#++(uint256 componentId) → enum IComponent.ComponentType componentType++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getComponentState-uint256-]]
+==== `[.contract-item-name]#++getComponentState++#++(uint256 componentId) → enum IComponent.ComponentState componentState++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getComponent-uint256-]]
+==== `[.contract-item-name]#++getComponent++#++(uint256 id) → contract IComponent++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getOracleId-uint256-]]
+==== `[.contract-item-name]#++getOracleId++#++(uint256 idx) → uint256 oracleId++` [.item-kind]#public#
+
+[.contract-item]
+[[InstanceService-getRiskpoolId-uint256-]]
+==== `[.contract-item-name]#++getRiskpoolId++#++(uint256 idx) → uint256 riskpoolId++` [.item-kind]#public#
+
+[.contract-item]
+[[InstanceService-getProductId-uint256-]]
+==== `[.contract-item-name]#++getProductId++#++(uint256 idx) → uint256 productId++` [.item-kind]#public#
+
+[.contract-item]
+[[InstanceService-getStakingRequirements-uint256-]]
+==== `[.contract-item-name]#++getStakingRequirements++#++(uint256 id) → bytes data++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getStakedAssets-uint256-]]
+==== `[.contract-item-name]#++getStakedAssets++#++(uint256 id) → bytes data++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-processIds--]]
+==== `[.contract-item-name]#++processIds++#++() → uint256 numberOfProcessIds++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getMetadata-bytes32-]]
+==== `[.contract-item-name]#++getMetadata++#++(bytes32 bpKey) → struct IPolicy.Metadata metadata++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getApplication-bytes32-]]
+==== `[.contract-item-name]#++getApplication++#++(bytes32 processId) → struct IPolicy.Application application++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getPolicy-bytes32-]]
+==== `[.contract-item-name]#++getPolicy++#++(bytes32 processId) → struct IPolicy.Policy policy++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-claims-bytes32-]]
+==== `[.contract-item-name]#++claims++#++(bytes32 processId) → uint256 numberOfClaims++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-payouts-bytes32-]]
+==== `[.contract-item-name]#++payouts++#++(bytes32 processId) → uint256 numberOfPayouts++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++getClaim++#++(bytes32 processId, uint256 claimId) → struct IPolicy.Claim claim++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++getPayout++#++(bytes32 processId, uint256 payoutId) → struct IPolicy.Payout payout++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getRiskpool-uint256-]]
+==== `[.contract-item-name]#++getRiskpool++#++(uint256 riskpoolId) → struct IPool.Pool riskPool++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getFullCollateralizationLevel--]]
+==== `[.contract-item-name]#++getFullCollateralizationLevel++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getCapital-uint256-]]
+==== `[.contract-item-name]#++getCapital++#++(uint256 riskpoolId) → uint256 capitalAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getTotalValueLocked-uint256-]]
+==== `[.contract-item-name]#++getTotalValueLocked++#++(uint256 riskpoolId) → uint256 totalValueLockedAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getCapacity-uint256-]]
+==== `[.contract-item-name]#++getCapacity++#++(uint256 riskpoolId) → uint256 capacityAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getBalance-uint256-]]
+==== `[.contract-item-name]#++getBalance++#++(uint256 riskpoolId) → uint256 balanceAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-activeBundles-uint256-]]
+==== `[.contract-item-name]#++activeBundles++#++(uint256 riskpoolId) → uint256 numberOfActiveBundles++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getActiveBundleId-uint256-uint256-]]
+==== `[.contract-item-name]#++getActiveBundleId++#++(uint256 riskpoolId, uint256 bundleIdx) → uint256 bundleId++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getMaximumNumberOfActiveBundles-uint256-]]
+==== `[.contract-item-name]#++getMaximumNumberOfActiveBundles++#++(uint256 riskpoolId) → uint256 maximumNumberOfActiveBundles++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getBundleToken--]]
+==== `[.contract-item-name]#++getBundleToken++#++() → contract IBundleToken token++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getBundle-uint256-]]
+==== `[.contract-item-name]#++getBundle++#++(uint256 bundleId) → struct IBundle.Bundle bundle++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-bundles--]]
+==== `[.contract-item-name]#++bundles++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-unburntBundles-uint256-]]
+==== `[.contract-item-name]#++unburntBundles++#++(uint256 riskpoolId) → uint256 numberOfUnburntBundles++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getTreasuryAddress--]]
+==== `[.contract-item-name]#++getTreasuryAddress++#++() → address++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getInstanceWallet--]]
+==== `[.contract-item-name]#++getInstanceWallet++#++() → address++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getRiskpoolWallet-uint256-]]
+==== `[.contract-item-name]#++getRiskpoolWallet++#++(uint256 riskpoolId) → address++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getComponentToken-uint256-]]
+==== `[.contract-item-name]#++getComponentToken++#++(uint256 componentId) → contract IERC20++` [.item-kind]#external#
+
+[.contract-item]
+[[InstanceService-getFeeFractionFullUnit--]]
+==== `[.contract-item-name]#++getFeeFractionFullUnit++#++() → uint256++` [.item-kind]#external#
+
+:_afterInitialize: pass:normal[xref:#OracleService-_afterInitialize--[`++_afterInitialize++`]]
+:respond: pass:normal[xref:#OracleService-respond-uint256-bytes-[`++respond++`]]
+
+[.contract]
+[[OracleService]]
+=== `++OracleService++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/services/OracleService.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/services/OracleService.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-OracleService-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-OracleService-respond-uint256-bytes-}[`++respond(_requestId, _data)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IOracleService
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IOracleService
+
+--
+
+[.contract-item]
+[[OracleService-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[OracleService-respond-uint256-bytes-]]
+==== `[.contract-item-name]#++respond++#++(uint256 _requestId, bytes _data)++` [.item-kind]#external#
+
+:NAME: pass:normal[xref:#ProductService-NAME-bytes32[`++NAME++`]]
+:constructor: pass:normal[xref:#ProductService-constructor-address-[`++constructor++`]]
+:fallback: pass:normal[xref:#ProductService-fallback--[`++fallback++`]]
+:_delegate: pass:normal[xref:#ProductService-_delegate-address-[`++_delegate++`]]
+:_license: pass:normal[xref:#ProductService-_license--[`++_license++`]]
+
+[.contract]
+[[ProductService]]
+=== `++ProductService++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/services/ProductService.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/services/ProductService.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-ProductService-constructor-address-}[`++constructor(_registry)++`]
+* {xref-ProductService-fallback--}[`++fallback()++`]
+* {xref-ProductService-_delegate-address-}[`++_delegate(implementation)++`]
+* {xref-ProductService-_license--}[`++_license()++`]
+
+[.contract-subindex-inherited]
+.WithRegistry
+* {xref-WithRegistry-getContractFromRegistry-bytes32-}[`++getContractFromRegistry(_contractName)++`]
+* {xref-WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-}[`++getContractInReleaseFromRegistry(_release, _contractName)++`]
+* {xref-WithRegistry-getReleaseFromRegistry--}[`++getReleaseFromRegistry()++`]
+
+--
+
+[.contract-item]
+[[ProductService-constructor-address-]]
+==== `[.contract-item-name]#++constructor++#++(address _registry)++` [.item-kind]#public#
+
+[.contract-item]
+[[ProductService-fallback--]]
+==== `[.contract-item-name]#++fallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[ProductService-_delegate-address-]]
+==== `[.contract-item-name]#++_delegate++#++(address implementation)++` [.item-kind]#internal#
+
+Delegates the current call to `implementation`.
+
+This function does not return to its internal call site, it will return directly to the external caller.
+This function is a 1:1 copy of _delegate from
+https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.6/contracts/proxy/Proxy.sol
+
+[.contract-item]
+[[ProductService-_license--]]
+==== `[.contract-item-name]#++_license++#++() → contract ILicense++` [.item-kind]#internal#
+
+:RISKPOOL_NAME: pass:normal[xref:#RiskpoolService-RISKPOOL_NAME-bytes32[`++RISKPOOL_NAME++`]]
+:onlyProposedRiskpool: pass:normal[xref:#RiskpoolService-onlyProposedRiskpool--[`++onlyProposedRiskpool++`]]
+:onlyActiveRiskpool: pass:normal[xref:#RiskpoolService-onlyActiveRiskpool--[`++onlyActiveRiskpool++`]]
+:onlyOwningRiskpool: pass:normal[xref:#RiskpoolService-onlyOwningRiskpool-uint256-bool-[`++onlyOwningRiskpool++`]]
+:onlyOwningRiskpoolId: pass:normal[xref:#RiskpoolService-onlyOwningRiskpoolId-uint256-bool-[`++onlyOwningRiskpoolId++`]]
+:_afterInitialize: pass:normal[xref:#RiskpoolService-_afterInitialize--[`++_afterInitialize++`]]
+:registerRiskpool: pass:normal[xref:#RiskpoolService-registerRiskpool-address-address-uint256-uint256-[`++registerRiskpool++`]]
+:createBundle: pass:normal[xref:#RiskpoolService-createBundle-address-bytes-uint256-[`++createBundle++`]]
+:fundBundle: pass:normal[xref:#RiskpoolService-fundBundle-uint256-uint256-[`++fundBundle++`]]
+:defundBundle: pass:normal[xref:#RiskpoolService-defundBundle-uint256-uint256-[`++defundBundle++`]]
+:lockBundle: pass:normal[xref:#RiskpoolService-lockBundle-uint256-[`++lockBundle++`]]
+:unlockBundle: pass:normal[xref:#RiskpoolService-unlockBundle-uint256-[`++unlockBundle++`]]
+:closeBundle: pass:normal[xref:#RiskpoolService-closeBundle-uint256-[`++closeBundle++`]]
+:burnBundle: pass:normal[xref:#RiskpoolService-burnBundle-uint256-[`++burnBundle++`]]
+:collateralizePolicy: pass:normal[xref:#RiskpoolService-collateralizePolicy-uint256-bytes32-uint256-[`++collateralizePolicy++`]]
+:processPremium: pass:normal[xref:#RiskpoolService-processPremium-uint256-bytes32-uint256-[`++processPremium++`]]
+:processPayout: pass:normal[xref:#RiskpoolService-processPayout-uint256-bytes32-uint256-[`++processPayout++`]]
+:releasePolicy: pass:normal[xref:#RiskpoolService-releasePolicy-uint256-bytes32-[`++releasePolicy++`]]
+:setMaximumNumberOfActiveBundles: pass:normal[xref:#RiskpoolService-setMaximumNumberOfActiveBundles-uint256-uint256-[`++setMaximumNumberOfActiveBundles++`]]
+
+[.contract]
+[[RiskpoolService]]
+=== `++RiskpoolService++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/services/RiskpoolService.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/services/RiskpoolService.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-RiskpoolService-onlyProposedRiskpool--}[`++onlyProposedRiskpool()++`]
+* {xref-RiskpoolService-onlyActiveRiskpool--}[`++onlyActiveRiskpool()++`]
+* {xref-RiskpoolService-onlyOwningRiskpool-uint256-bool-}[`++onlyOwningRiskpool(bundleId, mustBeActive)++`]
+* {xref-RiskpoolService-onlyOwningRiskpoolId-uint256-bool-}[`++onlyOwningRiskpoolId(riskpoolId, mustBeActive)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-RiskpoolService-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-RiskpoolService-registerRiskpool-address-address-uint256-uint256-}[`++registerRiskpool(wallet, erc20Token, collateralizationLevel, sumOfSumInsuredCap)++`]
+* {xref-RiskpoolService-createBundle-address-bytes-uint256-}[`++createBundle(owner, filter, initialCapital)++`]
+* {xref-RiskpoolService-fundBundle-uint256-uint256-}[`++fundBundle(bundleId, amount)++`]
+* {xref-RiskpoolService-defundBundle-uint256-uint256-}[`++defundBundle(bundleId, amount)++`]
+* {xref-RiskpoolService-lockBundle-uint256-}[`++lockBundle(bundleId)++`]
+* {xref-RiskpoolService-unlockBundle-uint256-}[`++unlockBundle(bundleId)++`]
+* {xref-RiskpoolService-closeBundle-uint256-}[`++closeBundle(bundleId)++`]
+* {xref-RiskpoolService-burnBundle-uint256-}[`++burnBundle(bundleId)++`]
+* {xref-RiskpoolService-collateralizePolicy-uint256-bytes32-uint256-}[`++collateralizePolicy(bundleId, processId, collateralAmount)++`]
+* {xref-RiskpoolService-processPremium-uint256-bytes32-uint256-}[`++processPremium(bundleId, processId, amount)++`]
+* {xref-RiskpoolService-processPayout-uint256-bytes32-uint256-}[`++processPayout(bundleId, processId, amount)++`]
+* {xref-RiskpoolService-releasePolicy-uint256-bytes32-}[`++releasePolicy(bundleId, processId)++`]
+* {xref-RiskpoolService-setMaximumNumberOfActiveBundles-uint256-uint256-}[`++setMaximumNumberOfActiveBundles(riskpoolId, maxNumberOfActiveBundles)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IRiskpoolService
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IRiskpoolService
+
+--
+
+[.contract-item]
+[[RiskpoolService-onlyProposedRiskpool--]]
+==== `[.contract-item-name]#++onlyProposedRiskpool++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[RiskpoolService-onlyActiveRiskpool--]]
+==== `[.contract-item-name]#++onlyActiveRiskpool++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[RiskpoolService-onlyOwningRiskpool-uint256-bool-]]
+==== `[.contract-item-name]#++onlyOwningRiskpool++#++(uint256 bundleId, bool mustBeActive)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[RiskpoolService-onlyOwningRiskpoolId-uint256-bool-]]
+==== `[.contract-item-name]#++onlyOwningRiskpoolId++#++(uint256 riskpoolId, bool mustBeActive)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[RiskpoolService-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[RiskpoolService-registerRiskpool-address-address-uint256-uint256-]]
+==== `[.contract-item-name]#++registerRiskpool++#++(address wallet, address erc20Token, uint256 collateralizationLevel, uint256 sumOfSumInsuredCap)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-createBundle-address-bytes-uint256-]]
+==== `[.contract-item-name]#++createBundle++#++(address owner, bytes filter, uint256 initialCapital) → uint256 bundleId++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-fundBundle-uint256-uint256-]]
+==== `[.contract-item-name]#++fundBundle++#++(uint256 bundleId, uint256 amount) → uint256 netAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-defundBundle-uint256-uint256-]]
+==== `[.contract-item-name]#++defundBundle++#++(uint256 bundleId, uint256 amount) → uint256 netAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-lockBundle-uint256-]]
+==== `[.contract-item-name]#++lockBundle++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-unlockBundle-uint256-]]
+==== `[.contract-item-name]#++unlockBundle++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-closeBundle-uint256-]]
+==== `[.contract-item-name]#++closeBundle++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-burnBundle-uint256-]]
+==== `[.contract-item-name]#++burnBundle++#++(uint256 bundleId)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-collateralizePolicy-uint256-bytes32-uint256-]]
+==== `[.contract-item-name]#++collateralizePolicy++#++(uint256 bundleId, bytes32 processId, uint256 collateralAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-processPremium-uint256-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPremium++#++(uint256 bundleId, bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-processPayout-uint256-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(uint256 bundleId, bytes32 processId, uint256 amount)++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-releasePolicy-uint256-bytes32-]]
+==== `[.contract-item-name]#++releasePolicy++#++(uint256 bundleId, bytes32 processId) → uint256 collateralAmount++` [.item-kind]#external#
+
+[.contract-item]
+[[RiskpoolService-setMaximumNumberOfActiveBundles-uint256-uint256-]]
+==== `[.contract-item-name]#++setMaximumNumberOfActiveBundles++#++(uint256 riskpoolId, uint256 maxNumberOfActiveBundles)++` [.item-kind]#external#
+
diff --git a/docs/modules/api/pages/shared.adoc b/docs/modules/api/pages/shared.adoc
new file mode 100644
index 00000000..cf8510b5
--- /dev/null
+++ b/docs/modules/api/pages/shared.adoc
@@ -0,0 +1,319 @@
+:github-icon: pass:[]
+:xref-CoreController-onlyInstanceOperator--: xref:shared.adoc#CoreController-onlyInstanceOperator--
+:xref-CoreController-onlyPolicyFlow-bytes32-: xref:shared.adoc#CoreController-onlyPolicyFlow-bytes32-
+:xref-CoreController-constructor--: xref:shared.adoc#CoreController-constructor--
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_afterInitialize--: xref:shared.adoc#CoreController-_afterInitialize--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-CoreProxy-onlyAdmin--: xref:shared.adoc#CoreProxy-onlyAdmin--
+:xref-CoreProxy-constructor-address-bytes-: xref:shared.adoc#CoreProxy-constructor-address-bytes-
+:xref-CoreProxy-implementation--: xref:shared.adoc#CoreProxy-implementation--
+:xref-CoreProxy-upgradeToAndCall-address-bytes-: xref:shared.adoc#CoreProxy-upgradeToAndCall-address-bytes-
+:xref-TransferHelper-unifiedTransferFrom-contract-IERC20-address-address-uint256-: xref:shared.adoc#TransferHelper-unifiedTransferFrom-contract-IERC20-address-address-uint256-
+:xref-TransferHelper-LogTransferHelperInputValidation1Failed-bool-address-address-: xref:shared.adoc#TransferHelper-LogTransferHelperInputValidation1Failed-bool-address-address-
+:xref-TransferHelper-LogTransferHelperInputValidation2Failed-uint256-uint256-: xref:shared.adoc#TransferHelper-LogTransferHelperInputValidation2Failed-uint256-uint256-
+:xref-TransferHelper-LogTransferHelperCallFailed-bool-uint256-bytes-: xref:shared.adoc#TransferHelper-LogTransferHelperCallFailed-bool-uint256-bytes-
+:xref-WithRegistry-onlyInstanceOperator--: xref:shared.adoc#WithRegistry-onlyInstanceOperator--
+:xref-WithRegistry-onlyOracleService--: xref:shared.adoc#WithRegistry-onlyOracleService--
+:xref-WithRegistry-onlyOracleOwner--: xref:shared.adoc#WithRegistry-onlyOracleOwner--
+:xref-WithRegistry-onlyProductOwner--: xref:shared.adoc#WithRegistry-onlyProductOwner--
+:xref-WithRegistry-constructor-address-: xref:shared.adoc#WithRegistry-constructor-address-
+:xref-WithRegistry-getContractFromRegistry-bytes32-: xref:shared.adoc#WithRegistry-getContractFromRegistry-bytes32-
+:xref-WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-: xref:shared.adoc#WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-
+:xref-WithRegistry-getReleaseFromRegistry--: xref:shared.adoc#WithRegistry-getReleaseFromRegistry--
+= Shared
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/shared
+
+== Contracts
+
+:_registry: pass:normal[xref:#CoreController-_registry-contract-IRegistry[`++_registry++`]]
+:_access: pass:normal[xref:#CoreController-_access-contract-IAccess[`++_access++`]]
+:constructor: pass:normal[xref:#CoreController-constructor--[`++constructor++`]]
+:onlyInstanceOperator: pass:normal[xref:#CoreController-onlyInstanceOperator--[`++onlyInstanceOperator++`]]
+:onlyPolicyFlow: pass:normal[xref:#CoreController-onlyPolicyFlow-bytes32-[`++onlyPolicyFlow++`]]
+:initialize: pass:normal[xref:#CoreController-initialize-address-[`++initialize++`]]
+:_getName: pass:normal[xref:#CoreController-_getName--[`++_getName++`]]
+:_afterInitialize: pass:normal[xref:#CoreController-_afterInitialize--[`++_afterInitialize++`]]
+:_getContractAddress: pass:normal[xref:#CoreController-_getContractAddress-bytes32-[`++_getContractAddress++`]]
+
+[.contract]
+[[CoreController]]
+=== `++CoreController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/shared/CoreController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/shared/CoreController.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-CoreController-onlyInstanceOperator--}[`++onlyInstanceOperator()++`]
+* {xref-CoreController-onlyPolicyFlow-bytes32-}[`++onlyPolicyFlow(module)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-CoreController-constructor--}[`++constructor()++`]
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+--
+
+[.contract-item]
+[[CoreController-onlyInstanceOperator--]]
+==== `[.contract-item-name]#++onlyInstanceOperator++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[CoreController-onlyPolicyFlow-bytes32-]]
+==== `[.contract-item-name]#++onlyPolicyFlow++#++(bytes32 module)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[CoreController-constructor--]]
+==== `[.contract-item-name]#++constructor++#++()++` [.item-kind]#public#
+
+[.contract-item]
+[[CoreController-initialize-address-]]
+==== `[.contract-item-name]#++initialize++#++(address registry)++` [.item-kind]#public#
+
+[.contract-item]
+[[CoreController-_getName--]]
+==== `[.contract-item-name]#++_getName++#++() → bytes32++` [.item-kind]#internal#
+
+[.contract-item]
+[[CoreController-_afterInitialize--]]
+==== `[.contract-item-name]#++_afterInitialize++#++()++` [.item-kind]#internal#
+
+[.contract-item]
+[[CoreController-_getContractAddress-bytes32-]]
+==== `[.contract-item-name]#++_getContractAddress++#++(bytes32 contractName) → address contractAddress++` [.item-kind]#internal#
+
+:onlyAdmin: pass:normal[xref:#CoreProxy-onlyAdmin--[`++onlyAdmin++`]]
+:constructor: pass:normal[xref:#CoreProxy-constructor-address-bytes-[`++constructor++`]]
+:implementation: pass:normal[xref:#CoreProxy-implementation--[`++implementation++`]]
+:upgradeToAndCall: pass:normal[xref:#CoreProxy-upgradeToAndCall-address-bytes-[`++upgradeToAndCall++`]]
+
+[.contract]
+[[CoreProxy]]
+=== `++CoreProxy++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/shared/CoreProxy.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/shared/CoreProxy.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-CoreProxy-onlyAdmin--}[`++onlyAdmin()++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-CoreProxy-constructor-address-bytes-}[`++constructor(_controller, encoded_initializer)++`]
+* {xref-CoreProxy-implementation--}[`++implementation()++`]
+* {xref-CoreProxy-upgradeToAndCall-address-bytes-}[`++upgradeToAndCall(newImplementation, data)++`]
+
+[.contract-subindex-inherited]
+.ERC1967Proxy
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Proxy-_implementation--[`++_implementation()++`]
+
+[.contract-subindex-inherited]
+.ERC1967Upgrade
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_getImplementation--[`++_getImplementation()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_upgradeTo-address-[`++_upgradeTo(newImplementation)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_upgradeToAndCall-address-bytes-bool-[`++_upgradeToAndCall(newImplementation, data, forceCall)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_upgradeToAndCallUUPS-address-bytes-bool-[`++_upgradeToAndCallUUPS(newImplementation, data, forceCall)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_getAdmin--[`++_getAdmin()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_changeAdmin-address-[`++_changeAdmin(newAdmin)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_getBeacon--[`++_getBeacon()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-_upgradeBeaconToAndCall-address-bytes-bool-[`++_upgradeBeaconToAndCall(newBeacon, data, forceCall)++`]
+
+[.contract-subindex-inherited]
+.Proxy
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Proxy-_delegate-address-[`++_delegate(implementation)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Proxy-_fallback--[`++_fallback()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Proxy-fallback--[`++fallback()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Proxy-receive--[`++receive()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Proxy-_beforeFallback--[`++_beforeFallback()++`]
+
+[.contract-subindex-inherited]
+.ICoreProxy
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.ERC1967Proxy
+
+[.contract-subindex-inherited]
+.ERC1967Upgrade
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-Upgraded-address-[`++Upgraded(implementation)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-AdminChanged-address-address-[`++AdminChanged(previousAdmin, newAdmin)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#ERC1967Upgrade-BeaconUpgraded-address-[`++BeaconUpgraded(beacon)++`]
+
+[.contract-subindex-inherited]
+.Proxy
+
+[.contract-subindex-inherited]
+.ICoreProxy
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/shared/ICoreProxy.sol[`++LogCoreContractUpgraded(oldImplementation, newImplemntation)++`]
+
+--
+
+[.contract-item]
+[[CoreProxy-onlyAdmin--]]
+==== `[.contract-item-name]#++onlyAdmin++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[CoreProxy-constructor-address-bytes-]]
+==== `[.contract-item-name]#++constructor++#++(address _controller, bytes encoded_initializer)++` [.item-kind]#public#
+
+[.contract-item]
+[[CoreProxy-implementation--]]
+==== `[.contract-item-name]#++implementation++#++() → address++` [.item-kind]#external#
+
+[.contract-item]
+[[CoreProxy-upgradeToAndCall-address-bytes-]]
+==== `[.contract-item-name]#++upgradeToAndCall++#++(address newImplementation, bytes data)++` [.item-kind]#external#
+
+:LogTransferHelperInputValidation1Failed: pass:normal[xref:#TransferHelper-LogTransferHelperInputValidation1Failed-bool-address-address-[`++LogTransferHelperInputValidation1Failed++`]]
+:LogTransferHelperInputValidation2Failed: pass:normal[xref:#TransferHelper-LogTransferHelperInputValidation2Failed-uint256-uint256-[`++LogTransferHelperInputValidation2Failed++`]]
+:LogTransferHelperCallFailed: pass:normal[xref:#TransferHelper-LogTransferHelperCallFailed-bool-uint256-bytes-[`++LogTransferHelperCallFailed++`]]
+:unifiedTransferFrom: pass:normal[xref:#TransferHelper-unifiedTransferFrom-contract-IERC20-address-address-uint256-[`++unifiedTransferFrom++`]]
+
+[.contract]
+[[TransferHelper]]
+=== `++TransferHelper++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/shared/TransferHelper.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/shared/TransferHelper.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TransferHelper-unifiedTransferFrom-contract-IERC20-address-address-uint256-}[`++unifiedTransferFrom(token, from, to, value)++`]
+
+--
+
+[.contract-index]
+.Events
+--
+* {xref-TransferHelper-LogTransferHelperInputValidation1Failed-bool-address-address-}[`++LogTransferHelperInputValidation1Failed(tokenIsContract, from, to)++`]
+* {xref-TransferHelper-LogTransferHelperInputValidation2Failed-uint256-uint256-}[`++LogTransferHelperInputValidation2Failed(balance, allowance)++`]
+* {xref-TransferHelper-LogTransferHelperCallFailed-bool-uint256-bytes-}[`++LogTransferHelperCallFailed(callSuccess, returnDataLength, returnData)++`]
+
+--
+
+[.contract-item]
+[[TransferHelper-unifiedTransferFrom-contract-IERC20-address-address-uint256-]]
+==== `[.contract-item-name]#++unifiedTransferFrom++#++(contract IERC20 token, address from, address to, uint256 value) → bool success++` [.item-kind]#internal#
+
+[.contract-item]
+[[TransferHelper-LogTransferHelperInputValidation1Failed-bool-address-address-]]
+==== `[.contract-item-name]#++LogTransferHelperInputValidation1Failed++#++(bool tokenIsContract, address from, address to)++` [.item-kind]#event#
+
+[.contract-item]
+[[TransferHelper-LogTransferHelperInputValidation2Failed-uint256-uint256-]]
+==== `[.contract-item-name]#++LogTransferHelperInputValidation2Failed++#++(uint256 balance, uint256 allowance)++` [.item-kind]#event#
+
+[.contract-item]
+[[TransferHelper-LogTransferHelperCallFailed-bool-uint256-bytes-]]
+==== `[.contract-item-name]#++LogTransferHelperCallFailed++#++(bool callSuccess, uint256 returnDataLength, bytes returnData)++` [.item-kind]#event#
+
+:registry: pass:normal[xref:#WithRegistry-registry-contract-IRegistry[`++registry++`]]
+:onlyInstanceOperator: pass:normal[xref:#WithRegistry-onlyInstanceOperator--[`++onlyInstanceOperator++`]]
+:onlyOracleService: pass:normal[xref:#WithRegistry-onlyOracleService--[`++onlyOracleService++`]]
+:onlyOracleOwner: pass:normal[xref:#WithRegistry-onlyOracleOwner--[`++onlyOracleOwner++`]]
+:onlyProductOwner: pass:normal[xref:#WithRegistry-onlyProductOwner--[`++onlyProductOwner++`]]
+:constructor: pass:normal[xref:#WithRegistry-constructor-address-[`++constructor++`]]
+:getContractFromRegistry: pass:normal[xref:#WithRegistry-getContractFromRegistry-bytes32-[`++getContractFromRegistry++`]]
+:getContractInReleaseFromRegistry: pass:normal[xref:#WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-[`++getContractInReleaseFromRegistry++`]]
+:getReleaseFromRegistry: pass:normal[xref:#WithRegistry-getReleaseFromRegistry--[`++getReleaseFromRegistry++`]]
+
+[.contract]
+[[WithRegistry]]
+=== `++WithRegistry++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/shared/WithRegistry.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/shared/WithRegistry.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-WithRegistry-onlyInstanceOperator--}[`++onlyInstanceOperator()++`]
+* {xref-WithRegistry-onlyOracleService--}[`++onlyOracleService()++`]
+* {xref-WithRegistry-onlyOracleOwner--}[`++onlyOracleOwner()++`]
+* {xref-WithRegistry-onlyProductOwner--}[`++onlyProductOwner()++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-WithRegistry-constructor-address-}[`++constructor(_registry)++`]
+* {xref-WithRegistry-getContractFromRegistry-bytes32-}[`++getContractFromRegistry(_contractName)++`]
+* {xref-WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-}[`++getContractInReleaseFromRegistry(_release, _contractName)++`]
+* {xref-WithRegistry-getReleaseFromRegistry--}[`++getReleaseFromRegistry()++`]
+
+--
+
+[.contract-item]
+[[WithRegistry-onlyInstanceOperator--]]
+==== `[.contract-item-name]#++onlyInstanceOperator++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[WithRegistry-onlyOracleService--]]
+==== `[.contract-item-name]#++onlyOracleService++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[WithRegistry-onlyOracleOwner--]]
+==== `[.contract-item-name]#++onlyOracleOwner++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[WithRegistry-onlyProductOwner--]]
+==== `[.contract-item-name]#++onlyProductOwner++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[WithRegistry-constructor-address-]]
+==== `[.contract-item-name]#++constructor++#++(address _registry)++` [.item-kind]#public#
+
+[.contract-item]
+[[WithRegistry-getContractFromRegistry-bytes32-]]
+==== `[.contract-item-name]#++getContractFromRegistry++#++(bytes32 _contractName) → address _addr++` [.item-kind]#public#
+
+[.contract-item]
+[[WithRegistry-getContractInReleaseFromRegistry-bytes32-bytes32-]]
+==== `[.contract-item-name]#++getContractInReleaseFromRegistry++#++(bytes32 _release, bytes32 _contractName) → address _addr++` [.item-kind]#internal#
+
+[.contract-item]
+[[WithRegistry-getReleaseFromRegistry--]]
+==== `[.contract-item-name]#++getReleaseFromRegistry++#++() → bytes32 _release++` [.item-kind]#internal#
+
diff --git a/docs/modules/api/pages/test.adoc b/docs/modules/api/pages/test.adoc
new file mode 100644
index 00000000..f8f12efb
--- /dev/null
+++ b/docs/modules/api/pages/test.adoc
@@ -0,0 +1,1271 @@
+:github-icon: pass:[]
+:xref-TestCoin-constructor--: xref:test.adoc#TestCoin-constructor--
+:xref-TestCoinAlternativeImplementation-constructor--: xref:test.adoc#TestCoinAlternativeImplementation-constructor--
+:xref-TestCoinAlternativeImplementation-transferFrom-address-address-uint256-: xref:test.adoc#TestCoinAlternativeImplementation-transferFrom-address-address-uint256-
+:xref-TestCompromisedProduct-onlyPolicyHolder-bytes32-: xref:test.adoc#TestCompromisedProduct-onlyPolicyHolder-bytes32-
+:xref-TestCompromisedProduct-constructor-bytes32-address-uint256-uint256-address-: xref:test.adoc#TestCompromisedProduct-constructor-bytes32-address-uint256-uint256-address-
+:xref-TestCompromisedProduct-applyForPolicy-uint256-uint256-bytes-bytes-: xref:test.adoc#TestCompromisedProduct-applyForPolicy-uint256-uint256-bytes-bytes-
+:xref-TestCompromisedProduct-collectPremium-bytes32-: xref:test.adoc#TestCompromisedProduct-collectPremium-bytes32-
+:xref-TestCompromisedProduct-submitClaim-bytes32-uint256-: xref:test.adoc#TestCompromisedProduct-submitClaim-bytes32-uint256-
+:xref-TestCompromisedProduct-getToken--: xref:test.adoc#TestCompromisedProduct-getToken--
+:xref-TestCompromisedProduct-getPolicyFlow--: xref:test.adoc#TestCompromisedProduct-getPolicyFlow--
+:xref-TestCompromisedProduct-getRiskpoolId--: xref:test.adoc#TestCompromisedProduct-getRiskpoolId--
+:xref-TestCompromisedProduct-getApplicationDataStructure--: xref:test.adoc#TestCompromisedProduct-getApplicationDataStructure--
+:xref-TestCompromisedProduct-getClaimDataStructure--: xref:test.adoc#TestCompromisedProduct-getClaimDataStructure--
+:xref-TestCompromisedProduct-getPayoutDataStructure--: xref:test.adoc#TestCompromisedProduct-getPayoutDataStructure--
+:xref-TestCompromisedProduct-riskPoolCapacityCallback-uint256-: xref:test.adoc#TestCompromisedProduct-riskPoolCapacityCallback-uint256-
+:xref-TestCompromisedProduct-setId-uint256-: xref:test.adoc#TestCompromisedProduct-setId-uint256-
+:xref-TestCompromisedProduct-getName--: xref:test.adoc#TestCompromisedProduct-getName--
+:xref-TestCompromisedProduct-getId--: xref:test.adoc#TestCompromisedProduct-getId--
+:xref-TestCompromisedProduct-getType--: xref:test.adoc#TestCompromisedProduct-getType--
+:xref-TestCompromisedProduct-getState--: xref:test.adoc#TestCompromisedProduct-getState--
+:xref-TestCompromisedProduct-getOwner--: xref:test.adoc#TestCompromisedProduct-getOwner--
+:xref-TestCompromisedProduct-getRegistry--: xref:test.adoc#TestCompromisedProduct-getRegistry--
+:xref-TestCompromisedProduct-isProduct--: xref:test.adoc#TestCompromisedProduct-isProduct--
+:xref-TestCompromisedProduct-isOracle--: xref:test.adoc#TestCompromisedProduct-isOracle--
+:xref-TestCompromisedProduct-isRiskpool--: xref:test.adoc#TestCompromisedProduct-isRiskpool--
+:xref-TestCompromisedProduct-proposalCallback--: xref:test.adoc#TestCompromisedProduct-proposalCallback--
+:xref-TestCompromisedProduct-approvalCallback--: xref:test.adoc#TestCompromisedProduct-approvalCallback--
+:xref-TestCompromisedProduct-declineCallback--: xref:test.adoc#TestCompromisedProduct-declineCallback--
+:xref-TestCompromisedProduct-suspendCallback--: xref:test.adoc#TestCompromisedProduct-suspendCallback--
+:xref-TestCompromisedProduct-resumeCallback--: xref:test.adoc#TestCompromisedProduct-resumeCallback--
+:xref-TestCompromisedProduct-pauseCallback--: xref:test.adoc#TestCompromisedProduct-pauseCallback--
+:xref-TestCompromisedProduct-unpauseCallback--: xref:test.adoc#TestCompromisedProduct-unpauseCallback--
+:xref-TestCompromisedProduct-archiveCallback--: xref:test.adoc#TestCompromisedProduct-archiveCallback--
+:xref-TestOracle-constructor-bytes32-address-: xref:test.adoc#TestOracle-constructor-bytes32-address-
+:xref-TestOracle-request-uint256-bytes-: xref:test.adoc#TestOracle-request-uint256-bytes-
+:xref-TestOracle-cancel-uint256-: xref:test.adoc#TestOracle-cancel-uint256-
+:xref-TestOracle-respond-uint256-bool-: xref:test.adoc#TestOracle-respond-uint256-bool-
+:xref-TestOracle-_oracleCalculation-uint256-: xref:test.adoc#TestOracle-_oracleCalculation-uint256-
+:xref-TestProduct-constructor-bytes32-address-address-uint256-uint256-address-: xref:test.adoc#TestProduct-constructor-bytes32-address-address-uint256-uint256-address-
+:xref-TestProduct-applyForPolicy-uint256-uint256-bytes-bytes-: xref:test.adoc#TestProduct-applyForPolicy-uint256-uint256-bytes-bytes-
+:xref-TestProduct-applyForPolicy-address-payable-uint256-uint256-bytes-bytes-: xref:test.adoc#TestProduct-applyForPolicy-address-payable-uint256-uint256-bytes-bytes-
+:xref-TestProduct-newAppliation-uint256-uint256-bytes-bytes-: xref:test.adoc#TestProduct-newAppliation-uint256-uint256-bytes-bytes-
+:xref-TestProduct-revoke-bytes32-: xref:test.adoc#TestProduct-revoke-bytes32-
+:xref-TestProduct-decline-bytes32-: xref:test.adoc#TestProduct-decline-bytes32-
+:xref-TestProduct-underwrite-bytes32-: xref:test.adoc#TestProduct-underwrite-bytes32-
+:xref-TestProduct-collectPremium-bytes32-: xref:test.adoc#TestProduct-collectPremium-bytes32-
+:xref-TestProduct-collectPremium-bytes32-uint256-: xref:test.adoc#TestProduct-collectPremium-bytes32-uint256-
+:xref-TestProduct-adjustPremiumSumInsured-bytes32-uint256-uint256-: xref:test.adoc#TestProduct-adjustPremiumSumInsured-bytes32-uint256-uint256-
+:xref-TestProduct-expire-bytes32-: xref:test.adoc#TestProduct-expire-bytes32-
+:xref-TestProduct-close-bytes32-: xref:test.adoc#TestProduct-close-bytes32-
+:xref-TestProduct-submitClaim-bytes32-uint256-: xref:test.adoc#TestProduct-submitClaim-bytes32-uint256-
+:xref-TestProduct-submitClaimNoOracle-bytes32-uint256-: xref:test.adoc#TestProduct-submitClaimNoOracle-bytes32-uint256-
+:xref-TestProduct-submitClaimWithDeferredResponse-bytes32-uint256-: xref:test.adoc#TestProduct-submitClaimWithDeferredResponse-bytes32-uint256-
+:xref-TestProduct-confirmClaim-bytes32-uint256-uint256-: xref:test.adoc#TestProduct-confirmClaim-bytes32-uint256-uint256-
+:xref-TestProduct-declineClaim-bytes32-uint256-: xref:test.adoc#TestProduct-declineClaim-bytes32-uint256-
+:xref-TestProduct-closeClaim-bytes32-uint256-: xref:test.adoc#TestProduct-closeClaim-bytes32-uint256-
+:xref-TestProduct-createPayout-bytes32-uint256-uint256-: xref:test.adoc#TestProduct-createPayout-bytes32-uint256-uint256-
+:xref-TestProduct-newPayout-bytes32-uint256-uint256-: xref:test.adoc#TestProduct-newPayout-bytes32-uint256-uint256-
+:xref-TestProduct-processPayout-bytes32-uint256-: xref:test.adoc#TestProduct-processPayout-bytes32-uint256-
+:xref-TestProduct-oracleCallback-uint256-bytes32-bytes-: xref:test.adoc#TestProduct-oracleCallback-uint256-bytes32-bytes-
+:xref-TestProduct-getClaimId-bytes32-: xref:test.adoc#TestProduct-getClaimId-bytes32-
+:xref-TestProduct-getPayoutId-bytes32-: xref:test.adoc#TestProduct-getPayoutId-bytes32-
+:xref-TestProduct-applications--: xref:test.adoc#TestProduct-applications--
+:xref-TestProduct-policies--: xref:test.adoc#TestProduct-policies--
+:xref-TestProduct-claims--: xref:test.adoc#TestProduct-claims--
+:xref-TestProduct-LogTestProductFundingReceived-address-uint256-: xref:test.adoc#TestProduct-LogTestProductFundingReceived-address-uint256-
+:xref-TestProduct-LogTestOracleCallbackReceived-uint256-bytes32-bytes-: xref:test.adoc#TestProduct-LogTestOracleCallbackReceived-uint256-bytes32-bytes-
+:xref-TestRegistryCompromisedController-getContract-bytes32-: xref:test.adoc#TestRegistryCompromisedController-getContract-bytes32-
+:xref-TestRegistryCompromisedController-upgradeToV2-address-address-: xref:test.adoc#TestRegistryCompromisedController-upgradeToV2-address-address-
+:xref-TestRegistryControllerUpdated-setMessage-string-: xref:test.adoc#TestRegistryControllerUpdated-setMessage-string-
+:xref-TestRegistryControllerUpdated-getMessage--: xref:test.adoc#TestRegistryControllerUpdated-getMessage--
+:xref-TestRegistryControllerUpdated-upgradeToV2-string-: xref:test.adoc#TestRegistryControllerUpdated-upgradeToV2-string-
+:xref-RegistryController-initializeRegistry-bytes32-: xref:modules.adoc#RegistryController-initializeRegistry-bytes32-
+:xref-RegistryController-ensureSender-address-bytes32-: xref:modules.adoc#RegistryController-ensureSender-address-bytes32-
+:xref-RegistryController-getRelease--: xref:modules.adoc#RegistryController-getRelease--
+:xref-RegistryController-getContract-bytes32-: xref:modules.adoc#RegistryController-getContract-bytes32-
+:xref-RegistryController-register-bytes32-address-: xref:modules.adoc#RegistryController-register-bytes32-address-
+:xref-RegistryController-deregister-bytes32-: xref:modules.adoc#RegistryController-deregister-bytes32-
+:xref-RegistryController-getContractInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-getContractInRelease-bytes32-bytes32-
+:xref-RegistryController-registerInRelease-bytes32-bytes32-address-: xref:modules.adoc#RegistryController-registerInRelease-bytes32-bytes32-address-
+:xref-RegistryController-deregisterInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-deregisterInRelease-bytes32-bytes32-
+:xref-RegistryController-prepareRelease-bytes32-: xref:modules.adoc#RegistryController-prepareRelease-bytes32-
+:xref-RegistryController-contracts--: xref:modules.adoc#RegistryController-contracts--
+:xref-RegistryController-contractName-uint256-: xref:modules.adoc#RegistryController-contractName-uint256-
+:xref-RegistryController-_getContractInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-_getContractInRelease-bytes32-bytes32-
+:xref-RegistryController-_registerInRelease-bytes32-bool-bytes32-address-: xref:modules.adoc#RegistryController-_registerInRelease-bytes32-bool-bytes32-address-
+:xref-RegistryController-_deregisterInRelease-bytes32-bytes32-: xref:modules.adoc#RegistryController-_deregisterInRelease-bytes32-bytes32-
+:xref-CoreController-initialize-address-: xref:shared.adoc#CoreController-initialize-address-
+:xref-CoreController-_getName--: xref:shared.adoc#CoreController-_getName--
+:xref-CoreController-_afterInitialize--: xref:shared.adoc#CoreController-_afterInitialize--
+:xref-CoreController-_getContractAddress-bytes32-: xref:shared.adoc#CoreController-_getContractAddress-bytes32-
+:xref-TestRiskpool-constructor-bytes32-uint256-address-address-address-: xref:test.adoc#TestRiskpool-constructor-bytes32-uint256-address-address-address-
+:xref-TestRiskpool-bundleMatchesApplication-struct-IBundle-Bundle-struct-IPolicy-Application-: xref:test.adoc#TestRiskpool-bundleMatchesApplication-struct-IBundle-Bundle-struct-IPolicy-Application-
+:xref-TestTransferFrom-unifiedTransferFrom-contract-IERC20-address-address-uint256-: xref:test.adoc#TestTransferFrom-unifiedTransferFrom-contract-IERC20-address-address-uint256-
+:xref-TestTransferFrom-LogTransferHelperInputValidation1Failed-bool-address-address-: xref:test.adoc#TestTransferFrom-LogTransferHelperInputValidation1Failed-bool-address-address-
+:xref-TestTransferFrom-LogTransferHelperInputValidation2Failed-uint256-uint256-: xref:test.adoc#TestTransferFrom-LogTransferHelperInputValidation2Failed-uint256-uint256-
+:xref-TestTransferFrom-LogTransferHelperCallFailed-bool-uint256-bytes-: xref:test.adoc#TestTransferFrom-LogTransferHelperCallFailed-bool-uint256-bytes-
+= Test
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/test
+
+== Contracts
+
+:NAME: pass:normal[xref:#TestCoin-NAME-string[`++NAME++`]]
+:SYMBOL: pass:normal[xref:#TestCoin-SYMBOL-string[`++SYMBOL++`]]
+:INITIAL_SUPPLY: pass:normal[xref:#TestCoin-INITIAL_SUPPLY-uint256[`++INITIAL_SUPPLY++`]]
+:constructor: pass:normal[xref:#TestCoin-constructor--[`++constructor++`]]
+
+[.contract]
+[[TestCoin]]
+=== `++TestCoin++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestCoin.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestCoin.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestCoin-constructor--}[`++constructor()++`]
+
+[.contract-subindex-inherited]
+.ERC20
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-name--[`++name()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-symbol--[`++symbol()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-decimals--[`++decimals()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-totalSupply--[`++totalSupply()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-balanceOf-address-[`++balanceOf(account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-transfer-address-uint256-[`++transfer(to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-allowance-address-address-[`++allowance(owner, spender)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-approve-address-uint256-[`++approve(spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-transferFrom-address-address-uint256-[`++transferFrom(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-increaseAllowance-address-uint256-[`++increaseAllowance(spender, addedValue)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-decreaseAllowance-address-uint256-[`++decreaseAllowance(spender, subtractedValue)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_transfer-address-address-uint256-[`++_transfer(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_mint-address-uint256-[`++_mint(account, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_burn-address-uint256-[`++_burn(account, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_approve-address-address-uint256-[`++_approve(owner, spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_spendAllowance-address-address-uint256-[`++_spendAllowance(owner, spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_afterTokenTransfer-address-address-uint256-[`++_afterTokenTransfer(from, to, amount)++`]
+
+[.contract-subindex-inherited]
+.IERC20Metadata
+
+[.contract-subindex-inherited]
+.IERC20
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.ERC20
+
+[.contract-subindex-inherited]
+.IERC20Metadata
+
+[.contract-subindex-inherited]
+.IERC20
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#IERC20-Transfer-address-address-uint256-[`++Transfer(from, to, value)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#IERC20-Approval-address-address-uint256-[`++Approval(owner, spender, value)++`]
+
+--
+
+[.contract-item]
+[[TestCoin-constructor--]]
+==== `[.contract-item-name]#++constructor++#++()++` [.item-kind]#public#
+
+:NAME: pass:normal[xref:#TestCoinAlternativeImplementation-NAME-string[`++NAME++`]]
+:SYMBOL: pass:normal[xref:#TestCoinAlternativeImplementation-SYMBOL-string[`++SYMBOL++`]]
+:INITIAL_SUPPLY: pass:normal[xref:#TestCoinAlternativeImplementation-INITIAL_SUPPLY-uint256[`++INITIAL_SUPPLY++`]]
+:constructor: pass:normal[xref:#TestCoinAlternativeImplementation-constructor--[`++constructor++`]]
+:transferFrom: pass:normal[xref:#TestCoinAlternativeImplementation-transferFrom-address-address-uint256-[`++transferFrom++`]]
+
+[.contract]
+[[TestCoinAlternativeImplementation]]
+=== `++TestCoinAlternativeImplementation++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestCoinAlternativeImplementation.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestCoinAlternativeImplementation.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestCoinAlternativeImplementation-constructor--}[`++constructor()++`]
+* {xref-TestCoinAlternativeImplementation-transferFrom-address-address-uint256-}[`++transferFrom(_from, _to, _value)++`]
+
+[.contract-subindex-inherited]
+.ERC20
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-name--[`++name()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-symbol--[`++symbol()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-decimals--[`++decimals()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-totalSupply--[`++totalSupply()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-balanceOf-address-[`++balanceOf(account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-transfer-address-uint256-[`++transfer(to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-allowance-address-address-[`++allowance(owner, spender)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-approve-address-uint256-[`++approve(spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-increaseAllowance-address-uint256-[`++increaseAllowance(spender, addedValue)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-decreaseAllowance-address-uint256-[`++decreaseAllowance(spender, subtractedValue)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_transfer-address-address-uint256-[`++_transfer(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_mint-address-uint256-[`++_mint(account, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_burn-address-uint256-[`++_burn(account, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_approve-address-address-uint256-[`++_approve(owner, spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_spendAllowance-address-address-uint256-[`++_spendAllowance(owner, spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_afterTokenTransfer-address-address-uint256-[`++_afterTokenTransfer(from, to, amount)++`]
+
+[.contract-subindex-inherited]
+.IERC20Metadata
+
+[.contract-subindex-inherited]
+.IERC20
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.ERC20
+
+[.contract-subindex-inherited]
+.IERC20Metadata
+
+[.contract-subindex-inherited]
+.IERC20
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#IERC20-Transfer-address-address-uint256-[`++Transfer(from, to, value)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#IERC20-Approval-address-address-uint256-[`++Approval(owner, spender, value)++`]
+
+--
+
+[.contract-item]
+[[TestCoinAlternativeImplementation-constructor--]]
+==== `[.contract-item-name]#++constructor++#++()++` [.item-kind]#public#
+
+[.contract-item]
+[[TestCoinAlternativeImplementation-transferFrom-address-address-uint256-]]
+==== `[.contract-item-name]#++transferFrom++#++(address _from, address _to, uint256 _value) → bool++` [.item-kind]#public#
+
+:FAKE_STATE: pass:normal[xref:#TestCompromisedProduct-FAKE_STATE-enum-IComponent-ComponentState[`++FAKE_STATE++`]]
+:POLICY_FLOW: pass:normal[xref:#TestCompromisedProduct-POLICY_FLOW-bytes32[`++POLICY_FLOW++`]]
+:onlyPolicyHolder: pass:normal[xref:#TestCompromisedProduct-onlyPolicyHolder-bytes32-[`++onlyPolicyHolder++`]]
+:constructor: pass:normal[xref:#TestCompromisedProduct-constructor-bytes32-address-uint256-uint256-address-[`++constructor++`]]
+:applyForPolicy: pass:normal[xref:#TestCompromisedProduct-applyForPolicy-uint256-uint256-bytes-bytes-[`++applyForPolicy++`]]
+:collectPremium: pass:normal[xref:#TestCompromisedProduct-collectPremium-bytes32-[`++collectPremium++`]]
+:submitClaim: pass:normal[xref:#TestCompromisedProduct-submitClaim-bytes32-uint256-[`++submitClaim++`]]
+:getToken: pass:normal[xref:#TestCompromisedProduct-getToken--[`++getToken++`]]
+:getPolicyFlow: pass:normal[xref:#TestCompromisedProduct-getPolicyFlow--[`++getPolicyFlow++`]]
+:getRiskpoolId: pass:normal[xref:#TestCompromisedProduct-getRiskpoolId--[`++getRiskpoolId++`]]
+:getApplicationDataStructure: pass:normal[xref:#TestCompromisedProduct-getApplicationDataStructure--[`++getApplicationDataStructure++`]]
+:getClaimDataStructure: pass:normal[xref:#TestCompromisedProduct-getClaimDataStructure--[`++getClaimDataStructure++`]]
+:getPayoutDataStructure: pass:normal[xref:#TestCompromisedProduct-getPayoutDataStructure--[`++getPayoutDataStructure++`]]
+:riskPoolCapacityCallback: pass:normal[xref:#TestCompromisedProduct-riskPoolCapacityCallback-uint256-[`++riskPoolCapacityCallback++`]]
+:setId: pass:normal[xref:#TestCompromisedProduct-setId-uint256-[`++setId++`]]
+:getName: pass:normal[xref:#TestCompromisedProduct-getName--[`++getName++`]]
+:getId: pass:normal[xref:#TestCompromisedProduct-getId--[`++getId++`]]
+:getType: pass:normal[xref:#TestCompromisedProduct-getType--[`++getType++`]]
+:getState: pass:normal[xref:#TestCompromisedProduct-getState--[`++getState++`]]
+:getOwner: pass:normal[xref:#TestCompromisedProduct-getOwner--[`++getOwner++`]]
+:getRegistry: pass:normal[xref:#TestCompromisedProduct-getRegistry--[`++getRegistry++`]]
+:isProduct: pass:normal[xref:#TestCompromisedProduct-isProduct--[`++isProduct++`]]
+:isOracle: pass:normal[xref:#TestCompromisedProduct-isOracle--[`++isOracle++`]]
+:isRiskpool: pass:normal[xref:#TestCompromisedProduct-isRiskpool--[`++isRiskpool++`]]
+:proposalCallback: pass:normal[xref:#TestCompromisedProduct-proposalCallback--[`++proposalCallback++`]]
+:approvalCallback: pass:normal[xref:#TestCompromisedProduct-approvalCallback--[`++approvalCallback++`]]
+:declineCallback: pass:normal[xref:#TestCompromisedProduct-declineCallback--[`++declineCallback++`]]
+:suspendCallback: pass:normal[xref:#TestCompromisedProduct-suspendCallback--[`++suspendCallback++`]]
+:resumeCallback: pass:normal[xref:#TestCompromisedProduct-resumeCallback--[`++resumeCallback++`]]
+:pauseCallback: pass:normal[xref:#TestCompromisedProduct-pauseCallback--[`++pauseCallback++`]]
+:unpauseCallback: pass:normal[xref:#TestCompromisedProduct-unpauseCallback--[`++unpauseCallback++`]]
+:archiveCallback: pass:normal[xref:#TestCompromisedProduct-archiveCallback--[`++archiveCallback++`]]
+
+[.contract]
+[[TestCompromisedProduct]]
+=== `++TestCompromisedProduct++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestCompromisedProduct.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestCompromisedProduct.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-TestCompromisedProduct-onlyPolicyHolder-bytes32-}[`++onlyPolicyHolder(policyId)++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-TestCompromisedProduct-constructor-bytes32-address-uint256-uint256-address-}[`++constructor(fakeProductName, tokenAddress, fakeComponentId, fakeRiskpoolId, registryAddress)++`]
+* {xref-TestCompromisedProduct-applyForPolicy-uint256-uint256-bytes-bytes-}[`++applyForPolicy(premium, sumInsured, metaData, applicationData)++`]
+* {xref-TestCompromisedProduct-collectPremium-bytes32-}[`++collectPremium(policyId)++`]
+* {xref-TestCompromisedProduct-submitClaim-bytes32-uint256-}[`++submitClaim(policyId, claimAmount)++`]
+* {xref-TestCompromisedProduct-getToken--}[`++getToken()++`]
+* {xref-TestCompromisedProduct-getPolicyFlow--}[`++getPolicyFlow()++`]
+* {xref-TestCompromisedProduct-getRiskpoolId--}[`++getRiskpoolId()++`]
+* {xref-TestCompromisedProduct-getApplicationDataStructure--}[`++getApplicationDataStructure()++`]
+* {xref-TestCompromisedProduct-getClaimDataStructure--}[`++getClaimDataStructure()++`]
+* {xref-TestCompromisedProduct-getPayoutDataStructure--}[`++getPayoutDataStructure()++`]
+* {xref-TestCompromisedProduct-riskPoolCapacityCallback-uint256-}[`++riskPoolCapacityCallback(capacity)++`]
+* {xref-TestCompromisedProduct-setId-uint256-}[`++setId(id)++`]
+* {xref-TestCompromisedProduct-getName--}[`++getName()++`]
+* {xref-TestCompromisedProduct-getId--}[`++getId()++`]
+* {xref-TestCompromisedProduct-getType--}[`++getType()++`]
+* {xref-TestCompromisedProduct-getState--}[`++getState()++`]
+* {xref-TestCompromisedProduct-getOwner--}[`++getOwner()++`]
+* {xref-TestCompromisedProduct-getRegistry--}[`++getRegistry()++`]
+* {xref-TestCompromisedProduct-isProduct--}[`++isProduct()++`]
+* {xref-TestCompromisedProduct-isOracle--}[`++isOracle()++`]
+* {xref-TestCompromisedProduct-isRiskpool--}[`++isRiskpool()++`]
+* {xref-TestCompromisedProduct-proposalCallback--}[`++proposalCallback()++`]
+* {xref-TestCompromisedProduct-approvalCallback--}[`++approvalCallback()++`]
+* {xref-TestCompromisedProduct-declineCallback--}[`++declineCallback()++`]
+* {xref-TestCompromisedProduct-suspendCallback--}[`++suspendCallback()++`]
+* {xref-TestCompromisedProduct-resumeCallback--}[`++resumeCallback()++`]
+* {xref-TestCompromisedProduct-pauseCallback--}[`++pauseCallback()++`]
+* {xref-TestCompromisedProduct-unpauseCallback--}[`++unpauseCallback()++`]
+* {xref-TestCompromisedProduct-archiveCallback--}[`++archiveCallback()++`]
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-owner--[`++owner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_checkOwner--[`++_checkOwner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-renounceOwnership--[`++renounceOwnership()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-transferOwnership-address-[`++transferOwnership(newOwner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_transferOwnership-address-[`++_transferOwnership(newOwner)++`]
+
+[.contract-subindex-inherited]
+.IProduct
+
+[.contract-subindex-inherited]
+.IComponent
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-OwnershipTransferred-address-address-[`++OwnershipTransferred(previousOwner, newOwner)++`]
+
+[.contract-subindex-inherited]
+.IProduct
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductCreated(productAddress)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductProposed(componentId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductApproved(componentId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductDeclined(componentId)++`]
+
+[.contract-subindex-inherited]
+.IComponent
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IComponent.sol[`++LogComponentCreated(componentName, componentType, componentAddress, registryAddress)++`]
+
+--
+
+[.contract-item]
+[[TestCompromisedProduct-onlyPolicyHolder-bytes32-]]
+==== `[.contract-item-name]#++onlyPolicyHolder++#++(bytes32 policyId)++` [.item-kind]#modifier#
+
+[.contract-item]
+[[TestCompromisedProduct-constructor-bytes32-address-uint256-uint256-address-]]
+==== `[.contract-item-name]#++constructor++#++(bytes32 fakeProductName, address tokenAddress, uint256 fakeComponentId, uint256 fakeRiskpoolId, address registryAddress)++` [.item-kind]#public#
+
+[.contract-item]
+[[TestCompromisedProduct-applyForPolicy-uint256-uint256-bytes-bytes-]]
+==== `[.contract-item-name]#++applyForPolicy++#++(uint256 premium, uint256 sumInsured, bytes metaData, bytes applicationData) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-collectPremium-bytes32-]]
+==== `[.contract-item-name]#++collectPremium++#++(bytes32 policyId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-submitClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++submitClaim++#++(bytes32 policyId, uint256 claimAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getToken--]]
+==== `[.contract-item-name]#++getToken++#++() → address token++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getPolicyFlow--]]
+==== `[.contract-item-name]#++getPolicyFlow++#++() → address policyFlow++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getRiskpoolId--]]
+==== `[.contract-item-name]#++getRiskpoolId++#++() → uint256 riskpoolId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getApplicationDataStructure--]]
+==== `[.contract-item-name]#++getApplicationDataStructure++#++() → string dataStructure++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getClaimDataStructure--]]
+==== `[.contract-item-name]#++getClaimDataStructure++#++() → string dataStructure++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getPayoutDataStructure--]]
+==== `[.contract-item-name]#++getPayoutDataStructure++#++() → string dataStructure++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-riskPoolCapacityCallback-uint256-]]
+==== `[.contract-item-name]#++riskPoolCapacityCallback++#++(uint256 capacity)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-setId-uint256-]]
+==== `[.contract-item-name]#++setId++#++(uint256 id)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getName--]]
+==== `[.contract-item-name]#++getName++#++() → bytes32++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getId--]]
+==== `[.contract-item-name]#++getId++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getType--]]
+==== `[.contract-item-name]#++getType++#++() → enum IComponent.ComponentType++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getState--]]
+==== `[.contract-item-name]#++getState++#++() → enum IComponent.ComponentState++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getOwner--]]
+==== `[.contract-item-name]#++getOwner++#++() → address++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-getRegistry--]]
+==== `[.contract-item-name]#++getRegistry++#++() → contract IRegistry++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-isProduct--]]
+==== `[.contract-item-name]#++isProduct++#++() → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[TestCompromisedProduct-isOracle--]]
+==== `[.contract-item-name]#++isOracle++#++() → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[TestCompromisedProduct-isRiskpool--]]
+==== `[.contract-item-name]#++isRiskpool++#++() → bool++` [.item-kind]#public#
+
+[.contract-item]
+[[TestCompromisedProduct-proposalCallback--]]
+==== `[.contract-item-name]#++proposalCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-approvalCallback--]]
+==== `[.contract-item-name]#++approvalCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-declineCallback--]]
+==== `[.contract-item-name]#++declineCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-suspendCallback--]]
+==== `[.contract-item-name]#++suspendCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-resumeCallback--]]
+==== `[.contract-item-name]#++resumeCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-pauseCallback--]]
+==== `[.contract-item-name]#++pauseCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-unpauseCallback--]]
+==== `[.contract-item-name]#++unpauseCallback++#++()++` [.item-kind]#external#
+
+[.contract-item]
+[[TestCompromisedProduct-archiveCallback--]]
+==== `[.contract-item-name]#++archiveCallback++#++()++` [.item-kind]#external#
+
+:constructor: pass:normal[xref:#TestOracle-constructor-bytes32-address-[`++constructor++`]]
+:request: pass:normal[xref:#TestOracle-request-uint256-bytes-[`++request++`]]
+:cancel: pass:normal[xref:#TestOracle-cancel-uint256-[`++cancel++`]]
+:respond: pass:normal[xref:#TestOracle-respond-uint256-bool-[`++respond++`]]
+:_oracleCalculation: pass:normal[xref:#TestOracle-_oracleCalculation-uint256-[`++_oracleCalculation++`]]
+
+[.contract]
+[[TestOracle]]
+=== `++TestOracle++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestOracle.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestOracle.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestOracle-constructor-bytes32-address-}[`++constructor(oracleName, registry)++`]
+* {xref-TestOracle-request-uint256-bytes-}[`++request(requestId, input)++`]
+* {xref-TestOracle-cancel-uint256-}[`++cancel(requestId)++`]
+* {xref-TestOracle-respond-uint256-bool-}[`++respond(requestId, isLossEvent)++`]
+* {xref-TestOracle-_oracleCalculation-uint256-}[`++_oracleCalculation(counter)++`]
+
+[.contract-subindex-inherited]
+.Oracle
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Oracle.sol[`++_afterApprove()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Oracle.sol[`++_afterPropose()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Oracle.sol[`++_afterDecline()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Oracle.sol[`++_respond(requestId, data)++`]
+
+[.contract-subindex-inherited]
+.Component
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++setId(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getName()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getId()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getType()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getState()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getOwner()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isProduct()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isOracle()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isRiskpool()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getRegistry()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++proposalCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++approvalCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++declineCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++suspendCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++resumeCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++pauseCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++unpauseCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++archiveCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterSuspend()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterResume()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterPause()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterUnpause()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterArchive()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getAccess()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getInstanceService()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getComponentOwnerService()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-owner--[`++owner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_checkOwner--[`++_checkOwner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-renounceOwnership--[`++renounceOwnership()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-transferOwnership-address-[`++transferOwnership(newOwner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_transferOwnership-address-[`++_transferOwnership(newOwner)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+
+[.contract-subindex-inherited]
+.IOracle
+
+[.contract-subindex-inherited]
+.IComponent
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.Oracle
+
+[.contract-subindex-inherited]
+.Component
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-OwnershipTransferred-address-address-[`++OwnershipTransferred(previousOwner, newOwner)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentProposed(componentName, componentType, componentAddress, id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentApproved(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentDeclined(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentSuspended(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentResumed(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentPaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentUnpaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentArchived(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentStateChanged(id, stateOld, stateNew)++`]
+
+[.contract-subindex-inherited]
+.IOracle
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IOracle.sol[`++LogOracleCreated(oracleAddress)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IOracle.sol[`++LogOracleProposed(componentId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IOracle.sol[`++LogOracleApproved(componentId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IOracle.sol[`++LogOracleDeclined(componentId)++`]
+
+[.contract-subindex-inherited]
+.IComponent
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IComponent.sol[`++LogComponentCreated(componentName, componentType, componentAddress, registryAddress)++`]
+
+--
+
+[.contract-item]
+[[TestOracle-constructor-bytes32-address-]]
+==== `[.contract-item-name]#++constructor++#++(bytes32 oracleName, address registry)++` [.item-kind]#public#
+
+[.contract-item]
+[[TestOracle-request-uint256-bytes-]]
+==== `[.contract-item-name]#++request++#++(uint256 requestId, bytes input)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestOracle-cancel-uint256-]]
+==== `[.contract-item-name]#++cancel++#++(uint256 requestId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestOracle-respond-uint256-bool-]]
+==== `[.contract-item-name]#++respond++#++(uint256 requestId, bool isLossEvent)++` [.item-kind]#public#
+
+[.contract-item]
+[[TestOracle-_oracleCalculation-uint256-]]
+==== `[.contract-item-name]#++_oracleCalculation++#++(uint256 counter) → bool isLossEvent++` [.item-kind]#internal#
+
+:POLICY_FLOW: pass:normal[xref:#TestProduct-POLICY_FLOW-bytes32[`++POLICY_FLOW++`]]
+:ORACLE_CALLBACK_METHOD_NAME: pass:normal[xref:#TestProduct-ORACLE_CALLBACK_METHOD_NAME-string[`++ORACLE_CALLBACK_METHOD_NAME++`]]
+:LogTestProductFundingReceived: pass:normal[xref:#TestProduct-LogTestProductFundingReceived-address-uint256-[`++LogTestProductFundingReceived++`]]
+:LogTestOracleCallbackReceived: pass:normal[xref:#TestProduct-LogTestOracleCallbackReceived-uint256-bytes32-bytes-[`++LogTestOracleCallbackReceived++`]]
+:constructor: pass:normal[xref:#TestProduct-constructor-bytes32-address-address-uint256-uint256-address-[`++constructor++`]]
+:applyForPolicy: pass:normal[xref:#TestProduct-applyForPolicy-uint256-uint256-bytes-bytes-[`++applyForPolicy++`]]
+:applyForPolicy: pass:normal[xref:#TestProduct-applyForPolicy-address-payable-uint256-uint256-bytes-bytes-[`++applyForPolicy++`]]
+:newAppliation: pass:normal[xref:#TestProduct-newAppliation-uint256-uint256-bytes-bytes-[`++newAppliation++`]]
+:revoke: pass:normal[xref:#TestProduct-revoke-bytes32-[`++revoke++`]]
+:decline: pass:normal[xref:#TestProduct-decline-bytes32-[`++decline++`]]
+:underwrite: pass:normal[xref:#TestProduct-underwrite-bytes32-[`++underwrite++`]]
+:collectPremium: pass:normal[xref:#TestProduct-collectPremium-bytes32-[`++collectPremium++`]]
+:collectPremium: pass:normal[xref:#TestProduct-collectPremium-bytes32-uint256-[`++collectPremium++`]]
+:adjustPremiumSumInsured: pass:normal[xref:#TestProduct-adjustPremiumSumInsured-bytes32-uint256-uint256-[`++adjustPremiumSumInsured++`]]
+:expire: pass:normal[xref:#TestProduct-expire-bytes32-[`++expire++`]]
+:close: pass:normal[xref:#TestProduct-close-bytes32-[`++close++`]]
+:submitClaim: pass:normal[xref:#TestProduct-submitClaim-bytes32-uint256-[`++submitClaim++`]]
+:submitClaimNoOracle: pass:normal[xref:#TestProduct-submitClaimNoOracle-bytes32-uint256-[`++submitClaimNoOracle++`]]
+:submitClaimWithDeferredResponse: pass:normal[xref:#TestProduct-submitClaimWithDeferredResponse-bytes32-uint256-[`++submitClaimWithDeferredResponse++`]]
+:confirmClaim: pass:normal[xref:#TestProduct-confirmClaim-bytes32-uint256-uint256-[`++confirmClaim++`]]
+:declineClaim: pass:normal[xref:#TestProduct-declineClaim-bytes32-uint256-[`++declineClaim++`]]
+:closeClaim: pass:normal[xref:#TestProduct-closeClaim-bytes32-uint256-[`++closeClaim++`]]
+:createPayout: pass:normal[xref:#TestProduct-createPayout-bytes32-uint256-uint256-[`++createPayout++`]]
+:newPayout: pass:normal[xref:#TestProduct-newPayout-bytes32-uint256-uint256-[`++newPayout++`]]
+:processPayout: pass:normal[xref:#TestProduct-processPayout-bytes32-uint256-[`++processPayout++`]]
+:oracleCallback: pass:normal[xref:#TestProduct-oracleCallback-uint256-bytes32-bytes-[`++oracleCallback++`]]
+:getClaimId: pass:normal[xref:#TestProduct-getClaimId-bytes32-[`++getClaimId++`]]
+:getPayoutId: pass:normal[xref:#TestProduct-getPayoutId-bytes32-[`++getPayoutId++`]]
+:applications: pass:normal[xref:#TestProduct-applications--[`++applications++`]]
+:policies: pass:normal[xref:#TestProduct-policies--[`++policies++`]]
+:claims: pass:normal[xref:#TestProduct-claims--[`++claims++`]]
+
+[.contract]
+[[TestProduct]]
+=== `++TestProduct++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestProduct.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestProduct.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestProduct-constructor-bytes32-address-address-uint256-uint256-address-}[`++constructor(productName, tokenAddress, capitalOwner, oracleId, riskpoolId, registryAddress)++`]
+* {xref-TestProduct-applyForPolicy-uint256-uint256-bytes-bytes-}[`++applyForPolicy(premium, sumInsured, metaData, applicationData)++`]
+* {xref-TestProduct-applyForPolicy-address-payable-uint256-uint256-bytes-bytes-}[`++applyForPolicy(policyHolder, premium, sumInsured, metaData, applicationData)++`]
+* {xref-TestProduct-newAppliation-uint256-uint256-bytes-bytes-}[`++newAppliation(premium, sumInsured, metaData, applicationData)++`]
+* {xref-TestProduct-revoke-bytes32-}[`++revoke(processId)++`]
+* {xref-TestProduct-decline-bytes32-}[`++decline(processId)++`]
+* {xref-TestProduct-underwrite-bytes32-}[`++underwrite(processId)++`]
+* {xref-TestProduct-collectPremium-bytes32-}[`++collectPremium(policyId)++`]
+* {xref-TestProduct-collectPremium-bytes32-uint256-}[`++collectPremium(policyId, amount)++`]
+* {xref-TestProduct-adjustPremiumSumInsured-bytes32-uint256-uint256-}[`++adjustPremiumSumInsured(processId, expectedPremiumAmount, sumInsuredAmount)++`]
+* {xref-TestProduct-expire-bytes32-}[`++expire(policyId)++`]
+* {xref-TestProduct-close-bytes32-}[`++close(policyId)++`]
+* {xref-TestProduct-submitClaim-bytes32-uint256-}[`++submitClaim(policyId, claimAmount)++`]
+* {xref-TestProduct-submitClaimNoOracle-bytes32-uint256-}[`++submitClaimNoOracle(policyId, claimAmount)++`]
+* {xref-TestProduct-submitClaimWithDeferredResponse-bytes32-uint256-}[`++submitClaimWithDeferredResponse(policyId, claimAmount)++`]
+* {xref-TestProduct-confirmClaim-bytes32-uint256-uint256-}[`++confirmClaim(policyId, claimId, confirmedAmount)++`]
+* {xref-TestProduct-declineClaim-bytes32-uint256-}[`++declineClaim(policyId, claimId)++`]
+* {xref-TestProduct-closeClaim-bytes32-uint256-}[`++closeClaim(policyId, claimId)++`]
+* {xref-TestProduct-createPayout-bytes32-uint256-uint256-}[`++createPayout(policyId, claimId, payoutAmount)++`]
+* {xref-TestProduct-newPayout-bytes32-uint256-uint256-}[`++newPayout(policyId, claimId, payoutAmount)++`]
+* {xref-TestProduct-processPayout-bytes32-uint256-}[`++processPayout(policyId, payoutId)++`]
+* {xref-TestProduct-oracleCallback-uint256-bytes32-bytes-}[`++oracleCallback(requestId, policyId, responseData)++`]
+* {xref-TestProduct-getClaimId-bytes32-}[`++getClaimId(policyId)++`]
+* {xref-TestProduct-getPayoutId-bytes32-}[`++getPayoutId(policyId)++`]
+* {xref-TestProduct-applications--}[`++applications()++`]
+* {xref-TestProduct-policies--}[`++policies()++`]
+* {xref-TestProduct-claims--}[`++claims()++`]
+
+[.contract-subindex-inherited]
+.Product
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++getToken()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++getPolicyFlow()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++getRiskpoolId()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_afterApprove()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_afterPropose()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_afterDecline()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_newApplication(applicationOwner, premiumAmount, sumInsuredAmount, metaData, applicationData)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_collectPremium(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_collectPremium(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_adjustPremiumSumInsured(processId, expectedPremiumAmount, sumInsuredAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_revoke(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_underwrite(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_decline(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_expire(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_close(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_newClaim(processId, claimAmount, data)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_confirmClaim(processId, claimId, payoutAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_declineClaim(processId, claimId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_closeClaim(processId, claimId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_newPayout(processId, claimId, amount, data)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_processPayout(processId, payoutId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_request(processId, input, callbackMethodName, responsibleOracleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_cancelRequest(requestId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_getMetadata(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_getApplication(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_getPolicy(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_getClaim(processId, claimId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++_getPayout(processId, payoutId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++getApplicationDataStructure()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++getClaimDataStructure()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++getPayoutDataStructure()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Product.sol[`++riskPoolCapacityCallback(capacity)++`]
+
+[.contract-subindex-inherited]
+.Component
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++setId(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getName()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getId()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getType()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getState()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getOwner()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isProduct()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isOracle()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isRiskpool()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getRegistry()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++proposalCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++approvalCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++declineCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++suspendCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++resumeCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++pauseCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++unpauseCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++archiveCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterSuspend()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterResume()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterPause()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterUnpause()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterArchive()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getAccess()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getInstanceService()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getComponentOwnerService()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-owner--[`++owner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_checkOwner--[`++_checkOwner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-renounceOwnership--[`++renounceOwnership()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-transferOwnership-address-[`++transferOwnership(newOwner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_transferOwnership-address-[`++_transferOwnership(newOwner)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+
+[.contract-subindex-inherited]
+.IProduct
+
+[.contract-subindex-inherited]
+.IComponent
+
+--
+
+[.contract-index]
+.Events
+--
+* {xref-TestProduct-LogTestProductFundingReceived-address-uint256-}[`++LogTestProductFundingReceived(sender, amount)++`]
+* {xref-TestProduct-LogTestOracleCallbackReceived-uint256-bytes32-bytes-}[`++LogTestOracleCallbackReceived(requestId, policyId, response)++`]
+
+[.contract-subindex-inherited]
+.Product
+
+[.contract-subindex-inherited]
+.Component
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-OwnershipTransferred-address-address-[`++OwnershipTransferred(previousOwner, newOwner)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentProposed(componentName, componentType, componentAddress, id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentApproved(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentDeclined(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentSuspended(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentResumed(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentPaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentUnpaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentArchived(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentStateChanged(id, stateOld, stateNew)++`]
+
+[.contract-subindex-inherited]
+.IProduct
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductCreated(productAddress)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductProposed(componentId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductApproved(componentId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IProduct.sol[`++LogProductDeclined(componentId)++`]
+
+[.contract-subindex-inherited]
+.IComponent
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IComponent.sol[`++LogComponentCreated(componentName, componentType, componentAddress, registryAddress)++`]
+
+--
+
+[.contract-item]
+[[TestProduct-constructor-bytes32-address-address-uint256-uint256-address-]]
+==== `[.contract-item-name]#++constructor++#++(bytes32 productName, address tokenAddress, address capitalOwner, uint256 oracleId, uint256 riskpoolId, address registryAddress)++` [.item-kind]#public#
+
+[.contract-item]
+[[TestProduct-applyForPolicy-uint256-uint256-bytes-bytes-]]
+==== `[.contract-item-name]#++applyForPolicy++#++(uint256 premium, uint256 sumInsured, bytes metaData, bytes applicationData) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-applyForPolicy-address-payable-uint256-uint256-bytes-bytes-]]
+==== `[.contract-item-name]#++applyForPolicy++#++(address payable policyHolder, uint256 premium, uint256 sumInsured, bytes metaData, bytes applicationData) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-newAppliation-uint256-uint256-bytes-bytes-]]
+==== `[.contract-item-name]#++newAppliation++#++(uint256 premium, uint256 sumInsured, bytes metaData, bytes applicationData) → bytes32 processId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-revoke-bytes32-]]
+==== `[.contract-item-name]#++revoke++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-decline-bytes32-]]
+==== `[.contract-item-name]#++decline++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-underwrite-bytes32-]]
+==== `[.contract-item-name]#++underwrite++#++(bytes32 processId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-collectPremium-bytes32-]]
+==== `[.contract-item-name]#++collectPremium++#++(bytes32 policyId) → bool success, uint256 fee, uint256 netPremium++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-collectPremium-bytes32-uint256-]]
+==== `[.contract-item-name]#++collectPremium++#++(bytes32 policyId, uint256 amount) → bool success, uint256 fee, uint256 netPremium++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-adjustPremiumSumInsured-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++adjustPremiumSumInsured++#++(bytes32 processId, uint256 expectedPremiumAmount, uint256 sumInsuredAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-expire-bytes32-]]
+==== `[.contract-item-name]#++expire++#++(bytes32 policyId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-close-bytes32-]]
+==== `[.contract-item-name]#++close++#++(bytes32 policyId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-submitClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++submitClaim++#++(bytes32 policyId, uint256 claimAmount) → uint256 claimId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-submitClaimNoOracle-bytes32-uint256-]]
+==== `[.contract-item-name]#++submitClaimNoOracle++#++(bytes32 policyId, uint256 claimAmount) → uint256 claimId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-submitClaimWithDeferredResponse-bytes32-uint256-]]
+==== `[.contract-item-name]#++submitClaimWithDeferredResponse++#++(bytes32 policyId, uint256 claimAmount) → uint256 claimId, uint256 requestId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-confirmClaim-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++confirmClaim++#++(bytes32 policyId, uint256 claimId, uint256 confirmedAmount)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-declineClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++declineClaim++#++(bytes32 policyId, uint256 claimId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-closeClaim-bytes32-uint256-]]
+==== `[.contract-item-name]#++closeClaim++#++(bytes32 policyId, uint256 claimId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-createPayout-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++createPayout++#++(bytes32 policyId, uint256 claimId, uint256 payoutAmount) → uint256 payoutId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-newPayout-bytes32-uint256-uint256-]]
+==== `[.contract-item-name]#++newPayout++#++(bytes32 policyId, uint256 claimId, uint256 payoutAmount) → uint256 payoutId++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-processPayout-bytes32-uint256-]]
+==== `[.contract-item-name]#++processPayout++#++(bytes32 policyId, uint256 payoutId)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-oracleCallback-uint256-bytes32-bytes-]]
+==== `[.contract-item-name]#++oracleCallback++#++(uint256 requestId, bytes32 policyId, bytes responseData)++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-getClaimId-bytes32-]]
+==== `[.contract-item-name]#++getClaimId++#++(bytes32 policyId) → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-getPayoutId-bytes32-]]
+==== `[.contract-item-name]#++getPayoutId++#++(bytes32 policyId) → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-applications--]]
+==== `[.contract-item-name]#++applications++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-policies--]]
+==== `[.contract-item-name]#++policies++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-claims--]]
+==== `[.contract-item-name]#++claims++#++() → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[TestProduct-LogTestProductFundingReceived-address-uint256-]]
+==== `[.contract-item-name]#++LogTestProductFundingReceived++#++(address sender, uint256 amount)++` [.item-kind]#event#
+
+[.contract-item]
+[[TestProduct-LogTestOracleCallbackReceived-uint256-bytes32-bytes-]]
+==== `[.contract-item-name]#++LogTestOracleCallbackReceived++#++(uint256 requestId, bytes32 policyId, bytes response)++` [.item-kind]#event#
+
+:POLICY: pass:normal[xref:#TestRegistryCompromisedController-POLICY-bytes32[`++POLICY++`]]
+:QUERY: pass:normal[xref:#TestRegistryCompromisedController-QUERY-bytes32[`++QUERY++`]]
+:contracts: pass:normal[xref:#TestRegistryCompromisedController-contracts-mapping-bytes32----address-[`++contracts++`]]
+:getContract: pass:normal[xref:#TestRegistryCompromisedController-getContract-bytes32-[`++getContract++`]]
+:upgradeToV2: pass:normal[xref:#TestRegistryCompromisedController-upgradeToV2-address-address-[`++upgradeToV2++`]]
+
+[.contract]
+[[TestRegistryCompromisedController]]
+=== `++TestRegistryCompromisedController++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestRegistryCompromisedController.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestRegistryCompromisedController.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestRegistryCompromisedController-getContract-bytes32-}[`++getContract(contractName)++`]
+* {xref-TestRegistryCompromisedController-upgradeToV2-address-address-}[`++upgradeToV2(compromisedPolicyModuleAddress, originalQueryModuleAddress)++`]
+
+--
+
+[.contract-item]
+[[TestRegistryCompromisedController-getContract-bytes32-]]
+==== `[.contract-item-name]#++getContract++#++(bytes32 contractName) → address moduleAddress++` [.item-kind]#external#
+
+[.contract-item]
+[[TestRegistryCompromisedController-upgradeToV2-address-address-]]
+==== `[.contract-item-name]#++upgradeToV2++#++(address compromisedPolicyModuleAddress, address originalQueryModuleAddress)++` [.item-kind]#public#
+
+:message: pass:normal[xref:#TestRegistryControllerUpdated-message-string[`++message++`]]
+:upgradeV2: pass:normal[xref:#TestRegistryControllerUpdated-upgradeV2-bool[`++upgradeV2++`]]
+:setMessage: pass:normal[xref:#TestRegistryControllerUpdated-setMessage-string-[`++setMessage++`]]
+:getMessage: pass:normal[xref:#TestRegistryControllerUpdated-getMessage--[`++getMessage++`]]
+:upgradeToV2: pass:normal[xref:#TestRegistryControllerUpdated-upgradeToV2-string-[`++upgradeToV2++`]]
+
+[.contract]
+[[TestRegistryControllerUpdated]]
+=== `++TestRegistryControllerUpdated++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestRegistryControllerUpdated.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestRegistryControllerUpdated.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestRegistryControllerUpdated-setMessage-string-}[`++setMessage(_message)++`]
+* {xref-TestRegistryControllerUpdated-getMessage--}[`++getMessage()++`]
+* {xref-TestRegistryControllerUpdated-upgradeToV2-string-}[`++upgradeToV2(_message)++`]
+
+[.contract-subindex-inherited]
+.RegistryController
+* {xref-RegistryController-initializeRegistry-bytes32-}[`++initializeRegistry(_initialRelease)++`]
+* {xref-RegistryController-ensureSender-address-bytes32-}[`++ensureSender(sender, _contractName)++`]
+* {xref-RegistryController-getRelease--}[`++getRelease()++`]
+* {xref-RegistryController-getContract-bytes32-}[`++getContract(_contractName)++`]
+* {xref-RegistryController-register-bytes32-address-}[`++register(_contractName, _contractAddress)++`]
+* {xref-RegistryController-deregister-bytes32-}[`++deregister(_contractName)++`]
+* {xref-RegistryController-getContractInRelease-bytes32-bytes32-}[`++getContractInRelease(_release, _contractName)++`]
+* {xref-RegistryController-registerInRelease-bytes32-bytes32-address-}[`++registerInRelease(_release, _contractName, _contractAddress)++`]
+* {xref-RegistryController-deregisterInRelease-bytes32-bytes32-}[`++deregisterInRelease(_release, _contractName)++`]
+* {xref-RegistryController-prepareRelease-bytes32-}[`++prepareRelease(_newRelease)++`]
+* {xref-RegistryController-contracts--}[`++contracts()++`]
+* {xref-RegistryController-contractName-uint256-}[`++contractName(idx)++`]
+* {xref-RegistryController-_getContractInRelease-bytes32-bytes32-}[`++_getContractInRelease(_release, _contractName)++`]
+* {xref-RegistryController-_registerInRelease-bytes32-bool-bytes32-address-}[`++_registerInRelease(_release, isNewRelease, _contractName, _contractAddress)++`]
+* {xref-RegistryController-_deregisterInRelease-bytes32-bytes32-}[`++_deregisterInRelease(_release, _contractName)++`]
+
+[.contract-subindex-inherited]
+.CoreController
+* {xref-CoreController-initialize-address-}[`++initialize(registry)++`]
+* {xref-CoreController-_getName--}[`++_getName()++`]
+* {xref-CoreController-_afterInitialize--}[`++_afterInitialize()++`]
+* {xref-CoreController-_getContractAddress-bytes32-}[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-_disableInitializers--[`++_disableInitializers()++`]
+
+[.contract-subindex-inherited]
+.IRegistry
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.RegistryController
+
+[.contract-subindex-inherited]
+.CoreController
+
+[.contract-subindex-inherited]
+.Initializable
+* https://docs.openzeppelin.com/contracts/3.x/api/proxy#Initializable-Initialized-uint8-[`++Initialized(version)++`]
+
+[.contract-subindex-inherited]
+.IRegistry
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IRegistry.sol[`++LogContractRegistered(release, contractName, contractAddress, isNew)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IRegistry.sol[`++LogContractDeregistered(release, contractName)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IRegistry.sol[`++LogReleasePrepared(release)++`]
+
+--
+
+[.contract-item]
+[[TestRegistryControllerUpdated-setMessage-string-]]
+==== `[.contract-item-name]#++setMessage++#++(string _message)++` [.item-kind]#public#
+
+[.contract-item]
+[[TestRegistryControllerUpdated-getMessage--]]
+==== `[.contract-item-name]#++getMessage++#++() → string++` [.item-kind]#public#
+
+[.contract-item]
+[[TestRegistryControllerUpdated-upgradeToV2-string-]]
+==== `[.contract-item-name]#++upgradeToV2++#++(string _message)++` [.item-kind]#public#
+
+:SUM_OF_SUM_INSURED_CAP: pass:normal[xref:#TestRiskpool-SUM_OF_SUM_INSURED_CAP-uint256[`++SUM_OF_SUM_INSURED_CAP++`]]
+:constructor: pass:normal[xref:#TestRiskpool-constructor-bytes32-uint256-address-address-address-[`++constructor++`]]
+:bundleMatchesApplication: pass:normal[xref:#TestRiskpool-bundleMatchesApplication-struct-IBundle-Bundle-struct-IPolicy-Application-[`++bundleMatchesApplication++`]]
+
+[.contract]
+[[TestRiskpool]]
+=== `++TestRiskpool++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestRiskpool.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestRiskpool.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestRiskpool-constructor-bytes32-uint256-address-address-address-}[`++constructor(name, collateralization, erc20Token, wallet, registry)++`]
+* {xref-TestRiskpool-bundleMatchesApplication-struct-IBundle-Bundle-struct-IPolicy-Application-}[`++bundleMatchesApplication(bundle, application)++`]
+
+[.contract-subindex-inherited]
+.BasicRiskpool
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/BasicRiskpool.sol[`++_lockCollateral(processId, collateralAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/BasicRiskpool.sol[`++_processPayout(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/BasicRiskpool.sol[`++_processPremium(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/BasicRiskpool.sol[`++_releaseCollateral(processId)++`]
+
+[.contract-subindex-inherited]
+.Riskpool
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++_afterPropose()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++createBundle(filter, initialAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++fundBundle(bundleId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++defundBundle(bundleId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++lockBundle(bundleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++unlockBundle(bundleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++closeBundle(bundleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++burnBundle(bundleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++collateralizePolicy(processId, collateralAmount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++processPolicyPayout(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++processPolicyPremium(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++releasePolicy(processId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++setMaximumNumberOfActiveBundles(maximumNumberOfActiveBundles)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getMaximumNumberOfActiveBundles()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getWallet()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getErc20Token()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getSumOfSumInsuredCap()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getFullCollateralizationLevel()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getCollateralizationLevel()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++bundles()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getBundle(idx)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++activeBundles()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getActiveBundleId(idx)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getFilterDataStructure()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getCapital()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getTotalValueLocked()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getCapacity()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++getBalance()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Riskpool.sol[`++_afterArchive()++`]
+
+[.contract-subindex-inherited]
+.Component
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++setId(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getName()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getId()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getType()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getState()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getOwner()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isProduct()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isOracle()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++isRiskpool()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++getRegistry()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++proposalCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++approvalCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++declineCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++suspendCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++resumeCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++pauseCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++unpauseCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++archiveCallback()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterApprove()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterDecline()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterSuspend()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterResume()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterPause()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_afterUnpause()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getAccess()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getInstanceService()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getComponentOwnerService()++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/Component.sol[`++_getContractAddress(contractName)++`]
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-owner--[`++owner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_checkOwner--[`++_checkOwner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-renounceOwnership--[`++renounceOwnership()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-transferOwnership-address-[`++transferOwnership(newOwner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_transferOwnership-address-[`++_transferOwnership(newOwner)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+
+[.contract-subindex-inherited]
+.IRiskpool
+
+[.contract-subindex-inherited]
+.IComponent
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.BasicRiskpool
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/BasicRiskpool.sol[`++LogBasicRiskpoolBundlesAndPolicies(activeBundles, bundleId)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/BasicRiskpool.sol[`++LogBasicRiskpoolCandidateBundleAmountCheck(index, bundleId, maxAmount, collateralAmount)++`]
+
+[.contract-subindex-inherited]
+.Riskpool
+
+[.contract-subindex-inherited]
+.Component
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-OwnershipTransferred-address-address-[`++OwnershipTransferred(previousOwner, newOwner)++`]
+
+[.contract-subindex-inherited]
+.IComponentEvents
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentProposed(componentName, componentType, componentAddress, id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentApproved(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentDeclined(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentSuspended(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentResumed(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentPaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentUnpaused(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentArchived(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/modules/IComponentEvents.sol[`++LogComponentStateChanged(id, stateOld, stateNew)++`]
+
+[.contract-subindex-inherited]
+.IRiskpool
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolCreated(riskpoolAddress)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolProposed(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolApproved(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolDeclined(id)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolBundleCreated(bundleId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolBundleMatchesPolicy(bundleId, isMatching)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolCollateralLocked(processId, collateralAmount, isSecured)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolPremiumProcessed(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolPayoutProcessed(processId, amount)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IRiskpool.sol[`++LogRiskpoolCollateralReleased(processId, collateralAmount)++`]
+
+[.contract-subindex-inherited]
+.IComponent
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/components/IComponent.sol[`++LogComponentCreated(componentName, componentType, componentAddress, registryAddress)++`]
+
+--
+
+[.contract-item]
+[[TestRiskpool-constructor-bytes32-uint256-address-address-address-]]
+==== `[.contract-item-name]#++constructor++#++(bytes32 name, uint256 collateralization, address erc20Token, address wallet, address registry)++` [.item-kind]#public#
+
+[.contract-item]
+[[TestRiskpool-bundleMatchesApplication-struct-IBundle-Bundle-struct-IPolicy-Application-]]
+==== `[.contract-item-name]#++bundleMatchesApplication++#++(struct IBundle.Bundle bundle, struct IPolicy.Application application) → bool isMatching++` [.item-kind]#public#
+
+:LogTransferHelperInputValidation1Failed: pass:normal[xref:#TestTransferFrom-LogTransferHelperInputValidation1Failed-bool-address-address-[`++LogTransferHelperInputValidation1Failed++`]]
+:LogTransferHelperInputValidation2Failed: pass:normal[xref:#TestTransferFrom-LogTransferHelperInputValidation2Failed-uint256-uint256-[`++LogTransferHelperInputValidation2Failed++`]]
+:LogTransferHelperCallFailed: pass:normal[xref:#TestTransferFrom-LogTransferHelperCallFailed-bool-uint256-bytes-[`++LogTransferHelperCallFailed++`]]
+:unifiedTransferFrom: pass:normal[xref:#TestTransferFrom-unifiedTransferFrom-contract-IERC20-address-address-uint256-[`++unifiedTransferFrom++`]]
+
+[.contract]
+[[TestTransferFrom]]
+=== `++TestTransferFrom++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/test/TestTransferFrom.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/test/TestTransferFrom.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-TestTransferFrom-unifiedTransferFrom-contract-IERC20-address-address-uint256-}[`++unifiedTransferFrom(token, from, to, amount)++`]
+
+--
+
+[.contract-index]
+.Events
+--
+* {xref-TestTransferFrom-LogTransferHelperInputValidation1Failed-bool-address-address-}[`++LogTransferHelperInputValidation1Failed(tokenIsContract, from, to)++`]
+* {xref-TestTransferFrom-LogTransferHelperInputValidation2Failed-uint256-uint256-}[`++LogTransferHelperInputValidation2Failed(balance, allowance)++`]
+* {xref-TestTransferFrom-LogTransferHelperCallFailed-bool-uint256-bytes-}[`++LogTransferHelperCallFailed(callSuccess, returnDataLength, returnData)++`]
+
+--
+
+[.contract-item]
+[[TestTransferFrom-unifiedTransferFrom-contract-IERC20-address-address-uint256-]]
+==== `[.contract-item-name]#++unifiedTransferFrom++#++(contract IERC20 token, address from, address to, uint256 amount) → bool++` [.item-kind]#external#
+
+[.contract-item]
+[[TestTransferFrom-LogTransferHelperInputValidation1Failed-bool-address-address-]]
+==== `[.contract-item-name]#++LogTransferHelperInputValidation1Failed++#++(bool tokenIsContract, address from, address to)++` [.item-kind]#event#
+
+[.contract-item]
+[[TestTransferFrom-LogTransferHelperInputValidation2Failed-uint256-uint256-]]
+==== `[.contract-item-name]#++LogTransferHelperInputValidation2Failed++#++(uint256 balance, uint256 allowance)++` [.item-kind]#event#
+
+[.contract-item]
+[[TestTransferFrom-LogTransferHelperCallFailed-bool-uint256-bytes-]]
+==== `[.contract-item-name]#++LogTransferHelperCallFailed++#++(bool callSuccess, uint256 returnDataLength, bytes returnData)++` [.item-kind]#event#
+
diff --git a/docs/modules/api/pages/tokens.adoc b/docs/modules/api/pages/tokens.adoc
new file mode 100644
index 00000000..60b0f226
--- /dev/null
+++ b/docs/modules/api/pages/tokens.adoc
@@ -0,0 +1,257 @@
+:github-icon: pass:[]
+:xref-BundleToken-onlyBundleModule--: xref:tokens.adoc#BundleToken-onlyBundleModule--
+:xref-BundleToken-constructor--: xref:tokens.adoc#BundleToken-constructor--
+:xref-BundleToken-setBundleModule-address-: xref:tokens.adoc#BundleToken-setBundleModule-address-
+:xref-BundleToken-mint-uint256-address-: xref:tokens.adoc#BundleToken-mint-uint256-address-
+:xref-BundleToken-burn-uint256-: xref:tokens.adoc#BundleToken-burn-uint256-
+:xref-BundleToken-burned-uint256-: xref:tokens.adoc#BundleToken-burned-uint256-
+:xref-BundleToken-getBundleId-uint256-: xref:tokens.adoc#BundleToken-getBundleId-uint256-
+:xref-BundleToken-getBundleModuleAddress--: xref:tokens.adoc#BundleToken-getBundleModuleAddress--
+:xref-BundleToken-exists-uint256-: xref:tokens.adoc#BundleToken-exists-uint256-
+:xref-BundleToken-totalSupply--: xref:tokens.adoc#BundleToken-totalSupply--
+:xref-RiskpoolToken-constructor--: xref:tokens.adoc#RiskpoolToken-constructor--
+= Tokens
+
+[.readme-notice]
+NOTE: This document is better viewed at https://docs.etherisc.com/contracts/api/tokens
+
+== Contracts
+
+:NAME: pass:normal[xref:#BundleToken-NAME-string[`++NAME++`]]
+:SYMBOL: pass:normal[xref:#BundleToken-SYMBOL-string[`++SYMBOL++`]]
+:bundleIdForTokenId: pass:normal[xref:#BundleToken-bundleIdForTokenId-mapping-uint256----uint256-[`++bundleIdForTokenId++`]]
+:onlyBundleModule: pass:normal[xref:#BundleToken-onlyBundleModule--[`++onlyBundleModule++`]]
+:constructor: pass:normal[xref:#BundleToken-constructor--[`++constructor++`]]
+:setBundleModule: pass:normal[xref:#BundleToken-setBundleModule-address-[`++setBundleModule++`]]
+:mint: pass:normal[xref:#BundleToken-mint-uint256-address-[`++mint++`]]
+:burn: pass:normal[xref:#BundleToken-burn-uint256-[`++burn++`]]
+:burned: pass:normal[xref:#BundleToken-burned-uint256-[`++burned++`]]
+:getBundleId: pass:normal[xref:#BundleToken-getBundleId-uint256-[`++getBundleId++`]]
+:getBundleModuleAddress: pass:normal[xref:#BundleToken-getBundleModuleAddress--[`++getBundleModuleAddress++`]]
+:exists: pass:normal[xref:#BundleToken-exists-uint256-[`++exists++`]]
+:totalSupply: pass:normal[xref:#BundleToken-totalSupply--[`++totalSupply++`]]
+
+[.contract]
+[[BundleToken]]
+=== `++BundleToken++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/tokens/BundleToken.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/tokens/BundleToken.sol";
+```
+
+[.contract-index]
+.Modifiers
+--
+* {xref-BundleToken-onlyBundleModule--}[`++onlyBundleModule()++`]
+--
+
+[.contract-index]
+.Functions
+--
+* {xref-BundleToken-constructor--}[`++constructor()++`]
+* {xref-BundleToken-setBundleModule-address-}[`++setBundleModule(bundleModule)++`]
+* {xref-BundleToken-mint-uint256-address-}[`++mint(bundleId, to)++`]
+* {xref-BundleToken-burn-uint256-}[`++burn(tokenId)++`]
+* {xref-BundleToken-burned-uint256-}[`++burned(tokenId)++`]
+* {xref-BundleToken-getBundleId-uint256-}[`++getBundleId(tokenId)++`]
+* {xref-BundleToken-getBundleModuleAddress--}[`++getBundleModuleAddress()++`]
+* {xref-BundleToken-exists-uint256-}[`++exists(tokenId)++`]
+* {xref-BundleToken-totalSupply--}[`++totalSupply()++`]
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-owner--[`++owner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_checkOwner--[`++_checkOwner()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-renounceOwnership--[`++renounceOwnership()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-transferOwnership-address-[`++transferOwnership(newOwner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-_transferOwnership-address-[`++_transferOwnership(newOwner)++`]
+
+[.contract-subindex-inherited]
+.ERC721
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-supportsInterface-bytes4-[`++supportsInterface(interfaceId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-balanceOf-address-[`++balanceOf(owner)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-ownerOf-uint256-[`++ownerOf(tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-name--[`++name()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-symbol--[`++symbol()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-tokenURI-uint256-[`++tokenURI(tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_baseURI--[`++_baseURI()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-approve-address-uint256-[`++approve(to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-getApproved-uint256-[`++getApproved(tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-setApprovalForAll-address-bool-[`++setApprovalForAll(operator, approved)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-isApprovedForAll-address-address-[`++isApprovedForAll(owner, operator)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-transferFrom-address-address-uint256-[`++transferFrom(from, to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-safeTransferFrom-address-address-uint256-[`++safeTransferFrom(from, to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-safeTransferFrom-address-address-uint256-bytes-[`++safeTransferFrom(from, to, tokenId, data)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_safeTransfer-address-address-uint256-bytes-[`++_safeTransfer(from, to, tokenId, data)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_exists-uint256-[`++_exists(tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_isApprovedOrOwner-address-uint256-[`++_isApprovedOrOwner(spender, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_safeMint-address-uint256-[`++_safeMint(to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_safeMint-address-uint256-bytes-[`++_safeMint(to, tokenId, data)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_mint-address-uint256-[`++_mint(to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_burn-uint256-[`++_burn(tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_transfer-address-address-uint256-[`++_transfer(from, to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_approve-address-uint256-[`++_approve(to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_setApprovalForAll-address-address-bool-[`++_setApprovalForAll(owner, operator, approved)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_requireMinted-uint256-[`++_requireMinted(tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer(from, to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_afterTokenTransfer-address-address-uint256-[`++_afterTokenTransfer(from, to, tokenId)++`]
+
+[.contract-subindex-inherited]
+.IERC721Metadata
+
+[.contract-subindex-inherited]
+.IBundleToken
+
+[.contract-subindex-inherited]
+.IERC721
+
+[.contract-subindex-inherited]
+.ERC165
+
+[.contract-subindex-inherited]
+.IERC165
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.Ownable
+* https://docs.openzeppelin.com/contracts/3.x/api/access#Ownable-OwnershipTransferred-address-address-[`++OwnershipTransferred(previousOwner, newOwner)++`]
+
+[.contract-subindex-inherited]
+.ERC721
+
+[.contract-subindex-inherited]
+.IERC721Metadata
+
+[.contract-subindex-inherited]
+.IBundleToken
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/tokens/IBundleToken.sol[`++LogBundleTokenMinted(bundleId, tokenId, tokenOwner)++`]
+* https://github.com/etherisc/gif-interface/blob/develop/contracts/tokens/IBundleToken.sol[`++LogBundleTokenBurned(bundleId, tokenId)++`]
+
+[.contract-subindex-inherited]
+.IERC721
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-Transfer-address-address-uint256-[`++Transfer(from, to, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-Approval-address-address-uint256-[`++Approval(owner, approved, tokenId)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-ApprovalForAll-address-address-bool-[`++ApprovalForAll(owner, operator, approved)++`]
+
+[.contract-subindex-inherited]
+.ERC165
+
+[.contract-subindex-inherited]
+.IERC165
+
+--
+
+[.contract-item]
+[[BundleToken-onlyBundleModule--]]
+==== `[.contract-item-name]#++onlyBundleModule++#++()++` [.item-kind]#modifier#
+
+[.contract-item]
+[[BundleToken-constructor--]]
+==== `[.contract-item-name]#++constructor++#++()++` [.item-kind]#public#
+
+[.contract-item]
+[[BundleToken-setBundleModule-address-]]
+==== `[.contract-item-name]#++setBundleModule++#++(address bundleModule)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-mint-uint256-address-]]
+==== `[.contract-item-name]#++mint++#++(uint256 bundleId, address to) → uint256 tokenId++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-burn-uint256-]]
+==== `[.contract-item-name]#++burn++#++(uint256 tokenId)++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-burned-uint256-]]
+==== `[.contract-item-name]#++burned++#++(uint256 tokenId) → bool isBurned++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-getBundleId-uint256-]]
+==== `[.contract-item-name]#++getBundleId++#++(uint256 tokenId) → uint256++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-getBundleModuleAddress--]]
+==== `[.contract-item-name]#++getBundleModuleAddress++#++() → address++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-exists-uint256-]]
+==== `[.contract-item-name]#++exists++#++(uint256 tokenId) → bool++` [.item-kind]#external#
+
+[.contract-item]
+[[BundleToken-totalSupply--]]
+==== `[.contract-item-name]#++totalSupply++#++() → uint256 tokenCount++` [.item-kind]#external#
+
+:NAME: pass:normal[xref:#RiskpoolToken-NAME-string[`++NAME++`]]
+:SYMBOL: pass:normal[xref:#RiskpoolToken-SYMBOL-string[`++SYMBOL++`]]
+:constructor: pass:normal[xref:#RiskpoolToken-constructor--[`++constructor++`]]
+
+[.contract]
+[[RiskpoolToken]]
+=== `++RiskpoolToken++` link:https://github.com/etherisc/gif-contracts/blob/release-v2.0.0-rc.1-0/contracts/tokens/RiskpoolToken.sol[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/contracts/tokens/RiskpoolToken.sol";
+```
+
+[.contract-index]
+.Functions
+--
+* {xref-RiskpoolToken-constructor--}[`++constructor()++`]
+
+[.contract-subindex-inherited]
+.ERC20
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-name--[`++name()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-symbol--[`++symbol()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-decimals--[`++decimals()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-totalSupply--[`++totalSupply()++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-balanceOf-address-[`++balanceOf(account)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-transfer-address-uint256-[`++transfer(to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-allowance-address-address-[`++allowance(owner, spender)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-approve-address-uint256-[`++approve(spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-transferFrom-address-address-uint256-[`++transferFrom(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-increaseAllowance-address-uint256-[`++increaseAllowance(spender, addedValue)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-decreaseAllowance-address-uint256-[`++decreaseAllowance(spender, subtractedValue)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_transfer-address-address-uint256-[`++_transfer(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_mint-address-uint256-[`++_mint(account, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_burn-address-uint256-[`++_burn(account, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_approve-address-address-uint256-[`++_approve(owner, spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_spendAllowance-address-address-uint256-[`++_spendAllowance(owner, spender, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_beforeTokenTransfer-address-address-uint256-[`++_beforeTokenTransfer(from, to, amount)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20-_afterTokenTransfer-address-address-uint256-[`++_afterTokenTransfer(from, to, amount)++`]
+
+[.contract-subindex-inherited]
+.IERC20Metadata
+
+[.contract-subindex-inherited]
+.IERC20
+
+--
+
+[.contract-index]
+.Events
+--
+
+[.contract-subindex-inherited]
+.ERC20
+
+[.contract-subindex-inherited]
+.IERC20Metadata
+
+[.contract-subindex-inherited]
+.IERC20
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#IERC20-Transfer-address-address-uint256-[`++Transfer(from, to, value)++`]
+* https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#IERC20-Approval-address-address-uint256-[`++Approval(owner, spender, value)++`]
+
+--
+
+[.contract-item]
+[[RiskpoolToken-constructor--]]
+==== `[.contract-item-name]#++constructor++#++()++` [.item-kind]#public#
+
diff --git a/docs/templates/contract.hbs b/docs/templates/contract.hbs
new file mode 100644
index 00000000..dd34a520
--- /dev/null
+++ b/docs/templates/contract.hbs
@@ -0,0 +1,93 @@
+{{#each items}}
+:{{name}}: pass:normal[xref:#{{anchor}}[`++{{name}}++`]]
+{{/each}}
+
+[.contract]
+[[{{anchor}}]]
+=== `++{{name}}++` link:https://github.com/etherisc/gif-contracts/blob/release-v{{gif-version}}/{{__item_context.file.absolutePath}}[{github-icon},role=heading-link]
+
+[.hljs-theme-light.nopadding]
+```solidity
+import "@etherisc/gif-contracts/{{__item_context.file.absolutePath}}";
+```
+
+{{{natspec.dev}}}
+
+{{#if modifiers}}
+[.contract-index]
+.Modifiers
+--
+{{#each modifiers}}
+* {xref-{{anchor~}} }[`++{{name}}({{names params}})++`]
+{{/each}}
+--
+{{/if}}
+
+{{#if has-functions}}
+[.contract-index]
+.Functions
+--
+{{#each inherited-functions}}
+{{#unless @first}}
+[.contract-subindex-inherited]
+.{{contract.name}}
+{{/unless}}
+{{#each functions}}
+{{#if isInternal}}
+* {xref-{{anchor~}} }[`++{{name}}({{names params}})++`]
+{{else}}
+* {{externalLink~}} [`++{{name}}({{names params}})++`]
+{{/if}}
+{{/each}}
+
+{{/each}}
+--
+{{/if}}
+
+{{#if has-events}}
+[.contract-index]
+.Events
+--
+{{#each inheritance}}
+{{#unless @first}}
+[.contract-subindex-inherited]
+.{{name}}
+{{/unless}}
+{{#each events}}
+{{#if isInternal}}
+* {xref-{{anchor~}} }[`++{{name}}({{names params}})++`]
+{{else}}
+* {{externalLink~}} [`++{{name}}({{names params}})++`]
+{{/if}}
+{{/each}}
+
+{{/each}}
+--
+{{/if}}
+
+{{#each modifiers}}
+[.contract-item]
+[[{{anchor}}]]
+==== `[.contract-item-name]#++{{name}}++#++({{typed-params params}})++` [.item-kind]#modifier#
+
+{{{natspec.dev}}}
+
+{{/each}}
+
+{{#each functions}}
+[.contract-item]
+[[{{anchor}}]]
+==== `[.contract-item-name]#++{{name}}++#++({{typed-params params}}){{#if returns}} → {{typed-params returns}}{{/if}}++` [.item-kind]#{{visibility}}#
+
+{{{natspec.dev}}}
+
+{{/each}}
+
+{{#each events}}
+[.contract-item]
+[[{{anchor}}]]
+==== `[.contract-item-name]#++{{name}}++#++({{typed-params params}})++` [.item-kind]#event#
+
+{{{natspec.dev}}}
+
+{{/each}}
\ No newline at end of file
diff --git a/docs/templates/helpers.js b/docs/templates/helpers.js
new file mode 100644
index 00000000..dda19673
--- /dev/null
+++ b/docs/templates/helpers.js
@@ -0,0 +1,47 @@
+const { version } = require('../../package.json');
+
+module.exports['gif-version'] = () => version;
+
+module.exports['readme-path'] = (opts) => {
+ return 'contracts/' + opts.data.root.id.replace(/\.adoc$/, '') + '/README.adoc';
+};
+
+module.exports.names = (params) => params.map(p => p.name).join(', ');
+
+module.exports['typed-params'] = (params) => {
+ return params?.map(p => `${p.type}${p.indexed ? ' indexed' : ''}${p.name ? ' ' + p.name : ''}`).join(', ');
+};
+
+const slug = module.exports.slug = (str) => {
+ if (str === undefined) {
+ throw new Error('Missing argument');
+ }
+ return str.replace(/\W/g, '-');
+};
+
+const linksCache = new WeakMap();
+
+function getAllLinks(items) {
+ if (linksCache.has(items)) {
+ return linksCache.get(items);
+ }
+ const res = {};
+ linksCache.set(items, res);
+ for (const item of items) {
+ res[`xref-${item.anchor}`] = `xref:${item.__item_context.page}#${item.anchor}`;
+ res[slug(item.fullName)] = `pass:normal[xref:${item.__item_context.page}#${item.anchor}[\`${item.fullName}\`]]`;
+ }
+ return res;
+}
+
+module.exports['with-prelude'] = (opts) => {
+ const links = getAllLinks(opts.data.site.items);
+ const contents = opts.fn();
+ const match = contents.match(/\{[-._a-z0-9]+\}/ig)
+ if (!match) return contents;
+ const neededLinks = match
+ .map(m => m.replace(/^\{(.+)\}$/, '$1'))
+ .filter(k => k in links);
+ const prelude = neededLinks.map(k => `:${k}: ${links[k]}`).join('\n');
+ return prelude + '\n' + contents;
+};
\ No newline at end of file
diff --git a/docs/templates/page.hbs b/docs/templates/page.hbs
new file mode 100644
index 00000000..68e59957
--- /dev/null
+++ b/docs/templates/page.hbs
@@ -0,0 +1,4 @@
+:github-icon: pass:[]
+{{#with-prelude}}
+{{readme (readme-path)}}
+{{/with-prelude}}
\ No newline at end of file
diff --git a/docs/templates/properties.js b/docs/templates/properties.js
new file mode 100644
index 00000000..c8116afc
--- /dev/null
+++ b/docs/templates/properties.js
@@ -0,0 +1,81 @@
+const { isNodeType } = require('solidity-ast/utils');
+const { slug } = require('./helpers');
+
+module.exports.anchor = function anchor({ item, contract }) {
+ let res = '';
+ if (contract) {
+ res += contract.name + '-';
+ }
+ res += item.name;
+ if ('parameters' in item) {
+ const signature = item.parameters.parameters.map(v => v.typeName.typeDescriptions.typeString).join(',');
+ res += slug('(' + signature + ')');
+ }
+ if (isNodeType('VariableDeclaration', item)) {
+ res += '-' + slug(item.typeName.typeDescriptions.typeString);
+ }
+ return res;
+};
+
+module.exports.externalLink = function ({ item, contract }) {
+
+ const anchor = module.exports.anchor({ item, contract });
+ // TODO: exchange this against links to the actual docs
+ const links = {
+ '@etherisc/gif-interface': 'https://github.com/etherisc/gif-interface/blob/develop',
+ '@openzeppelin': 'https://docs.openzeppelin.com/contracts/3.x/api'
+ };
+
+ const path = item.__item_context.file.absolutePath;
+ for (const [key, value] of Object.entries(links)) {
+ if (path.startsWith(key)) {
+ if (key === '@openzeppelin') {
+ const s1 = /contracts\/([^\/]+)\/.*$/;
+ const s2 = /contracts\/(.*)\/.*$/;
+ const mod1 = path.match(s1)[1];
+ const mod2 = path.match(s2)[1];
+ console.log(path, mod1, mod2)
+ return value + '/' + (mod1 === 'token' ? mod2 : mod1) + '#' + anchor;
+ } else {
+ return value + path.slice(key.length);
+ }
+ }
+ }
+ return "";
+};
+
+module.exports.isInternal = function ({ item, contract }) {
+ return module.exports.externalLink({ item, contract }) === "";
+}
+
+module.exports.inheritance = function ({ item, build }) {
+ if (!isNodeType('ContractDefinition', item)) {
+ throw new Error('used inherited-items on non-contract');
+ }
+
+ return item.linearizedBaseContracts
+ .map(id => build.deref('ContractDefinition', id))
+ .filter((c, i) => c.name !== 'Context' || i === 0);
+};
+
+module.exports['has-functions'] = function ({ item }) {
+ // console.log(item.inheritance)
+ return item.inheritance.some(c => c.functions.length > 0);
+};
+
+module.exports['has-events'] = function ({ item }) {
+ return item.inheritance.some(c => c.events.length > 0);
+};
+
+module.exports['inherited-functions'] = function ({ item }) {
+ const { inheritance } = item;
+ const baseFunctions = new Set(
+ inheritance.flatMap(c => c.functions.flatMap(f => f.baseFunctions ?? [])),
+ );
+ return inheritance.map((contract, i) => ({
+ contract,
+ functions: contract.functions.filter(f =>
+ !baseFunctions.has(f.id) && (f.name !== 'constructor' || i === 0),
+ ),
+ }));
+};
\ No newline at end of file
diff --git a/hardhat.config.js b/hardhat.config.js
new file mode 100644
index 00000000..13011b17
--- /dev/null
+++ b/hardhat.config.js
@@ -0,0 +1,19 @@
+// Minimum Hardhat config for solidity-docgen to work
+
+require('solidity-docgen');
+
+/**
+ * @type import('hardhat/config').HardhatUserConfig
+ */
+module.exports = {
+ solidity: {
+ version: "0.8.2",
+ settings: {
+ optimizer: {
+ enabled: true,
+ runs: 200,
+ },
+ },
+ },
+ docgen: require('./docs/config'),
+};
diff --git a/package-lock.json b/package-lock.json
index 18ea5ab4..4ca40895 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,23 @@
{
"name": "@etherisc/gif-contracts",
- "version": "2.0.0-rc.1",
+ "version": "2.0.0-rc.1-0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@etherisc/gif-contracts",
- "version": "2.0.0-rc.1",
+ "version": "2.0.0-rc.1-0",
"license": "Apache-2.0",
"dependencies": {
"@chainlink/contracts": "0.4.1",
"@etherisc/gif-interface": "2.0.0-rc.1-0",
"@openzeppelin/contracts": "4.7.3"
+ },
+ "devDependencies": {
+ "hardhat": "^2.12.6",
+ "lodash.startcase": "^4.4.0",
+ "solidity-ast": "^0.4.40",
+ "solidity-docgen": "^0.6.0-beta.34"
}
},
"node_modules/@chainlink/contracts": {
@@ -27,30 +33,6972 @@
"@openzeppelin/contracts": "4.7.3"
}
},
+ "node_modules/@ethersproject/abi": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz",
+ "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/hash": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/abstract-provider": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
+ "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/networks": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/transactions": "^5.7.0",
+ "@ethersproject/web": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/abstract-signer": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz",
+ "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/address": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz",
+ "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/rlp": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/base64": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz",
+ "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bytes": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/bignumber": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
+ "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "bn.js": "^5.2.1"
+ }
+ },
+ "node_modules/@ethersproject/bytes": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz",
+ "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/constants": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz",
+ "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/hash": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
+ "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.7.0",
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/base64": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/keccak256": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
+ "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bytes": "^5.7.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "node_modules/@ethersproject/logger": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz",
+ "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ]
+ },
+ "node_modules/@ethersproject/networks": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz",
+ "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/properties": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
+ "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/rlp": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
+ "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/signing-key": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
+ "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.5.4",
+ "hash.js": "1.1.7"
+ }
+ },
+ "node_modules/@ethersproject/strings": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
+ "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/transactions": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz",
+ "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/rlp": "^5.7.0",
+ "@ethersproject/signing-key": "^5.7.0"
+ }
+ },
+ "node_modules/@ethersproject/web": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
+ "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "dependencies": {
+ "@ethersproject/base64": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
+ }
+ },
+ "node_modules/@metamask/eth-sig-util": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz",
+ "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==",
+ "dev": true,
+ "dependencies": {
+ "ethereumjs-abi": "^0.6.8",
+ "ethereumjs-util": "^6.2.1",
+ "ethjs-util": "^0.1.6",
+ "tweetnacl": "^1.0.3",
+ "tweetnacl-util": "^0.15.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz",
+ "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
+ },
+ "node_modules/@noble/secp256k1": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz",
+ "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
+ },
+ "node_modules/@nomicfoundation/ethereumjs-block": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz",
+ "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-tx": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-blockchain": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz",
+ "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-ethash": "^2.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "abstract-level": "^1.0.3",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "level": "^8.0.0",
+ "lru-cache": "^5.1.1",
+ "memory-level": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-common": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz",
+ "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "crc-32": "^1.2.0"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-ethash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz",
+ "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "abstract-level": "^1.0.3",
+ "bigint-crypto-utils": "^3.0.23",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-evm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz",
+ "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "@types/async-eventemitter": "^0.2.1",
+ "async-eventemitter": "^0.2.4",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "mcl-wasm": "^0.7.1",
+ "rustbn.js": "~0.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-rlp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz",
+ "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==",
+ "dev": true,
+ "bin": {
+ "rlp": "bin/rlp"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-statemanager": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz",
+ "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "functional-red-black-tree": "^1.0.1"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-trie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz",
+ "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "ethereum-cryptography": "0.1.3",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-tx": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz",
+ "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-util": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz",
+ "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-vm": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz",
+ "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==",
+ "dev": true,
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-blockchain": "^6.0.0",
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-evm": "^1.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-statemanager": "^1.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-tx": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "@types/async-eventemitter": "^0.2.1",
+ "async-eventemitter": "^0.2.4",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "functional-red-black-tree": "^1.0.1",
+ "mcl-wasm": "^0.7.1",
+ "rustbn.js": "~0.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz",
+ "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12"
+ },
+ "optionalDependencies": {
+ "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz",
+ "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz",
+ "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz",
+ "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz",
+ "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz",
+ "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz",
+ "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz",
+ "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz",
+ "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz",
+ "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz",
+ "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/@openzeppelin/contracts": {
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz",
"integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw=="
- }
- },
- "dependencies": {
- "@chainlink/contracts": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.1.tgz",
- "integrity": "sha512-eC8biY6Ks8k9kZKVt5305veCP3z57yyiy6Os5aR6auta6Bp34xWQ/s4qvrifcW4FNgWw1HJPwMPXDGfiehcLjg=="
},
- "@etherisc/gif-interface": {
- "version": "2.0.0-rc.1-0",
- "resolved": "https://registry.npmjs.org/@etherisc/gif-interface/-/gif-interface-2.0.0-rc.1-0.tgz",
- "integrity": "sha512-KECt8o+M22Ov6r3j3gLb9bjPtjvqWxdNVx2cSP+dMdXHKEol081+QsiIGbE0bluo+ICgOA9J/F/F+f2FZtGQxg==",
- "requires": {
- "@openzeppelin/contracts": "4.7.3"
+ "node_modules/@scure/base": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
+ "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
+ },
+ "node_modules/@scure/bip32": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz",
+ "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "@noble/hashes": "~1.1.1",
+ "@noble/secp256k1": "~1.6.0",
+ "@scure/base": "~1.1.0"
}
},
- "@openzeppelin/contracts": {
- "version": "4.7.3",
- "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz",
- "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw=="
+ "node_modules/@scure/bip39": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz",
+ "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "@noble/hashes": "~1.1.1",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "node_modules/@sentry/core": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
+ "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
+ "dev": true,
+ "dependencies": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/minimal": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/hub": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
+ "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
+ "dev": true,
+ "dependencies": {
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/minimal": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
+ "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
+ "dev": true,
+ "dependencies": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/node": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
+ "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
+ "dev": true,
+ "dependencies": {
+ "@sentry/core": "5.30.0",
+ "@sentry/hub": "5.30.0",
+ "@sentry/tracing": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "cookie": "^0.4.1",
+ "https-proxy-agent": "^5.0.0",
+ "lru_map": "^0.3.3",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/tracing": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
+ "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
+ "dev": true,
+ "dependencies": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/minimal": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/types": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
+ "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@sentry/utils": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
+ "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
+ "dev": true,
+ "dependencies": {
+ "@sentry/types": "5.30.0",
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@types/async-eventemitter": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz",
+ "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==",
+ "dev": true
+ },
+ "node_modules/@types/bn.js": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz",
+ "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.11.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+ "dev": true
+ },
+ "node_modules/@types/pbkdf2": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
+ "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/secp256k1": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dev": true,
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
+ "node_modules/abstract-level": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
+ "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "catering": "^2.1.0",
+ "is-buffer": "^2.0.5",
+ "level-supports": "^4.0.0",
+ "level-transcoder": "^1.0.1",
+ "module-error": "^1.0.1",
+ "queue-microtask": "^1.2.3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/adm-zip": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
+ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.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==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/async-eventemitter": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
+ "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.4.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/base-x": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "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/bigint-crypto-utils": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz",
+ "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==",
+ "dev": true,
+ "dependencies": {
+ "bigint-mod-arith": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10.4.0"
+ }
+ },
+ "node_modules/bigint-mod-arith": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz",
+ "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.4.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/blakejs": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
+ "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==",
+ "dev": true
+ },
+ "node_modules/bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+ "dev": true
+ },
+ "node_modules/browser-level": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz",
+ "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==",
+ "dev": true,
+ "dependencies": {
+ "abstract-level": "^1.0.2",
+ "catering": "^2.1.1",
+ "module-error": "^1.0.2",
+ "run-parallel-limit": "^1.1.0"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
+ "dev": true,
+ "dependencies": {
+ "base-x": "^3.0.2"
+ }
+ },
+ "node_modules/bs58check": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
+ "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
+ "dev": true,
+ "dependencies": {
+ "bs58": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "dev": true,
+ "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": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+ "dev": true
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dev": true,
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.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==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/catering": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
+ "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "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/ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/classic-level": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz",
+ "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "abstract-level": "^1.0.2",
+ "catering": "^2.1.0",
+ "module-error": "^1.0.1",
+ "napi-macros": "~2.0.0",
+ "node-gyp-build": "^4.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/command-exists": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
+ "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "dev": true,
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/ethereum-cryptography": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz",
+ "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==",
+ "dev": true,
+ "dependencies": {
+ "@noble/hashes": "1.1.2",
+ "@noble/secp256k1": "1.6.3",
+ "@scure/bip32": "1.1.0",
+ "@scure/bip39": "1.1.0"
+ }
+ },
+ "node_modules/ethereumjs-abi": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
+ "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.8",
+ "ethereumjs-util": "^6.0.0"
+ }
+ },
+ "node_modules/ethereumjs-abi/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/ethereumjs-util": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
+ "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
+ "dev": true,
+ "dependencies": {
+ "@types/bn.js": "^4.11.3",
+ "bn.js": "^4.11.0",
+ "create-hash": "^1.1.2",
+ "elliptic": "^6.5.2",
+ "ethereum-cryptography": "^0.1.3",
+ "ethjs-util": "0.1.6",
+ "rlp": "^2.2.3"
+ }
+ },
+ "node_modules/ethereumjs-util/node_modules/@types/bn.js": {
+ "version": "4.11.6",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
+ "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/ethereumjs-util/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/ethjs-util": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
+ "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
+ "dev": true,
+ "dependencies": {
+ "is-hex-prefixed": "1.0.0",
+ "strip-hex-prefix": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true,
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "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==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fp-ts": {
+ "version": "1.19.3",
+ "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
+ "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==",
+ "dev": true
+ },
+ "node_modules/fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/hardhat": {
+ "version": "2.12.6",
+ "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.6.tgz",
+ "integrity": "sha512-0Ent1O5DsPgvaVb5sxEgsQ3bJRt/Ex92tsoO+xjoNH2Qc4bFmhI5/CHVlFikulalxOPjNmw5XQ2vJFuVQFESAA==",
+ "dev": true,
+ "dependencies": {
+ "@ethersproject/abi": "^5.1.2",
+ "@metamask/eth-sig-util": "^4.0.0",
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-blockchain": "^6.0.0",
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-evm": "^1.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-statemanager": "^1.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-tx": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "@nomicfoundation/ethereumjs-vm": "^6.0.0",
+ "@nomicfoundation/solidity-analyzer": "^0.1.0",
+ "@sentry/node": "^5.18.1",
+ "@types/bn.js": "^5.1.0",
+ "@types/lru-cache": "^5.1.0",
+ "abort-controller": "^3.0.0",
+ "adm-zip": "^0.4.16",
+ "aggregate-error": "^3.0.0",
+ "ansi-escapes": "^4.3.0",
+ "chalk": "^2.4.2",
+ "chokidar": "^3.4.0",
+ "ci-info": "^2.0.0",
+ "debug": "^4.1.1",
+ "enquirer": "^2.3.0",
+ "env-paths": "^2.2.0",
+ "ethereum-cryptography": "^1.0.3",
+ "ethereumjs-abi": "^0.6.8",
+ "find-up": "^2.1.0",
+ "fp-ts": "1.19.3",
+ "fs-extra": "^7.0.1",
+ "glob": "7.2.0",
+ "immutable": "^4.0.0-rc.12",
+ "io-ts": "1.10.4",
+ "keccak": "^3.0.2",
+ "lodash": "^4.17.11",
+ "mnemonist": "^0.38.0",
+ "mocha": "^10.0.0",
+ "p-map": "^4.0.0",
+ "qs": "^6.7.0",
+ "raw-body": "^2.4.1",
+ "resolve": "1.17.0",
+ "semver": "^6.3.0",
+ "solc": "0.7.3",
+ "source-map-support": "^0.5.13",
+ "stacktrace-parser": "^0.1.10",
+ "tsort": "0.0.1",
+ "undici": "^5.14.0",
+ "uuid": "^8.3.2",
+ "ws": "^7.4.6"
+ },
+ "bin": {
+ "hardhat": "internal/cli/cli.js"
+ },
+ "engines": {
+ "node": "^14.0.0 || ^16.0.0 || ^18.0.0"
+ },
+ "peerDependencies": {
+ "ts-node": "*",
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "ts-node": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dev": true,
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "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/immutable": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz",
+ "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "node_modules/io-ts": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
+ "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
+ "dev": true,
+ "dependencies": {
+ "fp-ts": "^1.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hex-prefixed": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
+ "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/js-sha3": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/keccak": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz",
+ "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "node_modules/level": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
+ "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
+ "dev": true,
+ "dependencies": {
+ "browser-level": "^1.0.1",
+ "classic-level": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/level"
+ }
+ },
+ "node_modules/level-supports": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
+ "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/level-transcoder": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
+ "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "module-error": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/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==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "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/log-symbols/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==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-symbols/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==",
+ "dev": true
+ },
+ "node_modules/log-symbols/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-symbols/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==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lru_map": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/mcl-wasm": {
+ "version": "0.7.9",
+ "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz",
+ "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/memory-level": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz",
+ "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==",
+ "dev": true,
+ "dependencies": {
+ "abstract-level": "^1.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "module-error": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mnemonist": {
+ "version": "0.38.5",
+ "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
+ "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
+ "dev": true,
+ "dependencies": {
+ "obliterator": "^2.0.0"
+ }
+ },
+ "node_modules/mocha": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
+ "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "node_modules/mocha/node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mocha/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mocha/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==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/module-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz",
+ "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/napi-macros": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
+ "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/node-addon-api": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
+ "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
+ "dev": true
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
+ "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
+ "dev": true,
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/obliterator": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
+ "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dev": true,
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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/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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/rlp": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz",
+ "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^5.2.0"
+ },
+ "bin": {
+ "rlp": "bin/rlp"
+ }
+ },
+ "node_modules/run-parallel-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz",
+ "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==",
+ "dev": true,
+ "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/rustbn.js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz",
+ "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "node_modules/scrypt-js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
+ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
+ "dev": true
+ },
+ "node_modules/secp256k1": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "elliptic": "^6.5.4",
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.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==",
+ "dev": true
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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/solc": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
+ "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
+ "dev": true,
+ "dependencies": {
+ "command-exists": "^1.2.8",
+ "commander": "3.0.2",
+ "follow-redirects": "^1.12.1",
+ "fs-extra": "^0.30.0",
+ "js-sha3": "0.8.0",
+ "memorystream": "^0.3.1",
+ "require-from-string": "^2.0.0",
+ "semver": "^5.5.0",
+ "tmp": "0.0.33"
+ },
+ "bin": {
+ "solcjs": "solcjs"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/solc/node_modules/fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "node_modules/solc/node_modules/jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/solc/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/solidity-ast": {
+ "version": "0.4.43",
+ "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.43.tgz",
+ "integrity": "sha512-rKfMl9Wm0hHL9bezSx+Ct7wimme0eogm+Follr3dm9VhbDgLgNGR9zxhESi0v7sqt3ZFjGObN3cWOYOQERJZtA==",
+ "dev": true
+ },
+ "node_modules/solidity-docgen": {
+ "version": "0.6.0-beta.34",
+ "resolved": "https://registry.npmjs.org/solidity-docgen/-/solidity-docgen-0.6.0-beta.34.tgz",
+ "integrity": "sha512-igdGrkg8gT1jn+B2NwzjEtSf+7NTrSi/jz88zO7MZWgETmcWbXaxgAsQP4BQeC4YFeH0Pie1NsLP7+9qDgvFtA==",
+ "dev": true,
+ "dependencies": {
+ "handlebars": "^4.7.7",
+ "solidity-ast": "^0.4.38"
+ },
+ "peerDependencies": {
+ "hardhat": "^2.8.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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/stacktrace-parser": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
+ "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.7.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/stacktrace-parser/node_modules/type-fest": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
+ "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-hex-prefix": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
+ "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==",
+ "dev": true,
+ "dependencies": {
+ "is-hex-prefixed": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6.5.0",
+ "npm": ">=3"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsort": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
+ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==",
+ "dev": true
+ },
+ "node_modules/tweetnacl": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
+ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
+ "dev": true
+ },
+ "node_modules/tweetnacl-util": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz",
+ "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/undici": {
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.16.0.tgz",
+ "integrity": "sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==",
+ "dev": true,
+ "dependencies": {
+ "busboy": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=12.18"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.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==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "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/wrap-ansi/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==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/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==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/ws": {
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "dev": true,
+ "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/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@chainlink/contracts": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.4.1.tgz",
+ "integrity": "sha512-eC8biY6Ks8k9kZKVt5305veCP3z57yyiy6Os5aR6auta6Bp34xWQ/s4qvrifcW4FNgWw1HJPwMPXDGfiehcLjg=="
+ },
+ "@etherisc/gif-interface": {
+ "version": "2.0.0-rc.1-0",
+ "resolved": "https://registry.npmjs.org/@etherisc/gif-interface/-/gif-interface-2.0.0-rc.1-0.tgz",
+ "integrity": "sha512-KECt8o+M22Ov6r3j3gLb9bjPtjvqWxdNVx2cSP+dMdXHKEol081+QsiIGbE0bluo+ICgOA9J/F/F+f2FZtGQxg==",
+ "requires": {
+ "@openzeppelin/contracts": "4.7.3"
+ }
+ },
+ "@ethersproject/abi": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz",
+ "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/hash": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
+ }
+ },
+ "@ethersproject/abstract-provider": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
+ "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/networks": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/transactions": "^5.7.0",
+ "@ethersproject/web": "^5.7.0"
+ }
+ },
+ "@ethersproject/abstract-signer": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz",
+ "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/abstract-provider": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0"
+ }
+ },
+ "@ethersproject/address": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz",
+ "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/rlp": "^5.7.0"
+ }
+ },
+ "@ethersproject/base64": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz",
+ "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.7.0"
+ }
+ },
+ "@ethersproject/bignumber": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
+ "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "bn.js": "^5.2.1"
+ }
+ },
+ "@ethersproject/bytes": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz",
+ "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "@ethersproject/constants": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz",
+ "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bignumber": "^5.7.0"
+ }
+ },
+ "@ethersproject/hash": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
+ "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/abstract-signer": "^5.7.0",
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/base64": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
+ }
+ },
+ "@ethersproject/keccak256": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
+ "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.7.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "@ethersproject/logger": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz",
+ "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==",
+ "dev": true
+ },
+ "@ethersproject/networks": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz",
+ "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "@ethersproject/properties": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
+ "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "@ethersproject/rlp": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
+ "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "@ethersproject/signing-key": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
+ "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.5.4",
+ "hash.js": "1.1.7"
+ }
+ },
+ "@ethersproject/strings": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
+ "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
+ }
+ },
+ "@ethersproject/transactions": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz",
+ "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/rlp": "^5.7.0",
+ "@ethersproject/signing-key": "^5.7.0"
+ }
+ },
+ "@ethersproject/web": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
+ "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/base64": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
+ }
+ },
+ "@metamask/eth-sig-util": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz",
+ "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==",
+ "dev": true,
+ "requires": {
+ "ethereumjs-abi": "^0.6.8",
+ "ethereumjs-util": "^6.2.1",
+ "ethjs-util": "^0.1.6",
+ "tweetnacl": "^1.0.3",
+ "tweetnacl-util": "^0.15.1"
+ }
+ },
+ "@noble/hashes": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz",
+ "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==",
+ "dev": true
+ },
+ "@noble/secp256k1": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz",
+ "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==",
+ "dev": true
+ },
+ "@nomicfoundation/ethereumjs-block": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz",
+ "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-tx": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-blockchain": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz",
+ "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-ethash": "^2.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "abstract-level": "^1.0.3",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "level": "^8.0.0",
+ "lru-cache": "^5.1.1",
+ "memory-level": "^1.0.0"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-common": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz",
+ "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "crc-32": "^1.2.0"
+ }
+ },
+ "@nomicfoundation/ethereumjs-ethash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz",
+ "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "abstract-level": "^1.0.3",
+ "bigint-crypto-utils": "^3.0.23",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-evm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz",
+ "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "@types/async-eventemitter": "^0.2.1",
+ "async-eventemitter": "^0.2.4",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "mcl-wasm": "^0.7.1",
+ "rustbn.js": "~0.2.0"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-rlp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz",
+ "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==",
+ "dev": true
+ },
+ "@nomicfoundation/ethereumjs-statemanager": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz",
+ "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "functional-red-black-tree": "^1.0.1"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-trie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz",
+ "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "ethereum-cryptography": "0.1.3",
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-tx": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz",
+ "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-util": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz",
+ "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/ethereumjs-vm": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz",
+ "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-blockchain": "^6.0.0",
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-evm": "^1.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-statemanager": "^1.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-tx": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "@types/async-eventemitter": "^0.2.1",
+ "async-eventemitter": "^0.2.4",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "functional-red-black-tree": "^1.0.1",
+ "mcl-wasm": "^0.7.1",
+ "rustbn.js": "~0.2.0"
+ },
+ "dependencies": {
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "@nomicfoundation/solidity-analyzer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz",
+ "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==",
+ "dev": true,
+ "requires": {
+ "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0",
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0"
+ }
+ },
+ "@nomicfoundation/solidity-analyzer-darwin-arm64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz",
+ "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-darwin-x64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz",
+ "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-freebsd-x64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz",
+ "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz",
+ "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz",
+ "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz",
+ "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz",
+ "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz",
+ "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz",
+ "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==",
+ "dev": true,
+ "optional": true
+ },
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz",
+ "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==",
+ "dev": true,
+ "optional": true
+ },
+ "@openzeppelin/contracts": {
+ "version": "4.7.3",
+ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz",
+ "integrity": "sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw=="
+ },
+ "@scure/base": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
+ "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==",
+ "dev": true
+ },
+ "@scure/bip32": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz",
+ "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==",
+ "dev": true,
+ "requires": {
+ "@noble/hashes": "~1.1.1",
+ "@noble/secp256k1": "~1.6.0",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "@scure/bip39": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz",
+ "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==",
+ "dev": true,
+ "requires": {
+ "@noble/hashes": "~1.1.1",
+ "@scure/base": "~1.1.0"
+ }
+ },
+ "@sentry/core": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
+ "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
+ "dev": true,
+ "requires": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/minimal": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/hub": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
+ "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
+ "dev": true,
+ "requires": {
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/minimal": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
+ "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
+ "dev": true,
+ "requires": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/node": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
+ "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
+ "dev": true,
+ "requires": {
+ "@sentry/core": "5.30.0",
+ "@sentry/hub": "5.30.0",
+ "@sentry/tracing": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "cookie": "^0.4.1",
+ "https-proxy-agent": "^5.0.0",
+ "lru_map": "^0.3.3",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/tracing": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
+ "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
+ "dev": true,
+ "requires": {
+ "@sentry/hub": "5.30.0",
+ "@sentry/minimal": "5.30.0",
+ "@sentry/types": "5.30.0",
+ "@sentry/utils": "5.30.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/types": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
+ "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==",
+ "dev": true
+ },
+ "@sentry/utils": {
+ "version": "5.30.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
+ "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
+ "dev": true,
+ "requires": {
+ "@sentry/types": "5.30.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@types/async-eventemitter": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz",
+ "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==",
+ "dev": true
+ },
+ "@types/bn.js": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz",
+ "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "18.11.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==",
+ "dev": true
+ },
+ "@types/pbkdf2": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
+ "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/secp256k1": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dev": true,
+ "requires": {
+ "event-target-shim": "^5.0.0"
+ }
+ },
+ "abstract-level": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
+ "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==",
+ "dev": true,
+ "requires": {
+ "buffer": "^6.0.3",
+ "catering": "^2.1.0",
+ "is-buffer": "^2.0.5",
+ "level-supports": "^4.0.0",
+ "level-transcoder": "^1.0.1",
+ "module-error": "^1.0.1",
+ "queue-microtask": "^1.2.3"
+ }
+ },
+ "adm-zip": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
+ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-eventemitter": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
+ "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
+ "dev": true,
+ "requires": {
+ "async": "^2.4.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "base-x": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
+ },
+ "bigint-crypto-utils": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz",
+ "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==",
+ "dev": true,
+ "requires": {
+ "bigint-mod-arith": "^3.1.0"
+ }
+ },
+ "bigint-mod-arith": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz",
+ "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "blakejs": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
+ "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
+ "dev": true
+ },
+ "browser-level": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz",
+ "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==",
+ "dev": true,
+ "requires": {
+ "abstract-level": "^1.0.2",
+ "catering": "^2.1.1",
+ "module-error": "^1.0.2",
+ "run-parallel-limit": "^1.1.0"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
+ "dev": true,
+ "requires": {
+ "base-x": "^3.0.2"
+ }
+ },
+ "bs58check": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
+ "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
+ "dev": true,
+ "requires": {
+ "bs58": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
+ "dev": true
+ },
+ "busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dev": true,
+ "requires": {
+ "streamsearch": "^1.1.0"
+ }
+ },
+ "bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
+ },
+ "catering": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz",
+ "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "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"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "classic-level": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz",
+ "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==",
+ "dev": true,
+ "requires": {
+ "abstract-level": "^1.0.2",
+ "catering": "^2.1.0",
+ "module-error": "^1.0.1",
+ "napi-macros": "~2.0.0",
+ "node-gyp-build": "^4.3.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==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "command-exists": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
+ "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
+ "dev": true
+ },
+ "commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
+ "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+ "dev": true
+ },
+ "crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "dev": true
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+ "dev": true
+ },
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1"
+ }
+ },
+ "env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "ethereum-cryptography": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz",
+ "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==",
+ "dev": true,
+ "requires": {
+ "@noble/hashes": "1.1.2",
+ "@noble/secp256k1": "1.6.3",
+ "@scure/bip32": "1.1.0",
+ "@scure/bip39": "1.1.0"
+ }
+ },
+ "ethereumjs-abi": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
+ "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.8",
+ "ethereumjs-util": "^6.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "ethereumjs-util": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
+ "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
+ "dev": true,
+ "requires": {
+ "@types/bn.js": "^4.11.3",
+ "bn.js": "^4.11.0",
+ "create-hash": "^1.1.2",
+ "elliptic": "^6.5.2",
+ "ethereum-cryptography": "^0.1.3",
+ "ethjs-util": "0.1.6",
+ "rlp": "^2.2.3"
+ },
+ "dependencies": {
+ "@types/bn.js": {
+ "version": "4.11.6",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
+ "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ },
+ "ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dev": true,
+ "requires": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ }
+ }
+ },
+ "ethjs-util": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
+ "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
+ "dev": true,
+ "requires": {
+ "is-hex-prefixed": "1.0.0",
+ "strip-hex-prefix": "1.0.0"
+ }
+ },
+ "event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "dev": true
+ },
+ "fp-ts": {
+ "version": "1.19.3",
+ "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
+ "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "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==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "hardhat": {
+ "version": "2.12.6",
+ "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.6.tgz",
+ "integrity": "sha512-0Ent1O5DsPgvaVb5sxEgsQ3bJRt/Ex92tsoO+xjoNH2Qc4bFmhI5/CHVlFikulalxOPjNmw5XQ2vJFuVQFESAA==",
+ "dev": true,
+ "requires": {
+ "@ethersproject/abi": "^5.1.2",
+ "@metamask/eth-sig-util": "^4.0.0",
+ "@nomicfoundation/ethereumjs-block": "^4.0.0",
+ "@nomicfoundation/ethereumjs-blockchain": "^6.0.0",
+ "@nomicfoundation/ethereumjs-common": "^3.0.0",
+ "@nomicfoundation/ethereumjs-evm": "^1.0.0",
+ "@nomicfoundation/ethereumjs-rlp": "^4.0.0",
+ "@nomicfoundation/ethereumjs-statemanager": "^1.0.0",
+ "@nomicfoundation/ethereumjs-trie": "^5.0.0",
+ "@nomicfoundation/ethereumjs-tx": "^4.0.0",
+ "@nomicfoundation/ethereumjs-util": "^8.0.0",
+ "@nomicfoundation/ethereumjs-vm": "^6.0.0",
+ "@nomicfoundation/solidity-analyzer": "^0.1.0",
+ "@sentry/node": "^5.18.1",
+ "@types/bn.js": "^5.1.0",
+ "@types/lru-cache": "^5.1.0",
+ "abort-controller": "^3.0.0",
+ "adm-zip": "^0.4.16",
+ "aggregate-error": "^3.0.0",
+ "ansi-escapes": "^4.3.0",
+ "chalk": "^2.4.2",
+ "chokidar": "^3.4.0",
+ "ci-info": "^2.0.0",
+ "debug": "^4.1.1",
+ "enquirer": "^2.3.0",
+ "env-paths": "^2.2.0",
+ "ethereum-cryptography": "^1.0.3",
+ "ethereumjs-abi": "^0.6.8",
+ "find-up": "^2.1.0",
+ "fp-ts": "1.19.3",
+ "fs-extra": "^7.0.1",
+ "glob": "7.2.0",
+ "immutable": "^4.0.0-rc.12",
+ "io-ts": "1.10.4",
+ "keccak": "^3.0.2",
+ "lodash": "^4.17.11",
+ "mnemonist": "^0.38.0",
+ "mocha": "^10.0.0",
+ "p-map": "^4.0.0",
+ "qs": "^6.7.0",
+ "raw-body": "^2.4.1",
+ "resolve": "1.17.0",
+ "semver": "^6.3.0",
+ "solc": "0.7.3",
+ "source-map-support": "^0.5.13",
+ "stacktrace-parser": "^0.1.10",
+ "tsort": "0.0.1",
+ "undici": "^5.14.0",
+ "uuid": "^8.3.2",
+ "ws": "^7.4.6"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
+ },
+ "immutable": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz",
+ "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "io-ts": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
+ "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
+ "dev": true,
+ "requires": {
+ "fp-ts": "^1.0.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-hex-prefixed": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
+ "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "js-sha3": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "keccak": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz",
+ "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==",
+ "dev": true,
+ "requires": {
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0",
+ "readable-stream": "^3.6.0"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "level": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
+ "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
+ "dev": true,
+ "requires": {
+ "browser-level": "^1.0.1",
+ "classic-level": "^1.2.0"
+ }
+ },
+ "level-supports": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz",
+ "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==",
+ "dev": true
+ },
+ "level-transcoder": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
+ "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
+ "dev": true,
+ "requires": {
+ "buffer": "^6.0.3",
+ "module-error": "^1.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "lru_map": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "mcl-wasm": {
+ "version": "0.7.9",
+ "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz",
+ "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "memory-level": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz",
+ "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==",
+ "dev": true,
+ "requires": {
+ "abstract-level": "^1.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "module-error": "^1.0.1"
+ }
+ },
+ "memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "mnemonist": {
+ "version": "0.38.5",
+ "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
+ "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
+ "dev": true,
+ "requires": {
+ "obliterator": "^2.0.0"
+ }
+ },
+ "mocha": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
+ "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "module-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz",
+ "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true
+ },
+ "napi-macros": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
+ "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "node-addon-api": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
+ "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
+ "dev": true
+ },
+ "node-gyp-build": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
+ "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true
+ },
+ "obliterator": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
+ "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.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==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.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==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "rlp": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz",
+ "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.2.0"
+ }
+ },
+ "run-parallel-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz",
+ "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rustbn.js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz",
+ "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==",
+ "dev": true
+ },
+ "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==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "scrypt-js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
+ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==",
+ "dev": true
+ },
+ "secp256k1": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
+ "dev": true,
+ "requires": {
+ "elliptic": "^6.5.4",
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.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==",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "solc": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
+ "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
+ "dev": true,
+ "requires": {
+ "command-exists": "^1.2.8",
+ "commander": "3.0.2",
+ "follow-redirects": "^1.12.1",
+ "fs-extra": "^0.30.0",
+ "js-sha3": "0.8.0",
+ "memorystream": "^0.3.1",
+ "require-from-string": "^2.0.0",
+ "semver": "^5.5.0",
+ "tmp": "0.0.33"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "solidity-ast": {
+ "version": "0.4.43",
+ "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.43.tgz",
+ "integrity": "sha512-rKfMl9Wm0hHL9bezSx+Ct7wimme0eogm+Follr3dm9VhbDgLgNGR9zxhESi0v7sqt3ZFjGObN3cWOYOQERJZtA==",
+ "dev": true
+ },
+ "solidity-docgen": {
+ "version": "0.6.0-beta.34",
+ "resolved": "https://registry.npmjs.org/solidity-docgen/-/solidity-docgen-0.6.0-beta.34.tgz",
+ "integrity": "sha512-igdGrkg8gT1jn+B2NwzjEtSf+7NTrSi/jz88zO7MZWgETmcWbXaxgAsQP4BQeC4YFeH0Pie1NsLP7+9qDgvFtA==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.7.7",
+ "solidity-ast": "^0.4.38"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "stacktrace-parser": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
+ "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.7.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
+ "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true
+ },
+ "streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-hex-prefix": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
+ "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==",
+ "dev": true,
+ "requires": {
+ "is-hex-prefixed": "1.0.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tsort": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
+ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
+ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==",
+ "dev": true
+ },
+ "tweetnacl-util": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz",
+ "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true
+ },
+ "undici": {
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.16.0.tgz",
+ "integrity": "sha512-KWBOXNv6VX+oJQhchXieUznEmnJMqgXMbs0xxH2t8q/FUAWSJvOSr/rMaZKnX5RIVq7JDn0JbP4BOnKG2SGXLQ==",
+ "dev": true,
+ "requires": {
+ "busboy": "^1.6.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "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==",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "ws": {
+ "version": "7.5.9",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "dev": true
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ }
+ },
+ "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==",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index 3dc572dd..77e1c2c8 100644
--- a/package.json
+++ b/package.json
@@ -24,9 +24,18 @@
"bugs": {
"url": "https://github.com/etherisc/gif-contracts/issues"
},
+ "scripts": {
+ "prepare-docs": "scripts/prepare-docs.sh"
+ },
"dependencies": {
"@chainlink/contracts": "0.4.1",
"@etherisc/gif-interface": "2.0.0-rc.1-0",
"@openzeppelin/contracts": "4.7.3"
+ },
+ "devDependencies": {
+ "hardhat": "^2.12.6",
+ "lodash.startcase": "^4.4.0",
+ "solidity-ast": "^0.4.40",
+ "solidity-docgen": "^0.6.0-beta.34"
}
}
diff --git a/scripts/gen-nav.js b/scripts/gen-nav.js
new file mode 100644
index 00000000..f805702f
--- /dev/null
+++ b/scripts/gen-nav.js
@@ -0,0 +1,41 @@
+#!/usr/bin/env node
+
+const path = require('path');
+const glob = require('glob');
+const startCase = require('lodash.startcase');
+
+const baseDir = process.argv[2];
+
+const files = glob.sync(baseDir + '/**/*.adoc').map(f => path.relative(baseDir, f));
+
+console.log('.API');
+
+function getPageTitle(directory) {
+ switch (directory) {
+ case 'metatx':
+ return 'Meta Transactions';
+ case 'common':
+ return 'Common (Tokens)';
+ default:
+ return startCase(directory);
+ }
+}
+
+const links = files.map(file => {
+ const doc = file.replace(baseDir, '');
+ const title = path.parse(file).name;
+
+ return {
+ xref: `* xref:${doc}[${getPageTitle(title)}]`,
+ title,
+ };
+});
+
+// Case-insensitive sort based on titles (so 'token/ERC20' gets sorted as 'erc20')
+const sortedLinks = links.sort(function (a, b) {
+ return a.title.toLowerCase().localeCompare(b.title.toLowerCase(), undefined, { numeric: true });
+});
+
+for (const link of sortedLinks) {
+ console.log(link.xref);
+}
diff --git a/scripts/git-user-config.sh b/scripts/git-user-config.sh
new file mode 100644
index 00000000..979b4b4d
--- /dev/null
+++ b/scripts/git-user-config.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+set -euo pipefail -x
+
+git config user.name 'github-actions'
+git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
\ No newline at end of file
diff --git a/scripts/prepare-docs.sh b/scripts/prepare-docs.sh
new file mode 100755
index 00000000..d4676b9d
--- /dev/null
+++ b/scripts/prepare-docs.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+OUTDIR="$(node -p 'require("./docs/config.js").outputDir')"
+
+if [ ! -d node_modules ]; then
+ npm ci
+fi
+
+rm -rf "$OUTDIR"
+
+npx hardhat docgen
+
+node scripts/gen-nav.js "$OUTDIR" > "$OUTDIR/../nav.adoc"
\ No newline at end of file
diff --git a/scripts/update-docs-branch.js b/scripts/update-docs-branch.js
new file mode 100644
index 00000000..44f8a707
--- /dev/null
+++ b/scripts/update-docs-branch.js
@@ -0,0 +1,63 @@
+const proc = require('child_process');
+const read = cmd => proc.execSync(cmd, { encoding: 'utf8' }).trim();
+const run = cmd => {
+ proc.execSync(cmd, { stdio: 'inherit' });
+};
+const tryRead = cmd => {
+ try {
+ return read(cmd);
+ } catch (e) {
+ return undefined;
+ }
+};
+
+const releaseBranchRegex = /^release-v(?(?\d+)\.(?\d+)(?:\.(?\d+))?)$/;
+
+const currentBranch = read('git rev-parse --abbrev-ref HEAD');
+const match = currentBranch.match(releaseBranchRegex);
+
+if (!match) {
+ console.error('Not currently on a release branch');
+ process.exit(1);
+}
+
+if (/-.*$/.test(require('../package.json').version)) {
+ console.error('Refusing to update docs: prerelease detected');
+ process.exit(0);
+}
+
+const current = match.groups;
+const docsBranch = `docs-v${current.major}.x`;
+
+// Fetch remotes and find the docs branch if it exists
+run('git fetch --all --no-tags');
+const matchingDocsBranches = tryRead(`git rev-parse --glob='*/${docsBranch}'`);
+
+if (!matchingDocsBranches) {
+ // Create the branch
+ run(`git checkout --orphan ${docsBranch}`);
+} else {
+ const [publishedRef, ...others] = new Set(matchingDocsBranches.split('\n'));
+ if (others.length > 0) {
+ console.error(
+ `Found conflicting ${docsBranch} branches.\n` +
+ 'Either local branch is outdated or there are multiple matching remote branches.',
+ );
+ process.exit(1);
+ }
+ const publishedVersion = JSON.parse(read(`git show ${publishedRef}:package.json`)).version;
+ const publishedMinor = publishedVersion.match(/\d+\.(?\d+)\.\d+/).groups.minor;
+ if (current.minor < publishedMinor) {
+ console.error('Refusing to update docs: newer version is published');
+ process.exit(0);
+ }
+
+ run('git checkout --quiet --detach');
+ run(`git reset --soft ${publishedRef}`);
+ run(`git checkout ${docsBranch}`);
+}
+
+run('npm run prepare-docs');
+run('git add -f docs'); // --force needed because generated docs files are gitignored
+run('git commit -m "Update docs"');
+run(`git checkout ${currentBranch}`);