From bf27fdabee0122299c2d433d150e2cd5a8d796d1 Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Wed, 6 Dec 2023 09:26:49 -0500 Subject: [PATCH 01/51] adding zksync file --- packages/networks/src/networks/index.ts | 1 + packages/networks/src/networks/zksync.ts | 108 +++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 packages/networks/src/networks/zksync.ts diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index beb6f7dec72..b5b2b5330af 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -13,3 +13,4 @@ export * from './base-goerli' export * from './base' export * from './linea' export * from './sepolia' +export * from './zksync' diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts new file mode 100644 index 00000000000..dc5598fd0ec --- /dev/null +++ b/packages/networks/src/networks/zksync.ts @@ -0,0 +1,108 @@ +import { HookType, NetworkConfig } from '@unlock-protocol/types' + +export const zksync: NetworkConfig = { + blockScan: { + url: (address: string) => `https://blockscan.com/address/${address}`, + }, + chain: 'zksync', + description: + "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", + explorer: { + name: 'zkSync Era Block Explorer', + urls: { + address: (address: string) => + `https://explorer.zksync.io/address/${address}`, + base: `https://explorer.zksync.io/`, + token: (address: string, holder: string) => + `https://explorer.zksync.io/token/${address}?a=${holder}`, + transaction: (hash: string) => `https://explorer.zksync.io/tx/${hash}`, + }, + }, + featured: false, + hooks: {}, + id: 324, + isTestNetwork: false, + maxFreeClaimCost: 1, + multisig: '0x479f3830fbd715342868BA95E438609BCe443DFB', + name: 'Polygon', + nativeCurrency: { + coingecko: 'matic-network', + decimals: 18, + name: 'Matic', + symbol: 'MATIC', + wrapped: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + }, + opensea: { + collectionUrl: (lockAddress: string) => + `https://opensea.io/assets/matic/${lockAddress}`, + tokenUrl: (lockAddress: string, tokenId: string) => + `https://opensea.io/assets/matic/${lockAddress}/${tokenId}`, + }, + previousDeploys: [ + { + startBlock: 15714206, + unlockAddress: '0x14bb3586Ce2946E71B95Fe00Fc73dd30ed830863', + }, + ], + provider: 'https://rpc.unlock-protocol.com/137', + publicLockVersionToDeploy: 13, + publicProvider: 'https://polygon-rpc.com/', + startBlock: 21986688, + subgraph: { + endpoint: 'https://api.thegraph.com/subgraphs/name/unlock-protocol/polygon', + endpointV2: + 'https://api.thegraph.com/subgraphs/name/unlock-protocol/polygon-v2', + networkName: 'matic', + }, + swapPurchaser: '0x33aC9CAE1Cd9CBB191116607f564F7381d81BAD9', + tokens: [ + { + address: '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', + decimals: 18, + name: 'Wrapped Ether', + symbol: 'WETH', + }, + { + address: '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + decimals: 18, + name: 'Dai Stablecoin', + symbol: 'DAI', + }, + + { + address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', + decimals: 6, + name: 'Tether USD', + symbol: 'USDT', + }, + { + address: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359', + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', + }, + { + address: '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', + decimals: 8, + name: 'Wrapped BTC', + symbol: 'WBTC', + }, + ], + uniswapV3: { + factoryAddress: '0x1F98431c8aD98523631AE4a59f267346ea31F984', + oracle: '0xE77c7F14e8EB9925ca418bF80c0a81a5B9C87683', + positionManager: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', + quoterAddress: '0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', + universalRouterAddress: '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5', + }, + universalCard: { + cardPurchaserAddress: '0xAB355a589CFbBA7a21b91E5B6063bF822dCc0016', + stripeDestinationCurrency: 'usdc', + stripeDestinationNetwork: 'polygon', + }, + unlockAddress: '0xE8E5cd156f89F7bdB267EabD5C43Af3d5AF2A78f', + unlockDiscountToken: '0xf7E78d9C4c74df889A83C8C8d6D05BF70fF75876', + url: 'https://polygon.technology/', +} + +export default polygon From e523f6b90700302ee0b24637f3ada706d4afadee Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Wed, 6 Dec 2023 11:53:29 -0500 Subject: [PATCH 02/51] wip --- governance/scripts/deployments/unlock.js | 1 + packages/networks/src/networks/zksync.ts | 67 +++++++----------------- provider/src/types.ts | 1 + smart-contracts/README.md | 2 + 4 files changed, 24 insertions(+), 47 deletions(-) diff --git a/governance/scripts/deployments/unlock.js b/governance/scripts/deployments/unlock.js index 52d46de23d9..4d5e1eaa074 100644 --- a/governance/scripts/deployments/unlock.js +++ b/governance/scripts/deployments/unlock.js @@ -13,6 +13,7 @@ async function main({ unlockVersion } = {}) { if (!unlockVersion) { throw 'Need to set --unlock-version' } + console.log(Unlock.interface) console.log(`Setting up version ${unlockVersion} from package`) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index dc5598fd0ec..077540a5379 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -1,4 +1,4 @@ -import { HookType, NetworkConfig } from '@unlock-protocol/types' +import { NetworkConfig } from '@unlock-protocol/types' export const zksync: NetworkConfig = { blockScan: { @@ -23,86 +23,59 @@ export const zksync: NetworkConfig = { id: 324, isTestNetwork: false, maxFreeClaimCost: 1, - multisig: '0x479f3830fbd715342868BA95E438609BCe443DFB', - name: 'Polygon', + multisig: 'TK', + name: 'zkSync Era', nativeCurrency: { - coingecko: 'matic-network', + coingecko: 'zksync-eth', decimals: 18, - name: 'Matic', - symbol: 'MATIC', - wrapped: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', + name: 'zkSync Ether', + symbol: 'ETH', }, - opensea: { - collectionUrl: (lockAddress: string) => - `https://opensea.io/assets/matic/${lockAddress}`, - tokenUrl: (lockAddress: string, tokenId: string) => - `https://opensea.io/assets/matic/${lockAddress}/${tokenId}`, - }, - previousDeploys: [ - { - startBlock: 15714206, - unlockAddress: '0x14bb3586Ce2946E71B95Fe00Fc73dd30ed830863', - }, - ], - provider: 'https://rpc.unlock-protocol.com/137', + previousDeploys: [], + provider: 'https://rpc.unlock-protocol.com/324', publicLockVersionToDeploy: 13, - publicProvider: 'https://polygon-rpc.com/', - startBlock: 21986688, + publicProvider: 'https://mainnet.era.zksync.io', + startBlock: 0, subgraph: { - endpoint: 'https://api.thegraph.com/subgraphs/name/unlock-protocol/polygon', - endpointV2: - 'https://api.thegraph.com/subgraphs/name/unlock-protocol/polygon-v2', + endpoint: '', + endpointV2: '', networkName: 'matic', }, - swapPurchaser: '0x33aC9CAE1Cd9CBB191116607f564F7381d81BAD9', tokens: [ { - address: '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', + address: '0x000000000000000000000000000000000000800A', decimals: 18, name: 'Wrapped Ether', symbol: 'WETH', }, { - address: '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', + address: '0x4B9eb6c0b6ea15176BBF62841C6B2A8a398cb656', decimals: 18, name: 'Dai Stablecoin', symbol: 'DAI', }, { - address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', + address: '0x493257fD37EDB34451f62EDf8D2a0C418852bA4C', decimals: 6, name: 'Tether USD', symbol: 'USDT', }, { - address: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359', + address: '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', decimals: 6, name: 'USD Coin', symbol: 'USDC', }, { - address: '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', + address: '0xBBeB516fb02a01611cBBE0453Fe3c580D7281011', decimals: 8, name: 'Wrapped BTC', symbol: 'WBTC', }, ], - uniswapV3: { - factoryAddress: '0x1F98431c8aD98523631AE4a59f267346ea31F984', - oracle: '0xE77c7F14e8EB9925ca418bF80c0a81a5B9C87683', - positionManager: '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', - quoterAddress: '0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6', - universalRouterAddress: '0x4C60051384bd2d3C01bfc845Cf5F4b44bcbE9de5', - }, - universalCard: { - cardPurchaserAddress: '0xAB355a589CFbBA7a21b91E5B6063bF822dCc0016', - stripeDestinationCurrency: 'usdc', - stripeDestinationNetwork: 'polygon', - }, - unlockAddress: '0xE8E5cd156f89F7bdB267EabD5C43Af3d5AF2A78f', - unlockDiscountToken: '0xf7E78d9C4c74df889A83C8C8d6D05BF70fF75876', - url: 'https://polygon.technology/', + unlockAddress: '', + url: 'https://zksync.io/', } -export default polygon +export default zksync diff --git a/provider/src/types.ts b/provider/src/types.ts index 5e74fa7e3bd..e710affbb5c 100644 --- a/provider/src/types.ts +++ b/provider/src/types.ts @@ -11,6 +11,7 @@ export interface Env { OPTIMISM_PROVIDER: string POLYGON_PROVIDER: string ZKSYNC_PROVIDER: string + PALM_PROVIDER: string BASE_GOERLI_PROVIDER: string BASE_PROVIDER: string SEPOLIA_PROVIDER: string diff --git a/smart-contracts/README.md b/smart-contracts/README.md index ffd1fa494be..e87b0205007 100644 --- a/smart-contracts/README.md +++ b/smart-contracts/README.md @@ -69,6 +69,8 @@ To set up a network for deployment, change `networks.js` to add your networks an We use the `DEPLOYER_PRIVATE_KEY` environment variable to interact with contracts. Please set it. +======== Move to Goevrnance? + ### Run the UDT contract upgrade Once your network are setup, you can run the UDT contract upgrade From f2336c2899b5db65398dadd460f2faa638cf4d1b Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Wed, 6 Dec 2023 13:55:27 -0500 Subject: [PATCH 03/51] fix deployment script --- governance/scripts/deployments/unlock.js | 1 - 1 file changed, 1 deletion(-) diff --git a/governance/scripts/deployments/unlock.js b/governance/scripts/deployments/unlock.js index 4d5e1eaa074..52d46de23d9 100644 --- a/governance/scripts/deployments/unlock.js +++ b/governance/scripts/deployments/unlock.js @@ -13,7 +13,6 @@ async function main({ unlockVersion } = {}) { if (!unlockVersion) { throw 'Need to set --unlock-version' } - console.log(Unlock.interface) console.log(`Setting up version ${unlockVersion} from package`) From 660acc0ed1be0aa2177ecb90f512c5a68ca48836 Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Wed, 6 Dec 2023 15:57:18 -0500 Subject: [PATCH 04/51] wip --- governance/hardhat.config.js | 8 + governance/package.json | 7 +- yarn.lock | 3874 +++++++++++++++++++++++++++++++--- 3 files changed, 3583 insertions(+), 306 deletions(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index f0f218854fc..809e456cc1a 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -5,6 +5,9 @@ require('@nomicfoundation/hardhat-ethers') require('@nomicfoundation/hardhat-verify') require('@openzeppelin/hardhat-upgrades') +require('@matterlabs/hardhat-zksync-deploy') +require('@matterlabs/hardhat-zksync-solc') + // import helpers const { etherscan, @@ -51,6 +54,7 @@ require('./tasks/set') require('./tasks/unlock') require('./tasks/lock') +console.log(networks) /** * @type import('hardhat/config').HardhatUserConfig */ @@ -63,4 +67,8 @@ module.exports = { sourcify: { enabled: true, }, + zksolc: { + version: 'latest', + settings: {}, + }, } diff --git a/governance/package.json b/governance/package.json index 1625af675eb..978655de5a3 100644 --- a/governance/package.json +++ b/governance/package.json @@ -22,7 +22,8 @@ "ethers": "6.9.0", "fs-extra": "11.2.0", "hardhat": "2.19.5", - "solhint": "4.0.0" + "solhint": "4.0.0", + "zksync2-js": "0.4.0" }, "scripts": { "test": "hardhat test", @@ -30,5 +31,9 @@ "lint:contracts": "solhint 'contracts/**/*.sol'", "lint:code": "eslint --resolve-plugins-relative-to ../packages/eslint-config .", "lint": "yarn lint:contracts && yarn lint:code" + }, + "devDependencies": { + "@matterlabs/hardhat-zksync-deploy": "1.0.1", + "@matterlabs/hardhat-zksync-solc": "1.0.3" } } diff --git a/yarn.lock b/yarn.lock index db6a00b2ca2..55d19c1fb55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1582,7 +1582,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.22.5, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.8.3": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.23.5": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -1592,13 +1592,53 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.5, @babel/compat-data@npm:^7.22.3, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.3, @babel/compat-data@npm:^7.23.5": +"@babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": "npm:^7.22.13" + chalk: "npm:^2.4.2" + checksum: bf6ae6ba3a510adfda6a211b4a89b0f1c98ca1352b745c077d113f3b568141e0d44ce750b9ac2a80143ba5c8c4080c50fcfc1aa11d86e194ea6785f62520eb5a + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.22.5, @babel/code-frame@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/code-frame@npm:7.22.5" + dependencies: + "@babel/highlight": "npm:^7.22.5" + checksum: b1ac7de75859699a9118c5247f489cc943d8d041339323904cd8140592993762f50abc14bc49b6703cb8a94b1aa90d6df2599625825e7ae470c9283b4a6170aa + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.5, @babel/compat-data@npm:^7.23.3, @babel/compat-data@npm:^7.23.5": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" checksum: 088f14f646ecbddd5ef89f120a60a1b3389a50a9705d44603dca77662707d0175a5e0e0da3943c3298f1907a4ab871468656fbbf74bb7842cd8b0686b2c19736 languageName: node linkType: hard +"@babel/compat-data@npm:^7.22.0, @babel/compat-data@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/compat-data@npm:7.22.3" + checksum: d0a1acf739faa9b11757dbf5ddb11699af31c1d5ff339831d03e477c617beb205e8127125a8406ccb6f725a97a48cb1de170534f700ef40db02d8702d835a4a0 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/compat-data@npm:7.22.5" + checksum: 18eb983dd250d94b4c794dd332bf80c4d2af147636991f214df19f15531fb6e405763f9bfec90de51dbbc368b9542bfd4f775cab74427adae0e80830cf0686dd + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/compat-data@npm:7.22.9" + checksum: 6797f59857917e57e1765811e4f48371f2bc6063274be012e380e83cbc1a4f7931d616c235df56404134aa4bb4775ee61f7b382688314e1b625a4d51caabd734 + languageName: node + linkType: hard + "@babel/core@npm:7.21.5": version: 7.21.5 resolution: "@babel/core@npm:7.21.5" @@ -1668,7 +1708,53 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.16.0, @babel/core@npm:^7.18.9, @babel/core@npm:^7.19.6, @babel/core@npm:^7.20.12, @babel/core@npm:^7.20.2, @babel/core@npm:^7.21.3, @babel/core@npm:^7.22.9, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.3, @babel/core@npm:^7.23.5, @babel/core@npm:^7.7.5": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.16.0, @babel/core@npm:^7.20.12, @babel/core@npm:^7.20.2, @babel/core@npm:^7.21.3, @babel/core@npm:^7.7.5, @babel/core@npm:~7.21.0": + version: 7.21.8 + resolution: "@babel/core@npm:7.21.8" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.21.4" + "@babel/generator": "npm:^7.21.5" + "@babel/helper-compilation-targets": "npm:^7.21.5" + "@babel/helper-module-transforms": "npm:^7.21.5" + "@babel/helpers": "npm:^7.21.5" + "@babel/parser": "npm:^7.21.8" + "@babel/template": "npm:^7.20.7" + "@babel/traverse": "npm:^7.21.5" + "@babel/types": "npm:^7.21.5" + convert-source-map: "npm:^1.7.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.2" + semver: "npm:^6.3.0" + checksum: a71076dc27964e0754ad99f139f82876d3ed35489c1182aae9052813d36c92f4bd9ddab0e490d28ce8b1f33eea87885081adaedd1305bfc5ce6595c030a7bb0b + languageName: node + linkType: hard + +"@babel/core@npm:^7.18.9": + version: 7.23.2 + resolution: "@babel/core@npm:7.23.2" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.0" + "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-module-transforms": "npm:^7.23.0" + "@babel/helpers": "npm:^7.23.2" + "@babel/parser": "npm:^7.23.0" + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.2" + "@babel/types": "npm:^7.23.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: b69d7008695b2ac7a3a2db83c5c712fbb79f7031c4480f6351cde327930e38873003d1d021059b729a1d0cb48093f1d384c64269b78f6189f50051fe4f64dc2d + languageName: node + linkType: hard + +"@babel/core@npm:^7.19.6, @babel/core@npm:^7.22.9": version: 7.23.7 resolution: "@babel/core@npm:7.23.7" dependencies: @@ -1691,26 +1777,26 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:~7.21.0": - version: 7.21.8 - resolution: "@babel/core@npm:7.21.8" +"@babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2, @babel/core@npm:^7.23.3, @babel/core@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/core@npm:7.23.5" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.21.4" - "@babel/generator": "npm:^7.21.5" - "@babel/helper-compilation-targets": "npm:^7.21.5" - "@babel/helper-module-transforms": "npm:^7.21.5" - "@babel/helpers": "npm:^7.21.5" - "@babel/parser": "npm:^7.21.8" - "@babel/template": "npm:^7.20.7" - "@babel/traverse": "npm:^7.21.5" - "@babel/types": "npm:^7.21.5" - convert-source-map: "npm:^1.7.0" + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.5" + "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-module-transforms": "npm:^7.23.3" + "@babel/helpers": "npm:^7.23.5" + "@babel/parser": "npm:^7.23.5" + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.5" + "@babel/types": "npm:^7.23.5" + convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.2" - semver: "npm:^6.3.0" - checksum: a71076dc27964e0754ad99f139f82876d3ed35489c1182aae9052813d36c92f4bd9ddab0e490d28ce8b1f33eea87885081adaedd1305bfc5ce6595c030a7bb0b + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: f24265172610dbffe0e315b6a8e8f87cf87d2643c8915196adcddd81c66a8eaeb1b36fea851e2308961636a180089a5f10becaa340d5b707d5f64e2e5ffb2bc8 languageName: node linkType: hard @@ -1728,7 +1814,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.21.5, @babel/generator@npm:^7.22.0, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.23.3, @babel/generator@npm:^7.23.6": +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.21.5, @babel/generator@npm:^7.23.3, @babel/generator@npm:^7.23.6": version: 7.23.6 resolution: "@babel/generator@npm:7.23.6" dependencies: @@ -1740,6 +1826,66 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.22.0, @babel/generator@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/generator@npm:7.22.3" + dependencies: + "@babel/types": "npm:^7.22.3" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: fcada8c18fb59340aadc1bee765ee02f52086d72b4fa1bd039aba504dd449f2016396c5cccf970b838c4b4fed831b500f41f1651a2de3c648d2f32a4bf3d92af + languageName: node + linkType: hard + +"@babel/generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/generator@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: 56849bc15d130fe8b31f5c4cccda00aaa6005cb1a2b40cdf7754cf4905d804e41468a25b5b95f07059820926873039066ed1cb82f92cf7bf76a72c853274d1f7 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.22.7, @babel/generator@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/generator@npm:7.22.9" + dependencies: + "@babel/types": "npm:^7.22.5" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: 1ee43f99512c51d594c8992f4c4cd07d2843eb58cf3c22d1f605906b9c0ed89640bdcea2c8d583e75a8032a49bb4d950d2055007ecb75af404ebc2db8a513b94 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" + dependencies: + "@babel/types": "npm:^7.23.0" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: bd1598bd356756065d90ce26968dd464ac2b915c67623f6f071fb487da5f9eb454031a380e20e7c9a7ce5c4a49d23be6cb9efde404952b0b3f3c0c3a9b73d68a + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/generator@npm:7.23.5" + dependencies: + "@babel/types": "npm:^7.23.5" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: 094af79c2e8fdb0cfd06b42ff6a39a8a95639bc987cace44f52ed5c46127f5469eb20ab5f4c8991fc00fa9c1445a1977cde8e44289d6be29ddbb315fb0fc1b45 + languageName: node + linkType: hard + "@babel/generator@npm:~7.21.1": version: 7.21.9 resolution: "@babel/generator@npm:7.21.9" @@ -1770,7 +1916,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.22.1, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.22.9, @babel/helper-compilation-targets@npm:^7.23.6": +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: d753acac62399fc6dd354cf1b9441bde0c331c2fe792a4c14904c5e5eafc3cac79478f6aa038e8a51c1148b0af6710a2e619855e4b5d54497ac972eaffed5884 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.5, @babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: @@ -1783,7 +1938,65 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.23.6, @babel/helper-create-class-features-plugin@npm:^7.23.7": +"@babel/helper-compilation-targets@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-compilation-targets@npm:7.22.1" + dependencies: + "@babel/compat-data": "npm:^7.22.0" + "@babel/helper-validator-option": "npm:^7.21.0" + browserslist: "npm:^4.21.3" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a5c033c2b560c037e044134653844f4f9f85b55ff24925d3831a31c794fc9749707213412aeeea3fa1abfe8817dba3072512f2909940fe17ca74452bbdf6ba28 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" + dependencies: + "@babel/compat-data": "npm:^7.22.9" + "@babel/helper-validator-option": "npm:^7.22.15" + browserslist: "npm:^4.21.9" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 9706decaa1591cf44511b6f3447eb9653b50ca3538215fe2e5387a8598c258c062f4622da5b95e61f0415706534deee619bbf53a2889f9bd967949b8f6024e0e + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-compilation-targets@npm:7.22.5" + dependencies: + "@babel/compat-data": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.22.5" + browserslist: "npm:^4.21.3" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aff56630b85481d7fa1f268fecc6f70df30c06df5073ea72cd422caccb957a0504f119d9681952f7f7b024f27117dc5e9147a48cc0046c2d84856eae92bfae03 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-compilation-targets@npm:7.22.9" + dependencies: + "@babel/compat-data": "npm:^7.22.9" + "@babel/helper-validator-option": "npm:^7.22.5" + browserslist: "npm:^4.21.9" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 779510e4c2036fa9880c0ed7b77ce84e5926093e216dffa0044f31a146f0daae363c00d1cdda2250788edc8d6457b9bce6245c51d9f4161bb51e053c12c4b478 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.23.6, @babel/helper-create-class-features-plugin@npm:^7.23.7": version: 7.23.7 resolution: "@babel/helper-create-class-features-plugin@npm:7.23.7" dependencies: @@ -1802,7 +2015,45 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": +"@babel/helper-create-class-features-plugin@npm:^7.22.15": + version: 7.23.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.23.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-member-expression-to-functions": "npm:^7.23.0" + "@babel/helper-optimise-call-expression": "npm:^7.22.5" + "@babel/helper-replace-supers": "npm:^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: cd951e81b6a4ad79879f38edbe78d51cf29dfd5a7d33d7162aeaa3ac536dcc9a6679de8feb976bbd76d255a1654bf1742410517edd5c426fec66e0bf41eb8c45 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.22.5, @babel/helper-create-class-features-plugin@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-member-expression-to-functions": "npm:^7.22.5" + "@babel/helper-optimise-call-expression": "npm:^7.22.5" + "@babel/helper-replace-supers": "npm:^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 7e4ed99b88f844b762013862d7453b531b792da13a0afa3ef1a2d483c4f52f688b38e6d07e9b32c2304d17be752b2deba00b48530113cad979060dbc3bf20594 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" dependencies: @@ -1815,6 +2066,32 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.18.6" + regexpu-core: "npm:^5.3.1" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 464af32e0be268703c3376cf2499f721c0579d66b77462feff8bcbf9e399b85145322138ac290668fb766eb34f295ed362a39d30c73e8c695ccfe31067e13a47 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + regexpu-core: "npm:^5.3.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6f3475a7661bc34527201c07eeeec3077c8adab0ed74bff728dc479da6c74bb393b6121ddf590ef1671f3f508fab3c7792a5ada65672665d84db4556daebd210 + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.3.3": version: 0.3.3 resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" @@ -1831,6 +2108,52 @@ __metadata: languageName: node linkType: hard +"@babel/helper-define-polyfill-provider@npm:^0.4.0": + version: 0.4.0 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.0" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.17.7" + "@babel/helper-plugin-utils": "npm:^7.16.7" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + semver: "npm:^6.1.2" + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 9aae8e941fa64ac3a39d9fae78de679c2abe38d9660377e7200bfc4c19c5f8a763407d7e16820915700f8694d2f1b7e1ff20b016a1c3bb06fc9b1e5047ba4664 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.4.2": + version: 0.4.2 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.2" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.22.6" + "@babel/helper-plugin-utils": "npm:^7.22.5" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 6383a34af4048957e46366fa7e6228b61e140955a707f8af7b69c26b2b780880db164d08b6de9420f6ec5a0ee01eb23aa5d78a4b141f2b65b3670e71906471bf + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.4.3": + version: 0.4.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.3" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.22.6" + "@babel/helper-plugin-utils": "npm:^7.22.5" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 9ab9d6a2cfaffc44f8b7ad661b642b03f31597282557686b7f4c64f67acd3c5844d4eac028e63d238819bcec0549ddef7dc0539d10966ace96f4c61e97b33138 + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.4.4": version: 0.4.4 resolution: "@babel/helper-define-polyfill-provider@npm:0.4.4" @@ -1853,7 +2176,21 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.21.0, @babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0": +"@babel/helper-environment-visitor@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-environment-visitor@npm:7.22.1" + checksum: a6b4bb5505453bff95518d361ac1de393f0029aeb8b690c70540f4317934c53c43cc4afcda8c752ffa8c272e63ed6b929a56eca28e4978424177b24238b21bf9 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-environment-visitor@npm:7.22.5" + checksum: 248532077d732a34cd0844eb7b078ff917c3a8ec81a7f133593f71a860a582f05b60f818dc5049c2212e5baa12289c27889a4b81d56ef409b4863db49646c4b1 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.21.0, @babel/helper-function-name@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: @@ -1863,6 +2200,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-function-name@npm:7.22.5" + dependencies: + "@babel/template": "npm:^7.22.5" + "@babel/types": "npm:^7.22.5" + checksum: 6d02e304a45fe2a64d69dfa5b4fdfd6d68e08deb32b0a528e7b99403d664e9207e6b856787a8ff3f420e77d15987ac1de4eb869906e6ed764b67b07c804d20ba + languageName: node + linkType: hard + "@babel/helper-get-function-arity@npm:7.16.7": version: 7.16.7 resolution: "@babel/helper-get-function-arity@npm:7.16.7" @@ -1890,6 +2237,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: bb51f195c17d8d98ca5fda630fed436643d27f094f3c936f670b43cb05865f192900f455ffb730c8d4310702b2211996a90354fd55ae8659b096bc6c75d36ec5 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.21.4, @babel/helper-module-imports@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-module-imports@npm:7.22.15" @@ -1899,7 +2255,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.21.5, @babel/helper-module-transforms@npm:^7.22.1, @babel/helper-module-transforms@npm:^7.22.9, @babel/helper-module-transforms@npm:^7.23.3": +"@babel/helper-module-imports@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-module-imports@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: d8296447c0cdc3c02417ba32864da3374e53bd2763a6c404aae118987c222c47238d9d1f4fd2a88250a85e0a68eff38d878c491b00c56d9bd20e809f91eb41b4 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.21.5, @babel/helper-module-transforms@npm:^7.22.9, @babel/helper-module-transforms@npm:^7.23.3": version: 7.23.3 resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: @@ -1914,6 +2279,53 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.22.1": + version: 7.22.1 + resolution: "@babel/helper-module-transforms@npm:7.22.1" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.1" + "@babel/helper-module-imports": "npm:^7.21.4" + "@babel/helper-simple-access": "npm:^7.21.5" + "@babel/helper-split-export-declaration": "npm:^7.18.6" + "@babel/helper-validator-identifier": "npm:^7.19.1" + "@babel/template": "npm:^7.21.9" + "@babel/traverse": "npm:^7.22.1" + "@babel/types": "npm:^7.22.0" + checksum: 66a6a964dbf64342ff9d07627b88ea12de13734b15df70cdf397ea91c8068a4b9d32ddf8dad348c5980c2c09db8ea1f1cdb9cf1b65a0f469e5b9294653c7d0a6 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-module-transforms@npm:7.22.5" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-module-imports": "npm:^7.22.5" + "@babel/helper-simple-access": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.5" + "@babel/template": "npm:^7.22.5" + "@babel/traverse": "npm:^7.22.5" + "@babel/types": "npm:^7.22.5" + checksum: 1ebe1e0458f7eaaf085953888df4311ca1a2cdac15a656c63a7f9c5ecd003993cf3eb41ad1545d0e41039955f8d2f8fa64747a9419ae32bbf5bea532a51fa9f4 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-module-imports": "npm:^7.22.15" + "@babel/helper-simple-access": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-validator-identifier": "npm:^7.22.20" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d72fe444f7b6c5aadaac8f393298d603eedd48e5dead67273a48e5c83a677cbccbd8a12a06c5bf5d97924666083279158a4bd0e799d28b86cbbfacba9e41f598 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -1943,6 +2355,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-wrap-function": "npm:^7.22.9" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 05538079447829b13512157491cc77f9cf1ea7e1680e15cff0682c3ed9ee162de0c4862ece20a6d6b2df28177a1520bcfe45993fbeccf2747a81795a7c3f6290 + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-replace-supers@npm:7.22.20" @@ -1956,6 +2381,28 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-replace-supers@npm:7.22.9" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-member-expression-to-functions": "npm:^7.22.5" + "@babel/helper-optimise-call-expression": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: b5a740a95f12250b67afe30574ad60fa44175db92441658c6c3e8f473fcb8f8eaffd24fdad436cdfa1beee21b470d1190d64a0bb97b444525ca952e6cc081dc9 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-simple-access@npm:7.21.5" + dependencies: + "@babel/types": "npm:^7.21.5" + checksum: a31207d263b860f470f0ba3bf7c5262de8d1119fa6ed3f69ee64692e3336c21b9044dce89732bb8a4c2cf50b7478157b43dc632818d3cbae49b2fd7313c9b99d + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-simple-access@npm:7.22.5" @@ -1983,6 +2430,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-split-export-declaration@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: d10e05a02f49c1f7c578cea63d2ac55356501bbf58856d97ac9bfde4957faee21ae97c7f566aa309e38a256eef58b58e5b670a7f568b362c00e93dfffe072650 + languageName: node + linkType: hard + "@babel/helper-string-parser@npm:^7.21.5, @babel/helper-string-parser@npm:^7.23.4": version: 7.23.4 resolution: "@babel/helper-string-parser@npm:7.23.4" @@ -1990,6 +2446,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 7f275a7f1a9504da06afc33441e219796352a4a3d0288a961bc14d1e30e06833a71621b33c3e60ee3ac1ff3c502d55e392bcbc0665f6f9d2629809696fab7cdd + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.19.1, @babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" @@ -1997,13 +2460,34 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.21.0, @babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.22.5, @babel/helper-validator-option@npm:^7.23.5": +"@babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-identifier@npm:7.22.5" + checksum: 12cb7d4535b3f8d109a446f7bef08d20eebe94fd97b534cd415c936ab342e9634edc5c99961af976bd78bcae6e6ec4b2ab8483d0da2ac5926fbe9f7dd9ab28ab + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.21.0, @babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-option@npm:7.22.5" + checksum: bbeca8a85ee86990215c0424997438b388b8d642d69b9f86c375a174d3cdeb270efafd1ff128bc7a1d370923d13b6e45829ba8581c027620e83e3a80c5c414b3 + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-wrap-function@npm:7.22.20" @@ -2015,7 +2499,18 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.21.5, @babel/helpers@npm:^7.22.0, @babel/helpers@npm:^7.22.6, @babel/helpers@npm:^7.23.7": +"@babel/helper-wrap-function@npm:^7.22.9": + version: 7.22.9 + resolution: "@babel/helper-wrap-function@npm:7.22.9" + dependencies: + "@babel/helper-function-name": "npm:^7.22.5" + "@babel/template": "npm:^7.22.5" + "@babel/types": "npm:^7.22.5" + checksum: 5ac86fe27b92d5fd866b4021644bbbae34b76af4c0a568ed854e10c25481c2cd56a81919aac5df270e8ebef788d62074195236adbf3a4039ecd93e0e8e83a3f5 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.21.5, @babel/helpers@npm:^7.22.6, @babel/helpers@npm:^7.23.7": version: 7.23.7 resolution: "@babel/helpers@npm:7.23.7" dependencies: @@ -2026,6 +2521,61 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.22.0": + version: 7.22.3 + resolution: "@babel/helpers@npm:7.22.3" + dependencies: + "@babel/template": "npm:^7.21.9" + "@babel/traverse": "npm:^7.22.1" + "@babel/types": "npm:^7.22.3" + checksum: 8f178283d93998177dd4b37cd697b57b2d01476dff46b80a231afe822db1e937c086e6f26a24cb1ea75750161b8dd91be736300c70d0d37879c5476949a301f8 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.2": + version: 7.23.2 + resolution: "@babel/helpers@npm:7.23.2" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.2" + "@babel/types": "npm:^7.23.0" + checksum: d66d949d41513f19e62e43a9426e283d46bc9a3c72f1e3dd136568542382edd411047403458aaa0ae3adf7c14d23e0e9a1126092bb56e72ba796a6dd7e4c082a + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helpers@npm:7.23.5" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/traverse": "npm:^7.23.5" + "@babel/types": "npm:^7.23.5" + checksum: 84a813db55e03b5f47cef1210eb22751dae5dc3605bf62ff9acd4c248d857f94cb43dc7299e0edcec9312b31088f0d77f881282df2957e65a322b5412801cc24 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: 1aabc95b2cb7f67adc26c7049554306f1435bfedb76b9731c36ff3d7cdfcb32bd65a6dd06985644124eb2100bd911721d9e5c4f5ac40b7f0da2995a61bf8da92 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/highlight@npm:7.22.5" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.5" + chalk: "npm:^2.0.0" + js-tokens: "npm:^4.0.0" + checksum: ff59305c0184648c9cb042638e9d2d184c12df2a112c71359268a982e7ab65cd5236f392ee8eb722a3bf5b5bd155954fdc7b5aacb6b2b1cd5e38dafcbe63cc57 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.23.4": version: 7.23.4 resolution: "@babel/highlight@npm:7.23.4" @@ -2064,7 +2614,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.0, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.6": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.23.6": version: 7.23.6 resolution: "@babel/parser@npm:7.23.6" bin: @@ -2073,25 +2623,61 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:~7.21.2": - version: 7.21.9 - resolution: "@babel/parser@npm:7.21.9" +"@babel/parser@npm:^7.21.9, @babel/parser@npm:^7.22.0, @babel/parser@npm:^7.22.4, @babel/parser_latest@npm:@babel/parser@7.22.4": + version: 7.22.4 + resolution: "@babel/parser@npm:7.22.4" bin: parser: ./bin/babel-parser.js - checksum: 5c92a0b3981aa9e67e9bc783d4c0674838598ac0c8b8aa110d16e8096a5292213027b6a28b7899aa6490df6a6b02848b6adf95034bee1b9c0738197b7371ac96 + checksum: 35f2777452d1371e76f8861a8e69c77df000af5aef3b3020b5da783ba6376cc6de088fcfc193ad7acf6cd7646df5b83be58b7fb8c84d59a4588fd1d8ad43289a languageName: node linkType: hard -"@babel/parser_latest@npm:@babel/parser@7.22.4": - version: 7.22.4 - resolution: "@babel/parser@npm:7.22.4" +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" bin: parser: ./bin/babel-parser.js - checksum: 35f2777452d1371e76f8861a8e69c77df000af5aef3b3020b5da783ba6376cc6de088fcfc193ad7acf6cd7646df5b83be58b7fb8c84d59a4588fd1d8ad43289a + checksum: 201641e068f8cca1ff12b141fcba32d7ccbabc586961bd1b85ae89d9695867f84d57fc2e1176dc4981fd28e5e97ca0e7c32cd688bd5eabb641a302abc0cb5040 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/parser@npm:7.22.5" + bin: + parser: ./bin/babel-parser.js + checksum: 46525855c9290e455a548336bfbb4dddb5ced0f213e982fa50f459995c747da3ff196b8603b093ad39a498d66069ca3cc1111c47a6424b521831ca02f706ccbf + languageName: node + linkType: hard + +"@babel/parser@npm:^7.22.7": + version: 7.22.7 + resolution: "@babel/parser@npm:7.22.7" + bin: + parser: ./bin/babel-parser.js + checksum: f420f89ea8e5803a44f76a57630002ca5721fbde719c10ac4eaebf1d01fad102447cd90a7721c97b1176bde33ec9bc2b68fe8c7d541668dc6610727ba79c8862 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/parser@npm:7.23.5" + bin: + parser: ./bin/babel-parser.js + checksum: 828c250ace0c58f9dc311fd13ad3da34e86ed27a5c6b4183ce9d85be250e78eeb71a13f6d51a368c46f8cbe51106c726bfbb158bf46a89db3a168a0002d3050a + languageName: node + linkType: hard + +"@babel/parser@npm:~7.21.2": + version: 7.21.9 + resolution: "@babel/parser@npm:7.21.9" + bin: + parser: ./bin/babel-parser.js + checksum: 5c92a0b3981aa9e67e9bc783d4c0674838598ac0c8b8aa110d16e8096a5292213027b6a28b7899aa6490df6a6b02848b6adf95034bee1b9c0738197b7371ac96 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" dependencies: @@ -2102,7 +2688,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.3, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.5, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e353a060fb2cd8f1256d28cd768f16fb02513f905b9b6d656fb0242c96c341a196fa188b27c2701506a6e27515359fbcc1a5ca7fa8b9b530cf88fbd137baefc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3" dependencies: @@ -2115,6 +2712,44 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.20.0" + "@babel/plugin-transform-optional-chaining": "npm:^7.22.3" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: d786e4d89c0674cab4fb65e804920782b2ff8319a3e6c561c81b0265451f4ac9f8ce1f9699303398636352b5177730e31c219a086b72980bf39f98faadeab3c1 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + "@babel/plugin-transform-optional-chaining": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 16e7a5f3bf2f2ac0ca032a70bf0ebd7e886d84dbb712b55c0643c04c495f0f221fbcbca14b5f8f8027fa6c87a3dafae0934022ad2b409384af6c5c356495b7bd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6e13f14949eb943d33cf4d3775a7195fa93c92851dfb648931038e9eb92a9b1709fdaa5a0ff6cf063cfcd68b3e52d280f3ebc0f3085b3e006e64dd6196ecb72a + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.7": version: 7.23.7 resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.7" @@ -2415,7 +3050,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.22.5, @babel/plugin-syntax-import-assertions@npm:^7.23.3": +"@babel/plugin-syntax-import-assertions@npm:^7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" dependencies: @@ -2426,7 +3061,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.22.3, @babel/plugin-syntax-import-attributes@npm:^7.22.5, @babel/plugin-syntax-import-attributes@npm:^7.23.3": +"@babel/plugin-syntax-import-assertions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.22.3, @babel/plugin-syntax-import-attributes@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3" dependencies: @@ -2437,6 +3083,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-attributes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47 + languageName: node + linkType: hard + "@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" @@ -2470,6 +3127,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -2558,6 +3226,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a + languageName: node + linkType: hard + "@babel/plugin-syntax-typescript@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" @@ -2581,7 +3260,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.21.5, @babel/plugin-transform-arrow-functions@npm:^7.22.5, @babel/plugin-transform-arrow-functions@npm:^7.23.3": +"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.21.5, @babel/plugin-transform-arrow-functions@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" dependencies: @@ -2592,11 +3271,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.22.3, @babel/plugin-transform-async-generator-functions@npm:^7.22.7, @babel/plugin-transform-async-generator-functions@npm:^7.23.7": - version: 7.23.7 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.7" +"@babel/plugin-transform-arrow-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" dependencies: - "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.22.3, @babel/plugin-transform-async-generator-functions@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-plugin-utils": "npm:^7.22.5" "@babel/helper-remap-async-to-generator": "npm:^7.22.20" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" @@ -2606,7 +3296,35 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.20.7, @babel/plugin-transform-async-to-generator@npm:^7.22.5, @babel/plugin-transform-async-to-generator@npm:^7.23.3": +"@babel/plugin-transform-async-generator-functions@npm:^7.22.7": + version: 7.22.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.7" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-remap-async-to-generator": "npm:^7.22.5" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 89d307629dc4d8838252cc12b56f8bff2f8de790abe2ee8cc0d112094dfc7fd653b47c629834dda8d26c624ca3c3c73f165e956badf9239c951bba4c97affad2 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.4" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-remap-async-to-generator": "npm:^7.22.20" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e2fc132c9033711d55209f4781e1fc73f0f4da5e0ca80a2da73dec805166b73c92a6e83571a8994cd2c893a28302e24107e90856202b24781bab734f800102bb + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.20.7, @babel/plugin-transform-async-to-generator@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3" dependencies: @@ -2619,7 +3337,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.18.6, @babel/plugin-transform-block-scoped-functions@npm:^7.22.5, @babel/plugin-transform-block-scoped-functions@npm:^7.23.3": +"@babel/plugin-transform-async-to-generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" + dependencies: + "@babel/helper-module-imports": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-remap-async-to-generator": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.18.6, @babel/plugin-transform-block-scoped-functions@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" dependencies: @@ -2630,7 +3361,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.21.0, @babel/plugin-transform-block-scoping@npm:^7.22.5, @babel/plugin-transform-block-scoping@npm:^7.23.4": +"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.21.0, @babel/plugin-transform-block-scoping@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" dependencies: @@ -2641,7 +3383,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.22.3, @babel/plugin-transform-class-properties@npm:^7.22.5, @babel/plugin-transform-class-properties@npm:^7.23.3": +"@babel/plugin-transform-block-scoping@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoping@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ecfff46f51daed83a0c7dc5de237b9e09028f40f21d4f3552d2ed0d341e81d3194ffcd0a873dd83ec8d33ffb822666c14dc2d99ae010362e4c1a546416cdd4cf + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.22.3, @babel/plugin-transform-class-properties@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" dependencies: @@ -2653,7 +3406,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.22.3, @babel/plugin-transform-class-static-block@npm:^7.22.5, @babel/plugin-transform-class-static-block@npm:^7.23.4": +"@babel/plugin-transform-class-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.22.3, @babel/plugin-transform-class-static-block@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-class-static-block@npm:7.23.4" dependencies: @@ -2666,7 +3431,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.21.0, @babel/plugin-transform-classes@npm:^7.22.6, @babel/plugin-transform-classes@npm:^7.23.5": +"@babel/plugin-transform-class-static-block@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-static-block@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: bc48b92dbaf625a14f2bf62382384eef01e0515802426841636ae9146e27395d068c7a8a45e9e15699491b0a01d990f38f179cbc9dc89274a393f85648772f12 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.21.0, @babel/plugin-transform-classes@npm:^7.23.5": version: 7.23.5 resolution: "@babel/plugin-transform-classes@npm:7.23.5" dependencies: @@ -2685,7 +3463,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.21.5, @babel/plugin-transform-computed-properties@npm:^7.22.5, @babel/plugin-transform-computed-properties@npm:^7.23.3": +"@babel/plugin-transform-classes@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/plugin-transform-classes@npm:7.22.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-compilation-targets": "npm:^7.22.6" + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-optimise-call-expression": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-replace-supers": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + globals: "npm:^11.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9b2f653d12ade0302f8b01a0f647cdbe5e5874984bf85f65e445fb5f660abe0347dd7e45bebc376aa4e096e607f62af73fc44a7e67765cfbe387b632ec8867f9 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.21.5, @babel/plugin-transform-computed-properties@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" dependencies: @@ -2697,7 +3494,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.21.3, @babel/plugin-transform-destructuring@npm:^7.22.5, @babel/plugin-transform-destructuring@npm:^7.23.3": +"@babel/plugin-transform-computed-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/template": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a3efa8de19e4c52f01a99301d864819a7997a7845044d9cef5b67b0fb1e5e3e610ecc23053a8b5cf8fe40fcad93c15a586eaeffd22b89eeaa038339c37919661 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.21.3, @babel/plugin-transform-destructuring@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" dependencies: @@ -2708,7 +3517,42 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.22.5, @babel/plugin-transform-dotall-regex@npm:^7.23.3, @babel/plugin-transform-dotall-regex@npm:^7.4.4": +"@babel/plugin-transform-destructuring@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b568c51bc80d9c941a5285b010d694345a1ae50b45bf5eb6c591b3a31303ac920150fc8c1cc810692d139dd3c60285f5bdc250dae58b5a227597f76bffbd9b61 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.18.6 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cbe5d7063eb8f8cca24cd4827bc97f5641166509e58781a5f8aa47fb3d2d786ce4506a30fca2e01f61f18792783a5cb5d96bf5434c3dd1ad0de8c9cc625a53da + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3" dependencies: @@ -2720,7 +3564,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.18.9, @babel/plugin-transform-duplicate-keys@npm:^7.22.5, @babel/plugin-transform-duplicate-keys@npm:^7.23.3": +"@babel/plugin-transform-duplicate-keys@npm:^7.18.9, @babel/plugin-transform-duplicate-keys@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3" dependencies: @@ -2731,7 +3575,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.22.1, @babel/plugin-transform-dynamic-import@npm:^7.22.5, @babel/plugin-transform-dynamic-import@npm:^7.23.4": +"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.22.1, @babel/plugin-transform-dynamic-import@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.4" dependencies: @@ -2743,7 +3598,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6, @babel/plugin-transform-exponentiation-operator@npm:^7.22.5, @babel/plugin-transform-exponentiation-operator@npm:^7.23.3": +"@babel/plugin-transform-dynamic-import@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 186a6d59f36eb3c5824739fc9c22ed0f4ca68e001662aa3a302634346a8b785cb9579b23b0c158f4570604d697d19598ca09b58c60a7fa2894da1163c4eb1907 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6, @babel/plugin-transform-exponentiation-operator@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3" dependencies: @@ -2755,7 +3622,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.22.3, @babel/plugin-transform-export-namespace-from@npm:^7.22.5, @babel/plugin-transform-export-namespace-from@npm:^7.23.4": +"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.3, @babel/plugin-transform-export-namespace-from@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.4" dependencies: @@ -2767,6 +3646,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-export-namespace-from@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3d197b788758044983c96b9c49bed4b456055f35a388521a405968db0f6e2ffb6fd59110e3931f4dcc5e126ae9e5e00e154a0afb47a7ea359d8d0dea79f480d7 + languageName: node + linkType: hard + "@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.0, @babel/plugin-transform-flow-strip-types@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" @@ -2779,7 +3670,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.21.5, @babel/plugin-transform-for-of@npm:^7.22.5, @babel/plugin-transform-for-of@npm:^7.23.6": +"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.21.5, @babel/plugin-transform-for-of@npm:^7.23.6": version: 7.23.6 resolution: "@babel/plugin-transform-for-of@npm:7.23.6" dependencies: @@ -2791,7 +3682,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.18.9, @babel/plugin-transform-function-name@npm:^7.22.5, @babel/plugin-transform-function-name@npm:^7.23.3": +"@babel/plugin-transform-for-of@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-for-of@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 07ab9ce49a15a03840937dbbddbf2235e0e6b9af3c1427746fab6aaa667acd92327620f937134922167193ac7aca871d20326b59e7a8b1efd52f22f876348928 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-for-of@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 745054f125fba6dbaea3d863352c94266c97db87e3521bc6c436a8c05f384821907c0109ace437a90342e423a3365f4d8e592de06e4a241bbd7070e1f293604f + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.18.9, @babel/plugin-transform-function-name@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-function-name@npm:7.23.3" dependencies: @@ -2804,7 +3717,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.22.3, @babel/plugin-transform-json-strings@npm:^7.22.5, @babel/plugin-transform-json-strings@npm:^7.23.4": +"@babel/plugin-transform-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-function-name@npm:7.22.5" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.22.5" + "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.22.3, @babel/plugin-transform-json-strings@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-json-strings@npm:7.23.4" dependencies: @@ -2816,7 +3742,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.18.9, @babel/plugin-transform-literals@npm:^7.22.5, @babel/plugin-transform-literals@npm:^7.23.3": +"@babel/plugin-transform-json-strings@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-json-strings@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4e00b902487a670b6c8948f33f9108133fd745cf9d1478aca515fb460b9b2f12e137988ebc1663630fb82070a870aed8b0c1aa4d007a841c18004619798f255c + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.18.9, @babel/plugin-transform-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-literals@npm:7.23.3" dependencies: @@ -2827,7 +3765,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.3, @babel/plugin-transform-logical-assignment-operators@npm:^7.22.5, @babel/plugin-transform-logical-assignment-operators@npm:^7.23.4": +"@babel/plugin-transform-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.3, @babel/plugin-transform-logical-assignment-operators@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.4" dependencies: @@ -2839,7 +3788,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.18.6, @babel/plugin-transform-member-expression-literals@npm:^7.22.5, @babel/plugin-transform-member-expression-literals@npm:^7.23.3": +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 18748e953c08f64885f18c224eac58df10a13eac4d845d16b5d9b6276907da7ca2530dfebe6ed41cdc5f8a75d9db3e36d8eb54ddce7cd0364af1cab09b435302 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.18.6, @babel/plugin-transform-member-expression-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" dependencies: @@ -2850,7 +3811,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.20.11, @babel/plugin-transform-modules-amd@npm:^7.22.5, @babel/plugin-transform-modules-amd@npm:^7.23.3": +"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.20.11, @babel/plugin-transform-modules-amd@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3" dependencies: @@ -2862,7 +3834,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.21.5, @babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": +"@babel/plugin-transform-modules-amd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5453f829205f6c918cc74d66946c9bf9544869f961d72a9934b4370049bf72a9b0ac089b64389be5172b217858c5353ec3479a18ab14cebb23329d708f6fc1ab + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.21.5, @babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" dependencies: @@ -2875,7 +3859,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.20.11, @babel/plugin-transform-modules-systemjs@npm:^7.22.3, @babel/plugin-transform-modules-systemjs@npm:^7.22.5, @babel/plugin-transform-modules-systemjs@npm:^7.23.3": +"@babel/plugin-transform-modules-commonjs@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-simple-access": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf8bcc7a0f28f1fb2bfad3e65a50e6aee54998917caf89c68fc871d1831808a74ae7563b8a37485da03a583a9bd1211c30b667bb366c3161a22c6105962ab5f8 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.20.11, @babel/plugin-transform-modules-systemjs@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3" dependencies: @@ -2889,7 +3886,35 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.18.6, @babel/plugin-transform-modules-umd@npm:^7.22.5, @babel/plugin-transform-modules-umd@npm:^7.23.3": +"@babel/plugin-transform-modules-systemjs@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.3" + dependencies: + "@babel/helper-hoist-variables": "npm:^7.18.6" + "@babel/helper-module-transforms": "npm:^7.22.1" + "@babel/helper-plugin-utils": "npm:^7.21.5" + "@babel/helper-validator-identifier": "npm:^7.19.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0bfe522fd641513ddadfe49f46e1c68fa7a2cd2f27ef5d269515fb869a4a9f1f417533e36c2d1ec7301d8dc3735c11a57fcd51ccd4a111faf1514e947286aee9 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.5" + dependencies: + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-module-transforms": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bc9fc6fe6dfe1aeee379abf771a857fdcfea8a548d40ecdafc8e522e71713ae230450d2c48f03e1e3c2d056c0f30286845c1f1fc8c5fd827bddaeb0d860a312c + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.18.6, @babel/plugin-transform-modules-umd@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3" dependencies: @@ -2901,7 +3926,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.3, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": +"@babel/plugin-transform-modules-umd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b955d066c68b60c1179bfb0b744e2fad32dbe86d0673bd94637439cfe425d1e3ff579bd47a417233609aac1624f4fe69915bee73e6deb2af6188fda8aaa5db63 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" dependencies: @@ -2913,7 +3950,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.18.6, @babel/plugin-transform-new-target@npm:^7.22.3, @babel/plugin-transform-new-target@npm:^7.22.5, @babel/plugin-transform-new-target@npm:^7.23.3": +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.3" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.1" + "@babel/helper-plugin-utils": "npm:^7.21.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: baf3d8d785ab36df2d7396b8a255e1209eecf83ad5334121fbb9e966a95353fe2100dd3683436f4c74b3c848ec0b34817491c4d14b074e3e539e2040076173d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.18.6, @babel/plugin-transform-new-target@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-new-target@npm:7.23.3" dependencies: @@ -2924,7 +3973,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.4": +"@babel/plugin-transform-new-target@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/plugin-transform-new-target@npm:7.22.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.21.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a28043575aae52127b7287711cf0b244a28279464d979858408ca6197169b6f7e6341e5b4554a894d409245fcd696c9bf38d5f1f1c64f84a82f479bf35659920 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-new-target@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.4" dependencies: @@ -2936,7 +4007,31 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.22.3, @babel/plugin-transform-numeric-separator@npm:^7.22.5, @babel/plugin-transform-numeric-separator@npm:^7.23.4": +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.21.5" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 404c3c7eb8b99f226ce40147d350ad3df55b38ffe39856356f7cfbbb1626ce060bc1daff0663c090d53160d39fdb26ea67ca291d47211ff7746a8a0c3bbc1639 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e6a059169d257fc61322d0708edae423072449b7c33de396261e68dee582aec5396789a1c22bce84e5bd88a169623c2e750b513fc222930979e6accd52a44bf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.22.3, @babel/plugin-transform-numeric-separator@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.4" dependencies: @@ -2948,7 +4043,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.22.3, @babel/plugin-transform-object-rest-spread@npm:^7.22.5, @babel/plugin-transform-object-rest-spread@npm:^7.23.4": +"@babel/plugin-transform-numeric-separator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9e7837d4eae04f211ebaa034fe5003d2927b6bf6d5b9dc09f2b1183c01482cdde5a75b8bd5c7ff195c2abc7b923339eb0b2a9d27cb78359d38248a3b2c2367c4 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.22.3, @babel/plugin-transform-object-rest-spread@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.4" dependencies: @@ -2963,7 +4070,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6, @babel/plugin-transform-object-super@npm:^7.22.5, @babel/plugin-transform-object-super@npm:^7.23.3": +"@babel/plugin-transform-object-rest-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.5" + dependencies: + "@babel/compat-data": "npm:^7.22.5" + "@babel/helper-compilation-targets": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-transform-parameters": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f4ab721dff46c9013ba1a29132d6ab334f1f08f6150945b444e606f0dd16a5e0a0da91fc4fa5eec44389d870f1cabcbf3365314dcbfab7b7f25047481976fa6e + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6, @babel/plugin-transform-object-super@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-object-super@npm:7.23.3" dependencies: @@ -2975,7 +4097,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.22.3, @babel/plugin-transform-optional-catch-binding@npm:^7.22.5, @babel/plugin-transform-optional-catch-binding@npm:^7.23.4": +"@babel/plugin-transform-object-super@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-super@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-replace-supers": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.3, @babel/plugin-transform-optional-catch-binding@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.4" dependencies: @@ -2987,7 +4121,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.22.3, @babel/plugin-transform-optional-chaining@npm:^7.22.6, @babel/plugin-transform-optional-chaining@npm:^7.23.0, @babel/plugin-transform-optional-chaining@npm:^7.23.3, @babel/plugin-transform-optional-chaining@npm:^7.23.4": +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b0e8b4233ff06b5c9d285257f49c5bd441f883189b24282e6200f9ebdf5db29aeeebbffae57fbbcd5df9f4387b3e66e5d322aaae5652a78e89685ddbae46bbd1 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.22.3, @babel/plugin-transform-optional-chaining@npm:^7.23.0, @babel/plugin-transform-optional-chaining@npm:^7.23.3, @babel/plugin-transform-optional-chaining@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.4" dependencies: @@ -3000,7 +4146,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3, @babel/plugin-transform-parameters@npm:^7.22.3, @babel/plugin-transform-parameters@npm:^7.22.5, @babel/plugin-transform-parameters@npm:^7.23.3": +"@babel/plugin-transform-optional-chaining@npm:^7.22.5, @babel/plugin-transform-optional-chaining@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9b9e2ab090def43bb4bf811f9b08e0c520249d121de39a743bd1375361cb7b3e0c9bf84ab12511a842aa7f073ffbba19b954ddd8e99f2fc9fa8e7cfe48f5aec2 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3, @babel/plugin-transform-parameters@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-parameters@npm:7.23.3" dependencies: @@ -3011,7 +4170,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.22.3, @babel/plugin-transform-private-methods@npm:^7.22.5, @babel/plugin-transform-private-methods@npm:^7.23.3": +"@babel/plugin-transform-parameters@npm:^7.22.3": + version: 7.22.3 + resolution: "@babel/plugin-transform-parameters@npm:7.22.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.21.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 70e666b27f5f15a85346e4e02c3a30bf6a8ad0b33886f8f06a24eeaefe001a2a1ce9e9f07a3bd2e2e7f8f06f2f214207a63697d71043763266e9e10bfaca38cb + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-parameters@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 86bec14b1a42a3c7059fe7dcbbedcae91e778a6b61e59922560d689fea10a165d89e53c2d9f383ad361b642ce444e183880a88dea39d87c09f2046a534b64304 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.22.3, @babel/plugin-transform-private-methods@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" dependencies: @@ -3023,7 +4204,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.22.3, @babel/plugin-transform-private-property-in-object@npm:^7.22.5, @babel/plugin-transform-private-property-in-object@npm:^7.23.4": +"@babel/plugin-transform-private-methods@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.22.3, @babel/plugin-transform-private-property-in-object@npm:^7.23.4": version: 7.23.4 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.4" dependencies: @@ -3037,7 +4230,21 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.18.6, @babel/plugin-transform-property-literals@npm:^7.22.5, @babel/plugin-transform-property-literals@npm:^7.23.3": +"@babel/plugin-transform-private-property-in-object@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d340bd71805fd00587b68711e24e7fa02257ad95835628f7e451fcc5a4610685ac43d90a6746df5464b0c9bc11b74d3097f1ac695fb09a04a71aa5035bca40b0 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.18.6, @babel/plugin-transform-property-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" dependencies: @@ -3048,6 +4255,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-property-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e + languageName: node + linkType: hard + "@babel/plugin-transform-react-constant-elements@npm:^7.18.12": version: 7.23.3 resolution: "@babel/plugin-transform-react-constant-elements@npm:7.23.3" @@ -3070,6 +4288,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-display-name@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a12bfd1e4e93055efca3ace3c34722571bda59d9740dca364d225d9c6e3ca874f134694d21715c42cc63d79efd46db9665bd4a022998767f9245f1e29d5d204d + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-development@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5" @@ -3081,7 +4310,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.22.5, @babel/plugin-transform-react-jsx-self@npm:^7.23.3": +"@babel/plugin-transform-react-jsx-self@npm:^7.18.6, @babel/plugin-transform-react-jsx-self@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3" dependencies: @@ -3092,7 +4321,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.19.6, @babel/plugin-transform-react-jsx-source@npm:^7.22.5, @babel/plugin-transform-react-jsx-source@npm:^7.23.3": +"@babel/plugin-transform-react-jsx-self@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 671eebfabd14a0c7d6ae805fff7e289dfdb7ba984bb100ea2ef6dad1d6a665ebbb09199ab2e64fca7bc78bd0fdc80ca897b07996cf215fafc32c67bc564309af + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.19.6, @babel/plugin-transform-react-jsx-source@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-jsx-source@npm:7.23.3" dependencies: @@ -3103,7 +4343,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.22.15, @babel/plugin-transform-react-jsx@npm:^7.22.5": +"@babel/plugin-transform-react-jsx-source@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4ca2bd62ca14f8bbdcda9139f3f799e1c1c1bae504b67c1ca9bca142c53d81926d1a2b811f66a625f20999b2d352131053d886601f1ba3c1e9378c104d884277 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.19.0, @babel/plugin-transform-react-jsx@npm:^7.22.15": version: 7.23.4 resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" dependencies: @@ -3118,6 +4369,33 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-module-imports": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-jsx": "npm:^7.22.5" + "@babel/types": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6be5db99b170c937c71fbe68dc64804bb041729d2f95b376ab5e7bc51c34a790f28753b14384160e87cabacf5e1b1aa3379a1a430a60b1fd6b031ba58955f5a6 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 092021c4f404e267002099ec20b3f12dd730cb90b0d83c5feed3dc00dbe43b9c42c795a18e7c6c7d7bddea20c7dd56221b146aec81b37f2e7eb5137331c61120 + languageName: node + linkType: hard + "@babel/plugin-transform-react-pure-annotations@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.23.3" @@ -3130,7 +4408,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.21.5, @babel/plugin-transform-regenerator@npm:^7.22.5, @babel/plugin-transform-regenerator@npm:^7.23.3": +"@babel/plugin-transform-regenerator@npm:^7.21.5, @babel/plugin-transform-regenerator@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-regenerator@npm:7.23.3" dependencies: @@ -3142,7 +4420,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.18.6, @babel/plugin-transform-reserved-words@npm:^7.22.5, @babel/plugin-transform-reserved-words@npm:^7.23.3": +"@babel/plugin-transform-regenerator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + regenerator-transform: "npm:^0.15.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f7c5ca5151321963df777cc02725d10d1ccc3b3b8323da0423aecd9ac6144cbdd2274af5281a5580db2fc2f8b234e318517b5d76b85669118906533a559f2b6a + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.18.6, @babel/plugin-transform-reserved-words@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3" dependencies: @@ -3153,6 +4443,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-reserved-words@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc + languageName: node + linkType: hard + "@babel/plugin-transform-runtime@npm:7.22.4": version: 7.22.4 resolution: "@babel/plugin-transform-runtime@npm:7.22.4" @@ -3169,7 +4470,23 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:^7.16.4, @babel/plugin-transform-runtime@npm:^7.22.9, @babel/plugin-transform-runtime@npm:^7.5.5": +"@babel/plugin-transform-runtime@npm:^7.16.4, @babel/plugin-transform-runtime@npm:^7.5.5": + version: 7.21.4 + resolution: "@babel/plugin-transform-runtime@npm:7.21.4" + dependencies: + "@babel/helper-module-imports": "npm:^7.21.4" + "@babel/helper-plugin-utils": "npm:^7.20.2" + babel-plugin-polyfill-corejs2: "npm:^0.3.3" + babel-plugin-polyfill-corejs3: "npm:^0.6.0" + babel-plugin-polyfill-regenerator: "npm:^0.4.1" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0748067b95b8f87af34d2de866bdbd6e427bb711cc0d22822084b2476b412a3464d35db0a0369add087af387eb0d8aeb16ba02e99d36cc82ad79d6e79863a82f + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.22.9": version: 7.23.7 resolution: "@babel/plugin-transform-runtime@npm:7.23.7" dependencies: @@ -3185,7 +4502,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.18.6, @babel/plugin-transform-shorthand-properties@npm:^7.22.5, @babel/plugin-transform-shorthand-properties@npm:^7.23.3": +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.18.6, @babel/plugin-transform-shorthand-properties@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" dependencies: @@ -3196,7 +4513,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.20.7, @babel/plugin-transform-spread@npm:^7.22.5, @babel/plugin-transform-spread@npm:^7.23.3": +"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.20.7, @babel/plugin-transform-spread@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-spread@npm:7.23.3" dependencies: @@ -3208,7 +4536,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.18.6, @babel/plugin-transform-sticky-regex@npm:^7.22.5, @babel/plugin-transform-sticky-regex@npm:^7.23.3": +"@babel/plugin-transform-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-spread@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f9fd247b3fa8953416c8808c124c3a5db5cd697abbf791aae0143a0587fff6b386045f94c62bcd1b6783a1fd275629cc194f25f6c0aafc9f05f12a56fd5f94bf + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.18.6, @babel/plugin-transform-sticky-regex@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3" dependencies: @@ -3219,7 +4559,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.18.9, @babel/plugin-transform-template-literals@npm:^7.22.5, @babel/plugin-transform-template-literals@npm:^7.23.3": +"@babel/plugin-transform-sticky-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.18.9, @babel/plugin-transform-template-literals@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" dependencies: @@ -3230,7 +4581,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.18.9, @babel/plugin-transform-typeof-symbol@npm:^7.22.5, @babel/plugin-transform-typeof-symbol@npm:^7.23.3": +"@babel/plugin-transform-template-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.18.9, @babel/plugin-transform-typeof-symbol@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3" dependencies: @@ -3241,6 +4603,31 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.22.5": + version: 7.22.9 + resolution: "@babel/plugin-transform-typescript@npm:7.22.9" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.22.9" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-typescript": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7f216a154a507b3a84af29a0f9f2909eb1a418740ebba2b8dd09dac61049b43ca6a35620e28b72ab2c56292e3950355cb2b625bc8ea41e60c8dd770562b1650c + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.23.3": version: 7.23.6 resolution: "@babel/plugin-transform-typescript@npm:7.23.6" @@ -3255,7 +4642,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.21.5, @babel/plugin-transform-unicode-escapes@npm:^7.22.5, @babel/plugin-transform-unicode-escapes@npm:^7.23.3": +"@babel/plugin-transform-unicode-escapes@npm:^7.21.5, @babel/plugin-transform-unicode-escapes@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3" dependencies: @@ -3266,7 +4653,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.22.3, @babel/plugin-transform-unicode-property-regex@npm:^7.22.5, @babel/plugin-transform-unicode-property-regex@npm:^7.23.3": +"@babel/plugin-transform-unicode-escapes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: da5e85ab3bb33a75cbf6181bfd236b208dc934702fd304db127232f17b4e0f42c6d3f238de8589470b4190906967eea8ca27adf3ae9d8ee4de2a2eae906ed186 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.3, @babel/plugin-transform-unicode-property-regex@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3" dependencies: @@ -3278,7 +4676,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.18.6, @babel/plugin-transform-unicode-regex@npm:^7.22.5, @babel/plugin-transform-unicode-regex@npm:^7.23.3": +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.18.6, @babel/plugin-transform-unicode-regex@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3" dependencies: @@ -3290,7 +4700,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.3, @babel/plugin-transform-unicode-sets-regex@npm:^7.22.5, @babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": +"@babel/plugin-transform-unicode-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.3, @babel/plugin-transform-unicode-sets-regex@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3" dependencies: @@ -3302,6 +4724,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e + languageName: node + linkType: hard + "@babel/preset-env@npm:7.22.4": version: 7.22.4 resolution: "@babel/preset-env@npm:7.22.4" @@ -3482,7 +4916,93 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.20.2, @babel/preset-env@npm:^7.22.9, @babel/preset-env@npm:^7.23.2": +"@babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.20.2, @babel/preset-env@npm:~7.21.0": + version: 7.21.5 + resolution: "@babel/preset-env@npm:7.21.5" + dependencies: + "@babel/compat-data": "npm:^7.21.5" + "@babel/helper-compilation-targets": "npm:^7.21.5" + "@babel/helper-plugin-utils": "npm:^7.21.5" + "@babel/helper-validator-option": "npm:^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.20.7" + "@babel/plugin-proposal-async-generator-functions": "npm:^7.20.7" + "@babel/plugin-proposal-class-properties": "npm:^7.18.6" + "@babel/plugin-proposal-class-static-block": "npm:^7.21.0" + "@babel/plugin-proposal-dynamic-import": "npm:^7.18.6" + "@babel/plugin-proposal-export-namespace-from": "npm:^7.18.9" + "@babel/plugin-proposal-json-strings": "npm:^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators": "npm:^7.20.7" + "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.18.6" + "@babel/plugin-proposal-numeric-separator": "npm:^7.18.6" + "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" + "@babel/plugin-proposal-optional-catch-binding": "npm:^7.18.6" + "@babel/plugin-proposal-optional-chaining": "npm:^7.21.0" + "@babel/plugin-proposal-private-methods": "npm:^7.18.6" + "@babel/plugin-proposal-private-property-in-object": "npm:^7.21.0" + "@babel/plugin-proposal-unicode-property-regex": "npm:^7.18.6" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + "@babel/plugin-syntax-import-assertions": "npm:^7.20.0" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + "@babel/plugin-transform-arrow-functions": "npm:^7.21.5" + "@babel/plugin-transform-async-to-generator": "npm:^7.20.7" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.18.6" + "@babel/plugin-transform-block-scoping": "npm:^7.21.0" + "@babel/plugin-transform-classes": "npm:^7.21.0" + "@babel/plugin-transform-computed-properties": "npm:^7.21.5" + "@babel/plugin-transform-destructuring": "npm:^7.21.3" + "@babel/plugin-transform-dotall-regex": "npm:^7.18.6" + "@babel/plugin-transform-duplicate-keys": "npm:^7.18.9" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.18.6" + "@babel/plugin-transform-for-of": "npm:^7.21.5" + "@babel/plugin-transform-function-name": "npm:^7.18.9" + "@babel/plugin-transform-literals": "npm:^7.18.9" + "@babel/plugin-transform-member-expression-literals": "npm:^7.18.6" + "@babel/plugin-transform-modules-amd": "npm:^7.20.11" + "@babel/plugin-transform-modules-commonjs": "npm:^7.21.5" + "@babel/plugin-transform-modules-systemjs": "npm:^7.20.11" + "@babel/plugin-transform-modules-umd": "npm:^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.20.5" + "@babel/plugin-transform-new-target": "npm:^7.18.6" + "@babel/plugin-transform-object-super": "npm:^7.18.6" + "@babel/plugin-transform-parameters": "npm:^7.21.3" + "@babel/plugin-transform-property-literals": "npm:^7.18.6" + "@babel/plugin-transform-regenerator": "npm:^7.21.5" + "@babel/plugin-transform-reserved-words": "npm:^7.18.6" + "@babel/plugin-transform-shorthand-properties": "npm:^7.18.6" + "@babel/plugin-transform-spread": "npm:^7.20.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.18.6" + "@babel/plugin-transform-template-literals": "npm:^7.18.9" + "@babel/plugin-transform-typeof-symbol": "npm:^7.18.9" + "@babel/plugin-transform-unicode-escapes": "npm:^7.21.5" + "@babel/plugin-transform-unicode-regex": "npm:^7.18.6" + "@babel/preset-modules": "npm:^0.1.5" + "@babel/types": "npm:^7.21.5" + babel-plugin-polyfill-corejs2: "npm:^0.3.3" + babel-plugin-polyfill-corejs3: "npm:^0.6.0" + babel-plugin-polyfill-regenerator: "npm:^0.4.1" + core-js-compat: "npm:^3.25.1" + semver: "npm:^6.3.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ecd96e5869b354fa24930054255d14a0bdc306515809b4dd758de01400d41bbf0323de19ce41cf6f54cbaa62a103343e999a0644ea16e368e99903780d0fb67 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.22.9": version: 7.23.7 resolution: "@babel/preset-env@npm:7.23.7" dependencies: @@ -3572,37 +5092,25 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:~7.21.0": - version: 7.21.5 - resolution: "@babel/preset-env@npm:7.21.5" +"@babel/preset-env@npm:^7.23.2": + version: 7.23.5 + resolution: "@babel/preset-env@npm:7.23.5" dependencies: - "@babel/compat-data": "npm:^7.21.5" - "@babel/helper-compilation-targets": "npm:^7.21.5" - "@babel/helper-plugin-utils": "npm:^7.21.5" - "@babel/helper-validator-option": "npm:^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.20.7" - "@babel/plugin-proposal-async-generator-functions": "npm:^7.20.7" - "@babel/plugin-proposal-class-properties": "npm:^7.18.6" - "@babel/plugin-proposal-class-static-block": "npm:^7.21.0" - "@babel/plugin-proposal-dynamic-import": "npm:^7.18.6" - "@babel/plugin-proposal-export-namespace-from": "npm:^7.18.9" - "@babel/plugin-proposal-json-strings": "npm:^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators": "npm:^7.20.7" - "@babel/plugin-proposal-nullish-coalescing-operator": "npm:^7.18.6" - "@babel/plugin-proposal-numeric-separator": "npm:^7.18.6" - "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-proposal-optional-catch-binding": "npm:^7.18.6" - "@babel/plugin-proposal-optional-chaining": "npm:^7.21.0" - "@babel/plugin-proposal-private-methods": "npm:^7.18.6" - "@babel/plugin-proposal-private-property-in-object": "npm:^7.21.0" - "@babel/plugin-proposal-unicode-property-regex": "npm:^7.18.6" + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-compilation-targets": "npm:^7.22.15" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.23.3" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-class-properties": "npm:^7.12.13" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.20.0" + "@babel/plugin-syntax-import-assertions": "npm:^7.23.3" + "@babel/plugin-syntax-import-attributes": "npm:^7.23.3" "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" @@ -3613,48 +5121,64 @@ __metadata: "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - "@babel/plugin-transform-arrow-functions": "npm:^7.21.5" - "@babel/plugin-transform-async-to-generator": "npm:^7.20.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.18.6" - "@babel/plugin-transform-block-scoping": "npm:^7.21.0" - "@babel/plugin-transform-classes": "npm:^7.21.0" - "@babel/plugin-transform-computed-properties": "npm:^7.21.5" - "@babel/plugin-transform-destructuring": "npm:^7.21.3" - "@babel/plugin-transform-dotall-regex": "npm:^7.18.6" - "@babel/plugin-transform-duplicate-keys": "npm:^7.18.9" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.18.6" - "@babel/plugin-transform-for-of": "npm:^7.21.5" - "@babel/plugin-transform-function-name": "npm:^7.18.9" - "@babel/plugin-transform-literals": "npm:^7.18.9" - "@babel/plugin-transform-member-expression-literals": "npm:^7.18.6" - "@babel/plugin-transform-modules-amd": "npm:^7.20.11" - "@babel/plugin-transform-modules-commonjs": "npm:^7.21.5" - "@babel/plugin-transform-modules-systemjs": "npm:^7.20.11" - "@babel/plugin-transform-modules-umd": "npm:^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.20.5" - "@babel/plugin-transform-new-target": "npm:^7.18.6" - "@babel/plugin-transform-object-super": "npm:^7.18.6" - "@babel/plugin-transform-parameters": "npm:^7.21.3" - "@babel/plugin-transform-property-literals": "npm:^7.18.6" - "@babel/plugin-transform-regenerator": "npm:^7.21.5" - "@babel/plugin-transform-reserved-words": "npm:^7.18.6" - "@babel/plugin-transform-shorthand-properties": "npm:^7.18.6" - "@babel/plugin-transform-spread": "npm:^7.20.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.18.6" - "@babel/plugin-transform-template-literals": "npm:^7.18.9" - "@babel/plugin-transform-typeof-symbol": "npm:^7.18.9" - "@babel/plugin-transform-unicode-escapes": "npm:^7.21.5" - "@babel/plugin-transform-unicode-regex": "npm:^7.18.6" - "@babel/preset-modules": "npm:^0.1.5" - "@babel/types": "npm:^7.21.5" - babel-plugin-polyfill-corejs2: "npm:^0.3.3" - babel-plugin-polyfill-corejs3: "npm:^0.6.0" - babel-plugin-polyfill-regenerator: "npm:^0.4.1" - core-js-compat: "npm:^3.25.1" - semver: "npm:^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.23.3" + "@babel/plugin-transform-async-generator-functions": "npm:^7.23.4" + "@babel/plugin-transform-async-to-generator": "npm:^7.23.3" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.23.3" + "@babel/plugin-transform-block-scoping": "npm:^7.23.4" + "@babel/plugin-transform-class-properties": "npm:^7.23.3" + "@babel/plugin-transform-class-static-block": "npm:^7.23.4" + "@babel/plugin-transform-classes": "npm:^7.23.5" + "@babel/plugin-transform-computed-properties": "npm:^7.23.3" + "@babel/plugin-transform-destructuring": "npm:^7.23.3" + "@babel/plugin-transform-dotall-regex": "npm:^7.23.3" + "@babel/plugin-transform-duplicate-keys": "npm:^7.23.3" + "@babel/plugin-transform-dynamic-import": "npm:^7.23.4" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.23.3" + "@babel/plugin-transform-export-namespace-from": "npm:^7.23.4" + "@babel/plugin-transform-for-of": "npm:^7.23.3" + "@babel/plugin-transform-function-name": "npm:^7.23.3" + "@babel/plugin-transform-json-strings": "npm:^7.23.4" + "@babel/plugin-transform-literals": "npm:^7.23.3" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.23.4" + "@babel/plugin-transform-member-expression-literals": "npm:^7.23.3" + "@babel/plugin-transform-modules-amd": "npm:^7.23.3" + "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" + "@babel/plugin-transform-modules-systemjs": "npm:^7.23.3" + "@babel/plugin-transform-modules-umd": "npm:^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.22.5" + "@babel/plugin-transform-new-target": "npm:^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.4" + "@babel/plugin-transform-numeric-separator": "npm:^7.23.4" + "@babel/plugin-transform-object-rest-spread": "npm:^7.23.4" + "@babel/plugin-transform-object-super": "npm:^7.23.3" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.4" + "@babel/plugin-transform-optional-chaining": "npm:^7.23.4" + "@babel/plugin-transform-parameters": "npm:^7.23.3" + "@babel/plugin-transform-private-methods": "npm:^7.23.3" + "@babel/plugin-transform-private-property-in-object": "npm:^7.23.4" + "@babel/plugin-transform-property-literals": "npm:^7.23.3" + "@babel/plugin-transform-regenerator": "npm:^7.23.3" + "@babel/plugin-transform-reserved-words": "npm:^7.23.3" + "@babel/plugin-transform-shorthand-properties": "npm:^7.23.3" + "@babel/plugin-transform-spread": "npm:^7.23.3" + "@babel/plugin-transform-sticky-regex": "npm:^7.23.3" + "@babel/plugin-transform-template-literals": "npm:^7.23.3" + "@babel/plugin-transform-typeof-symbol": "npm:^7.23.3" + "@babel/plugin-transform-unicode-escapes": "npm:^7.23.3" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.23.3" + "@babel/plugin-transform-unicode-regex": "npm:^7.23.3" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.23.3" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.6" + babel-plugin-polyfill-corejs3: "npm:^0.8.5" + babel-plugin-polyfill-regenerator: "npm:^0.5.3" + core-js-compat: "npm:^3.31.0" + semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8ecd96e5869b354fa24930054255d14a0bdc306515809b4dd758de01400d41bbf0323de19ce41cf6f54cbaa62a103343e999a0644ea16e368e99903780d0fb67 + checksum: 9c2c2ca7a8ac7ea5a36866f5c1df43936f60b4b5988693c574d531a2abfbcd2804d8a67db3560a8e505cf11e2c3e3031ce4104a84685cff6fbd46b884592146c languageName: node linkType: hard @@ -3699,7 +5223,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.18.6, @babel/preset-react@npm:^7.22.5": +"@babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.22.5": version: 7.23.3 resolution: "@babel/preset-react@npm:7.23.3" dependencies: @@ -3715,7 +5239,23 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.18.6, @babel/preset-typescript@npm:^7.22.5, @babel/preset-typescript@npm:^7.23.0": +"@babel/preset-react@npm:^7.18.6": + version: 7.22.5 + resolution: "@babel/preset-react@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.22.5" + "@babel/plugin-transform-react-display-name": "npm:^7.22.5" + "@babel/plugin-transform-react-jsx": "npm:^7.22.5" + "@babel/plugin-transform-react-jsx-development": "npm:^7.22.5" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7c78b1bca3f2de9cb863b50cf0a5378d5e80b1b2e7573b9daabf09c0517d197aa7ff7fcd7daeb4a51e148743ab5dbd24c7b34422c86a256baf0e10e13400fe98 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.16.0, @babel/preset-typescript@npm:^7.22.5, @babel/preset-typescript@npm:^7.23.0": version: 7.23.3 resolution: "@babel/preset-typescript@npm:7.23.3" dependencies: @@ -3730,7 +5270,22 @@ __metadata: languageName: node linkType: hard -"@babel/register@npm:^7.13.16, @babel/register@npm:^7.21.0, @babel/register@npm:^7.22.15": +"@babel/preset-typescript@npm:^7.18.6": + version: 7.22.5 + resolution: "@babel/preset-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.22.5" + "@babel/plugin-syntax-jsx": "npm:^7.22.5" + "@babel/plugin-transform-modules-commonjs": "npm:^7.22.5" + "@babel/plugin-transform-typescript": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2d851117e78235540be469a12a5c3bad42f994d030cf1fa58943e69f218dd21b805b0f2a592caf5f4bfc7beee2d3f9b66fa2a1daeb80c78edb3c574bd99e63d3 + languageName: node + linkType: hard + +"@babel/register@npm:^7.13.16, @babel/register@npm:^7.21.0": version: 7.23.7 resolution: "@babel/register@npm:7.23.7" dependencies: @@ -3745,6 +5300,21 @@ __metadata: languageName: node linkType: hard +"@babel/register@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/register@npm:7.22.15" + dependencies: + clone-deep: "npm:^4.0.1" + find-cache-dir: "npm:^2.0.0" + make-dir: "npm:^2.1.0" + pirates: "npm:^4.0.5" + source-map-support: "npm:^0.5.16" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5497be6773608cd2d874210edd14499fce464ddbea170219da55955afe4c9173adb591164193458fd639e43b7d1314088a6186f4abf241476c59b3f0da6afd6f + languageName: node + linkType: hard + "@babel/regjsgen@npm:^0.8.0": version: 0.8.0 resolution: "@babel/regjsgen@npm:0.8.0" @@ -3762,7 +5332,25 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.5, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4": + version: 7.21.5 + resolution: "@babel/runtime@npm:7.21.5" + dependencies: + regenerator-runtime: "npm:^0.13.11" + checksum: 7cd4f9be85c655432688e1b328a62dc5666e2386b379948153da6ab51eff1a1a583e8606024cf9231ee59fc595d6cd1d2ecc6c280739c45f7a5994e8ccf8c281 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.22.6 + resolution: "@babel/runtime@npm:7.22.6" + dependencies: + regenerator-runtime: "npm:^0.13.11" + checksum: 1d2f56797f548b009910bddf3dc04f980a9701193233145dc923f3ea87c8f88121a3c3ef1d449e9cb52a370d7d025a2243c748882d5546ff079ddf5ffe29f240 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.5": version: 7.23.7 resolution: "@babel/runtime@npm:7.23.7" dependencies: @@ -3771,7 +5359,16 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.21.9, @babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5": +"@babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.3": + version: 7.22.11 + resolution: "@babel/runtime@npm:7.22.11" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 789b566482e543819dbef980581fc570a1fe2249e443d5e6b463494e69b73ba4aabfd0493794409fb756c5d36ad894ab2a90c23678017407841b73c641d849d6 + languageName: node + linkType: hard + +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" dependencies: @@ -3782,25 +5379,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.22.1, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.7": - version: 7.23.7 - resolution: "@babel/traverse@npm:7.23.7" +"@babel/template@npm:^7.21.9": + version: 7.21.9 + resolution: "@babel/template@npm:7.21.9" dependencies: - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" - "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-function-name": "npm:^7.23.0" - "@babel/helper-hoist-variables": "npm:^7.22.5" - "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.6" - "@babel/types": "npm:^7.23.6" - debug: "npm:^4.3.1" - globals: "npm:^11.1.0" - checksum: 3215e59429963c8dac85c26933372cdd322952aa9930e4bc5ef2d0e4bd7a1510d1ecf8f8fd860ace5d4d9fe496d23805a1ea019a86410aee4111de5f63ee84f9 + "@babel/code-frame": "npm:^7.21.4" + "@babel/parser": "npm:^7.21.9" + "@babel/types": "npm:^7.21.5" + checksum: dfa6df04a737c1c858b52defe6469cd5206127e7c4cf44c24f81b630e549a1c72ec1945773da9f280147061f27bfd13a9180171b47acac889868c19579be4e7f languageName: node linkType: hard -"@babel/traverse@npm:~7.21.2": +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:~7.21.2": version: 7.21.5 resolution: "@babel/traverse@npm:7.21.5" dependencies: @@ -3818,7 +5408,115 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:7.23.5": +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.23.2": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + "@babel/generator": "npm:^7.23.0" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.0" + "@babel/types": "npm:^7.23.0" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: e4fcb8f8395804956df4ae1301230a14b6eb35b74a7058a0e0b40f6f4be7281e619e6dafe400e833d4512da5d61cf17ea177d04b00a8f7cf3d8d69aff83ca3d8 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.22.1": + version: 7.22.4 + resolution: "@babel/traverse@npm:7.22.4" + dependencies: + "@babel/code-frame": "npm:^7.21.4" + "@babel/generator": "npm:^7.22.3" + "@babel/helper-environment-visitor": "npm:^7.22.1" + "@babel/helper-function-name": "npm:^7.21.0" + "@babel/helper-hoist-variables": "npm:^7.18.6" + "@babel/helper-split-export-declaration": "npm:^7.18.6" + "@babel/parser": "npm:^7.22.4" + "@babel/types": "npm:^7.22.4" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 5347a58172c8dacbfdcda804cd57037d1853f484a31b4a3bea3e81b6db00dcc71eff90f4a90c2ed6dcc0626ea2ed03fe441044136ad8da59a019d97337567539 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/traverse@npm:7.22.5" + dependencies: + "@babel/code-frame": "npm:^7.22.5" + "@babel/generator": "npm:^7.22.5" + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.5" + "@babel/parser": "npm:^7.22.5" + "@babel/types": "npm:^7.22.5" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 2dad5f816da92c6fd2a2dc40db390b30ff95e5f370bea2d26d488b1dcf588b952d6c271f786a118ed5de03948c3c1236a88852f0ab307ab23df3e125507ff1ac + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.22.8": + version: 7.22.8 + resolution: "@babel/traverse@npm:7.22.8" + dependencies: + "@babel/code-frame": "npm:^7.22.5" + "@babel/generator": "npm:^7.22.7" + "@babel/helper-environment-visitor": "npm:^7.22.5" + "@babel/helper-function-name": "npm:^7.22.5" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.22.7" + "@babel/types": "npm:^7.22.5" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: a2c2157c854a10f64bd8e2ac30e76723a4ee948572158962d102ba4d694abdb47c9cb7f0ede7d662ce083cd1940b631a6ad9ec55e86f4bbe1a1960cbf692078a + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/traverse@npm:7.23.5" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.5" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.5" + "@babel/types": "npm:^7.23.5" + debug: "npm:^4.1.0" + globals: "npm:^11.1.0" + checksum: 281cae2765caad88c7af6214eab3647db0e9cadc7ffcd3fd924f09fbb9bd09d97d6fb210794b7545c317ce417a30016636530043a455ba6922349e39c1ba622a + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.7": + version: 7.23.7 + resolution: "@babel/traverse@npm:7.23.7" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.6" + "@babel/types": "npm:^7.23.6" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 3215e59429963c8dac85c26933372cdd322952aa9930e4bc5ef2d0e4bd7a1510d1ecf8f8fd860ace5d4d9fe496d23805a1ea019a86410aee4111de5f63ee84f9 + languageName: node + linkType: hard + +"@babel/types@npm:7.23.5, @babel/types@npm:^7.23.5": version: 7.23.5 resolution: "@babel/types@npm:7.23.5" dependencies: @@ -3829,7 +5527,51 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.21.5, @babel/types@npm:^7.22.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.4, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.9, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3, @babel/types@npm:~7.21.2": + version: 7.21.5 + resolution: "@babel/types@npm:7.21.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.21.5" + "@babel/helper-validator-identifier": "npm:^7.19.1" + to-fast-properties: "npm:^2.0.0" + checksum: 3411d24b1fcb2d7e8e7ee35cc8829ac34b59873506c33644abac63e4710aaf684d9af3dfee8c64e668693f3f9fb1db100ae1ebfff9c4077f287da382d2f2f9af + languageName: node + linkType: hard + +"@babel/types@npm:^7.16.7, @babel/types@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/types@npm:7.22.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.5" + to-fast-properties: "npm:^2.0.0" + checksum: 7f7edffe7e13dbd26a182677575ca7451bc234ce43b93dc49d27325306748628019e7753e6b5619ae462ea0d7e5ce2c0cc24092d53b592642ea89542037748b5 + languageName: node + linkType: hard + +"@babel/types@npm:^7.21.3, @babel/types@npm:^7.22.0, @babel/types@npm:^7.22.3, @babel/types@npm:^7.22.4": + version: 7.22.4 + resolution: "@babel/types@npm:7.22.4" + dependencies: + "@babel/helper-string-parser": "npm:^7.21.5" + "@babel/helper-validator-identifier": "npm:^7.19.1" + to-fast-properties: "npm:^2.0.0" + checksum: e614d94f96f45964a42cf12aff2c84e5500045b6c20dd054e38fc39be9e0a6fa64b7241bff55a9d01e02a9656687bfa2bc44fb9c95380f7c5b228126ade62b1b + languageName: node + linkType: hard + +"@babel/types@npm:^7.22.15, @babel/types@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: ca5b896a26c91c5672254725c4c892a35567d2122afc47bd5331d1611a7f9230c19fc9ef591a5a6f80bf0d80737e104a9ac205c96447c74bee01d4319db58001 + languageName: node + linkType: hard + +"@babel/types@npm:^7.22.19, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6": version: 7.23.6 resolution: "@babel/types@npm:7.23.6" dependencies: @@ -3840,14 +5582,10 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:~7.21.2": - version: 7.21.5 - resolution: "@babel/types@npm:7.21.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.21.5" - "@babel/helper-validator-identifier": "npm:^7.19.1" - to-fast-properties: "npm:^2.0.0" - checksum: 3411d24b1fcb2d7e8e7ee35cc8829ac34b59873506c33644abac63e4710aaf684d9af3dfee8c64e668693f3f9fb1db100ae1ebfff9c4077f287da382d2f2f9af +"@balena/dockerignore@npm:^1.0.2": + version: 1.0.2 + resolution: "@balena/dockerignore@npm:1.0.2" + checksum: 13d654fdd725008577d32e721c720275bdc48f72bce612326363d5bed449febbed856c517a0b23c7c40d87cb531e63432804550b4ecc13e365d26fee38fb6c8a languageName: node linkType: hard @@ -4832,6 +6570,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/android-arm64@npm:0.19.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/android-arm64@npm:0.19.9" @@ -4860,6 +6605,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/android-arm@npm:0.19.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/android-arm@npm:0.19.9" @@ -4888,6 +6640,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/android-x64@npm:0.19.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/android-x64@npm:0.19.9" @@ -4916,6 +6675,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/darwin-arm64@npm:0.19.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/darwin-arm64@npm:0.19.9" @@ -4944,6 +6710,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/darwin-x64@npm:0.19.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/darwin-x64@npm:0.19.9" @@ -4972,6 +6745,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/freebsd-arm64@npm:0.19.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/freebsd-arm64@npm:0.19.9" @@ -5000,6 +6780,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/freebsd-x64@npm:0.19.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/freebsd-x64@npm:0.19.9" @@ -5028,6 +6815,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-arm64@npm:0.19.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-arm64@npm:0.19.9" @@ -5056,6 +6850,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-arm@npm:0.19.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-arm@npm:0.19.9" @@ -5084,6 +6885,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-ia32@npm:0.19.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-ia32@npm:0.19.9" @@ -5112,6 +6920,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-loong64@npm:0.19.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-loong64@npm:0.19.9" @@ -5140,6 +6955,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-mips64el@npm:0.19.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-mips64el@npm:0.19.9" @@ -5168,6 +6990,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-ppc64@npm:0.19.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-ppc64@npm:0.19.9" @@ -5196,6 +7025,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-riscv64@npm:0.19.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-riscv64@npm:0.19.9" @@ -5224,6 +7060,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-s390x@npm:0.19.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-s390x@npm:0.19.9" @@ -5252,6 +7095,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-x64@npm:0.19.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/linux-x64@npm:0.19.9" @@ -5280,6 +7130,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/netbsd-x64@npm:0.19.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/netbsd-x64@npm:0.19.9" @@ -5308,6 +7165,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/openbsd-x64@npm:0.19.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/openbsd-x64@npm:0.19.9" @@ -5336,6 +7200,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/sunos-x64@npm:0.19.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/sunos-x64@npm:0.19.9" @@ -5364,6 +7235,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/win32-arm64@npm:0.19.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/win32-arm64@npm:0.19.9" @@ -5392,6 +7270,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/win32-ia32@npm:0.19.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/win32-ia32@npm:0.19.9" @@ -5420,6 +7305,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/win32-x64@npm:0.19.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.19.9": version: 0.19.9 resolution: "@esbuild/win32-x64@npm:0.19.9" @@ -5438,14 +7330,21 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.4.0": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 8c36169c815fc5d726078e8c71a5b592957ee60d08c6470f9ce0187c8046af1a00afbda0a065cc40ff18d5d83f82aed9793c6818f7304a74a7488dc9f3ecbd42 languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.0.3, @eslint/eslintrc@npm:^2.1.1, @eslint/eslintrc@npm:^2.1.3, @eslint/eslintrc@npm:^2.1.4": +"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": + version: 4.6.2 + resolution: "@eslint-community/regexpp@npm:4.6.2" + checksum: 59ea2fa13a70996a8cebbd5a9f4499c92bceeff872286ef2fb34948fcfb9d3467692371d9cc116e7d613f2c18086a1c8337c9d461ccdf213f0dc47f6f6d2fbb6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.0.3, @eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" dependencies: @@ -5462,6 +7361,40 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.1": + version: 2.1.1 + resolution: "@eslint/eslintrc@npm:2.1.1" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: d4dda7f9f0c4d3d81f871d0bff4c028fa321fe5f23ead19c8438b9f405747b7bb275d72572e1ec4a55c542723a544ebefe7255e37a1747a355e56286e465806f + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.3": + version: 2.1.3 + resolution: "@eslint/eslintrc@npm:2.1.3" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 77b70a89232fe702c2f765b5b92970f5e4224b55363b923238b996c66fcd991504f40d3663c0543ae17d6c5049ab9b07ab90b65d7601e6f25e8bcd4caf69ac75 + languageName: node + linkType: hard + "@eslint/js@npm:8.41.0": version: 8.41.0 resolution: "@eslint/js@npm:8.41.0" @@ -5476,13 +7409,20 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.56.0, @eslint/js@npm:^8.46.0": +"@eslint/js@npm:8.56.0": version: 8.56.0 resolution: "@eslint/js@npm:8.56.0" checksum: 97a4b5ccf7e24f4d205a1fb0f21cdcd610348ecf685f6798a48dd41ba443f2c1eedd3050ff5a0b8f30b8cf6501ab512aa9b76e531db15e59c9ebaa41f3162e37 languageName: node linkType: hard +"@eslint/js@npm:^8.46.0": + version: 8.46.0 + resolution: "@eslint/js@npm:8.46.0" + checksum: 0cc409c5f443f2309657cd28279859f4f2c38d507c9b1396b34fabbe81c76b09d49d1b70579695653c8c590a1711c10772da86a6040f2657275f646952ead839 + languageName: node + linkType: hard + "@ethereumjs/common@npm:2.5.0": version: 2.5.0 resolution: "@ethereumjs/common@npm:2.5.0" @@ -5577,7 +7517,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.12, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.4.7, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.12, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.4.7, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" dependencies: @@ -6870,7 +8810,7 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.10, @humanwhocodes/config-array@npm:^0.11.13, @humanwhocodes/config-array@npm:^0.11.8": +"@humanwhocodes/config-array@npm:^0.11.10, @humanwhocodes/config-array@npm:^0.11.13": version: 0.11.13 resolution: "@humanwhocodes/config-array@npm:0.11.13" dependencies: @@ -6881,6 +8821,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.11.8": + version: 0.11.8 + resolution: "@humanwhocodes/config-array@npm:0.11.8" + dependencies: + "@humanwhocodes/object-schema": "npm:^1.2.1" + debug: "npm:^4.1.1" + minimatch: "npm:^3.0.5" + checksum: 2ec8619c751120570f0c822ae015f8c4ac00ddb74e85296805d999b74fcba48ec89af655075e6792588e218ec3e540f725b5bc524af0415cb1cfb62091d0f19f + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -6895,6 +8846,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: b48a8f87fcd5fdc4ac60a31a8bf710d19cc64556050575e6a35a4a48a8543cf8cde1598a65640ff2cdfbfd165b38f9db4fa3782bea7848eb585cc3db824002e6 + languageName: node + linkType: hard + "@humanwhocodes/object-schema@npm:^2.0.1": version: 2.0.1 resolution: "@humanwhocodes/object-schema@npm:2.0.1" @@ -7282,6 +9240,53 @@ __metadata: languageName: node linkType: hard +"@matterlabs/hardhat-zksync-deploy@npm:1.0.1": + version: 1.0.1 + resolution: "@matterlabs/hardhat-zksync-deploy@npm:1.0.1" + dependencies: + "@matterlabs/hardhat-zksync-solc": "npm:1.0.0" + chalk: "npm:4.1.2" + ts-morph: "npm:^20.0.0" + peerDependencies: + ethers: ^6.7.1 + hardhat: ^2.18.1 + zksync2-js: ^0.4.0 + checksum: a682234c68d6918ed53f02ff673a4ca8f135eb6e830ada1215bb4a93ccc6dc0f6683e81ffe28161b63792e448078d6540c440c008cdc2b58b82bd29b18bf0b3e + languageName: node + linkType: hard + +"@matterlabs/hardhat-zksync-solc@npm:1.0.0": + version: 1.0.0 + resolution: "@matterlabs/hardhat-zksync-solc@npm:1.0.0" + dependencies: + "@nomiclabs/hardhat-docker": "npm:^2.0.0" + chalk: "npm:4.1.2" + dockerode: "npm:^3.3.4" + fs-extra: "npm:^11.1.1" + proper-lockfile: "npm:^4.1.2" + semver: "npm:^7.5.1" + peerDependencies: + hardhat: ^2.18.1 + checksum: c572c58ef18075fe7de71698dacdb089691013e47096794c7e5800c46b7bd93e9ba08f9bd9c8355121d075bef04675ea75437e3aa7adfc6421a838cad108cfbe + languageName: node + linkType: hard + +"@matterlabs/hardhat-zksync-solc@npm:1.0.3": + version: 1.0.3 + resolution: "@matterlabs/hardhat-zksync-solc@npm:1.0.3" + dependencies: + "@nomiclabs/hardhat-docker": "npm:^2.0.0" + chalk: "npm:4.1.2" + dockerode: "npm:^4.0.0" + fs-extra: "npm:^11.1.1" + proper-lockfile: "npm:^4.1.2" + semver: "npm:^7.5.1" + peerDependencies: + hardhat: ^2.18.1 + checksum: 3fc46977c60cb0f844e1450168c2c9060fc355f7eb1ae8351f8d863fa01f317cb1939fcb948ca209a55e793eefccf5ddf6c2c42b087b588e95add07414e2c9c0 + languageName: node + linkType: hard + "@mdx-js/mdx@npm:^3.0.0": version: 3.0.0 resolution: "@mdx-js/mdx@npm:3.0.0" @@ -8243,7 +10248,7 @@ __metadata: languageName: node linkType: hard -"@netlify/serverless-functions-api@npm:^1.13.0, @netlify/serverless-functions-api@npm:^1.5.0": +"@netlify/serverless-functions-api@npm:^1.13.0": version: 1.13.0 resolution: "@netlify/serverless-functions-api@npm:1.13.0" dependencies: @@ -8253,6 +10258,13 @@ __metadata: languageName: node linkType: hard +"@netlify/serverless-functions-api@npm:^1.5.0": + version: 1.5.0 + resolution: "@netlify/serverless-functions-api@npm:1.5.0" + checksum: b018368dffecca1bc0f7a275c92f1d64cdff06c14c5155a0f924a8d02a9765f51db5c7f0558cf430b8fc04d5fc00031a39aefa8aad2794f41e993b89d331192a + languageName: node + linkType: hard + "@netlify/zip-it-and-ship-it@npm:9.28.2": version: 9.28.2 resolution: "@netlify/zip-it-and-ship-it@npm:9.28.2" @@ -8550,13 +10562,20 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.3.3, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": +"@noble/hashes@npm:1.3.3, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": version: 1.3.3 resolution: "@noble/hashes@npm:1.3.3" checksum: 1025ddde4d24630e95c0818e63d2d54ee131b980fe113312d17ed7468bc18f54486ac86c907685759f8a7e13c2f9b9e83ec7b67d1cc20836f36b5e4a65bb102d languageName: node linkType: hard +"@noble/hashes@npm:^1.1.2": + version: 1.3.0 + resolution: "@noble/hashes@npm:1.3.0" + checksum: 4680a71941c06ac897cc9eab9d229717d5af1147cea5e8cd4942190c817426ad3173ded750d897f58d764b869f9347d4fc3f6b3c16574541ac81906efa9ddc36 + languageName: node + linkType: hard + "@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": version: 1.7.1 resolution: "@noble/secp256k1@npm:1.7.1" @@ -8780,7 +10799,7 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/hardhat-network-helpers@npm:1.0.10, @nomicfoundation/hardhat-network-helpers@npm:^1.0.0": +"@nomicfoundation/hardhat-network-helpers@npm:1.0.10": version: 1.0.10 resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.10" dependencies: @@ -8791,6 +10810,17 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-network-helpers@npm:^1.0.0": + version: 1.0.8 + resolution: "@nomicfoundation/hardhat-network-helpers@npm:1.0.8" + dependencies: + ethereumjs-util: "npm:^7.1.4" + peerDependencies: + hardhat: ^2.9.5 + checksum: b10dc93f0e692dfac42754dd39f88e558411394fbbf793468386e5c78ecc4e4bf0badd7b8723bb40bf6f2b34dac84a6e6633472248d9c8f914977fd9d8020047 + languageName: node + linkType: hard + "@nomicfoundation/hardhat-toolbox@npm:^1.0.1": version: 1.0.2 resolution: "@nomicfoundation/hardhat-toolbox@npm:1.0.2" @@ -8946,6 +10976,17 @@ __metadata: languageName: node linkType: hard +"@nomiclabs/hardhat-docker@npm:^2.0.0": + version: 2.0.2 + resolution: "@nomiclabs/hardhat-docker@npm:2.0.2" + dependencies: + dockerode: "npm:^2.5.8" + fs-extra: "npm:^7.0.1" + node-fetch: "npm:^2.6.0" + checksum: 2b6601a7bcac115a24dc4d2ce35b76b1748ffaebd723afad17e8f506231e1d6c7e5c9df73b29d429c5eb01cb0e11ff92f10c746ca31343b0fd3ddc449c9ec8f3 + languageName: node + linkType: hard + "@nomiclabs/hardhat-ethers@npm:2.2.3, @nomiclabs/hardhat-ethers@npm:^2.0.0": version: 2.2.3 resolution: "@nomiclabs/hardhat-ethers@npm:2.2.3" @@ -9237,6 +11278,13 @@ __metadata: languageName: node linkType: hard +"@octokit/openapi-types@npm:^17.2.0": + version: 17.2.0 + resolution: "@octokit/openapi-types@npm:17.2.0" + checksum: cb5f0a7c8b2dc9a6cd12fc909e487faea7152ac7866d8d38cb3385a554fba2c57bdcc863ee947d7e74f8070af5941d789f187b1c4c0bed1bcee087523d7697f8 + languageName: node + linkType: hard + "@octokit/openapi-types@npm:^18.0.0": version: 18.1.1 resolution: "@octokit/openapi-types@npm:18.1.1" @@ -9329,7 +11377,7 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": +"@octokit/types@npm:^9.0.0": version: 9.3.2 resolution: "@octokit/types@npm:9.3.2" dependencies: @@ -9338,6 +11386,15 @@ __metadata: languageName: node linkType: hard +"@octokit/types@npm:^9.2.3": + version: 9.2.3 + resolution: "@octokit/types@npm:9.2.3" + dependencies: + "@octokit/openapi-types": "npm:^17.2.0" + checksum: c6fb96c15af0a00bacd3a26298c25281d715199637867327c5d4717c5ff6279fa8bfdeabc8dc423f7e56e128d46446b1b4dc35b65e4c6040b28b90751c240673 + languageName: node + linkType: hard + "@one-ini/wasm@npm:0.1.1": version: 0.1.1 resolution: "@one-ini/wasm@npm:0.1.1" @@ -9463,7 +11520,7 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/defender-base-client@npm:1.54.1, @openzeppelin/defender-base-client@npm:^1.46.0, @openzeppelin/defender-base-client@npm:^1.52.0": +"@openzeppelin/defender-base-client@npm:1.54.1, @openzeppelin/defender-base-client@npm:^1.52.0": version: 1.54.1 resolution: "@openzeppelin/defender-base-client@npm:1.54.1" dependencies: @@ -9476,6 +11533,19 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/defender-base-client@npm:^1.46.0": + version: 1.46.0 + resolution: "@openzeppelin/defender-base-client@npm:1.46.0" + dependencies: + amazon-cognito-identity-js: "npm:^6.0.1" + async-retry: "npm:^1.3.3" + axios: "npm:^0.21.2" + lodash: "npm:^4.17.19" + node-fetch: "npm:^2.6.0" + checksum: 4c46e5bb99523470800aa09985ccc95dbdd4ce52f858fbbebbd36135789bc2d8fb2a462575df253b293cf544b51f0db190d9c78124fd579a7899e4a8648a3e17 + languageName: node + linkType: hard + "@openzeppelin/defender-relay-client@npm:1.54.1": version: 1.54.1 resolution: "@openzeppelin/defender-relay-client@npm:1.54.1" @@ -9658,7 +11728,7 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/upgrades-core@npm:1.32.2, @openzeppelin/upgrades-core@npm:^1.27.0, @openzeppelin/upgrades-core@npm:^1.32.0": +"@openzeppelin/upgrades-core@npm:1.32.2, @openzeppelin/upgrades-core@npm:^1.32.0": version: 1.32.2 resolution: "@openzeppelin/upgrades-core@npm:1.32.2" dependencies: @@ -9676,6 +11746,24 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/upgrades-core@npm:^1.27.0": + version: 1.27.0 + resolution: "@openzeppelin/upgrades-core@npm:1.27.0" + dependencies: + cbor: "npm:^8.0.0" + chalk: "npm:^4.1.0" + compare-versions: "npm:^5.0.0" + debug: "npm:^4.1.1" + ethereumjs-util: "npm:^7.0.3" + minimist: "npm:^1.2.7" + proper-lockfile: "npm:^4.1.1" + solidity-ast: "npm:^0.4.15" + bin: + openzeppelin-upgrades-core: dist/cli/cli.js + checksum: 268d10c52344ef0fe2f9b43ffb857d10b6ab3d74a419c004ecd814bfd7da62ac90729b3f4ae33f8cd2eefa29641b4458e39f9d48b58d497320bdff4f41bb5718 + languageName: node + linkType: hard + "@openzeppelin/upgrades@npm:2.8.0": version: 2.8.0 resolution: "@openzeppelin/upgrades@npm:2.8.0" @@ -11179,7 +13267,7 @@ __metadata: languageName: node linkType: hard -"@safe-global/safe-deployments@npm:^1.20.2, @safe-global/safe-deployments@npm:^1.25.0": +"@safe-global/safe-deployments@npm:^1.20.2": version: 1.29.0 resolution: "@safe-global/safe-deployments@npm:1.29.0" dependencies: @@ -11188,6 +13276,15 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-deployments@npm:^1.25.0": + version: 1.26.0 + resolution: "@safe-global/safe-deployments@npm:1.26.0" + dependencies: + semver: "npm:^7.3.7" + checksum: 8aa697eeed760ce710c717e0b116278c10493100df590e9f1f7b2e8b3bfc6a9f10e6ee8a9f3325d8c7b40887c2b36deb5e72d9f03d33833bde37395cb9f60124 + languageName: node + linkType: hard + "@safe-global/safe-deployments@npm:^1.28.0": version: 1.30.0 resolution: "@safe-global/safe-deployments@npm:1.30.0" @@ -14982,6 +17079,18 @@ __metadata: languageName: node linkType: hard +"@ts-morph/common@npm:~0.21.0": + version: 0.21.0 + resolution: "@ts-morph/common@npm:0.21.0" + dependencies: + fast-glob: "npm:^3.2.12" + minimatch: "npm:^7.4.3" + mkdirp: "npm:^2.1.6" + path-browserify: "npm:^1.0.1" + checksum: dbfffae478bb9da71182faf87c14f578de21afe098a388bbcbdeebc5864e9f17e136526dbad6a8e760fe20e5bb943b2dfa62dc47d14b8e6e9077ce08f6de6242 + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.9 resolution: "@tsconfig/node10@npm:1.0.9" @@ -15094,7 +17203,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.18.0, @types/babel__core@npm:^7.20.4, @types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.20.4, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -15107,6 +17216,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.18.0": + version: 7.20.3 + resolution: "@types/babel__core@npm:7.20.3" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 063dbb8ba75fc503b2adf7845b1c188570f439ca4f3bc5cd8be508b4a74c919e6a4682a751ea9acd569ceee78ca946fd2f734d1a11c522aa570b82355de15e7d + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.8 resolution: "@types/babel__generator@npm:7.6.8" @@ -15126,7 +17248,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.18.0": +"@types/babel__traverse@npm:*": version: 7.20.5 resolution: "@types/babel__traverse@npm:7.20.5" dependencies: @@ -15135,6 +17257,15 @@ __metadata: languageName: node linkType: hard +"@types/babel__traverse@npm:^7.18.0": + version: 7.20.3 + resolution: "@types/babel__traverse@npm:7.20.3" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: ccf85b0f1ed4931074d6efe34f79d9e8d54de2ce8109ddf8b8b4955094d30af4ef12dca9f64963c38a7b63d85583557d935bece1d9ad1fd5c925f1c62ffb0e10 + languageName: node + linkType: hard + "@types/bignumber.js@npm:^5.0.0": version: 5.0.0 resolution: "@types/bignumber.js@npm:5.0.0" @@ -15227,7 +17358,14 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:*, @types/chai@npm:4.3.11, @types/chai@npm:^4.2.0, @types/chai@npm:^4.3.5": +"@types/chai@npm:*, @types/chai@npm:^4.2.0, @types/chai@npm:^4.3.5": + version: 4.3.5 + resolution: "@types/chai@npm:4.3.5" + checksum: 35d96db335724b6a05dd9113722f9cceb2069b5b0905b160f36132585482558fc5261a29b30290140dea7e5068be2f2585a4f4fba55b569222a95eb313e83b1b + languageName: node + linkType: hard + +"@types/chai@npm:4.3.11": version: 4.3.11 resolution: "@types/chai@npm:4.3.11" checksum: c83a00359684bf06114d5ad0ffa62c78b2fbfe09a985eda56e55cd3c191fe176052aef6e297a8c8a3608efb8ea7a44598cf7e0ae1a3a9311af892417e95b0b28 @@ -15314,7 +17452,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.2, @types/debug@npm:^4.1.8": +"@types/debug@npm:^4.0.0": version: 4.1.12 resolution: "@types/debug@npm:4.1.12" dependencies: @@ -15323,6 +17461,15 @@ __metadata: languageName: node linkType: hard +"@types/debug@npm:^4.1.2, @types/debug@npm:^4.1.8": + version: 4.1.8 + resolution: "@types/debug@npm:4.1.8" + dependencies: + "@types/ms": "npm:*" + checksum: a9a9bb40a199e9724aa944e139a7659173a9b274798ea7efbc277cb084bc37d32fc4c00877c3496fac4fed70a23243d284adb75c00b5fdabb38a22154d18e5df + languageName: node + linkType: hard + "@types/detect-port@npm:^1.3.0": version: 1.3.5 resolution: "@types/detect-port@npm:1.3.5" @@ -15394,7 +17541,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree@npm:1.0.1" + checksum: f252569c002506c61ad913e778aa69415908078c46c78c901ccad77bc66cd34f1e1b9babefb8ff0d27c07a15fb0824755edd7bb3fa7ea828f32ae0fe5faa9962 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: 7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 @@ -15629,13 +17783,20 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 languageName: node linkType: hard +"@types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: e50864a93f4dcb9de64c0c605d836f5416341c824d7a8cde1aa15a5fc68bed44b33cdcb2e04e5098339e9121848378f2d0cc5b124dec41c89203c6f67d6f344a + languageName: node + linkType: hard + "@types/json-stable-stringify@npm:^1.0.32": version: 1.0.36 resolution: "@types/json-stable-stringify@npm:1.0.36" @@ -16021,13 +18182,20 @@ __metadata: languageName: node linkType: hard -"@types/prismjs@npm:^1.0.0, @types/prismjs@npm:^1.26.0": +"@types/prismjs@npm:^1.0.0": version: 1.26.3 resolution: "@types/prismjs@npm:1.26.3" checksum: 4bd55230ffc0b2b16f4008be3a7f1d7c6b32dd3bed8006e64d24fb22c44fc7e300dac77b856f732803ccdc9a3472b2c0ee7776cad048843c47d608c41a89b6a6 languageName: node linkType: hard +"@types/prismjs@npm:^1.26.0": + version: 1.26.0 + resolution: "@types/prismjs@npm:1.26.0" + checksum: 61b46e490acd46abba6c7c8c491247ba0c94f65f36f2eb1b8a80b0afc7961c7f9f2b386bd51daf114d61758e59957fe196a285f5e34bd88e46b4794b3e2a597d + languageName: node + linkType: hard + "@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0": version: 15.7.11 resolution: "@types/prop-types@npm:15.7.11" @@ -16074,7 +18242,7 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:18.2.18, @types/react-dom@npm:^18.0.0": +"@types/react-dom@npm:18.2.18": version: 18.2.18 resolution: "@types/react-dom@npm:18.2.18" dependencies: @@ -16083,6 +18251,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.0.0": + version: 18.2.4 + resolution: "@types/react-dom@npm:18.2.4" + dependencies: + "@types/react": "npm:*" + checksum: 98ddd7d18dc511f37e6f57ab93839daeee0ad241d95e4e34802a6b0e345a16dcc829eef30a64b1c81f3c48c1336a697c86b53038ca273a20737386dcaf025f83 + languageName: node + linkType: hard + "@types/react-google-recaptcha@npm:2.1.9": version: 2.1.9 resolution: "@types/react-google-recaptcha@npm:2.1.9" @@ -16153,7 +18330,18 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:18.2.46, @types/react@npm:>=16": +"@types/react@npm:*, @types/react@npm:>=16": + version: 18.2.6 + resolution: "@types/react@npm:18.2.6" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:*" + csstype: "npm:^3.0.2" + checksum: c98c5359168d015da310dd62102fc159be3563d5a0d09bb3db4e2af8e6f4630fe6ace41cc9bec8bb5c914ee4ffccc2a10230cf23f3ebae29d97bc23b11a3f21f + languageName: node + linkType: hard + +"@types/react@npm:18.2.46": version: 18.2.46 resolution: "@types/react@npm:18.2.46" dependencies: @@ -16283,7 +18471,7 @@ __metadata: languageName: node linkType: hard -"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": +"@types/serve-static@npm:*": version: 1.15.5 resolution: "@types/serve-static@npm:1.15.5" dependencies: @@ -16294,6 +18482,17 @@ __metadata: languageName: node linkType: hard +"@types/serve-static@npm:^1.13.10": + version: 1.15.2 + resolution: "@types/serve-static@npm:1.15.2" + dependencies: + "@types/http-errors": "npm:*" + "@types/mime": "npm:*" + "@types/node": "npm:*" + checksum: d5f8f5aaa765be6417aa3f2ebe36591f4e9d2d8a7480edf7d3db041427420fd565cb921fc021271098dd2afafce2b443fc0d978faa3ae21a2a58ebde7d525e9e + languageName: node + linkType: hard + "@types/sockjs@npm:^0.3.33": version: 0.3.36 resolution: "@types/sockjs@npm:0.3.36" @@ -16463,7 +18662,7 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.0.0, @types/ws@npm:^8.5.5": +"@types/ws@npm:^8.0.0": version: 8.5.10 resolution: "@types/ws@npm:8.5.10" dependencies: @@ -16472,6 +18671,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.5.5": + version: 8.5.5 + resolution: "@types/ws@npm:8.5.5" + dependencies: + "@types/node": "npm:*" + checksum: b2d7da5bd469c2ff1ddcfba1da33a556dc02c539e727001e7dc7b4182935154143e96a101cc091686acefb4e115c8ee38111c6634934748b8dd2db0c851c50ab + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -17351,6 +19559,8 @@ __metadata: version: 0.0.0-use.local resolution: "@unlock-protocol/governance@workspace:governance" dependencies: + "@matterlabs/hardhat-zksync-deploy": "npm:1.0.1" + "@matterlabs/hardhat-zksync-solc": "npm:1.0.3" "@nomicfoundation/hardhat-ethers": "npm:3.0.5" "@nomicfoundation/hardhat-network-helpers": "npm:1.0.10" "@nomicfoundation/hardhat-verify": "npm:2.0.4" @@ -17371,6 +19581,7 @@ __metadata: fs-extra: "npm:11.2.0" hardhat: "npm:2.19.5" solhint: "npm:4.0.0" + zksync2-js: "npm:0.4.0" languageName: unknown linkType: soft @@ -18433,7 +20644,7 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.3": version: 1.0.3 resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" dependencies: @@ -18443,7 +20654,17 @@ __metadata: languageName: node linkType: hard -"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.3, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": +"@walletconnect/jsonrpc-types@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.2" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: cea07cbc4bcbcc6a28c38c363e602e7b1e3c1dc04927caaed5339749d403d724423e1ad6489bac88a34faf519560c2f7f0fb9164d6edafdf2a593890dace5e36 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": version: 1.0.8 resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" dependencies: @@ -18454,6 +20675,17 @@ __metadata: languageName: node linkType: hard +"@walletconnect/jsonrpc-utils@npm:^1.0.3": + version: 1.0.7 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.7" + dependencies: + "@walletconnect/environment": "npm:^1.0.1" + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + tslib: "npm:1.14.1" + checksum: 5fbb5877cd1d238b8d33fc6f53aab2fde94205b0cdbb3674aa374454c4cd40eb7a28cc29dcdf908482c316f45cb8f4efeef24bbfa9f775cf2bde2e6368405f69 + languageName: node + linkType: hard + "@walletconnect/jsonrpc-ws-connection@npm:1.0.13": version: 1.0.13 resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" @@ -19340,7 +21572,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.11.2, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.0.0, acorn@npm:^8.10.0, acorn@npm:^8.11.2": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: @@ -19349,6 +21581,33 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.0.4, acorn@npm:^8.7.1": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 522310c20fdc3c271caed3caf0f06c51d61cb42267279566edd1d58e83dbc12eebdafaab666a0f0be1b7ad04af9c6bc2a6f478690a9e6391c3c8b165ada917dd + languageName: node + linkType: hard + +"acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.8.0, acorn@npm:^8.8.2": + version: 8.8.2 + resolution: "acorn@npm:8.8.2" + bin: + acorn: bin/acorn + checksum: b4e77d56d24d3e11a45d9ac8ae661b4e14a4af04ae33edbf1e6bf910887e5bb352cc60e9ea06a0944880e6b658f58c095d3b54e88e1921cb9319608b51085dd7 + languageName: node + linkType: hard + +"acorn@npm:^8.9.0": + version: 8.9.0 + resolution: "acorn@npm:8.9.0" + bin: + acorn: bin/acorn + checksum: 243af601b8dfe859008c49ebf75a5bf3ad55d243aed7fdd16966ffb3e0276d070381dce95813b77796b87b1997c01946103744e3fcddaefc40b96bda4d94c075 + languageName: node + linkType: hard + "address@npm:^1.0.1, address@npm:^1.1.2": version: 1.2.2 resolution: "address@npm:1.2.2" @@ -20342,7 +22601,7 @@ __metadata: languageName: node linkType: hard -"asn1@npm:~0.2.3": +"asn1@npm:^0.2.6, asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" dependencies: @@ -20765,7 +23024,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.4.0, axios@npm:^1.5.1": +"axios@npm:^1.4.0": version: 1.6.4 resolution: "axios@npm:1.6.4" dependencies: @@ -20776,6 +23035,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.5.1": + version: 1.5.1 + resolution: "axios@npm:1.5.1" + dependencies: + follow-redirects: "npm:^1.15.0" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 67633db5867c789a6edb6e5229884501bef89584a6718220c243fd5a64de4ea7dcdfdf4f8368a672d582db78aaa9f8d7b619d39403b669f451e1242bbd4c7ee2 + languageName: node + linkType: hard + "axobject-query@npm:^3.2.1": version: 3.2.1 resolution: "axobject-query@npm:3.2.1" @@ -21056,7 +23326,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:0.4.7, babel-plugin-polyfill-corejs2@npm:^0.4.3, babel-plugin-polyfill-corejs2@npm:^0.4.4, babel-plugin-polyfill-corejs2@npm:^0.4.7": +"babel-plugin-polyfill-corejs2@npm:0.4.7, babel-plugin-polyfill-corejs2@npm:^0.4.7": version: 0.4.7 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.7" dependencies: @@ -21082,6 +23352,45 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs2@npm:^0.4.3": + version: 0.4.3 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.3" + dependencies: + "@babel/compat-data": "npm:^7.17.7" + "@babel/helper-define-polyfill-provider": "npm:^0.4.0" + semver: "npm:^6.1.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d9004d1bf53804a4c1c226f8d8c711c650ee22cae0aca274374bc1ff025eb543b5972b3c7af85c68e6d22dd83b02e76d56bf63e7f212bb0bcbc46fce723b5e73 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.4": + version: 0.4.5 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.5" + dependencies: + "@babel/compat-data": "npm:^7.22.6" + "@babel/helper-define-polyfill-provider": "npm:^0.4.2" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 75552d49f7d874e2e9a082d19e3ce9cc95998abadbdc589e5af7de64f5088059863eb194989cfcfefc99623925c46e273bd49333f6aae58f6fff59696279132b + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.6": + version: 0.4.6 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.6" + dependencies: + "@babel/compat-data": "npm:^7.22.6" + "@babel/helper-define-polyfill-provider": "npm:^0.4.3" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 736b1bb8e570be029f941a374c769972af870c96b5c324a5387c6b6994aabdad045ce560c530038c8626f02ec70f711ad7445f2572c32ba81fa0e13402cc23f8 + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.6.0": version: 0.6.0 resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" @@ -21094,7 +23403,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.8.1, babel-plugin-polyfill-corejs3@npm:^0.8.2, babel-plugin-polyfill-corejs3@npm:^0.8.7": +"babel-plugin-polyfill-corejs3@npm:^0.8.1, babel-plugin-polyfill-corejs3@npm:^0.8.7": version: 0.8.7 resolution: "babel-plugin-polyfill-corejs3@npm:0.8.7" dependencies: @@ -21106,6 +23415,30 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.8.2": + version: 0.8.3 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.3" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.4.2" + core-js-compat: "npm:^3.31.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 95e57300341c52b4954b8c8d9d7dd6f9a5bd26f3ac6f67180f146398e5ea5ec5a8496a79d222e147a3e61b698ce4176677a194397ac9887bfa8072d2d7e4e29c + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.8.5": + version: 0.8.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.6" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.4.3" + core-js-compat: "npm:^3.33.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 2d9c926fda31d800dea7843d82a41b8914a8aaa67d7fb293dd2594e82cd6ce4c9fc67c9d469587b7c14ba38f5ab5689bdc9c21c268888598f464fe77a5f4c964 + languageName: node + linkType: hard + "babel-plugin-polyfill-regenerator@npm:^0.4.1": version: 0.4.1 resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" @@ -21117,7 +23450,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.5.0, babel-plugin-polyfill-regenerator@npm:^0.5.1, babel-plugin-polyfill-regenerator@npm:^0.5.4": +"babel-plugin-polyfill-regenerator@npm:^0.5.0, babel-plugin-polyfill-regenerator@npm:^0.5.4": version: 0.5.4 resolution: "babel-plugin-polyfill-regenerator@npm:0.5.4" dependencies: @@ -21128,6 +23461,28 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-regenerator@npm:^0.5.1": + version: 0.5.2 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.2" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.4.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: d962200f604016a9a09bc9b4aaf60a3db7af876bb65bcefaeac04d44ac9d9ec4037cf24ce117760cc141d7046b6394c7eb0320ba9665cb4a2ee64df2be187c93 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.5.3": + version: 0.5.3 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.3" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.4.3" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 2bb546582cda1870d19e646a7183baeb2cccd56e0ef3e4eaeabd28e120daf17cb87399194a9ccdcf32506bcaa68d23e73440fc8ab990a7a0f8c5a77c12d5d4bc + languageName: node + linkType: hard + "babel-plugin-require-context-hook@npm:1.0.0": version: 1.0.0 resolution: "babel-plugin-require-context-hook@npm:1.0.0" @@ -21734,7 +24089,7 @@ __metadata: languageName: node linkType: hard -"bcrypt-pbkdf@npm:^1.0.0": +"bcrypt-pbkdf@npm:^1.0.0, bcrypt-pbkdf@npm:^1.0.2": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" dependencies: @@ -21835,10 +24190,10 @@ __metadata: languageName: node linkType: hard -"bignumber.js@npm:*, bignumber.js@npm:9.1.2, bignumber.js@npm:^9.0.0, bignumber.js@npm:^9.0.1, bignumber.js@npm:^9.0.2": - version: 9.1.2 - resolution: "bignumber.js@npm:9.1.2" - checksum: d89b8800a987225d2c00dcbf8a69dc08e92aa0880157c851c287b307d31ceb2fc2acb0c62c3e3a3d42b6c5fcae9b004035f13eb4386e56d529d7edac18d5c9d8 +"bignumber.js@npm:*, bignumber.js@npm:^9.0.0, bignumber.js@npm:^9.0.1": + version: 9.1.1 + resolution: "bignumber.js@npm:9.1.1" + checksum: 1f771bfa883a5863626e1e4274042065d5f975651eda556ecd28560f287c065004681226f826380792a22be116d7666499c3e3300b1a48b2a7bff66e8dde7aa8 languageName: node linkType: hard @@ -21856,6 +24211,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:9.1.2, bignumber.js@npm:^9.0.2": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: d89b8800a987225d2c00dcbf8a69dc08e92aa0880157c851c287b307d31ceb2fc2acb0c62c3e3a3d42b6c5fcae9b004035f13eb4386e56d529d7edac18d5c9d8 + languageName: node + linkType: hard + "bignumber.js@npm:^7.2.0, bignumber.js@npm:^7.2.1": version: 7.2.1 resolution: "bignumber.js@npm:7.2.1" @@ -22389,7 +24751,49 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.22.2": +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.4, browserslist@npm:^4.21.9": + version: 4.21.9 + resolution: "browserslist@npm:4.21.9" + dependencies: + caniuse-lite: "npm:^1.0.30001503" + electron-to-chromium: "npm:^1.4.431" + node-releases: "npm:^2.0.12" + update-browserslist-db: "npm:^1.0.11" + bin: + browserslist: cli.js + checksum: f015dd3d97e9eadcc13aaaf03b4a78a071874eee1cf756a2361191c0888f238dd0ddf1b92c20d072ecd1834d9a51e5a6361f5efaf966728da6a5daaf95b37eb3 + languageName: node + linkType: hard + +"browserslist@npm:^4.21.10": + version: 4.21.10 + resolution: "browserslist@npm:4.21.10" + dependencies: + caniuse-lite: "npm:^1.0.30001517" + electron-to-chromium: "npm:^1.4.477" + node-releases: "npm:^2.0.13" + update-browserslist-db: "npm:^1.0.11" + bin: + browserslist: cli.js + checksum: cdb9272433994393a995235720c304e8c7123b4994b02fc0b24ca0f483db482c4f85fe8b40995aa6193d47d781e5535cf5d0efe96e465d2af42058fb3251b13a + languageName: node + linkType: hard + +"browserslist@npm:^4.21.3": + version: 4.21.5 + resolution: "browserslist@npm:4.21.5" + dependencies: + caniuse-lite: "npm:^1.0.30001449" + electron-to-chromium: "npm:^1.4.284" + node-releases: "npm:^2.0.8" + update-browserslist-db: "npm:^1.0.10" + bin: + browserslist: cli.js + checksum: 560ec095ab4fa878f611ddf29038193d3a40ce69282dd15e633bcb9523fa25122e566d34192ab45e261a637d768884e7318cb3545533720469ee8f10d10c3298 + languageName: node + linkType: hard + +"browserslist@npm:^4.22.2": version: 4.22.2 resolution: "browserslist@npm:4.22.2" dependencies: @@ -22576,6 +24980,13 @@ __metadata: languageName: node linkType: hard +"buildcheck@npm:~0.0.6": + version: 0.0.6 + resolution: "buildcheck@npm:0.0.6" + checksum: 194ee8d3b0926fd6f3e799732130ad7ab194882c56900b8670ad43c81326f64871f49b7d9f1e9baad91ca3070eb4e8b678797fe9ae78cf87dde86d8916eb25d2 + languageName: node + linkType: hard + "builtin-modules@npm:^1.1.1": version: 1.1.1 resolution: "builtin-modules@npm:1.1.1" @@ -22707,7 +25118,29 @@ __metadata: languageName: node linkType: hard -"c8@npm:^7.13.0, c8@npm:^7.14.0, c8@npm:^7.6.0": +"c8@npm:^7.13.0, c8@npm:^7.6.0": + version: 7.13.0 + resolution: "c8@npm:7.13.0" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@istanbuljs/schema": "npm:^0.1.3" + find-up: "npm:^5.0.0" + foreground-child: "npm:^2.0.0" + istanbul-lib-coverage: "npm:^3.2.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-reports: "npm:^3.1.4" + rimraf: "npm:^3.0.2" + test-exclude: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.0" + yargs: "npm:^16.2.0" + yargs-parser: "npm:^20.2.9" + bin: + c8: bin/c8.js + checksum: 0e61506fdc3062334b58febc8d1e4b409d1ec8a26f7c54b6b3a33408c1a36e7f576dd379d6d0100413e0358f8b917e3c909c7768fc0676d24d95aa6a79f89574 + languageName: node + linkType: hard + +"c8@npm:^7.14.0": version: 7.14.0 resolution: "c8@npm:7.14.0" dependencies: @@ -22876,7 +25309,17 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5, call-bind@npm:~1.0.2": +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:~1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: "npm:^1.1.1" + get-intrinsic: "npm:^1.0.2" + checksum: ca787179c1cbe09e1697b56ad499fd05dc0ae6febe5081d728176ade699ea6b1589240cb1ff1fe11fcf9f61538c1af60ad37e8eb2ceb4ef21cd6085dfd3ccedd + languageName: node + linkType: hard + +"call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": version: 1.0.5 resolution: "call-bind@npm:1.0.5" dependencies: @@ -22982,10 +25425,38 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001538, caniuse-lite@npm:^1.0.30001565": - version: 1.0.30001574 - resolution: "caniuse-lite@npm:1.0.30001574" - checksum: 159ebd04d9bbef11bd08499f058f70bf795a55641929be5efadf0f6b17216d4b923506778e59bbb939246834304b753b2e88ff1e2430f6a5aef0a86971f98bd3 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001503": + version: 1.0.30001517 + resolution: "caniuse-lite@npm:1.0.30001517" + checksum: 3b9aa01e5e1c112bbe15d653cf4f909748b3ede87613b4381306c3510dab1adb0b09594febdacdf0eb963d8f0d37dcb3b88cea12c579ed14a9ede4581544c7c4 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30000844, caniuse-lite@npm:^1.0.30001406, caniuse-lite@npm:^1.0.30001449": + version: 1.0.30001487 + resolution: "caniuse-lite@npm:1.0.30001487" + checksum: b64a706fe7b58b9b58e2104c43a0ac659c73220d3d9182fef177e0c8bc61228982a15e28007737b18ea5b619b593802db4b8b367b5a1ee8c23bc252004066576 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001517": + version: 1.0.30001527 + resolution: "caniuse-lite@npm:1.0.30001527" + checksum: fd92100c771efdecd77a1be45551ef47091adea7291fe524a6d882b74b0e1d81b59abbbbaac84c835ed96392913a55791d01a9b868f2501fb1f1d4e6b1161c0b + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001538": + version: 1.0.30001546 + resolution: "caniuse-lite@npm:1.0.30001546" + checksum: efa765c9891beb187715dc794b6b21cd30c23cdaea5788b736b58dbea7a568d73577fd9e97202874ee19fea5e783a55a20296606d473153250b4f9a36aba58de + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001565": + version: 1.0.30001566 + resolution: "caniuse-lite@npm:1.0.30001566" + checksum: fdff43ed498201bf4f6074bd1112bd853e91973b6ccb016049b030948a7d197cba235ac4d93e712d1862b33a3c947bf4e62bad7011ccdac78e5179501b28d04a languageName: node linkType: hard @@ -23132,7 +25603,7 @@ __metadata: languageName: node linkType: hard -"chai@npm:4.3.10, chai@npm:^4.2.0, chai@npm:^4.3.10, chai@npm:^4.3.7": +"chai@npm:4.3.10, chai@npm:^4.3.10": version: 4.3.10 resolution: "chai@npm:4.3.10" dependencies: @@ -23147,6 +25618,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.2.0, chai@npm:^4.3.7": + version: 4.3.7 + resolution: "chai@npm:4.3.7" + dependencies: + assertion-error: "npm:^1.1.0" + check-error: "npm:^1.0.2" + deep-eql: "npm:^4.1.2" + get-func-name: "npm:^2.0.0" + loupe: "npm:^2.3.1" + pathval: "npm:^1.1.1" + type-detect: "npm:^4.0.5" + checksum: 615eabfeb9032315fb2d287fb03c29b7996f943024c7d4482b1b5370b6c22807fd4da329244dc5ac0c8802408d741dfb9b86245ffeddc83ce18898dda8d7aed4 + languageName: node + linkType: hard + "chalk@npm:3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -23194,7 +25680,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.3.0, chalk@npm:^2.3.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.0.0, chalk@npm:^2.3.0, chalk@npm:^2.3.2, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -23863,6 +26349,13 @@ __metadata: languageName: node linkType: hard +"code-block-writer@npm:^12.0.0": + version: 12.0.0 + resolution: "code-block-writer@npm:12.0.0" + checksum: 7dc531e652b4654f6e0487923df74cda7294da01c6ac225f523256c6ae5f7f4eb5c4dc7902a9e64b81dba4b22e7d843454ed71a59954d31aa8656184c6c0c8ff + languageName: node + linkType: hard + "code-point-at@npm:^1.0.0": version: 1.1.0 resolution: "code-point-at@npm:1.1.0" @@ -24189,6 +26682,13 @@ __metadata: languageName: node linkType: hard +"compare-versions@npm:^5.0.0": + version: 5.0.3 + resolution: "compare-versions@npm:5.0.3" + checksum: 7fb707ed477c24b50021c621fc220e7e42d9cb897d09de5a1532ba880f0555c81900a31afb271748237ff3b7cd6e33cb7bcba469d33359a46bd2933cbe5badc4 + languageName: node + linkType: hard + "compare-versions@npm:^6.0.0": version: 6.1.0 resolution: "compare-versions@npm:6.1.0" @@ -24594,7 +27094,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.30.2, core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.33.1": +"core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.30.2": version: 3.35.0 resolution: "core-js-compat@npm:3.35.0" dependencies: @@ -24603,13 +27103,38 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.0.1, core-js-pure@npm:^3.30.2": +"core-js-compat@npm:^3.31.0": + version: 3.32.0 + resolution: "core-js-compat@npm:3.32.0" + dependencies: + browserslist: "npm:^4.21.9" + checksum: a4601192319b67a575abfb175a9822ae266bfa88cd0dc6be5bce3d6ce6d4674bd675a052c48a48520d956b193ccd5c8458c1b0901bf0f71d59edaad2a56ef667 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.33.1": + version: 3.34.0 + resolution: "core-js-compat@npm:3.34.0" + dependencies: + browserslist: "npm:^4.22.2" + checksum: e29571cc524b4966e331b5876567f13c2b82ed48ac9b02784f3156b29ee1cd82fe3e60052d78b017c429eb61969fd238c22684bb29180908d335266179a29155 + languageName: node + linkType: hard + +"core-js-pure@npm:^3.0.1": version: 3.35.0 resolution: "core-js-pure@npm:3.35.0" checksum: cdc5c5ef95b688d7d2335bc3a27a4b78451e3bbac913e601c3763a38c31c875b19771faaf0a3d7b1ebb47438158d579d890a97f93cd94b831d3f00aef49dbf91 languageName: node linkType: hard +"core-js-pure@npm:^3.30.2": + version: 3.32.0 + resolution: "core-js-pure@npm:3.32.0" + checksum: f98fc9610fedffd5587266cabddc880a8259bb0c99e81c5630e2076a4cd39b618f8db54137a6fdc578a8bb12a7fef2f341175085d89a16683a36aa89bc0ee137 + languageName: node + linkType: hard + "core-js@npm:^2.4.0, core-js@npm:^2.5.0": version: 2.6.12 resolution: "core-js@npm:2.6.12" @@ -24617,7 +27142,14 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.30.2, core-js@npm:^3.31.1, core-js@npm:^3.8.2": +"core-js@npm:^3.30.2, core-js@npm:^3.8.2": + version: 3.30.2 + resolution: "core-js@npm:3.30.2" + checksum: 7476995aad7b01e51240fa1b19a26ec064825feece47290903d392e8b624749d06e8d72ce4c2ede9ab02afe34c6c08c001fd288bc1cfa3f5593ab03f2778719e + languageName: node + linkType: hard + +"core-js@npm:^3.31.1": version: 3.35.0 resolution: "core-js@npm:3.35.0" checksum: 0815fce6bcc91d79d4b28885975453b0faa4d17fc2230635102b4f3832cd621035e4032aa3307e1dbe0ee14d5e34bcb64b507fd89bd8f567aedaf29538522e6a @@ -24687,7 +27219,31 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.0.0, cosmiconfig@npm:^8.1.0, cosmiconfig@npm:^8.1.3, cosmiconfig@npm:^8.3.5": +"cosmiconfig@npm:^8.0.0, cosmiconfig@npm:^8.1.3": + version: 8.1.3 + resolution: "cosmiconfig@npm:8.1.3" + dependencies: + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + checksum: 7a9f514c84a75d2ee1fbbe565381d2508dfccebd1018a9097bd55647718e2a4003afc96be86cbbdd855461d01fd71a84d46991b1d8988006763a5fa8f1140ae7 + languageName: node + linkType: hard + +"cosmiconfig@npm:^8.1.0": + version: 8.2.0 + resolution: "cosmiconfig@npm:8.2.0" + dependencies: + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + checksum: e0b188f9a672ee7135851bf9d9fc8f0ba00f9769c95fda5af0ebc274804f6aeb713b753e04e706f595e1fbd0fa67c5073840666019068c0296a06057560ab39d + languageName: node + linkType: hard + +"cosmiconfig@npm:^8.3.5": version: 8.3.6 resolution: "cosmiconfig@npm:8.3.6" dependencies: @@ -24727,6 +27283,17 @@ __metadata: languageName: node linkType: hard +"cpu-features@npm:~0.0.8": + version: 0.0.9 + resolution: "cpu-features@npm:0.0.9" + dependencies: + buildcheck: "npm:~0.0.6" + nan: "npm:^2.17.0" + node-gyp: "npm:latest" + checksum: 05a4ec51fff87fcde9ca91021d9a0e73a34eb190b14163f7394757ce2470a85393bc49985915bc0bc0ad7ac1ac79caee21f8626a82b535262d9b7d012f805d64 + languageName: node + linkType: hard + "cpy@npm:^9.0.0": version: 9.0.1 resolution: "cpy@npm:9.0.1" @@ -25390,13 +27957,20 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:1.11.10, dayjs@npm:^1.9.3": +"dayjs@npm:1.11.10": version: 1.11.10 resolution: "dayjs@npm:1.11.10" checksum: 27e8f5bc01c0a76f36c656e62ab7f08c2e7b040b09e613cd4844abf03fb258e0350f0a83b02c887b84d771c1f11e092deda0beef8c6df2a1afbc3f6c1fade279 languageName: node linkType: hard +"dayjs@npm:^1.9.3": + version: 1.11.7 + resolution: "dayjs@npm:1.11.7" + checksum: 341d7dc917a4ddc79c836684f7632a769ad8ae3c56506e62b97c27d7bb8a379b52b5589180b80f514eca9beb0b8789303bd32ce3107ba62055078800f9871e38 + languageName: node + linkType: hard + "death@npm:^1.1.0": version: 1.1.0 resolution: "death@npm:1.1.0" @@ -25593,7 +28167,7 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.0.1, deep-eql@npm:^4.1.3": +"deep-eql@npm:^4.0.1, deep-eql@npm:^4.1.2, deep-eql@npm:^4.1.3": version: 4.1.3 resolution: "deep-eql@npm:4.1.3" dependencies: @@ -26249,7 +28823,31 @@ __metadata: languageName: node linkType: hard -"dockerode@npm:2.5.8": +"docker-modem@npm:^3.0.0": + version: 3.0.8 + resolution: "docker-modem@npm:3.0.8" + dependencies: + debug: "npm:^4.1.1" + readable-stream: "npm:^3.5.0" + split-ca: "npm:^1.0.1" + ssh2: "npm:^1.11.0" + checksum: a731d057b3da5a9da3dd9aff7e25bc33f2d29f3e0af947bd823d1361350071afb5b7cb0582af5bf012b08fca356520685bcff87bfcba08e85725576b32f264a2 + languageName: node + linkType: hard + +"docker-modem@npm:^5.0.0": + version: 5.0.1 + resolution: "docker-modem@npm:5.0.1" + dependencies: + debug: "npm:^4.1.1" + readable-stream: "npm:^3.5.0" + split-ca: "npm:^1.0.1" + ssh2: "npm:^1.11.0" + checksum: 91a054bfddfe50e40ede58f859c28698e973b2aec68428d78e109f3a107ce55ea6155d5ed97e7e39d8fbcf7b6a3ec6c1cf8d52b54518ce8dc6cd9d34e02d9ba4 + languageName: node + linkType: hard + +"dockerode@npm:2.5.8, dockerode@npm:^2.5.8": version: 2.5.8 resolution: "dockerode@npm:2.5.8" dependencies: @@ -26260,6 +28858,28 @@ __metadata: languageName: node linkType: hard +"dockerode@npm:^3.3.4": + version: 3.3.5 + resolution: "dockerode@npm:3.3.5" + dependencies: + "@balena/dockerignore": "npm:^1.0.2" + docker-modem: "npm:^3.0.0" + tar-fs: "npm:~2.0.1" + checksum: 1748e8d96f88fe71bb165a4c05726904937f5863b69eaeb4a3c1bb3bbf66940c7bef13b349ff757dc43664b4367611aab76f35c1ba468f07dcbaba567e6acd88 + languageName: node + linkType: hard + +"dockerode@npm:^4.0.0": + version: 4.0.0 + resolution: "dockerode@npm:4.0.0" + dependencies: + "@balena/dockerignore": "npm:^1.0.2" + docker-modem: "npm:^5.0.0" + tar-fs: "npm:~2.0.1" + checksum: e92b7f03252945dc6f04661d78a72ac9e9f3e5128dc04ab3687a648662f572d73e561cce878699870f64c6cd941c90970481791901d7a087d263de0807474eab + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -26746,13 +29366,41 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.47, electron-to-chromium@npm:^1.4.601": +"electron-to-chromium@npm:^1.3.47": version: 1.4.623 resolution: "electron-to-chromium@npm:1.4.623" checksum: 483640dbbedf46d627f264aae7bd2ef723326488fa5b7730fbe9c53f5bdde25ce421e54134b88ef85649e4473f42e73709692da5bbfb6aec7c08cdfe8c0037e2 languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.284": + version: 1.4.397 + resolution: "electron-to-chromium@npm:1.4.397" + checksum: 4a1c8753dfc47eb7a1a9e425b76ebc7a38f437e3c6f0212c1882ae0dab4f741063a77ceab8bb74d0b596791d0bd6483bdd99cfe22d48c96da782860da40eac5b + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.431": + version: 1.4.474 + resolution: "electron-to-chromium@npm:1.4.474" + checksum: 8f2287a5288501801f776908f3fe62c177b5710d4a0d397d40e5b15780e097df6de90306a334d42c93af8511fd492abde77acbea025552c9e4ea573883767b3b + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.477": + version: 1.4.508 + resolution: "electron-to-chromium@npm:1.4.508" + checksum: 6d35069c60d16b6d9ad204cbd35ea0cdc78df88c04ccff21b2fc5c471f7cf56b8fbd19f4ff9c5b04bc54945f98f54b7cfbf9997adaa0aba747da12e4286a76e3 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.601": + version: 1.4.605 + resolution: "electron-to-chromium@npm:1.4.605" + checksum: cf9b462320ff7e37779c5d9d76db5eb1c933bf86416f3dcbf9c0eee61b35d6c7685386ba59be77c28f9c819a0ffbf9bbbd939a3f08b71055bd27da5d789c286c + languageName: node + linkType: hard + "elegant-spinner@npm:^1.0.1": version: 1.0.1 resolution: "elegant-spinner@npm:1.0.1" @@ -27140,13 +29788,20 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.0.0, es-module-lexer@npm:^1.2.1": +"es-module-lexer@npm:^1.0.0": version: 1.4.1 resolution: "es-module-lexer@npm:1.4.1" checksum: cf453613468c417af6e189b03d9521804033fdd5a229a36fedec28d37ea929fccf6822d42abff1126eb01ba1d2aa2845a48d5d1772c0724f8204464d9d3855f6 languageName: node linkType: hard +"es-module-lexer@npm:^1.2.1": + version: 1.3.0 + resolution: "es-module-lexer@npm:1.3.0" + checksum: dee2af09669d05282db987839681ea1917ce31ce4a2364cc9eb598675344c5c709895e7e782db87794065a6f3af054552e2cf42ccadcaec4c9fc0cbc4898f193 + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.2 resolution: "es-set-tostringtag@npm:2.0.2" @@ -27494,7 +30149,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.19.2, esbuild@npm:^0.19.3, esbuild@npm:~0.19.10": +"esbuild@npm:^0.19.2, esbuild@npm:~0.19.10": version: 0.19.11 resolution: "esbuild@npm:0.19.11" dependencies: @@ -27574,6 +30229,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.19.3": + version: 0.19.5 + resolution: "esbuild@npm:0.19.5" + dependencies: + "@esbuild/android-arm": "npm:0.19.5" + "@esbuild/android-arm64": "npm:0.19.5" + "@esbuild/android-x64": "npm:0.19.5" + "@esbuild/darwin-arm64": "npm:0.19.5" + "@esbuild/darwin-x64": "npm:0.19.5" + "@esbuild/freebsd-arm64": "npm:0.19.5" + "@esbuild/freebsd-x64": "npm:0.19.5" + "@esbuild/linux-arm": "npm:0.19.5" + "@esbuild/linux-arm64": "npm:0.19.5" + "@esbuild/linux-ia32": "npm:0.19.5" + "@esbuild/linux-loong64": "npm:0.19.5" + "@esbuild/linux-mips64el": "npm:0.19.5" + "@esbuild/linux-ppc64": "npm:0.19.5" + "@esbuild/linux-riscv64": "npm:0.19.5" + "@esbuild/linux-s390x": "npm:0.19.5" + "@esbuild/linux-x64": "npm:0.19.5" + "@esbuild/netbsd-x64": "npm:0.19.5" + "@esbuild/openbsd-x64": "npm:0.19.5" + "@esbuild/sunos-x64": "npm:0.19.5" + "@esbuild/win32-arm64": "npm:0.19.5" + "@esbuild/win32-ia32": "npm:0.19.5" + "@esbuild/win32-x64": "npm:0.19.5" + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: f8ffe0cbab8a80ec63b6962b7d722da9e3dbe79a57d3cd998e107e35792068facd6f63e58ae19e919891456ed6cb73114a9777f0e7353ec8613b4fc75571d56d + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -27968,13 +30700,20 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.2, eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.4.2": + version: 3.4.2 + resolution: "eslint-visitor-keys@npm:3.4.2" + checksum: 04e7e9d546ba01611fb7dc9dc3484b088cb3fd7bad90312a8eb8b28bc8bf23aa191b0d45cdabc7ab67a7aaa8966e505aef7ff1571397a045857836a3e107fe6a + languageName: node + linkType: hard + "eslint@npm:8.41.0": version: 8.41.0 resolution: "eslint@npm:8.41.0" @@ -28178,7 +30917,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.5.2, espree@npm:^9.6.0, espree@npm:^9.6.1": +"espree@npm:^9.5.2, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" dependencies: @@ -28189,6 +30928,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0": + version: 9.6.0 + resolution: "espree@npm:9.6.0" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 870834c0ab188213ba56fae7003ff9fadbad2b9285dae941840c3d425cedbb2221ad3cffaabd217bc36b96eb80d651c2a2d9b0b1f3b9394b2358b27052c942e2 + languageName: node + linkType: hard + "esprima@npm:2.7.x, esprima@npm:^2.7.1": version: 2.7.3 resolution: "esprima@npm:2.7.3" @@ -28401,7 +31151,7 @@ __metadata: languageName: node linkType: hard -"eth-gas-reporter@npm:0.2.27, eth-gas-reporter@npm:^0.2.25": +"eth-gas-reporter@npm:0.2.27": version: 0.2.27 resolution: "eth-gas-reporter@npm:0.2.27" dependencies: @@ -28427,6 +31177,34 @@ __metadata: languageName: node linkType: hard +"eth-gas-reporter@npm:^0.2.25": + version: 0.2.25 + resolution: "eth-gas-reporter@npm:0.2.25" + dependencies: + "@ethersproject/abi": "npm:^5.0.0-beta.146" + "@solidity-parser/parser": "npm:^0.14.0" + cli-table3: "npm:^0.5.0" + colors: "npm:1.4.0" + ethereum-cryptography: "npm:^1.0.3" + ethers: "npm:^4.0.40" + fs-readdir-recursive: "npm:^1.1.0" + lodash: "npm:^4.17.14" + markdown-table: "npm:^1.1.3" + mocha: "npm:^7.1.1" + req-cwd: "npm:^2.0.0" + request: "npm:^2.88.0" + request-promise-native: "npm:^1.0.5" + sha1: "npm:^1.1.1" + sync-request: "npm:^6.0.0" + peerDependencies: + "@codechecks/client": ^0.1.0 + peerDependenciesMeta: + "@codechecks/client": + optional: true + checksum: 96c85f6bb684f79a6099383ba927bcc2756360dcb2e5635cf5dd2d97029e7620ab4349c7b5f3171b5da212ce747ec017552cb98676e6fd8511cceae1e1a8856e + languageName: node + linkType: hard + "eth-json-rpc-filters@npm:4.2.2": version: 4.2.2 resolution: "eth-json-rpc-filters@npm:4.2.2" @@ -29047,7 +31825,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^4.0.0-beta.1, ethers@npm:^4.0.20, ethers@npm:^4.0.32": +"ethers@npm:^4.0.0-beta.1, ethers@npm:^4.0.20, ethers@npm:^4.0.32, ethers@npm:^4.0.40": version: 4.0.49 resolution: "ethers@npm:4.0.49" dependencies: @@ -29621,7 +32399,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.1, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -29634,6 +32412,32 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.2.12": + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 641e748664ae0fdc4dadd23c812fd7d6c80cd92d451571cb1f81fa87edb750e917f25abf74fc9503c97438b0b67ecf75b738bb8e50a83b16bd2a88b4d64e81fa + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.0": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 51bcd15472879dfe51d4b01c5b70bbc7652724d39cdd082ba11276dbd7d84db0f6b33757e1938af8b2768a4bf485d9be0c89153beae24ee8331d6dcc7550379f + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -30975,6 +33779,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" @@ -31788,7 +34599,7 @@ __metadata: languageName: node linkType: hard -"graphql-request@npm:6.1.0, graphql-request@npm:^6.0.0": +"graphql-request@npm:6.1.0": version: 6.1.0 resolution: "graphql-request@npm:6.1.0" dependencies: @@ -31813,6 +34624,18 @@ __metadata: languageName: node linkType: hard +"graphql-request@npm:^6.0.0": + version: 6.0.0 + resolution: "graphql-request@npm:6.0.0" + dependencies: + "@graphql-typed-document-node/core": "npm:^3.2.0" + cross-fetch: "npm:^3.1.5" + peerDependencies: + graphql: 14 - 16 + checksum: d4b0831825c0a5732421cc0e9a15baef8772d1cb4371cba76aa265f247cbc602009ec4959ecb7ef087588c43277897e4f89ff9b6a97487f1525bb41de2f888f0 + languageName: node + linkType: hard + "graphql-tag@npm:2.12.6, graphql-tag@npm:^2.11.0, graphql-tag@npm:^2.12.6": version: 2.12.6 resolution: "graphql-tag@npm:2.12.6" @@ -31840,7 +34663,7 @@ __metadata: languageName: node linkType: hard -"graphql@npm:16.8.1, graphql@npm:^16.6.0": +"graphql@npm:16.8.1": version: 16.8.1 resolution: "graphql@npm:16.8.1" checksum: 7a09d3ec5f75061afe2bd2421a2d53cf37273d2ecaad8f34febea1f1ac205dfec2834aec3419fa0a10fcc9fb345863b2f893562fb07ea825da2ae82f6392893c @@ -31854,6 +34677,13 @@ __metadata: languageName: node linkType: hard +"graphql@npm:^16.6.0": + version: 16.6.0 + resolution: "graphql@npm:16.6.0" + checksum: f2ce5fdd5e1d8f66b40143b791e1063efe50b17071e0b06b30b8cd597a7fc08135d606586935db7e65dbd5ebbf207cd2f9b56c9c5cf4ad818f080d98f47282a4 + languageName: node + linkType: hard + "gray-matter@npm:4.0.3, gray-matter@npm:^4.0.3": version: 4.0.3 resolution: "gray-matter@npm:4.0.3" @@ -31921,7 +34751,7 @@ __metadata: languageName: node linkType: hard -"handlebars@npm:4.7.8, handlebars@npm:^4.0.1, handlebars@npm:^4.7.7": +"handlebars@npm:4.7.8": version: 4.7.8 resolution: "handlebars@npm:4.7.8" dependencies: @@ -31939,6 +34769,24 @@ __metadata: languageName: node linkType: hard +"handlebars@npm:^4.0.1, handlebars@npm:^4.7.7": + version: 4.7.7 + resolution: "handlebars@npm:4.7.7" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.0" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 617b1e689b7577734abc74564bdb8cdaddf8fd48ce72afdb489f426e9c60a7d6ee2a2707c023720c4059070128243c948bded8f2716e4543378033e3971b85ea + languageName: node + linkType: hard + "har-schema@npm:^2.0.0": version: 2.0.0 resolution: "har-schema@npm:2.0.0" @@ -32383,6 +35231,15 @@ __metadata: languageName: node linkType: hard +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: "npm:^1.1.1" + checksum: a449f3185b1d165026e8d25f6a8c3390bd25c201ff4b8c1aaf948fc6a5fcfd6507310b8c00c13a3325795ea9791fcc3d79d61eafa313b5750438fc19183df57b + languageName: node + linkType: hard + "has@npm:~1.0.3": version: 1.0.4 resolution: "has@npm:1.0.4" @@ -34093,7 +36950,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0": +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.5.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -34102,6 +36959,24 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.12.0": + version: 2.12.1 + resolution: "is-core-module@npm:2.12.1" + dependencies: + has: "npm:^1.0.3" + checksum: 35d5f90c95f7c737d287121e924bdfcad0a47b33efd7f89c58e9ab3810b43b1f1d377b641797326bde500e47edf5a7bf74a464e0c336a5c7e827b13fa41b57af + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: "npm:^1.0.3" + checksum: 55ccb5ccd208a1e088027065ee6438a99367e4c31c366b52fbaeac8fa23111cd17852111836d904da604801b3286d38d3d1ffa6cd7400231af8587f021099dc6 + languageName: node + linkType: hard + "is-data-descriptor@npm:^1.0.1": version: 1.0.1 resolution: "is-data-descriptor@npm:1.0.1" @@ -34651,7 +37526,20 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: "npm:^1.0.5" + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.0" + checksum: 2392b2473bbc994f5c30d6848e32bab3cab6c80b795aaec3020baf5419ff7df38fc11b3a043eb56d50f842394c578dbb204a7a29398099f895cf111c5b27f327 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.12": version: 1.1.12 resolution: "is-typed-array@npm:1.1.12" dependencies: @@ -35063,7 +37951,7 @@ __metadata: languageName: node linkType: hard -"jake@npm:^10.6.1, jake@npm:^10.8.5": +"jake@npm:^10.6.1": version: 10.8.7 resolution: "jake@npm:10.8.7" dependencies: @@ -35077,6 +37965,20 @@ __metadata: languageName: node linkType: hard +"jake@npm:^10.8.5": + version: 10.8.6 + resolution: "jake@npm:10.8.6" + dependencies: + async: "npm:^3.2.3" + chalk: "npm:^4.0.2" + filelist: "npm:^1.0.4" + minimatch: "npm:^3.1.2" + bin: + jake: bin/cli.js + checksum: 2d1cce4ed12c1fee792842d20d7129029cb1a6ee13737ada6380d4ecfcf2d364c862c4fb6583faac8b8b98a1a2e41e9899db1d6f24621268872774c3c53bdcc4 + languageName: node + linkType: hard + "jayson@npm:4.0.0": version: 4.0.0 resolution: "jayson@npm:4.0.0" @@ -37284,6 +40186,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.1": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: "npm:^2.0.0" + checksum: 8e695f3c99d9670d524767bc2bcbf799444b865d1d05e974d6dc53d72863c2ce9990103f311f89f04019f064e5ae7bbe70f3fba030a57d65aacfb951aad34d9f + languageName: node + linkType: hard + "loupe@npm:^2.3.6": version: 2.3.7 resolution: "loupe@npm:2.3.7" @@ -37357,7 +40268,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.0.2, lru-cache@npm:^9.1.1 || ^10.0.0": +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.0.2": version: 10.1.0 resolution: "lru-cache@npm:10.1.0" checksum: 207278d6fa711fb1f94a0835d4d4737441d2475302482a14785b10515e4c906a57ebf9f35bf060740c9560e91c7c1ad5a04fd7ed030972a9ba18bce2a228e95b @@ -37382,6 +40293,20 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^9.1.1": + version: 9.1.1 + resolution: "lru-cache@npm:9.1.1" + checksum: bf0b62d5fd7b769f40a73f7dc41f12f0f24bc543277f78681bd36d9a684a09233b0c8a188d8c996b319f803410808a1e57ab99cd60e33b9b7b2728b08e31c7ff + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.0 + resolution: "lru-cache@npm:10.0.0" + checksum: 590e00d6ccd76a1ada056585be3fd6dbddda395fc9359390cff38669c69c3fa1792dd6c4c46a9b1b411f032cd2e979d9e664f1628163292ecdfeada98c3da1f3 + languageName: node + linkType: hard + "lru-queue@npm:^0.1.0": version: 0.1.0 resolution: "lru-queue@npm:0.1.0" @@ -37453,7 +40378,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.1, magic-string@npm:^0.30.3": +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.3": version: 0.30.5 resolution: "magic-string@npm:0.30.5" dependencies: @@ -37462,6 +40387,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.1": + version: 0.30.1 + resolution: "magic-string@npm:0.30.1" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + checksum: 35303570586e1074c1486f4e0065d8dbc45539e2e486336d7f898f75d2b1e4556eabd24ec6be34dd6cb9bb5df1d5b162284118ef7911e3c94315be9ebc195a29 + languageName: node + linkType: hard + "make-dir@npm:^1.0.0": version: 1.3.0 resolution: "make-dir@npm:1.3.0" @@ -39274,7 +42208,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -39310,6 +42244,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^7.4.3": + version: 7.4.6 + resolution: "minimatch@npm:7.4.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 0046ba1161ac6414bde1b07c440792ebcdb2ed93e6714c85c73974332b709b7e692801550bc9da22028a8613407b3f13861e17dd0dd44f4babdeacd44950430b + languageName: node + linkType: hard + "minimatch@npm:^8.0.2": version: 8.0.4 resolution: "minimatch@npm:8.0.4" @@ -39319,6 +42262,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.0": + version: 9.0.0 + resolution: "minimatch@npm:9.0.0" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: a7653b37c4a6f0dcf98b5bc6ad10926c193b94ac83de5e7f7e462c137075feb8cfac7fa02963438ab401f504f043f9ea13a2d3f57a71e49307f8867af34296f5 + languageName: node + linkType: hard + "minimist@npm:0.0.5": version: 0.0.5 resolution: "minimist@npm:0.0.5" @@ -39417,6 +42369,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^5.0.0 || ^6.0.0": + version: 6.0.1 + resolution: "minipass@npm:6.0.1" + checksum: 08b8b0e5b0a84e895b1c64cc39a96e9bb3438f5ce9a7bec9e8357794ae4775d9010245e25b3b19b58af6efaf9d5cab59bb3b02681c871d384c256ac8888e19f6 + languageName: node + linkType: hard + "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": version: 7.0.4 resolution: "minipass@npm:7.0.4" @@ -39509,7 +42468,16 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.2.0, mlly@npm:^1.4.0, mlly@npm:^1.4.2": +"mkdirp@npm:^2.1.6": + version: 2.1.6 + resolution: "mkdirp@npm:2.1.6" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 4672fadb94dca8d2eafeb6fff53f2c5ea74e885565ef23251791709064f216105167c2387088c61ef068901bd0776648999785e341d74728164fa551b1c65996 + languageName: node + linkType: hard + +"mlly@npm:^1.2.0, mlly@npm:^1.4.2": version: 1.4.2 resolution: "mlly@npm:1.4.2" dependencies: @@ -39521,6 +42489,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.4.0": + version: 1.4.0 + resolution: "mlly@npm:1.4.0" + dependencies: + acorn: "npm:^8.9.0" + pathe: "npm:^1.1.1" + pkg-types: "npm:^1.0.3" + ufo: "npm:^1.1.2" + checksum: a4bb3bb9e58a8516a4ad4c29036b5500814f269bfa5663bb923561102cc6de6fcc7de71fad6ba7a8af76d46c713bfe97e24bba9436967ad11f7fbcfb92ea4ba3 + languageName: node + linkType: hard + "mnemonist@npm:^0.38.0, mnemonist@npm:^0.38.3": version: 0.38.5 resolution: "mnemonist@npm:0.38.5" @@ -39597,6 +42577,41 @@ __metadata: languageName: node linkType: hard +"mocha@npm:^7.1.1": + version: 7.2.0 + resolution: "mocha@npm:7.2.0" + dependencies: + ansi-colors: "npm:3.2.3" + browser-stdout: "npm:1.3.1" + chokidar: "npm:3.3.0" + debug: "npm:3.2.6" + diff: "npm:3.5.0" + escape-string-regexp: "npm:1.0.5" + find-up: "npm:3.0.0" + glob: "npm:7.1.3" + growl: "npm:1.10.5" + he: "npm:1.2.0" + js-yaml: "npm:3.13.1" + log-symbols: "npm:3.0.0" + minimatch: "npm:3.0.4" + mkdirp: "npm:0.5.5" + ms: "npm:2.1.1" + node-environment-flags: "npm:1.0.6" + object.assign: "npm:4.1.0" + strip-json-comments: "npm:2.0.1" + supports-color: "npm:6.0.0" + which: "npm:1.3.1" + wide-align: "npm:1.1.3" + yargs: "npm:13.3.2" + yargs-parser: "npm:13.1.2" + yargs-unparser: "npm:1.6.0" + bin: + _mocha: bin/_mocha + mocha: bin/mocha + checksum: 3f7630fc5aecd1497a13ffa8ac98a5db6d91a9f0232d12f5d258c17da187ab1ec53192e4947443d96174785256036b711e0d3cd6f99fd5766b29c801836fe6c1 + languageName: node + linkType: hard + "mock-fs@npm:^4.1.0": version: 4.14.0 resolution: "mock-fs@npm:4.14.0" @@ -39933,7 +42948,7 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.14.0, nan@npm:^2.16.0": +"nan@npm:^2.14.0, nan@npm:^2.16.0, nan@npm:^2.17.0": version: 2.18.0 resolution: "nan@npm:2.18.0" dependencies: @@ -40088,7 +43103,7 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.5.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": +"neo-async@npm:^2.5.0, neo-async@npm:^2.6.0, neo-async@npm:^2.6.1, neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: 1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 @@ -40720,6 +43735,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.12, node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: c9bb813aab2717ff8b3015ecd4c7c5670a5546e9577699a7c84e8d69230cd3b1ce8f863f8e9b50f18b19a5ffa4b9c1a706bbbfe4c378de955fedbab04488a338 + languageName: node + linkType: hard + "node-releases@npm:^2.0.14": version: 2.0.14 resolution: "node-releases@npm:2.0.14" @@ -40727,6 +43749,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.8": + version: 2.0.10 + resolution: "node-releases@npm:2.0.10" + checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc + languageName: node + linkType: hard + "node-source-walk@npm:^6.0.0, node-source-walk@npm:^6.0.1, node-source-walk@npm:^6.0.2": version: 6.0.2 resolution: "node-source-walk@npm:6.0.2" @@ -42346,7 +45375,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.10.1, path-scurry@npm:^1.6.1": +"path-scurry@npm:^1.10.1": version: 1.10.1 resolution: "path-scurry@npm:1.10.1" dependencies: @@ -42356,6 +45385,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.6.1": + version: 1.9.1 + resolution: "path-scurry@npm:1.9.1" + dependencies: + lru-cache: "npm:^9.1.1" + minipass: "npm:^5.0.0 || ^6.0.0" + checksum: ef3f8d17cdba8c166de0fc0ffb7ed7665821fa0bb78873758d4e8f73e1a3111b19084bacded34d689e17ab9e61a9563b746d3cf172a12ec30c2146d2c0b3ef48 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -42512,6 +45551,13 @@ __metadata: languageName: node linkType: hard +"pg-connection-string@npm:^2.6.1": + version: 2.6.1 + resolution: "pg-connection-string@npm:2.6.1" + checksum: 882344a47e1ecf3a91383e0809bf2ac48facea97fcec0358d6e060e1cbcb8737acde419b4c86f05da4ce4a16634ee50fff1d2bb787d73b52ccbfde697243ad8a + languageName: node + linkType: hard + "pg-int8@npm:1.0.1": version: 1.0.1 resolution: "pg-int8@npm:1.0.1" @@ -42570,7 +45616,7 @@ __metadata: languageName: node linkType: hard -"pg@npm:8.11.3, pg@npm:>=6.5 <9": +"pg@npm:8.11.3": version: 8.11.3 resolution: "pg@npm:8.11.3" dependencies: @@ -42594,6 +45640,30 @@ __metadata: languageName: node linkType: hard +"pg@npm:>=6.5 <9": + version: 8.11.1 + resolution: "pg@npm:8.11.1" + dependencies: + buffer-writer: "npm:2.0.0" + packet-reader: "npm:1.0.0" + pg-cloudflare: "npm:^1.1.1" + pg-connection-string: "npm:^2.6.1" + pg-pool: "npm:^3.6.1" + pg-protocol: "npm:^1.6.0" + pg-types: "npm:^2.1.0" + pgpass: "npm:1.x" + peerDependencies: + pg-native: ">=3.0.1" + dependenciesMeta: + pg-cloudflare: + optional: true + peerDependenciesMeta: + pg-native: + optional: true + checksum: 3ad52f84c09c8978e3286b92ed2b8e50171f96eefb9583c0642dac2bd5ffd2b095963c2950f624aa1f3c7873b3a95218e9bf88bd2642cf0f80b76654e8633d3c + languageName: node + linkType: hard + "pgpass@npm:1.x": version: 1.0.5 resolution: "pgpass@npm:1.0.5" @@ -42760,6 +45830,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.5": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: 3728bae0cf6c18c3d25f5449ee8c5bc1a6a83bca688abe0e1654ce8c069bfd408170397cef133ed9ec8b0faeb4093c5c728d0e72ab7b3385256cd87008c40364 + languageName: node + linkType: hard + "pkg-dir@npm:^3.0.0": version: 3.0.0 resolution: "pkg-dir@npm:3.0.0" @@ -43444,7 +46521,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.32, postcss@npm:^8.4.17, postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.26, postcss@npm:^8.4.27, postcss@npm:^8.4.32": +"postcss@npm:8.4.32, postcss@npm:^8.4.27, postcss@npm:^8.4.32": version: 8.4.32 resolution: "postcss@npm:8.4.32" dependencies: @@ -43465,6 +46542,28 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.17, postcss@npm:^8.4.21, postcss@npm:^8.4.26": + version: 8.4.27 + resolution: "postcss@npm:8.4.27" + dependencies: + nanoid: "npm:^3.3.6" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.0.2" + checksum: 57143e3c5ddaba9813ebd81de3e38e3ac198b0a1634e57752d29cd4936f1301eba38e43bda1302859679af047a6efc4366952d294c64358f8b90fbf49ba7d121 + languageName: node + linkType: hard + +"postcss@npm:^8.4.23": + version: 8.4.23 + resolution: "postcss@npm:8.4.23" + dependencies: + nanoid: "npm:^3.3.6" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.0.2" + checksum: 4171086e54a90b5d9e7e043b3ea4acf5dce808f3501ebf7bf10caaff73f69a5c8d0dff7036752a648beb6317777d144af5b5b8b3ef9a84428630308735df07c2 + languageName: node + linkType: hard + "postgres-array@npm:~2.0.0": version: 2.0.0 resolution: "postgres-array@npm:2.0.0" @@ -44036,7 +47135,7 @@ __metadata: languageName: node linkType: hard -"proper-lockfile@npm:^4.1.1": +"proper-lockfile@npm:^4.1.1, proper-lockfile@npm:^4.1.2": version: 4.1.2 resolution: "proper-lockfile@npm:4.1.2" dependencies: @@ -44850,7 +47949,7 @@ __metadata: languageName: node linkType: hard -"react-fast-compare@npm:^3.2.0, react-fast-compare@npm:^3.2.2": +"react-fast-compare@npm:^3.2.0": version: 3.2.2 resolution: "react-fast-compare@npm:3.2.2" checksum: a6826180ba75cefba1c8d3ac539735f9b627ca05d3d307fe155487f5d0228d376dac6c9708d04a283a7b9f9aee599b637446635b79c8c8753d0b4eece56c125c @@ -44898,21 +47997,7 @@ __metadata: languageName: node linkType: hard -"react-helmet-async@npm:*": - version: 2.0.4 - resolution: "react-helmet-async@npm:2.0.4" - dependencies: - invariant: "npm:^2.2.4" - react-fast-compare: "npm:^3.2.2" - shallowequal: "npm:^1.1.0" - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - checksum: 8f18cb27e8f5821811d715906b5fe279d4ce7e1e0ef1a565d90d64db386d2e4676fe7f4182d27393eccf7b03ace7d65fb4c406f945d43de3b57acaaa54711831 - languageName: node - linkType: hard - -"react-helmet-async@npm:^1.3.0": +"react-helmet-async@npm:*, react-helmet-async@npm:^1.3.0": version: 1.3.0 resolution: "react-helmet-async@npm:1.3.0" dependencies: @@ -45747,6 +48832,15 @@ __metadata: languageName: node linkType: hard +"regenerator-transform@npm:^0.15.1": + version: 0.15.1 + resolution: "regenerator-transform@npm:0.15.1" + dependencies: + "@babel/runtime": "npm:^7.8.4" + checksum: 52a14f325a4e4b422b4019f12e969a4a221db35ccc4cf2b13b9e70a5c7ab276503888338bdfca21f8393ce1dd7adcf9e08557f60d42bf2aec7f6a65a27cde6d0 + languageName: node + linkType: hard + "regenerator-transform@npm:^0.15.2": version: 0.15.2 resolution: "regenerator-transform@npm:0.15.2" @@ -46160,7 +49254,7 @@ __metadata: languageName: node linkType: hard -"request-promise-native@npm:1.0.9": +"request-promise-native@npm:1.0.9, request-promise-native@npm:^1.0.5": version: 1.0.9 resolution: "request-promise-native@npm:1.0.9" dependencies: @@ -46173,7 +49267,7 @@ __metadata: languageName: node linkType: hard -"request@npm:2.88.2, request@npm:^2.79.0, request@npm:^2.85.0": +"request@npm:2.88.2, request@npm:^2.79.0, request@npm:^2.85.0, request@npm:^2.88.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -46350,7 +49444,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.4, resolve@npm:^1.3.2, resolve@npm:~1.22.6": +"resolve@npm:1.22.8, resolve@npm:^1.22.4, resolve@npm:~1.22.6": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -46363,6 +49457,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.3.2": + version: 1.22.3 + resolution: "resolve@npm:1.22.3" + dependencies: + is-core-module: "npm:^2.12.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 3d733800d5f7525df912e9c4a68ee14574f42fa3676651debe6d2f6f55f8eef35626ad6330745da52943d695760f1ac7ee85b2c24f48be111f744aba7cb2e06d + languageName: node + linkType: hard + "resolve@npm:^2.0.0-next.1, resolve@npm:^2.0.0-next.4": version: 2.0.0-next.5 resolution: "resolve@npm:2.0.0-next.5" @@ -46392,7 +49499,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.3.2#optional!builtin, resolve@patch:resolve@npm%3A~1.22.6#optional!builtin": +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A~1.22.6#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -46405,6 +49512,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.3.2#optional!builtin": + version: 1.22.3 + resolution: "resolve@patch:resolve@npm%3A1.22.3#optional!builtin::version=1.22.3&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.12.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: b775dffbad4d4ed3ae498a37d33a96282d64de50955f7642258aeaa2886e419598f4dfe837c0e31bcc6eb448287c1578e899dffe49eca76ef393bf8605a3b543 + languageName: node + linkType: hard + "resolve@patch:resolve@npm%3A^2.0.0-next.1#optional!builtin, resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin": version: 2.0.0-next.5 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" @@ -48520,7 +51640,7 @@ __metadata: languageName: node linkType: hard -"split-ca@npm:^1.0.0": +"split-ca@npm:^1.0.0, split-ca@npm:^1.0.1": version: 1.0.1 resolution: "split-ca@npm:1.0.1" checksum: 1e7409938a95ee843fe2593156a5735e6ee63772748ee448ea8477a5a3e3abde193c3325b3696e56a5aff07c7dcf6b1f6a2f2a036895b4f3afe96abb366d893f @@ -48606,6 +51726,23 @@ __metadata: languageName: node linkType: hard +"ssh2@npm:^1.11.0": + version: 1.14.0 + resolution: "ssh2@npm:1.14.0" + dependencies: + asn1: "npm:^0.2.6" + bcrypt-pbkdf: "npm:^1.0.2" + cpu-features: "npm:~0.0.8" + nan: "npm:^2.17.0" + dependenciesMeta: + cpu-features: + optional: true + nan: + optional: true + checksum: 95f1114f26a6b5bfb94c14de1513e37207bcffb096e8b315faa2b31539e7c8f98071e6fc0e3fd709d685b55ebc74b0206edc6ae5a4df833991641f02fdc863e2 + languageName: node + linkType: hard + "sshpk@npm:^1.7.0": version: 1.18.0 resolution: "sshpk@npm:1.18.0" @@ -49909,6 +53046,18 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:~2.0.1": + version: 2.0.1 + resolution: "tar-fs@npm:2.0.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.0.0" + checksum: 85ceac6fce0e9175b5b67c0eca8864b7d29a940cae8b7657c60b66e8a252319d701c3df12814162a6839e6120f9e1975757293bdeaf294ad5b15721d236c4d32 + languageName: node + linkType: hard + "tar-stream@npm:^1.1.2, tar-stream@npm:^1.5.2": version: 1.6.2 resolution: "tar-stream@npm:1.6.2" @@ -49924,7 +53073,7 @@ __metadata: languageName: node linkType: hard -"tar-stream@npm:^2.1.4, tar-stream@npm:^2.2.0": +"tar-stream@npm:^2.0.0, tar-stream@npm:^2.1.4, tar-stream@npm:^2.2.0": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: @@ -50396,13 +53545,20 @@ __metadata: languageName: node linkType: hard -"tinyspy@npm:^2.1.0, tinyspy@npm:^2.1.1": +"tinyspy@npm:^2.1.0": version: 2.2.0 resolution: "tinyspy@npm:2.2.0" checksum: bcc5a08c2dc7574d32e6dcc2e760ad95a3cf30249c22799815b6389179427c95573d27d2d965ebc5fca2b6d338c46678cd7337ea2a9cebacee3dc662176b07cb languageName: node linkType: hard +"tinyspy@npm:^2.1.1": + version: 2.1.1 + resolution: "tinyspy@npm:2.1.1" + checksum: eb46c90cfb6359a78cf36d2eb1b80d219e7ce8bb4ce5d5e233f91e21b9a546b28ac55a5ebbeb3717fed21bd487b0cd25909c223acc6db9b37db5ed97baf976c0 + languageName: node + linkType: hard + "title-case@npm:^2.1.0": version: 2.1.1 resolution: "title-case@npm:2.1.1" @@ -50825,6 +53981,16 @@ __metadata: languageName: node linkType: hard +"ts-morph@npm:^20.0.0": + version: 20.0.0 + resolution: "ts-morph@npm:20.0.0" + dependencies: + "@ts-morph/common": "npm:~0.21.0" + code-block-writer: "npm:^12.0.0" + checksum: e93cf96fd347d45c1031de90f50146707959e1564d6e0bdd4abefc32004717f4f2adf5e155956c80f04fca55f6f1bce79193077c0041616ce9fe619bc15159d0 + languageName: node + linkType: hard + "ts-node@npm:10.9.2, ts-node@npm:>=8.0.0, ts-node@npm:^10.9.1": version: 10.9.2 resolution: "ts-node@npm:10.9.2" @@ -50942,13 +54108,27 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.5.2, tslib@npm:^2.6.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca languageName: node linkType: hard +"tslib@npm:^2.2.0, tslib@npm:~2.5.0": + version: 2.5.3 + resolution: "tslib@npm:2.5.3" + checksum: d507e60ebe2480af4efc1655dfdb2762bb6ca57d76c4ba680375af801493648c2e97808bbd7e54691eb40e33a7e2e793cdef9c24ce6a8539b03cac8b26e09a61 + languageName: node + linkType: hard + +"tslib@npm:^2.5.2": + version: 2.5.2 + resolution: "tslib@npm:2.5.2" + checksum: 263607d3f0e1913eb7f1f0f02489f47d11717b8662176b60690adceb2ed64529f369998b967a0bed920a5b809300f882a9340d278701d62439e4ce35af0d5a1f + languageName: node + linkType: hard + "tslib@npm:~2.4.0": version: 2.4.1 resolution: "tslib@npm:2.4.1" @@ -50956,13 +54136,6 @@ __metadata: languageName: node linkType: hard -"tslib@npm:~2.5.0": - version: 2.5.3 - resolution: "tslib@npm:2.5.3" - checksum: d507e60ebe2480af4efc1655dfdb2762bb6ca57d76c4ba680375af801493648c2e97808bbd7e54691eb40e33a7e2e793cdef9c24ce6a8539b03cac8b26e09a61 - languageName: node - linkType: hard - "tslint-config-prettier@npm:1.18.0": version: 1.18.0 resolution: "tslint-config-prettier@npm:1.18.0" @@ -51157,7 +54330,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d @@ -51365,7 +54538,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.3.3, typescript@npm:>=4.5.0, typescript@npm:^5.0.0, typescript@npm:^5.0.4, typescript@npm:^5.2.2": +"typescript@npm:5.3.3, typescript@npm:>=4.5.0, typescript@npm:^5.0.0, typescript@npm:^5.0.4": version: 5.3.3 resolution: "typescript@npm:5.3.3" bin: @@ -51375,6 +54548,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: d65e50eb849bd21ff8677e5b9447f9c6e74777e346afd67754934264dcbf4bd59e7d2473f6062d9a015d66bd573311166357e3eb07fea0b52859cf9bb2b58555 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A5.0.4#optional!builtin": version: 5.0.4 resolution: "typescript@patch:typescript@npm%3A5.0.4#optional!builtin::version=5.0.4&hash=b5f058" @@ -51395,7 +54578,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.3.3#optional!builtin, typescript@patch:typescript@npm%3A>=4.5.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin, typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": +"typescript@patch:typescript@npm%3A5.3.3#optional!builtin, typescript@patch:typescript@npm%3A>=4.5.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": version: 5.3.3 resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" bin: @@ -51405,6 +54588,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#optional!builtin::version=5.2.2&hash=f3b441" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: f79cc2ba802c94c2b78dbb00d767a10adb67368ae764709737dc277273ec148aa4558033a03ce901406b35fddf4eac46dabc94a1e1d12d2587e2b9cfe5707b4a + languageName: node + linkType: hard + "typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": version: 1.2.0 resolution: "typewise-core@npm:1.2.0" @@ -51449,6 +54642,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.1.2": + version: 1.1.2 + resolution: "ufo@npm:1.1.2" + checksum: 82468cde70cf692242660eeaeac71b2ebd6573c6a5405e17e2d4ccd905f9070d465cfce8e6c4f873178aec6ce00d69e5a8ed8bc2ff58d085511ae3938014a80d + languageName: node + linkType: hard + "ufo@npm:^1.3.0, ufo@npm:^1.3.1, ufo@npm:^1.3.2": version: 1.3.2 resolution: "ufo@npm:1.3.2" @@ -51581,7 +54781,7 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.14.0, undici@npm:^5.22.1, undici@npm:^5.28.2": +"undici@npm:^5.14.0, undici@npm:^5.28.2": version: 5.28.2 resolution: "undici@npm:5.28.2" dependencies: @@ -51590,6 +54790,15 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.22.1": + version: 5.25.2 + resolution: "undici@npm:5.25.2" + dependencies: + busboy: "npm:^1.6.0" + checksum: 13112f69a4b0dd8d8cd1372fc051d8af682763edaf858f526237073e00676544de78e532ae0f3277ce1f330575792770a0c6e291bb719ec261a2b8212e97ac72 + languageName: node + linkType: hard + "unenv@npm:^1.8.0": version: 1.9.0 resolution: "unenv@npm:1.9.0" @@ -52119,6 +55328,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.0.10, update-browserslist-db@npm:^1.0.11": + version: 1.0.11 + resolution: "update-browserslist-db@npm:1.0.11" + dependencies: + escalade: "npm:^3.1.1" + picocolors: "npm:^1.0.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: cc1c7a38d15413046bea28ff3c7668a7cb6b4a53d83e8089fa960efd896deb6d1a9deffc2beb8dc0506186a352c8d19804efe5ec7eeb401037e14cf3ea5363f8 + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -52530,7 +55753,7 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.0, v8-to-istanbul@npm:^9.1.0": +"v8-to-istanbul@npm:^9.0.0": version: 9.2.0 resolution: "v8-to-istanbul@npm:9.2.0" dependencies: @@ -52541,6 +55764,17 @@ __metadata: languageName: node linkType: hard +"v8-to-istanbul@npm:^9.1.0": + version: 9.1.3 + resolution: "v8-to-istanbul@npm:9.1.3" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^2.0.0" + checksum: d6ce9f6d97c53a401098fe42018f32be81c99830bcf44ee2717332e20a7df3e364a3f322c10dab4ea94488e81dde462295149cdfb44f48e8ef2829e3afd09752 + languageName: node + linkType: hard + "v8flags@npm:^3.1.1": version: 3.2.0 resolution: "v8flags@npm:3.2.0" @@ -55763,7 +58997,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13": version: 1.1.13 resolution: "which-typed-array@npm:1.1.13" dependencies: @@ -55776,6 +59010,20 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: "npm:^1.0.5" + call-bind: "npm:^1.0.2" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.0" + is-typed-array: "npm:^1.1.10" + checksum: 90ef760a09dcffc479138a6bc77fd2933a81a41d531f4886ae212f6edb54a0645a43a6c24de2c096aea910430035ac56b3d22a06f3d64e5163fa178d0f24e08e + languageName: node + linkType: hard + "which@npm:1.3.1, which@npm:^1.1.1, which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -56475,13 +59723,20 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.3.4, yaml@npm:^2.1.3, yaml@npm:^2.3.4": +"yaml@npm:2.3.4, yaml@npm:^2.3.4": version: 2.3.4 resolution: "yaml@npm:2.3.4" checksum: f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b languageName: node linkType: hard +"yaml@npm:^2.1.3": + version: 2.3.1 + resolution: "yaml@npm:2.3.1" + checksum: 66501d597e43766eb94dc175d28ec8b2c63087d6a78783e59b4218eee32b9172740f9f27d54b7bc0ca8af61422f7134929f9974faeaac99d583787e793852fd2 + languageName: node + linkType: hard + "yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": version: 13.1.2 resolution: "yargs-parser@npm:13.1.2" @@ -56809,6 +60064,15 @@ __metadata: languageName: node linkType: hard +"zksync2-js@npm:0.4.0": + version: 0.4.0 + resolution: "zksync2-js@npm:0.4.0" + peerDependencies: + ethers: ^6.7.1 + checksum: 0bdd60a70a6fd6eca827f112a69b27f3462ab04aa4ffa54b65651d995d0fbfd6e4d11bef363eddac73682888e368b71f2fe1036edb8417727ac5f85bfb49edd9 + languageName: node + linkType: hard + "zod-to-json-schema@npm:3.21.4": version: 3.21.4 resolution: "zod-to-json-schema@npm:3.21.4" From 53b62d782278f3118bc9677df5954c32ed0eb06c Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Wed, 6 Dec 2023 16:34:22 -0500 Subject: [PATCH 05/51] lint --- governance/hardhat.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index 809e456cc1a..05cbc45714a 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -54,7 +54,6 @@ require('./tasks/set') require('./tasks/unlock') require('./tasks/lock') -console.log(networks) /** * @type import('hardhat/config').HardhatUserConfig */ From 7b80514daee83e55fbb20d4c21eed9dd6d38802b Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Wed, 6 Dec 2023 16:59:00 -0500 Subject: [PATCH 06/51] undue change --- smart-contracts/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/smart-contracts/README.md b/smart-contracts/README.md index e87b0205007..ffd1fa494be 100644 --- a/smart-contracts/README.md +++ b/smart-contracts/README.md @@ -69,8 +69,6 @@ To set up a network for deployment, change `networks.js` to add your networks an We use the `DEPLOYER_PRIVATE_KEY` environment variable to interact with contracts. Please set it. -======== Move to Goevrnance? - ### Run the UDT contract upgrade Once your network are setup, you can run the UDT contract upgrade From 7bb7932318f192c995c0e4ddfbe80023dc3f2da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 7 Dec 2023 11:18:47 +0100 Subject: [PATCH 07/51] set zksync flag --- packages/hardhat-helpers/src/networks.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 111b9244092..7ba741c5166 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -55,8 +55,10 @@ Object.keys(networks).forEach((key) => { name: networks[key].name, url: networks[key].provider, accounts: getAccounts(networks[key].name), + zksync: key === 'zkync', } } + // duplicate xdai record as gnosis if (key === 'xdai') { hardhatNetworks['gnosis'] = { From f5ca5d90a5192a9e2b86a0e2f0c7304b94a9d400 Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Fri, 8 Dec 2023 16:13:02 -0500 Subject: [PATCH 08/51] wip --- governance/.openzeppelin/goerli.json | 264 ++++++++++++++++++ .../48c222324acb914e3948af93623d7ce8.json | 1 + governance/cache-zk/solidity-files-cache.json | 94 +++++++ governance/package.json | 7 +- packages/hardhat-helpers/src/networks.js | 2 +- packages/hardhat-helpers/src/upgrades.js | 2 +- yarn.lock | 119 +++----- 7 files changed, 400 insertions(+), 89 deletions(-) create mode 100644 governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json create mode 100644 governance/cache-zk/solidity-files-cache.json diff --git a/governance/.openzeppelin/goerli.json b/governance/.openzeppelin/goerli.json index ebeec7c699d..2cceedd5814 100644 --- a/governance/.openzeppelin/goerli.json +++ b/governance/.openzeppelin/goerli.json @@ -39,6 +39,11 @@ "address": "0x627118a4fB747016911e5cDA82e2E77C531e8206", "txHash": "0x3971c2eb3bcbf6a9529e96f67e7d33661e15d2e856ec9d6a3fce60d8f4303eb2", "kind": "transparent" + }, + { + "address": "0x6869eD4de72532310E8d995773b05DD79F185Ad7", + "txHash": "0x66436fbaddd795128d946b14ec3cdddfe2419f71e5d6a8781ce0dd64e9965a49", + "kind": "transparent" } ], "impls": { @@ -800,6 +805,265 @@ } } } + }, + "f8c45c6464f6e26e04e38fc842d56ec0a80ff43662fc93d4e83ef71c0c9ca4de": { + "address": "0xD15EBd9F260f668CBD6733339e7741c246fe4494", + "txHash": "0x8b4ef63c00010083b724913bdd9b3b288d8da3479e06665dc696cba1062c9535", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "UnlockInitializable", + "src": "contracts/past-versions/UnlockV12.sol:2346" + }, + { + "label": "initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "UnlockInitializable", + "src": "contracts/past-versions/UnlockV12.sol:2351" + }, + { + "label": "______gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "UnlockContextUpgradeable", + "src": "contracts/past-versions/UnlockV12.sol:2423" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "UnlockOwnable", + "src": "contracts/past-versions/UnlockV12.sol:2449" + }, + { + "label": "______gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)50_storage", + "contract": "UnlockOwnable", + "src": "contracts/past-versions/UnlockV12.sol:2515" + }, + { + "label": "grossNetworkProduct", + "offset": 0, + "slot": "102", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2568" + }, + { + "label": "totalDiscountGranted", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2570" + }, + { + "label": "locks", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_struct(LockBalances)2798_storage)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2573" + }, + { + "label": "globalBaseTokenURI", + "offset": 0, + "slot": "105", + "type": "t_string_storage", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2577" + }, + { + "label": "globalTokenSymbol", + "offset": 0, + "slot": "106", + "type": "t_string_storage", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2581" + }, + { + "label": "publicLockAddress", + "offset": 0, + "slot": "107", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2584" + }, + { + "label": "uniswapOracles", + "offset": 0, + "slot": "108", + "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)1948)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2588" + }, + { + "label": "weth", + "offset": 0, + "slot": "109", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2591" + }, + { + "label": "udt", + "offset": 0, + "slot": "110", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2594" + }, + { + "label": "estimatedGasForPurchase", + "offset": 0, + "slot": "111", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2597" + }, + { + "label": "chainId", + "offset": 0, + "slot": "112", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2600" + }, + { + "label": "proxyAdminAddress", + "offset": 0, + "slot": "113", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2603" + }, + { + "label": "proxyAdmin", + "offset": 0, + "slot": "114", + "type": "t_contract(ProxyAdmin)1215", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2604" + }, + { + "label": "_publicLockVersions", + "offset": 0, + "slot": "115", + "type": "t_mapping(t_address,t_uint16)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2607" + }, + { + "label": "_publicLockImpls", + "offset": 0, + "slot": "116", + "type": "t_mapping(t_uint16,t_address)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2608" + }, + { + "label": "publicLockLatestVersion", + "offset": 0, + "slot": "117", + "type": "t_uint16", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2609" + }, + { + "label": "protocolFee", + "offset": 0, + "slot": "118", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV12.sol:2612" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IUniswapOracleV3)1948": { + "label": "contract IUniswapOracleV3", + "numberOfBytes": "20" + }, + "t_contract(ProxyAdmin)1215": { + "label": "contract ProxyAdmin", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_contract(IUniswapOracleV3)1948)": { + "label": "mapping(address => contract IUniswapOracleV3)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(LockBalances)2798_storage)": { + "label": "mapping(address => struct Unlock.LockBalances)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint16)": { + "label": "mapping(address => uint16)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint16,t_address)": { + "label": "mapping(uint16 => address)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(LockBalances)2798_storage": { + "label": "struct Unlock.LockBalances", + "members": [ + { + "label": "deployed", + "type": "t_bool", + "offset": 0, + "slot": "0" + }, + { + "label": "totalSales", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "yieldedDiscountTokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + } + } } } } diff --git a/governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json b/governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json new file mode 100644 index 00000000000..b10f0aa660e --- /dev/null +++ b/governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json @@ -0,0 +1 @@ +{"id":"48c222324acb914e3948af93623d7ce8","_format":"hh-sol-build-info-1","solcVersion":"0.8.21","solcLongVersion":"0.8.21+commit.d9974bed","input":{"language":"Solidity","sources":{"contracts/past-versions/UnlockV12.sol":{"content":"// Sources flattened with hardhat v2.12.6 https://hardhat.org\n\n// File @openzeppelin/contracts/utils/Context.sol@v4.8.2\n\n// SPDX-License-Identifier: MIT\n\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n\n// File @openzeppelin/contracts/access/Ownable.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n\n// File @openzeppelin/contracts/interfaces/draft-IERC1822.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n\n// File @openzeppelin/contracts/proxy/beacon/IBeacon.sol@v4.8.2\n\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n\n// File @openzeppelin/contracts/utils/Address.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(\n success,\n \"Address: unable to send value, recipient may have reverted\"\n );\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(\n target,\n data,\n value,\n \"Address: low-level call with value failed\"\n );\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(\n address(this).balance >= value,\n \"Address: insufficient balance for call\"\n );\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data\n ) internal view returns (bytes memory) {\n return\n functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return\n functionDelegateCall(\n target,\n data,\n \"Address: low-level delegate call failed\"\n );\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(\n bytes memory returndata,\n string memory errorMessage\n ) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n}\n\n// File @openzeppelin/contracts/utils/StorageSlot.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(\n bytes32 slot\n ) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(\n bytes32 slot\n ) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(\n bytes32 slot\n ) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(\n bytes32 slot\n ) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n}\n\n// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT =\n 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT =\n 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(\n Address.isContract(newImplementation),\n \"ERC1967: new implementation is not a contract\"\n );\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (\n bytes32 slot\n ) {\n require(\n slot == _IMPLEMENTATION_SLOT,\n \"ERC1967Upgrade: unsupported proxiableUUID\"\n );\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT =\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT =\n 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(\n Address.isContract(newBeacon),\n \"ERC1967: new beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(newBeacon).implementation()),\n \"ERC1967: beacon implementation is not a contract\"\n );\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n\n// File @openzeppelin/contracts/proxy/Proxy.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overridden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n\n// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation()\n internal\n view\n virtual\n override\n returns (address impl)\n {\n return ERC1967Upgrade._getImplementation();\n }\n}\n\n// File @openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(\n address newImplementation,\n bytes calldata data\n ) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(\n msg.sender != _getAdmin(),\n \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\"\n );\n super._beforeFallback();\n }\n}\n\n// File @openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol@v4.8.2\n\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(\n TransparentUpgradeableProxy proxy\n ) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(\n hex\"5c60da1b\"\n );\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(\n TransparentUpgradeableProxy proxy\n ) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(\n hex\"f851a440\"\n );\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(\n TransparentUpgradeableProxy proxy,\n address newAdmin\n ) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(\n TransparentUpgradeableProxy proxy,\n address implementation\n ) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n\n// File contracts/interfaces/IMintableERC20.sol\n\npragma solidity >=0.5.17 <0.9.0;\n\ninterface IMintableERC20 {\n function mint(address account, uint256 amount) external returns (bool);\n\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address account) external view returns (uint256);\n\n function approve(address spender, uint256 amount) external returns (bool);\n}\n\n// File contracts/interfaces/IPublicLock.sol\n\npragma solidity >=0.5.17 <0.9.0;\npragma experimental ABIEncoderV2;\n\n/**\n * @title The PublicLock Interface\n */\n\ninterface IPublicLock {\n /// Functions\n function initialize(\n address _lockCreator,\n uint _expirationDuration,\n address _tokenAddress,\n uint _keyPrice,\n uint _maxNumberOfKeys,\n string calldata _lockName\n ) external;\n\n // default role from OpenZeppelin\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32 role);\n\n /**\n * @notice The version number of the current implementation on this network.\n * @return The current version number.\n */\n function publicLockVersion() external pure returns (uint16);\n\n /**\n * @dev Called by lock manager to withdraw all funds from the lock\n * @param _tokenAddress specifies the token address to withdraw or 0 for ETH. This is usually\n * the same as `tokenAddress` in MixinFunds.\n * @param _recipient specifies the address that will receive the tokens\n * @param _amount specifies the max amount to withdraw, which may be reduced when\n * considering the available balance. Set to 0 or MAX_UINT to withdraw everything.\n * -- however be wary of draining funds as it breaks the `cancelAndRefund` and `expireAndRefundFor` use cases.\n */\n function withdraw(\n address _tokenAddress,\n address payable _recipient,\n uint _amount\n ) external;\n\n /**\n * A function which lets a Lock manager of the lock to change the price for future purchases.\n * @dev Throws if called by other than a Lock manager\n * @dev Throws if lock has been disabled\n * @dev Throws if _tokenAddress is not a valid token\n * @param _keyPrice The new price to set for keys\n * @param _tokenAddress The address of the erc20 token to use for pricing the keys,\n * or 0 to use ETH\n */\n function updateKeyPricing(uint _keyPrice, address _tokenAddress) external;\n\n /**\n * Update the main key properties for the entire lock:\n *\n * - default duration of each key\n * - the maximum number of keys the lock can edit\n * - the maximum number of keys a single address can hold\n *\n * @notice keys previously bought are unaffected by this changes in expiration duration (i.e.\n * existing keys timestamps are not recalculated/updated)\n * @param _newExpirationDuration the new amount of time for each key purchased or type(uint).max for a non-expiring key\n * @param _maxKeysPerAcccount the maximum amount of key a single user can own\n * @param _maxNumberOfKeys uint the maximum number of keys\n * @dev _maxNumberOfKeys Can't be smaller than the existing supply\n */\n function updateLockConfig(\n uint _newExpirationDuration,\n uint _maxNumberOfKeys,\n uint _maxKeysPerAcccount\n ) external;\n\n /**\n * Checks if the user has a non-expired key.\n * @param _user The address of the key owner\n */\n function getHasValidKey(address _user) external view returns (bool);\n\n /**\n * @dev Returns the key's ExpirationTimestamp field for a given owner.\n * @param _tokenId the id of the key\n * @dev Returns 0 if the owner has never owned a key for this lock\n */\n function keyExpirationTimestampFor(\n uint _tokenId\n ) external view returns (uint timestamp);\n\n /**\n * Public function which returns the total number of unique owners (both expired\n * and valid). This may be larger than totalSupply.\n */\n function numberOfOwners() external view returns (uint);\n\n /**\n * Allows the Lock owner to assign\n * @param _lockName a descriptive name for this Lock.\n * @param _lockSymbol a Symbol for this Lock (default to KEY).\n * @param _baseTokenURI the baseTokenURI for this Lock\n */\n function setLockMetadata(\n string calldata _lockName,\n string calldata _lockSymbol,\n string calldata _baseTokenURI\n ) external;\n\n /**\n * @dev Gets the token symbol\n * @return string representing the token symbol\n */\n function symbol() external view returns (string memory);\n\n /** @notice A distinct Uniform Resource Identifier (URI) for a given asset.\n * @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC\n * 3986. The URI may point to a JSON file that conforms to the \"ERC721\n * Metadata JSON Schema\".\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * @param _tokenId The tokenID we're inquiring about\n * @return String representing the URI for the requested token\n */\n function tokenURI(uint256 _tokenId) external view returns (string memory);\n\n /**\n * Allows a Lock manager to add or remove an event hook\n * @param _onKeyPurchaseHook Hook called when the `purchase` function is called\n * @param _onKeyCancelHook Hook called when the internal `_cancelAndRefund` function is called\n * @param _onValidKeyHook Hook called to determine if the contract should overide the status for a given address\n * @param _onTokenURIHook Hook called to generate a data URI used for NFT metadata\n * @param _onKeyTransferHook Hook called when a key is transfered\n * @param _onKeyExtendHook Hook called when a key is extended or renewed\n * @param _onKeyGrantHook Hook called when a key is granted\n */\n function setEventHooks(\n address _onKeyPurchaseHook,\n address _onKeyCancelHook,\n address _onValidKeyHook,\n address _onTokenURIHook,\n address _onKeyTransferHook,\n address _onKeyExtendHook,\n address _onKeyGrantHook\n ) external;\n\n /**\n * Allows a Lock manager to give a collection of users a key with no charge.\n * Each key may be assigned a different expiration date.\n * @dev Throws if called by other than a Lock manager\n * @param _recipients An array of receiving addresses\n * @param _expirationTimestamps An array of expiration Timestamps for the keys being granted\n * @return the ids of the granted tokens\n */\n function grantKeys(\n address[] calldata _recipients,\n uint[] calldata _expirationTimestamps,\n address[] calldata _keyManagers\n ) external returns (uint256[] memory);\n\n /**\n * Allows the Lock owner to extend an existing keys with no charge.\n * @param _tokenId The id of the token to extend\n * @param _duration The duration in secondes to add ot the key\n * @dev set `_duration` to 0 to use the default duration of the lock\n */\n function grantKeyExtension(uint _tokenId, uint _duration) external;\n\n /**\n * @dev Purchase function\n * @param _values array of tokens amount to pay for this purchase >= the current keyPrice - any applicable discount\n * (_values is ignored when using ETH)\n * @param _recipients array of addresses of the recipients of the purchased key\n * @param _referrers array of addresses of the users making the referral\n * @param _keyManagers optional array of addresses to grant managing rights to a specific address on creation\n * @param _data array of arbitrary data populated by the front-end which initiated the sale\n * @notice when called for an existing and non-expired key, the `_keyManager` param will be ignored\n * @dev Setting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the\n * price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more\n * than keyPrice is approved for spending).\n * @return tokenIds the ids of the created tokens\n */\n function purchase(\n uint256[] calldata _values,\n address[] calldata _recipients,\n address[] calldata _referrers,\n address[] calldata _keyManagers,\n bytes[] calldata _data\n ) external payable returns (uint256[] memory tokenIds);\n\n /**\n * @dev Extend function\n * @param _value the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount\n * (_value is ignored when using ETH)\n * @param _tokenId the id of the key to extend\n * @param _referrer address of the user making the referral\n * @param _data arbitrary data populated by the front-end which initiated the sale\n * @dev Throws if lock is disabled or key does not exist for _recipient. Throws if _recipient == address(0).\n */\n function extend(\n uint _value,\n uint _tokenId,\n address _referrer,\n bytes calldata _data\n ) external payable;\n\n /**\n * Returns the percentage of the keyPrice to be sent to the referrer (in basis points)\n * @param _referrer the address of the referrer\n * @return referrerFee the percentage of the keyPrice to be sent to the referrer (in basis points)\n */\n function referrerFees(\n address _referrer\n ) external view returns (uint referrerFee);\n\n /**\n * Set a specific percentage of the keyPrice to be sent to the referrer while purchasing,\n * extending or renewing a key.\n * @param _referrer the address of the referrer\n * @param _feeBasisPoint the percentage of the price to be used for this\n * specific referrer (in basis points)\n * @dev To send a fixed percentage of the key price to all referrers, sett a percentage to `address(0)`\n */\n function setReferrerFee(address _referrer, uint _feeBasisPoint) external;\n\n /**\n * Merge existing keys\n * @param _tokenIdFrom the id of the token to substract time from\n * @param _tokenIdTo the id of the destination token to add time\n * @param _amount the amount of time to transfer (in seconds)\n */\n function mergeKeys(uint _tokenIdFrom, uint _tokenIdTo, uint _amount) external;\n\n /**\n * Deactivate an existing key\n * @param _tokenId the id of token to burn\n * @notice the key will be expired and ownership records will be destroyed\n */\n function burn(uint _tokenId) external;\n\n /**\n * @param _gasRefundValue price in wei or token in smallest price unit\n * @dev Set the value to be refunded to the sender on purchase\n */\n function setGasRefundValue(uint256 _gasRefundValue) external;\n\n /**\n * _gasRefundValue price in wei or token in smallest price unit\n * @dev Returns the value/price to be refunded to the sender on purchase\n */\n function gasRefundValue() external view returns (uint256 _gasRefundValue);\n\n /**\n * @notice returns the minimum price paid for a purchase with these params.\n * @dev this considers any discount from Unlock or the OnKeyPurchase hook.\n */\n function purchasePriceFor(\n address _recipient,\n address _referrer,\n bytes calldata _data\n ) external view returns (uint);\n\n /**\n * Allow a Lock manager to change the transfer fee.\n * @dev Throws if called by other than a Lock manager\n * @param _transferFeeBasisPoints The new transfer fee in basis-points(bps).\n * Ex: 200 bps = 2%\n */\n function updateTransferFee(uint _transferFeeBasisPoints) external;\n\n /**\n * Determines how much of a fee would need to be paid in order to\n * transfer to another account. This is pro-rated so the fee goes\n * down overtime.\n * @dev Throws if _tokenId does not have a valid key\n * @param _tokenId The id of the key check the transfer fee for.\n * @param _time The amount of time to calculate the fee for.\n * @return The transfer fee in seconds.\n */\n function getTransferFee(\n uint _tokenId,\n uint _time\n ) external view returns (uint);\n\n /**\n * @dev Invoked by a Lock manager to expire the user's key\n * and perform a refund and cancellation of the key\n * @param _tokenId The key id we wish to refund to\n * @param _amount The amount to refund to the key-owner\n * @dev Throws if called by other than a Lock manager\n * @dev Throws if _keyOwner does not have a valid key\n */\n function expireAndRefundFor(uint _tokenId, uint _amount) external;\n\n /**\n * @dev allows the key manager to expire a given tokenId\n * and send a refund to the keyOwner based on the amount of time remaining.\n * @param _tokenId The id of the key to cancel.\n * @notice cancel is enabled with a 10% penalty by default on all Locks.\n */\n function cancelAndRefund(uint _tokenId) external;\n\n /**\n * Allow a Lock manager to change the refund penalty.\n * @dev Throws if called by other than a Lock manager\n * @param _freeTrialLength The new duration of free trials for this lock\n * @param _refundPenaltyBasisPoints The new refund penaly in basis-points(bps)\n */\n function updateRefundPenalty(\n uint _freeTrialLength,\n uint _refundPenaltyBasisPoints\n ) external;\n\n /**\n * @dev Determines how much of a refund a key owner would receive if they issued\n * @param _tokenId the id of the token to get the refund value for.\n * @notice Due to the time required to mine a tx, the actual refund amount will be lower\n * than what the user reads from this call.\n * @return refund the amount of tokens refunded\n */\n function getCancelAndRefundValue(\n uint _tokenId\n ) external view returns (uint refund);\n\n function addLockManager(address account) external;\n\n function isLockManager(address account) external view returns (bool);\n\n /**\n * Returns the address of the `onKeyPurchaseHook` hook.\n * @return hookAddress address of the hook\n */\n function onKeyPurchaseHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyCancelHook` hook.\n * @return hookAddress address of the hook\n */\n function onKeyCancelHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onValidKeyHook` hook.\n * @return hookAddress address of the hook\n */\n function onValidKeyHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onTokenURIHook` hook.\n * @return hookAddress address of the hook\n */\n function onTokenURIHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyTransferHook` hook.\n * @return hookAddress address of the hook\n */\n function onKeyTransferHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyExtendHook` hook.\n * @return hookAddress the address ok the hook\n */\n function onKeyExtendHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyGrantHook` hook.\n * @return hookAddress the address ok the hook\n */\n function onKeyGrantHook() external view returns (address hookAddress);\n\n function renounceLockManager() external;\n\n /**\n * @return the maximum number of key allowed for a single address\n */\n function maxKeysPerAddress() external view returns (uint);\n\n function expirationDuration() external view returns (uint256);\n\n function freeTrialLength() external view returns (uint256);\n\n function keyPrice() external view returns (uint256);\n\n function maxNumberOfKeys() external view returns (uint256);\n\n function refundPenaltyBasisPoints() external view returns (uint256);\n\n function tokenAddress() external view returns (address);\n\n function transferFeeBasisPoints() external view returns (uint256);\n\n function unlockProtocol() external view returns (address);\n\n function keyManagerOf(uint) external view returns (address);\n\n ///===================================================================\n\n /**\n * @notice Allows the key owner to safely share their key (parent key) by\n * transferring a portion of the remaining time to a new key (child key).\n * @dev Throws if key is not valid.\n * @dev Throws if `_to` is the zero address\n * @param _to The recipient of the shared key\n * @param _tokenId the key to share\n * @param _timeShared The amount of time shared\n * checks if `_to` is a smart contract (code size > 0). If so, it calls\n * `onERC721Received` on `_to` and throws if the return value is not\n * `bytes4(keccak256('onERC721Received(address,address,uint,bytes)'))`.\n * @dev Emit Transfer event\n */\n function shareKey(address _to, uint _tokenId, uint _timeShared) external;\n\n /**\n * @notice Update transfer and cancel rights for a given key\n * @param _tokenId The id of the key to assign rights for\n * @param _keyManager The address to assign the rights to for the given key\n */\n function setKeyManagerOf(uint _tokenId, address _keyManager) external;\n\n /**\n * Check if a certain key is valid\n * @param _tokenId the id of the key to check validity\n * @notice this makes use of the onValidKeyHook if it is set\n */\n function isValidKey(uint _tokenId) external view returns (bool);\n\n /**\n * Returns the number of keys owned by `_keyOwner` (expired or not)\n * @param _keyOwner address for which we are retrieving the total number of keys\n * @return numberOfKeys total number of keys owned by the address\n */\n function totalKeys(\n address _keyOwner\n ) external view returns (uint numberOfKeys);\n\n /// @notice A descriptive name for a collection of NFTs in this contract\n function name() external view returns (string memory _name);\n\n ///===================================================================\n\n /// From ERC165.sol\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n\n ///===================================================================\n\n /// From ERC-721\n /**\n * In the specific case of a Lock, `balanceOf` returns only the tokens with a valid expiration timerange\n * @return balance The number of valid keys owned by `_keyOwner`\n */\n function balanceOf(address _owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the NFT specified by `tokenId`.\n */\n function ownerOf(uint256 tokenId) external view returns (address _owner);\n\n /**\n * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to\n * another (`to`).\n *\n * Requirements:\n * - `from`, `to` cannot be zero.\n * - `tokenId` must be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this\n * NFT by either {approve} or {setApprovalForAll}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * an ERC721-like function to transfer a token from one account to another.\n * @param from the owner of token to transfer\n * @param to the address that will receive the token\n * @param tokenId the id of the token\n * @dev Requirements: if the caller is not `from`, it must be approved to move this token by\n * either {approve} or {setApprovalForAll}.\n * The key manager will be reset to address zero after the transfer\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * Lending a key allows you to transfer the token while retaining the\n * ownerships right by setting yourself as a key manager first.\n * @param from the owner of token to transfer\n * @param to the address that will receive the token\n * @param tokenId the id of the token\n * @notice This function can only be called by 1) the key owner when no key manager is set or 2) the key manager.\n * After calling the function, the `_recipent` will be the new owner, and the sender of the tx\n * will become the key manager.\n */\n function lendKey(address from, address to, uint tokenId) external;\n\n /**\n * Unlend is called when you have lent a key and want to claim its full ownership back.\n * @param _recipient the address that will receive the token ownership\n * @param _tokenId the id of the token\n * @dev Only the key manager of the token can call this function\n */\n function unlendKey(address _recipient, uint _tokenId) external;\n\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @notice Get the approved address for a single NFT\n * @dev Throws if `_tokenId` is not a valid NFT.\n * @param _tokenId The NFT to find the approved address for\n * @return operator The approved address for this NFT, or the zero address if there is none\n */\n function getApproved(\n uint256 _tokenId\n ) external view returns (address operator);\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * An operator is allowed to transfer all tokens of the sender on their behalf\n * @param _operator operator address to set the approval\n * @param _approved representing the status of the approval to be set\n * @notice disabled when transfers are disabled\n */\n function setApprovalForAll(address _operator, bool _approved) external;\n\n /**\n * @dev Tells whether an operator is approved by a given keyManager\n * @param _owner owner address which you want to query the approval of\n * @param _operator operator address which you want to query the approval of\n * @return bool whether the given operator is approved by the given owner\n */\n function isApprovedForAll(\n address _owner,\n address _operator\n ) external view returns (bool);\n\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes calldata data\n ) external;\n\n /**\n * Returns the total number of keys, including non-valid ones\n * @return _totalKeysCreated the total number of keys, valid or not\n */\n function totalSupply() external view returns (uint256 _totalKeysCreated);\n\n function tokenOfOwnerByIndex(\n address _owner,\n uint256 index\n ) external view returns (uint256 tokenId);\n\n function tokenByIndex(uint256 index) external view returns (uint256);\n\n /**\n * Innherited from Open Zeppelin AccessControl.sol\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /** `owner()` is provided as an helper to mimick the `Ownable` contract ABI.\n * The `Ownable` logic is used by many 3rd party services to determine\n * contract ownership - e.g. who is allowed to edit metadata on Opensea.\n *\n * @notice This logic is NOT used internally by the Unlock Protocol and is made\n * available only as a convenience helper.\n */\n function owner() external view returns (address owner);\n\n function setOwner(address account) external;\n\n function isOwner(address account) external view returns (bool isOwner);\n\n /**\n * Migrate data from the previous single owner => key mapping to\n * the new data structure w multiple tokens.\n * @param _calldata an ABI-encoded representation of the params (v10: the number of records to migrate as `uint`)\n * @dev when all record schemas are sucessfully upgraded, this function will update the `schemaVersion`\n * variable to the latest/current lock version\n */\n function migrate(bytes calldata _calldata) external;\n\n /**\n * Returns the version number of the data schema currently used by the lock\n * @notice if this is different from `publicLockVersion`, then the ability to purchase, grant\n * or extend keys is disabled.\n * @dev will return 0 if no ;igration has ever been run\n */\n function schemaVersion() external view returns (uint);\n\n /**\n * Set the schema version to the latest\n * @notice only lock manager call call this\n */\n function updateSchemaVersion() external;\n\n /**\n * Renew a given token\n * @notice only works for non-free, expiring, ERC20 locks\n * @param _tokenId the ID fo the token to renew\n * @param _referrer the address of the person to be granted UDT\n */\n function renewMembershipFor(uint _tokenId, address _referrer) external;\n\n /**\n * @dev helper to check if a key is currently renewable\n * it will revert if the pricing or duration of the lock have been modified\n * unfavorably since the key was bought(price increase or duration decrease).\n * It will also revert if a lock is not renewable or if the key is not ready for renewal yet\n * (at least 90% expired).\n * @param tokenId the id of the token to check\n * @param referrer the address where to send the referrer fee\n * @return true if the terms has changed\n */\n function isRenewable(\n uint256 tokenId,\n address referrer\n ) external view returns (bool);\n}\n\n// File contracts/interfaces/IUniswapOracleV3.sol\n\npragma solidity >=0.5.0;\n\ninterface IUniswapOracleV3 {\n function PERIOD() external returns (uint256);\n\n function factory() external returns (address);\n\n function update(address _tokenIn, address _tokenOut) external;\n\n function consult(\n address _tokenIn,\n uint256 _amountIn,\n address _tokenOut\n ) external view returns (uint256 _amountOut);\n\n function updateAndConsult(\n address _tokenIn,\n uint256 _amountIn,\n address _tokenOut\n ) external returns (uint256 _amountOut);\n}\n\n// File contracts/interfaces/IUnlock.sol\n\npragma solidity >=0.5.17 <0.9.0;\n\n/**\n * @title The Unlock Interface\n **/\n\ninterface IUnlock {\n // Use initialize instead of a constructor to support proxies(for upgradeability via zos).\n function initialize(address _unlockOwner) external;\n\n /**\n * @dev deploy a ProxyAdmin contract used to upgrade locks\n */\n function initializeProxyAdmin() external;\n\n /**\n * Retrieve the contract address of the proxy admin that manages the locks\n * @return _proxyAdminAddress the address of the ProxyAdmin instance\n */\n function proxyAdminAddress()\n external\n view\n returns (address _proxyAdminAddress);\n\n /**\n * @notice Create lock (legacy)\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param _expirationDuration the duration of the lock (pass 0 for unlimited duration)\n * @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n * @param _keyPrice the price of each key\n * @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n * @param _lockName the name of the lock\n * param _salt [deprec] -- kept only for backwards copatibility\n * This may be implemented as a sequence ID or with RNG. It's used with `create2`\n * to know the lock's address before the transaction is mined.\n * @dev internally call `createUpgradeableLock`\n */\n function createLock(\n uint _expirationDuration,\n address _tokenAddress,\n uint _keyPrice,\n uint _maxNumberOfKeys,\n string calldata _lockName,\n bytes12 // _salt\n ) external returns (address);\n\n /**\n * @notice Create lock (default)\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param data bytes containing the call to initialize the lock template\n * @dev this call is passed as encoded function - for instance:\n * bytes memory data = abi.encodeWithSignature(\n * 'initialize(address,uint256,address,uint256,uint256,string)',\n * msg.sender,\n * _expirationDuration,\n * _tokenAddress,\n * _keyPrice,\n * _maxNumberOfKeys,\n * _lockName\n * );\n * @return address of the create lock\n */\n function createUpgradeableLock(bytes memory data) external returns (address);\n\n /**\n * Create an upgradeable lock using a specific PublicLock version\n * @param data bytes containing the call to initialize the lock template\n * (refer to createUpgradeableLock for more details)\n * @param _lockVersion the version of the lock to use\n */\n function createUpgradeableLockAtVersion(\n bytes memory data,\n uint16 _lockVersion\n ) external returns (address);\n\n /**\n * @notice Upgrade a lock to a specific version\n * @dev only available for publicLockVersion > 10 (proxyAdmin /required)\n * @param lockAddress the existing lock address\n * @param version the version number you are targeting\n * Likely implemented with OpenZeppelin TransparentProxy contract\n */\n function upgradeLock(\n address payable lockAddress,\n uint16 version\n ) external returns (address);\n\n /**\n * This function keeps track of the added GDP, as well as grants of discount tokens\n * to the referrer, if applicable.\n * The number of discount tokens granted is based on the value of the referal,\n * the current growth rate and the lock's discount token distribution rate\n * This function is invoked by a previously deployed lock only.\n */\n function recordKeyPurchase(\n uint _value,\n address _referrer // solhint-disable-line no-unused-vars\n ) external;\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] Kept for backwards compatibility\n * This function will keep track of consumed discounts by a given user.\n * It will also grant discount tokens to the creator who is granting the discount based on the\n * amount of discount and compensation rate.\n * This function is invoked by a previously deployed lock only.\n */\n function recordConsumedDiscount(\n uint _discount,\n uint _tokens // solhint-disable-line no-unused-vars\n ) external view;\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] Kept for backwards compatibility\n * This function returns the discount available for a user, when purchasing a\n * a key from a lock.\n * This does not modify the state. It returns both the discount and the number of tokens\n * consumed to grant that discount.\n */\n function computeAvailableDiscountFor(\n address _purchaser, // solhint-disable-line no-unused-vars\n uint _keyPrice // solhint-disable-line no-unused-vars\n ) external pure returns (uint discount, uint tokens);\n\n // Function to read the globalTokenURI field.\n function globalBaseTokenURI() external view returns (string memory);\n\n /**\n * @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalBaseTokenURI() external view returns (string memory);\n\n // Function to read the globalTokenSymbol field.\n function globalTokenSymbol() external view returns (string memory);\n\n // Function to read the chainId field.\n function chainId() external view returns (uint);\n\n /**\n * @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalTokenSymbol() external view returns (string memory);\n\n /**\n * @notice Allows the owner to update configuration variables\n */\n function configUnlock(\n address _udt,\n address _weth,\n uint _estimatedGasForPurchase,\n string calldata _symbol,\n string calldata _URI,\n uint _chainId\n ) external;\n\n /**\n * @notice Add a PublicLock template to be used for future calls to `createLock`.\n * @dev This is used to upgrade conytract per version number\n */\n function addLockTemplate(address impl, uint16 version) external;\n\n /**\n * Match lock templates addresses with version numbers\n * @param _version the number of the version of the template\n * @return _implAddress address of the lock templates\n */\n function publicLockImpls(\n uint16 _version\n ) external view returns (address _implAddress);\n\n /**\n * Match version numbers with lock templates addresses\n * @param _impl the address of the deployed template contract (PublicLock)\n * @return number of the version corresponding to this address\n */\n function publicLockVersions(address _impl) external view returns (uint16);\n\n /**\n * Retrive the latest existing lock template version\n * @return _version the version number of the latest template (used to deploy contracts)\n */\n function publicLockLatestVersion() external view returns (uint16 _version);\n\n /**\n * @notice Upgrade the PublicLock template used for future calls to `createLock`.\n * @dev This will initialize the template and revokeOwnership.\n */\n function setLockTemplate(address payable _publicLockAddress) external;\n\n // Allows the owner to change the value tracking variables as needed.\n function resetTrackedValue(\n uint _grossNetworkProduct,\n uint _totalDiscountGranted\n ) external;\n\n function grossNetworkProduct() external view returns (uint);\n\n function totalDiscountGranted() external view returns (uint);\n\n function locks(\n address\n )\n external\n view\n returns (bool deployed, uint totalSales, uint yieldedDiscountTokens);\n\n // The address of the public lock template, used when `createLock` is called\n function publicLockAddress() external view returns (address);\n\n // Map token address to exchange contract address if the token is supported\n // Used for GDP calculations\n function uniswapOracles(address) external view returns (address);\n\n // The WETH token address, used for value calculations\n function weth() external view returns (address);\n\n // The UDT token address, used to mint tokens on referral\n function udt() external view returns (address);\n\n // The approx amount of gas required to purchase a key\n function estimatedGasForPurchase() external view returns (uint);\n\n /**\n * Helper to get the network mining basefee as introduced in EIP-1559\n * @dev this helper can be wrapped in try/catch statement to avoid\n * revert in networks where EIP-1559 is not implemented\n */\n function networkBaseFee() external view returns (uint);\n\n // The version number of the current Unlock implementation on this network\n function unlockVersion() external pure returns (uint16);\n\n /**\n * @notice allows the owner to set the oracle address to use for value conversions\n * setting the _oracleAddress to address(0) removes support for the token\n * @dev This will also call update to ensure at least one datapoint has been recorded.\n */\n function setOracle(address _tokenAddress, address _oracleAddress) external;\n\n // Initialize the Ownable contract, granting contract ownership to the specified sender\n function __initializeOwnable(address sender) external;\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() external view returns (bool);\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() external view returns (address);\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() external;\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) external;\n\n /**\n * Set the fee collected by the protocol\n * @param _protocolFee fee (in basis points)\n */\n function setProtocolFee(uint _protocolFee) external;\n\n /**\n * The fee (in basis points) collected by the protocol on each purchase / \n extension / renewal of a key\n * @return the protocol fee in basic point\n */\n function protocolFee() external view returns (uint);\n\n /**\n * Returns the ProxyAdmin contract address that manage upgrades for\n * the current Unlock contract.\n * @dev this reads the address directly from storage, at the slot `_ADMIN_SLOT`\n * defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds\n * to the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1\n */\n function getAdmin() external view returns (address);\n\n /**\n * Call executed by a lock after its version upgrade triggred by `upgradeLock`\n * - PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance\n * of the Unlock contract\n * @dev The `msg.sender` will be the upgraded lock\n */\n function postLockUpgrade() external;\n\n /**\n * Functions which transfers tokens held by the contract\n * It handles both ERC20 and the base currency.\n * @dev This function is onlyOwner\n * @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n * @param to the address to transfer the tokens to\n * @param amount the amount of tokens to transfer\n */\n function transferTokens(address token, address to, uint256 amount) external;\n\n /**\n * Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n * The lock will still be able to sell its memberships.\n * @dev This function is onlyOwner\n * @param lock address of the lock to remove\n */\n function removeLock(address lock) external;\n}\n\n// File @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(\n success,\n \"Address: unable to send value, recipient may have reverted\"\n );\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(\n target,\n data,\n value,\n \"Address: low-level call with value failed\"\n );\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(\n address(this).balance >= value,\n \"Address: insufficient balance for call\"\n );\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data\n ) internal view returns (bytes memory) {\n return\n functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(\n bytes memory returndata,\n string memory errorMessage\n ) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n}\n\n// File contracts/utils/UnlockInitializable.sol\n\n// OpenZeppelin Contracts v4.4.1 (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract UnlockInitializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(\n initializing ? _isConstructor() : !initialized,\n \"ALREADY_INITIALIZED\"\n );\n\n bool isTopLevelCall = !initializing;\n if (isTopLevelCall) {\n initializing = true;\n initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(initializing, \"NOT_INITIALIZING\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n\n// File contracts/utils/UnlockContextUpgradeable.sol\n\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract UnlockContextUpgradeable is UnlockInitializable {\n function __Context_init() internal onlyInitializing {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal onlyInitializing {}\n\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n uint256[50] private ______gap;\n}\n\n// File contracts/utils/UnlockOwnable.sol\n\n// OpenZeppelin Contracts v4.3.2 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be aplied to your functions to restrict their use to\n * the owner.\n *\n * This contract was originally part of openzeppelin/contracts-ethereum-package\n * but had to be included (instead of using the one in openzeppelin/contracts-upgradeable )\n * because the ______gap array length was 49 instead of 50\n */\nabstract contract UnlockOwnable is\n UnlockInitializable,\n UnlockContextUpgradeable\n{\n address private _owner;\n\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __initializeOwnable(address sender) public initializer {\n _owner = sender;\n emit OwnershipTransferred(address(0), _owner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(isOwner(), \"ONLY_OWNER\");\n _;\n }\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() public view returns (bool) {\n return _msgSender() == _owner;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * > Note: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n require(newOwner != address(0), \"INVALID_OWNER\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n */\n function _transferOwnership(address newOwner) internal {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n uint256[50] private ______gap;\n}\n\n// File contracts/Unlock.sol\n\npragma solidity ^0.8.7;\n\n/**\n * @title The Unlock contract\n * @author Julien Genestoux (unlock-protocol.com)\n * This smart contract has 3 main roles:\n * 1. Distribute discounts to discount token holders\n * 2. Grant dicount tokens to users making referrals and/or publishers granting discounts.\n * 3. Create & deploy Public Lock contracts.\n * In order to achieve these 3 elements, it keeps track of several things such as\n * a. Deployed locks addresses and balances of discount tokens granted by each lock.\n * b. The total network product (sum of all key sales, net of discounts)\n * c. Total of discounts granted\n * d. Balances of discount tokens, including 'frozen' tokens (which have been used to claim\n * discounts and cannot be used/transferred for a given period)\n * e. Growth rate of Network Product\n * f. Growth rate of Discount tokens supply\n * The smart contract has an owner who only can perform the following\n * - Upgrades\n * - Change in golden rules (20% of GDP available in discounts, and supply growth rate is at most\n * 50% of GNP growth rate)\n * NOTE: This smart contract is partially implemented for now until enough Locks are deployed and\n * in the wild.\n * The partial implementation includes the following features:\n * a. Keeping track of deployed locks\n * b. Keeping track of GNP\n */\n\n/// @dev Must list the direct base contracts in the order from “most base-like” to “most derived”.\n/// https://solidity.readthedocs.io/en/latest/contracts.html#multiple-inheritance-and-linearization\ncontract Unlock is UnlockInitializable, UnlockOwnable {\n /**\n * The struct for a lock\n * We use deployed to keep track of deployments.\n * This is required because both totalSales and yieldedDiscountTokens are 0 when initialized,\n * which would be the same values when the lock is not set.\n */\n struct LockBalances {\n bool deployed;\n uint totalSales; // This is in wei\n uint yieldedDiscountTokens;\n }\n\n modifier onlyFromDeployedLock() {\n require(locks[msg.sender].deployed, \"ONLY_LOCKS\");\n _;\n }\n\n uint public grossNetworkProduct;\n\n uint public totalDiscountGranted;\n\n // We keep track of deployed locks to ensure that callers are all deployed locks.\n mapping(address => LockBalances) public locks;\n\n // global base token URI\n // Used by locks where the owner has not set a custom base URI.\n string public globalBaseTokenURI;\n\n // global base token symbol\n // Used by locks where the owner has not set a custom symbol\n string public globalTokenSymbol;\n\n // The address of the latest public lock template, used by default when `createLock` is called\n address public publicLockAddress;\n\n // Map token address to oracle contract address if the token is supported\n // Used for GDP calculations\n mapping(address => IUniswapOracleV3) public uniswapOracles;\n\n // The WETH token address, used for value calculations\n address public weth;\n\n // The UDT token address, used to mint tokens on referral\n address public udt;\n\n // The approx amount of gas required to purchase a key\n uint public estimatedGasForPurchase;\n\n // Blockchain ID the network id on which this version of Unlock is operating\n uint public chainId;\n\n // store proxy admin\n address public proxyAdminAddress;\n ProxyAdmin private proxyAdmin;\n\n // publicLock templates\n mapping(address => uint16) private _publicLockVersions;\n mapping(uint16 => address) private _publicLockImpls;\n uint16 public publicLockLatestVersion;\n\n // protocol fee\n uint public protocolFee;\n\n // errors\n error Unlock__MANAGER_ONLY();\n error Unlock__VERSION_TOO_HIGH();\n error Unlock__MISSING_TEMPLATE();\n error Unlock__ALREADY_DEPLOYED();\n error Unlock__MISSING_PROXY_ADMIN();\n error Unlock__MISSING_LOCK_TEMPLATE();\n error Unlock__MISSING_LOCK(address lockAddress);\n error Unlock__INVALID_AMOUNT();\n\n // Events\n event NewLock(address indexed lockOwner, address indexed newLockAddress);\n\n event LockUpgraded(address lockAddress, uint16 version);\n\n event ConfigUnlock(\n address udt,\n address weth,\n uint estimatedGasForPurchase,\n string globalTokenSymbol,\n string globalTokenURI,\n uint chainId\n );\n\n event SetLockTemplate(address publicLockAddress);\n\n event GNPChanged(\n uint grossNetworkProduct,\n uint _valueInETH,\n address tokenAddress,\n uint value,\n address lockAddress\n );\n\n event ResetTrackedValue(uint grossNetworkProduct, uint totalDiscountGranted);\n\n event UnlockTemplateAdded(address indexed impl, uint16 indexed version);\n\n // Use initialize instead of a constructor to support proxies (for upgradeability via OZ).\n function initialize(address _unlockOwner) public initializer {\n // We must manually initialize Ownable\n UnlockOwnable.__initializeOwnable(_unlockOwner);\n // add a proxy admin on deployment\n _deployProxyAdmin();\n }\n\n function initializeProxyAdmin() public onlyOwner {\n if (proxyAdminAddress != address(0)) {\n revert Unlock__ALREADY_DEPLOYED();\n }\n _deployProxyAdmin();\n }\n\n /**\n * @dev Deploy the ProxyAdmin contract that will manage lock templates upgrades\n * This deploys an instance of ProxyAdmin used by PublicLock transparent proxies.\n */\n function _deployProxyAdmin() private returns (address) {\n proxyAdmin = new ProxyAdmin();\n proxyAdminAddress = address(proxyAdmin);\n return address(proxyAdmin);\n }\n\n /**\n * @dev Helper to get the version number of a template from his address\n */\n function publicLockVersions(address _impl) external view returns (uint16) {\n return _publicLockVersions[_impl];\n }\n\n /**\n * @dev Helper to get the address of a template based on its version number\n */\n function publicLockImpls(uint16 _version) external view returns (address) {\n return _publicLockImpls[_version];\n }\n\n /**\n * @dev Registers a new PublicLock template immplementation\n * The template is identified by a version number\n * Once registered, the template can be used to upgrade an existing Lock\n * @dev This will initialize the template and revokeOwnership.\n */\n function addLockTemplate(address impl, uint16 version) public onlyOwner {\n // First claim the template so that no-one else could\n // this will revert if the template was already initialized.\n IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \"\");\n IPublicLock(impl).renounceLockManager();\n\n _publicLockVersions[impl] = version;\n _publicLockImpls[version] = impl;\n\n emit UnlockTemplateAdded(impl, version);\n }\n\n /**\n * @notice Create lock (legacy)\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param _expirationDuration the duration of the lock (pass type(uint).max for unlimited duration)\n * @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n * @param _keyPrice the price of each key\n * @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n * @param _lockName the name of the lock\n * param _salt [deprec] -- kept only for backwards copatibility\n * This may be implemented as a sequence ID or with RNG. It's used with `create2`\n * to know the lock's address before the transaction is mined.\n * @dev internally call `createUpgradeableLock`\n */\n function createLock(\n uint _expirationDuration,\n address _tokenAddress,\n uint _keyPrice,\n uint _maxNumberOfKeys,\n string calldata _lockName,\n bytes12 // _salt\n ) public returns (address) {\n bytes memory data = abi.encodeWithSignature(\n \"initialize(address,uint256,address,uint256,uint256,string)\",\n msg.sender,\n _expirationDuration,\n _tokenAddress,\n _keyPrice,\n _maxNumberOfKeys,\n _lockName\n );\n\n return createUpgradeableLock(data);\n }\n\n /**\n * @notice Create upgradeable lock\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param data bytes containing the call to initialize the lock template\n * @dev this call is passed as encoded function - for instance:\n * bytes memory data = abi.encodeWithSignature(\n * 'initialize(address,uint256,address,uint256,uint256,string)',\n * msg.sender,\n * _expirationDuration,\n * _tokenAddress,\n * _keyPrice,\n * _maxNumberOfKeys,\n * _lockName\n * );\n * @return address of the create lock\n */\n function createUpgradeableLock(bytes memory data) public returns (address) {\n address newLock = createUpgradeableLockAtVersion(\n data,\n publicLockLatestVersion\n );\n return newLock;\n }\n\n /**\n * Create an upgradeable lock using a specific PublicLock version\n * @param data bytes containing the call to initialize the lock template\n * (refer to createUpgradeableLock for more details)\n * @param _lockVersion the version of the lock to use\n */\n function createUpgradeableLockAtVersion(\n bytes memory data,\n uint16 _lockVersion\n ) public returns (address) {\n if (proxyAdminAddress == address(0)) {\n revert Unlock__MISSING_PROXY_ADMIN();\n }\n\n // get lock version\n address publicLockImpl = _publicLockImpls[_lockVersion];\n if (publicLockImpl == address(0)) {\n revert Unlock__MISSING_LOCK_TEMPLATE();\n }\n\n // deploy a proxy pointing to impl\n TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(\n publicLockImpl,\n proxyAdminAddress,\n data\n );\n address payable newLock = payable(address(proxy));\n\n // assign the new Lock\n locks[newLock] = LockBalances({\n deployed: true,\n totalSales: 0,\n yieldedDiscountTokens: 0\n });\n\n // trigger event\n emit NewLock(msg.sender, newLock);\n return newLock;\n }\n\n /**\n * @dev Upgrade a Lock template implementation\n * @param lockAddress the address of the lock to be upgraded\n * @param version the version number of the template\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n\n function upgradeLock(\n address payable lockAddress,\n uint16 version\n ) external returns (address) {\n if (proxyAdminAddress == address(0)) {\n revert Unlock__MISSING_PROXY_ADMIN();\n }\n\n // check perms\n if (_isLockManager(lockAddress, msg.sender) != true) {\n revert Unlock__MANAGER_ONLY();\n }\n\n // check version\n IPublicLock lock = IPublicLock(lockAddress);\n uint16 currentVersion = lock.publicLockVersion();\n\n if (version != currentVersion + 1) {\n revert Unlock__VERSION_TOO_HIGH();\n }\n\n // make our upgrade\n address impl = _publicLockImpls[version];\n if (impl == address(0)) {\n revert Unlock__MISSING_TEMPLATE();\n }\n\n TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy(\n lockAddress\n );\n\n proxyAdmin.upgrade(proxy, impl);\n\n // let's upgrade the data schema\n // the function is called with empty bytes as migration behaviour is set by the lock in accordance to data version\n lock.migrate(\"0x\");\n\n emit LockUpgraded(lockAddress, version);\n return lockAddress;\n }\n\n function _isLockManager(\n address lockAddress,\n address _sender\n ) private view returns (bool isManager) {\n IPublicLock lock = IPublicLock(lockAddress);\n return lock.isLockManager(_sender);\n }\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] Kept for backwards compatibility\n */\n function computeAvailableDiscountFor(\n address /* _purchaser */,\n uint /* _keyPrice */\n ) public pure returns (uint discount, uint tokens) {\n return (0, 0);\n }\n\n /**\n * Helper to get the network mining basefee as introduced in EIP-1559\n * @dev this helper can be wrapped in try/catch statement to avoid\n * revert in networks where EIP-1559 is not implemented\n */\n function networkBaseFee() external view returns (uint) {\n return block.basefee;\n }\n\n /**\n * This function keeps track of the added GDP, as well as grants of discount tokens\n * to the referrer, if applicable.\n * The number of discount tokens granted is based on the value of the referal,\n * the current growth rate and the lock's discount token distribution rate\n * This function is invoked by a previously deployed lock only.\n */\n function recordKeyPurchase(\n uint _value,\n address _referrer\n ) public onlyFromDeployedLock {\n if (_value > 0) {\n uint valueInETH;\n address tokenAddress = IPublicLock(msg.sender).tokenAddress();\n if (tokenAddress != address(0) && tokenAddress != weth) {\n // If priced in an ERC-20 token, find the supported uniswap oracle\n IUniswapOracleV3 oracle = uniswapOracles[tokenAddress];\n if (address(oracle) != address(0)) {\n valueInETH = oracle.updateAndConsult(tokenAddress, _value, weth);\n }\n } else {\n // If priced in ETH (or value is 0), no conversion is required\n valueInETH = _value;\n }\n\n updateGrossNetworkProduct(\n valueInETH,\n tokenAddress,\n _value,\n msg.sender // lockAddress\n );\n\n // If GNP does not overflow, the lock totalSales should be safe\n locks[msg.sender].totalSales += valueInETH;\n\n // Distribute UDT\n // version 13 is the first version for which locks can be paying the fee. Prior versions should not distribute UDT if they don't \"pay\" the fee.\n if (\n _referrer != address(0) &&\n IPublicLock(msg.sender).publicLockVersion() >= 13\n ) {\n IUniswapOracleV3 udtOracle = uniswapOracles[udt];\n if (address(udtOracle) != address(0)) {\n // Get the value of 1 UDT (w/ 18 decimals) in ETH\n uint udtPrice = udtOracle.updateAndConsult(udt, 10 ** 18, weth);\n\n uint balance = IMintableERC20(udt).balanceOf(address(this));\n\n // base fee default to 100 GWEI for chains that does\n uint baseFee;\n try this.networkBaseFee() returns (uint _basefee) {\n // no assigned value\n if (_basefee == 0) {\n baseFee = 100;\n } else {\n baseFee = _basefee;\n }\n } catch {\n // block.basefee not supported\n baseFee = 100;\n }\n\n // tokensToDistribute is either == to the gas cost times 1.25 to cover the 20% dev cut\n uint tokensToDistribute = ((estimatedGasForPurchase * baseFee) *\n (125 * 10 ** 18)) /\n 100 /\n udtPrice;\n\n // or tokensToDistribute is capped by network GDP growth\n // we distribute tokens using asymptotic curve between 0 and 0.5\n uint maxTokens = (balance * valueInETH) /\n (2 + (2 * valueInETH) / grossNetworkProduct) /\n grossNetworkProduct;\n\n // cap to GDP growth!\n if (tokensToDistribute > maxTokens) {\n tokensToDistribute = maxTokens;\n }\n\n if (tokensToDistribute > 0) {\n // 80% goes to the referrer, 20% to the Unlock dev - round in favor of the referrer\n uint devReward = (tokensToDistribute * 20) / 100;\n\n if (balance > tokensToDistribute) {\n // Only distribute if there are enough tokens\n IMintableERC20(udt).transfer(\n _referrer,\n tokensToDistribute - devReward\n );\n IMintableERC20(udt).transfer(owner(), devReward);\n }\n }\n }\n }\n }\n }\n\n /**\n * Update the GNP by a new value.\n * Emits an event to simply tracking\n */\n function updateGrossNetworkProduct(\n uint _valueInETH,\n address _tokenAddress,\n uint _value,\n address _lock\n ) internal {\n // increase GNP\n grossNetworkProduct = grossNetworkProduct + _valueInETH;\n\n emit GNPChanged(\n grossNetworkProduct,\n _valueInETH,\n _tokenAddress,\n _value,\n _lock\n );\n }\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] only Kept for backwards compatibility\n */\n function recordConsumedDiscount(\n uint /* _discount */,\n uint /* _tokens */\n ) public view onlyFromDeployedLock {\n return;\n }\n\n // The version number of the current Unlock implementation on this network\n function unlockVersion() external pure returns (uint16) {\n return 12;\n }\n\n /**\n * Set the fee used by the protocol\n * @param _protocolFee fee in basic point\n */\n function setProtocolFee(uint _protocolFee) external onlyOwner {\n protocolFee = _protocolFee;\n }\n\n /**\n * @notice Allows the owner to update configuration variables\n */\n function configUnlock(\n address _udt,\n address _weth,\n uint _estimatedGasForPurchase,\n string calldata _symbol,\n string calldata _URI,\n uint _chainId\n ) external onlyOwner {\n udt = _udt;\n weth = _weth;\n estimatedGasForPurchase = _estimatedGasForPurchase;\n\n globalTokenSymbol = _symbol;\n globalBaseTokenURI = _URI;\n\n chainId = _chainId;\n\n emit ConfigUnlock(\n _udt,\n _weth,\n _estimatedGasForPurchase,\n _symbol,\n _URI,\n _chainId\n );\n }\n\n /**\n * @notice Set the default PublicLock template to use when creating locks\n */\n function setLockTemplate(address _publicLockAddress) external onlyOwner {\n if (_publicLockVersions[_publicLockAddress] == 0) {\n revert Unlock__MISSING_LOCK_TEMPLATE();\n }\n // set latest version\n publicLockLatestVersion = _publicLockVersions[_publicLockAddress];\n // set corresponding template\n publicLockAddress = _publicLockAddress;\n emit SetLockTemplate(_publicLockAddress);\n }\n\n /**\n * @notice allows the owner to set the oracle address to use for value conversions\n * setting the _oracleAddress to address(0) removes support for the token\n * @dev This will also call update to ensure at least one datapoint has been recorded.\n */\n function setOracle(\n address _tokenAddress,\n address _oracleAddress\n ) external onlyOwner {\n uniswapOracles[_tokenAddress] = IUniswapOracleV3(_oracleAddress);\n if (_oracleAddress != address(0)) {\n IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth);\n }\n }\n\n // Allows the owner to change the value tracking variables as needed.\n function resetTrackedValue(\n uint _grossNetworkProduct,\n uint _totalDiscountGranted\n ) external onlyOwner {\n grossNetworkProduct = _grossNetworkProduct;\n totalDiscountGranted = _totalDiscountGranted;\n\n emit ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted);\n }\n\n /**\n * @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalBaseTokenURI() external view returns (string memory) {\n return globalBaseTokenURI;\n }\n\n /**\n * @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalTokenSymbol() external view returns (string memory) {\n return globalTokenSymbol;\n }\n\n // for doc, see IUnlock.sol\n function getAdmin() public view returns (address) {\n bytes32 _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n // for doc, see IUnlock.sol\n function postLockUpgrade() public {\n // check if lock hasnot already been deployed here and version is correct\n if (\n locks[msg.sender].deployed == false &&\n IPublicLock(msg.sender).publicLockVersion() == 13 &&\n block.chainid == 1 &&\n IPublicLock(msg.sender).unlockProtocol() ==\n 0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13 // hardcoded address of previous Unlock\n ) {\n IUnlock previousUnlock = IUnlock(\n 0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13\n );\n\n (\n bool deployed,\n uint totalSales,\n uint yieldedDiscountTokens\n ) = previousUnlock.locks(msg.sender);\n\n // record lock from old Unlock in this one\n if (deployed) {\n locks[msg.sender] = LockBalances(\n deployed,\n totalSales,\n yieldedDiscountTokens\n );\n } else {\n revert Unlock__MISSING_LOCK(msg.sender);\n }\n }\n }\n\n /**\n * Functions which transfers tokens held by the contract\n * It handles both ERC20 and the base currency.\n * @dev This function is onlyOwner\n * @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n * @param to the address to transfer the tokens to\n * @param amount the amount of tokens to transfer\n */\n function transferTokens(\n address token,\n address to,\n uint256 amount\n ) public onlyOwner {\n if (token != address(0)) {\n IMintableERC20(token).transfer(to, amount);\n } else {\n payable(to).transfer(amount);\n }\n }\n\n /**\n * Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n * The lock will still be able to sell its memberships.\n * @dev This function is onlyOwner\n * @param lock address of the lock to remove\n */\n function removeLock(address lock) external onlyOwner {\n delete locks[lock];\n }\n\n // required to receive ETH / withdraw ETH\n receive() external payable {\n if (msg.value <= 0) {\n revert Unlock__INVALID_AMOUNT();\n }\n }\n}\n"}},"settings":{"optimizer":{"enabled":true,"mode":"3"},"outputSelection":{"*":{"*":["storageLayout","abi","evm.methodIdentifiers","metadata"],"":["ast"]}},"evmVersion":"paris","libraries":{}}},"output":{"errors":[{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":100348,"end":100467},"type":"Warning"},{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":100483,"end":100531},"type":"Warning"},{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":105867,"end":105895},"type":"Warning"},{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":105804,"end":105846},"type":"Warning"}],"version":"0.8.21","long_version":"0.8.21+commit.d9974bed.Darwin.appleclang","zk_version":"1.3.18","sources":{"contracts/past-versions/UnlockV12.sol":{"id":0,"ast":{"absolutePath":"contracts/past-versions/UnlockV12.sol","exportedSymbols":{"Address":[479],"AddressUpgradeable":[2541],"Context":[21],"ERC1967Proxy":[936],"ERC1967Upgrade":[851],"IBeacon":[150],"IERC1822Proxiable":[141],"IMintableERC20":[1256],"IPublicLock":[1907],"IUniswapOracleV3":[1948],"IUnlock":[2258],"Ownable":[132],"Proxy":[902],"ProxyAdmin":[1215],"StorageSlot":[538],"TransparentUpgradeableProxy":[1082],"Unlock":[3993],"UnlockContextUpgradeable":[2655],"UnlockInitializable":[2613],"UnlockOwnable":[2784]},"id":3994,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"208:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"233:496:0","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":21,"linearizedBaseContracts":[21],"name":"Context","nameLocation":"748:7:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":10,"nodeType":"Block","src":"822:28:0","statements":[{"expression":{"expression":{"id":7,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"835:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"839:6:0","memberName":"sender","nodeType":"MemberAccess","src":"835:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6,"id":9,"nodeType":"Return","src":"828:17:0"}]},"id":11,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"769:10:0","nodeType":"FunctionDefinition","parameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"779:2:0"},"returnParameters":{"id":6,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11,"src":"813:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4,"name":"address","nodeType":"ElementaryTypeName","src":"813:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"812:9:0"},"scope":21,"src":"760:90:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":19,"nodeType":"Block","src":"921:26:0","statements":[{"expression":{"expression":{"id":16,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"934:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"938:4:0","memberName":"data","nodeType":"MemberAccess","src":"934:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":15,"id":18,"nodeType":"Return","src":"927:15:0"}]},"id":20,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"863:8:0","nodeType":"FunctionDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[],"src":"871:2:0"},"returnParameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20,"src":"905:14:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13,"name":"bytes","nodeType":"ElementaryTypeName","src":"905:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"904:16:0"},"scope":21,"src":"854:93:0","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":3994,"src":"730:219:0","usedErrors":[],"usedEvents":[]},{"id":22,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"1080:23:0"},{"abstract":true,"baseContracts":[{"baseName":{"id":24,"name":"Context","nameLocations":["1629:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"1629:7:0"},"id":25,"nodeType":"InheritanceSpecifier","src":"1629:7:0"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":23,"nodeType":"StructuredDocumentation","src":"1105:494:0","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":132,"linearizedBaseContracts":[132,21],"name":"Ownable","nameLocation":"1618:7:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":27,"mutability":"mutable","name":"_owner","nameLocation":"1657:6:0","nodeType":"VariableDeclaration","scope":132,"src":"1641:22:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26,"name":"address","nodeType":"ElementaryTypeName","src":"1641:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":33,"name":"OwnershipTransferred","nameLocation":"1674:20:0","nodeType":"EventDefinition","parameters":{"id":32,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1716:13:0","nodeType":"VariableDeclaration","scope":33,"src":"1700:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28,"name":"address","nodeType":"ElementaryTypeName","src":"1700:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1751:8:0","nodeType":"VariableDeclaration","scope":33,"src":"1735:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1694:69:0"},"src":"1668:96:0"},{"body":{"id":42,"nodeType":"Block","src":"1872:43:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":38,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"1897:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1897:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"1878:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":40,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1878:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41,"nodeType":"ExpressionStatement","src":"1878:32:0"}]},"documentation":{"id":34,"nodeType":"StructuredDocumentation","src":"1768:87:0","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":43,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35,"nodeType":"ParameterList","parameters":[],"src":"1869:2:0"},"returnParameters":{"id":36,"nodeType":"ParameterList","parameters":[],"src":"1872:0:0"},"scope":132,"src":"1858:57:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":50,"nodeType":"Block","src":"2016:31:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":46,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74,"src":"2022:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":47,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2022:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48,"nodeType":"ExpressionStatement","src":"2022:13:0"},{"id":49,"nodeType":"PlaceholderStatement","src":"2041:1:0"}]},"documentation":{"id":44,"nodeType":"StructuredDocumentation","src":"1919:73:0","text":" @dev Throws if called by any account other than the owner."},"id":51,"name":"onlyOwner","nameLocation":"2004:9:0","nodeType":"ModifierDefinition","parameters":{"id":45,"nodeType":"ParameterList","parameters":[],"src":"2013:2:0"},"src":"1995:52:0","virtual":false,"visibility":"internal"},{"body":{"id":59,"nodeType":"Block","src":"2170:24:0","statements":[{"expression":{"id":57,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"2183:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":56,"id":58,"nodeType":"Return","src":"2176:13:0"}]},"documentation":{"id":52,"nodeType":"StructuredDocumentation","src":"2051:61:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":60,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"2124:5:0","nodeType":"FunctionDefinition","parameters":{"id":53,"nodeType":"ParameterList","parameters":[],"src":"2129:2:0"},"returnParameters":{"id":56,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60,"src":"2161:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54,"name":"address","nodeType":"ElementaryTypeName","src":"2161:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2160:9:0"},"scope":132,"src":"2115:79:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":73,"nodeType":"Block","src":"2304:79:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":69,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":65,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60,"src":"2318:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":66,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2318:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":67,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"2329:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":68,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2318:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":70,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2343:34:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":64,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2310:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":71,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2310:68:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72,"nodeType":"ExpressionStatement","src":"2310:68:0"}]},"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"2198:58:0","text":" @dev Throws if the sender is not the owner."},"id":74,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"2268:11:0","nodeType":"FunctionDefinition","parameters":{"id":62,"nodeType":"ParameterList","parameters":[],"src":"2279:2:0"},"returnParameters":{"id":63,"nodeType":"ParameterList","parameters":[],"src":"2304:0:0"},"scope":132,"src":"2259:124:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":87,"nodeType":"Block","src":"2763:41:0","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":83,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2796:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":82,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2788:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":81,"name":"address","nodeType":"ElementaryTypeName","src":"2788:7:0","typeDescriptions":{}}},"id":84,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":80,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"2769:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2769:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86,"nodeType":"ExpressionStatement","src":"2769:30:0"}]},"documentation":{"id":75,"nodeType":"StructuredDocumentation","src":"2387:319:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":88,"implemented":true,"kind":"function","modifiers":[{"id":78,"kind":"modifierInvocation","modifierName":{"id":77,"name":"onlyOwner","nameLocations":["2753:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"2753:9:0"},"nodeType":"ModifierInvocation","src":"2753:9:0"}],"name":"renounceOwnership","nameLocation":"2718:17:0","nodeType":"FunctionDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[],"src":"2735:2:0"},"returnParameters":{"id":79,"nodeType":"ParameterList","parameters":[],"src":"2763:0:0"},"scope":132,"src":"2709:95:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":110,"nodeType":"Block","src":"3013:118:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"3027:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3047:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":99,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3039:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98,"name":"address","nodeType":"ElementaryTypeName","src":"3039:7:0","typeDescriptions":{}}},"id":101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3027:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3051:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":96,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3019:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3019:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":105,"nodeType":"ExpressionStatement","src":"3019:73:0"},{"expression":{"arguments":[{"id":107,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"3117:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":106,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"3098:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109,"nodeType":"ExpressionStatement","src":"3098:28:0"}]},"documentation":{"id":89,"nodeType":"StructuredDocumentation","src":"2808:132:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":111,"implemented":true,"kind":"function","modifiers":[{"id":94,"kind":"modifierInvocation","modifierName":{"id":93,"name":"onlyOwner","nameLocations":["3003:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"3003:9:0"},"nodeType":"ModifierInvocation","src":"3003:9:0"}],"name":"transferOwnership","nameLocation":"2952:17:0","nodeType":"FunctionDefinition","parameters":{"id":92,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91,"mutability":"mutable","name":"newOwner","nameLocation":"2978:8:0","nodeType":"VariableDeclaration","scope":111,"src":"2970:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90,"name":"address","nodeType":"ElementaryTypeName","src":"2970:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2969:18:0"},"returnParameters":{"id":95,"nodeType":"ParameterList","parameters":[],"src":"3013:0:0"},"scope":132,"src":"2943:188:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":130,"nodeType":"Block","src":"3338:110:0","statements":[{"assignments":[118],"declarations":[{"constant":false,"id":118,"mutability":"mutable","name":"oldOwner","nameLocation":"3352:8:0","nodeType":"VariableDeclaration","scope":130,"src":"3344:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"3344:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":120,"initialValue":{"id":119,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"3363:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3344:25:0"},{"expression":{"id":123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":121,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"3375:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":122,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"3384:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3375:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":124,"nodeType":"ExpressionStatement","src":"3375:17:0"},{"eventCall":{"arguments":[{"id":126,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":118,"src":"3424:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":127,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"3434:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":125,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"3403:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3403:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":129,"nodeType":"EmitStatement","src":"3398:45:0"}]},"documentation":{"id":112,"nodeType":"StructuredDocumentation","src":"3135:137:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":131,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"3284:18:0","nodeType":"FunctionDefinition","parameters":{"id":115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":114,"mutability":"mutable","name":"newOwner","nameLocation":"3311:8:0","nodeType":"VariableDeclaration","scope":131,"src":"3303:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":113,"name":"address","nodeType":"ElementaryTypeName","src":"3303:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3302:18:0"},"returnParameters":{"id":116,"nodeType":"ParameterList","parameters":[],"src":"3338:0:0"},"scope":132,"src":"3275:173:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3994,"src":"1600:1850:0","usedErrors":[],"usedEvents":[33]},{"id":133,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"3603:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1822Proxiable","contractDependencies":[],"contractKind":"interface","documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"3628:203:0","text":" @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."},"fullyImplemented":false,"id":141,"linearizedBaseContracts":[141],"name":"IERC1822Proxiable","nameLocation":"3842:17:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":135,"nodeType":"StructuredDocumentation","src":"3864:424:0","text":" @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."},"functionSelector":"52d1902d","id":140,"implemented":false,"kind":"function","modifiers":[],"name":"proxiableUUID","nameLocation":"4300:13:0","nodeType":"FunctionDefinition","parameters":{"id":136,"nodeType":"ParameterList","parameters":[],"src":"4313:2:0"},"returnParameters":{"id":139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":140,"src":"4339:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":137,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4339:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4338:9:0"},"scope":141,"src":"4291:57:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3994,"src":"3832:518:0","usedErrors":[],"usedEvents":[]},{"id":142,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"4478:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IBeacon","contractDependencies":[],"contractKind":"interface","documentation":{"id":143,"nodeType":"StructuredDocumentation","src":"4503:79:0","text":" @dev This is the interface that {BeaconProxy} expects of its beacon."},"fullyImplemented":false,"id":150,"linearizedBaseContracts":[150],"name":"IBeacon","nameLocation":"4593:7:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":144,"nodeType":"StructuredDocumentation","src":"4605:154:0","text":" @dev Must return an address that can be used as a delegate call target.\n {BeaconProxy} will check that this address is a contract."},"functionSelector":"5c60da1b","id":149,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"4771:14:0","nodeType":"FunctionDefinition","parameters":{"id":145,"nodeType":"ParameterList","parameters":[],"src":"4785:2:0"},"returnParameters":{"id":148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":149,"src":"4811:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":146,"name":"address","nodeType":"ElementaryTypeName","src":"4811:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4810:9:0"},"scope":150,"src":"4762:58:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3994,"src":"4583:239:0","usedErrors":[],"usedEvents":[]},{"id":151,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"4951:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":152,"nodeType":"StructuredDocumentation","src":"4976:67:0","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":479,"linearizedBaseContracts":[479],"name":"Address","nameLocation":"5052:7:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":166,"nodeType":"Block","src":"6037:236:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":160,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":155,"src":"6245:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6253:4:0","memberName":"code","nodeType":"MemberAccess","src":"6245:12:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6258:6:0","memberName":"length","nodeType":"MemberAccess","src":"6245:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6267:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6245:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":159,"id":165,"nodeType":"Return","src":"6238:30:0"}]},"documentation":{"id":153,"nodeType":"StructuredDocumentation","src":"5064:904:0","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":167,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"5980:10:0","nodeType":"FunctionDefinition","parameters":{"id":156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"account","nameLocation":"5999:7:0","nodeType":"VariableDeclaration","scope":167,"src":"5991:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":154,"name":"address","nodeType":"ElementaryTypeName","src":"5991:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5990:17:0"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":167,"src":"6031:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":157,"name":"bool","nodeType":"ElementaryTypeName","src":"6031:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6030:6:0"},"scope":479,"src":"5971:302:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":200,"nodeType":"Block","src":"7227:245:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":178,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7249:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}],"id":177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7241:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":176,"name":"address","nodeType":"ElementaryTypeName","src":"7241:7:0","typeDescriptions":{}}},"id":179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7241:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7255:7:0","memberName":"balance","nodeType":"MemberAccess","src":"7241:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":181,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"7266:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7241:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7274:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":175,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7233:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7233:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":185,"nodeType":"ExpressionStatement","src":"7233:73:0"},{"assignments":[187,null],"declarations":[{"constant":false,"id":187,"mutability":"mutable","name":"success","nameLocation":"7319:7:0","nodeType":"VariableDeclaration","scope":200,"src":"7314:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":186,"name":"bool","nodeType":"ElementaryTypeName","src":"7314:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":194,"initialValue":{"arguments":[{"hexValue":"","id":192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7362:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":188,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"7332:9:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7342:4:0","memberName":"call","nodeType":"MemberAccess","src":"7332:14:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":190,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"7354:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"7332:29:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7313:52:0"},{"expression":{"arguments":[{"id":196,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":187,"src":"7386:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7401:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":195,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7371:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7371:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":199,"nodeType":"ExpressionStatement","src":"7371:96:0"}]},"documentation":{"id":168,"nodeType":"StructuredDocumentation","src":"6277:876:0","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":201,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"7165:9:0","nodeType":"FunctionDefinition","parameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":170,"mutability":"mutable","name":"recipient","nameLocation":"7191:9:0","nodeType":"VariableDeclaration","scope":201,"src":"7175:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":169,"name":"address","nodeType":"ElementaryTypeName","src":"7175:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"amount","nameLocation":"7210:6:0","nodeType":"VariableDeclaration","scope":201,"src":"7202:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint256","nodeType":"ElementaryTypeName","src":"7202:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7174:43:0"},"returnParameters":{"id":174,"nodeType":"ParameterList","parameters":[],"src":"7227:0:0"},"scope":479,"src":"7156:316:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":218,"nodeType":"Block","src":"8277:96:0","statements":[{"expression":{"arguments":[{"id":212,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":204,"src":"8318:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":213,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"8326:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8332:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8335:32:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":211,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[259,303],"referencedDeclaration":303,"src":"8296:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8296:72:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":210,"id":217,"nodeType":"Return","src":"8283:85:0"}]},"documentation":{"id":202,"nodeType":"StructuredDocumentation","src":"7476:697:0","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":219,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"8185:12:0","nodeType":"FunctionDefinition","parameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":204,"mutability":"mutable","name":"target","nameLocation":"8211:6:0","nodeType":"VariableDeclaration","scope":219,"src":"8203:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":203,"name":"address","nodeType":"ElementaryTypeName","src":"8203:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":206,"mutability":"mutable","name":"data","nameLocation":"8236:4:0","nodeType":"VariableDeclaration","scope":219,"src":"8223:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":205,"name":"bytes","nodeType":"ElementaryTypeName","src":"8223:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8197:47:0"},"returnParameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":219,"src":"8263:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":208,"name":"bytes","nodeType":"ElementaryTypeName","src":"8263:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8262:14:0"},"scope":479,"src":"8176:197:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":238,"nodeType":"Block","src":"8714:70:0","statements":[{"expression":{"arguments":[{"id":232,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"8749:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":233,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":224,"src":"8757:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8763:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":235,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"8766:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":231,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[259,303],"referencedDeclaration":303,"src":"8727:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8727:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":230,"id":237,"nodeType":"Return","src":"8720:59:0"}]},"documentation":{"id":220,"nodeType":"StructuredDocumentation","src":"8377:201:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":239,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"8590:12:0","nodeType":"FunctionDefinition","parameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":222,"mutability":"mutable","name":"target","nameLocation":"8616:6:0","nodeType":"VariableDeclaration","scope":239,"src":"8608:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":221,"name":"address","nodeType":"ElementaryTypeName","src":"8608:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":224,"mutability":"mutable","name":"data","nameLocation":"8641:4:0","nodeType":"VariableDeclaration","scope":239,"src":"8628:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":223,"name":"bytes","nodeType":"ElementaryTypeName","src":"8628:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":226,"mutability":"mutable","name":"errorMessage","nameLocation":"8665:12:0","nodeType":"VariableDeclaration","scope":239,"src":"8651:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":225,"name":"string","nodeType":"ElementaryTypeName","src":"8651:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8602:79:0"},"returnParameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":239,"src":"8700:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":228,"name":"bytes","nodeType":"ElementaryTypeName","src":"8700:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8699:14:0"},"scope":479,"src":"8581:203:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":258,"nodeType":"Block","src":"9251:151:0","statements":[{"expression":{"arguments":[{"id":252,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":242,"src":"9301:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":253,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"9317:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":246,"src":"9331:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9346:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":251,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[259,303],"referencedDeclaration":303,"src":"9270:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9270:127:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":250,"id":257,"nodeType":"Return","src":"9257:140:0"}]},"documentation":{"id":240,"nodeType":"StructuredDocumentation","src":"8788:331:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":259,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"9131:21:0","nodeType":"FunctionDefinition","parameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":242,"mutability":"mutable","name":"target","nameLocation":"9166:6:0","nodeType":"VariableDeclaration","scope":259,"src":"9158:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":241,"name":"address","nodeType":"ElementaryTypeName","src":"9158:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":244,"mutability":"mutable","name":"data","nameLocation":"9191:4:0","nodeType":"VariableDeclaration","scope":259,"src":"9178:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":243,"name":"bytes","nodeType":"ElementaryTypeName","src":"9178:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":246,"mutability":"mutable","name":"value","nameLocation":"9209:5:0","nodeType":"VariableDeclaration","scope":259,"src":"9201:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":245,"name":"uint256","nodeType":"ElementaryTypeName","src":"9201:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9152:66:0"},"returnParameters":{"id":250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":259,"src":"9237:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":248,"name":"bytes","nodeType":"ElementaryTypeName","src":"9237:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9236:14:0"},"scope":479,"src":"9122:280:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":302,"nodeType":"Block","src":"9797:277:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":276,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9826:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}],"id":275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9818:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":274,"name":"address","nodeType":"ElementaryTypeName","src":"9818:7:0","typeDescriptions":{}}},"id":277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9818:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9832:7:0","memberName":"balance","nodeType":"MemberAccess","src":"9818:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":279,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"9843:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9818:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9856:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":273,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9803:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9803:99:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":283,"nodeType":"ExpressionStatement","src":"9803:99:0"},{"assignments":[285,287],"declarations":[{"constant":false,"id":285,"mutability":"mutable","name":"success","nameLocation":"9914:7:0","nodeType":"VariableDeclaration","scope":302,"src":"9909:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":284,"name":"bool","nodeType":"ElementaryTypeName","src":"9909:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":287,"mutability":"mutable","name":"returndata","nameLocation":"9936:10:0","nodeType":"VariableDeclaration","scope":302,"src":"9923:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":286,"name":"bytes","nodeType":"ElementaryTypeName","src":"9923:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":294,"initialValue":{"arguments":[{"id":292,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"9976:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":288,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"9950:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9957:4:0","memberName":"call","nodeType":"MemberAccess","src":"9950:11:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":290,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"9969:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9950:25:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9950:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9908:73:0"},{"expression":{"arguments":[{"id":296,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"10027:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":297,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"10035:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":298,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"10044:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":299,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":268,"src":"10056:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":295,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":434,"src":"10000:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10000:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":272,"id":301,"nodeType":"Return","src":"9987:82:0"}]},"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"9406:227:0","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":303,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"9645:21:0","nodeType":"FunctionDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":262,"mutability":"mutable","name":"target","nameLocation":"9680:6:0","nodeType":"VariableDeclaration","scope":303,"src":"9672:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":261,"name":"address","nodeType":"ElementaryTypeName","src":"9672:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":264,"mutability":"mutable","name":"data","nameLocation":"9705:4:0","nodeType":"VariableDeclaration","scope":303,"src":"9692:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":263,"name":"bytes","nodeType":"ElementaryTypeName","src":"9692:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":266,"mutability":"mutable","name":"value","nameLocation":"9723:5:0","nodeType":"VariableDeclaration","scope":303,"src":"9715:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":265,"name":"uint256","nodeType":"ElementaryTypeName","src":"9715:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":268,"mutability":"mutable","name":"errorMessage","nameLocation":"9748:12:0","nodeType":"VariableDeclaration","scope":303,"src":"9734:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":267,"name":"string","nodeType":"ElementaryTypeName","src":"9734:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9666:98:0"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":271,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":303,"src":"9783:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":270,"name":"bytes","nodeType":"ElementaryTypeName","src":"9783:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9782:14:0"},"scope":479,"src":"9636:438:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":319,"nodeType":"Block","src":"10349:97:0","statements":[{"expression":{"arguments":[{"id":314,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"10387:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":315,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"10395:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10401:39:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":313,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[320,349],"referencedDeclaration":349,"src":"10368:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10368:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":312,"id":318,"nodeType":"Return","src":"10355:86:0"}]},"documentation":{"id":304,"nodeType":"StructuredDocumentation","src":"10078:156:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":320,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"10246:18:0","nodeType":"FunctionDefinition","parameters":{"id":309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":306,"mutability":"mutable","name":"target","nameLocation":"10278:6:0","nodeType":"VariableDeclaration","scope":320,"src":"10270:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":305,"name":"address","nodeType":"ElementaryTypeName","src":"10270:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":308,"mutability":"mutable","name":"data","nameLocation":"10303:4:0","nodeType":"VariableDeclaration","scope":320,"src":"10290:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":307,"name":"bytes","nodeType":"ElementaryTypeName","src":"10290:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10264:47:0"},"returnParameters":{"id":312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":311,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":320,"src":"10335:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":310,"name":"bytes","nodeType":"ElementaryTypeName","src":"10335:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10334:14:0"},"scope":479,"src":"10237:209:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":348,"nodeType":"Block","src":"10760:164:0","statements":[{"assignments":[333,335],"declarations":[{"constant":false,"id":333,"mutability":"mutable","name":"success","nameLocation":"10772:7:0","nodeType":"VariableDeclaration","scope":348,"src":"10767:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":332,"name":"bool","nodeType":"ElementaryTypeName","src":"10767:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":335,"mutability":"mutable","name":"returndata","nameLocation":"10794:10:0","nodeType":"VariableDeclaration","scope":348,"src":"10781:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":334,"name":"bytes","nodeType":"ElementaryTypeName","src":"10781:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":340,"initialValue":{"arguments":[{"id":338,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":325,"src":"10826:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":336,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"10808:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10815:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"10808:17:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10808:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"10766:65:0"},{"expression":{"arguments":[{"id":342,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"10877:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":343,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":333,"src":"10885:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":344,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":335,"src":"10894:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":345,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":327,"src":"10906:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":341,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":434,"src":"10850:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10850:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":331,"id":347,"nodeType":"Return","src":"10837:82:0"}]},"documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"10450:163:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":349,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"10625:18:0","nodeType":"FunctionDefinition","parameters":{"id":328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"mutability":"mutable","name":"target","nameLocation":"10657:6:0","nodeType":"VariableDeclaration","scope":349,"src":"10649:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":322,"name":"address","nodeType":"ElementaryTypeName","src":"10649:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":325,"mutability":"mutable","name":"data","nameLocation":"10682:4:0","nodeType":"VariableDeclaration","scope":349,"src":"10669:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":324,"name":"bytes","nodeType":"ElementaryTypeName","src":"10669:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"errorMessage","nameLocation":"10706:12:0","nodeType":"VariableDeclaration","scope":349,"src":"10692:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":326,"name":"string","nodeType":"ElementaryTypeName","src":"10692:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10643:79:0"},"returnParameters":{"id":331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":349,"src":"10746:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":329,"name":"bytes","nodeType":"ElementaryTypeName","src":"10746:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10745:14:0"},"scope":479,"src":"10616:308:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":365,"nodeType":"Block","src":"11198:133:0","statements":[{"expression":{"arguments":[{"id":360,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":352,"src":"11247:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":361,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":354,"src":"11263:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11277:41:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":359,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[366,395],"referencedDeclaration":395,"src":"11217:20:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11217:109:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":358,"id":364,"nodeType":"Return","src":"11204:122:0"}]},"documentation":{"id":350,"nodeType":"StructuredDocumentation","src":"10928:158:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":366,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"11098:20:0","nodeType":"FunctionDefinition","parameters":{"id":355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":352,"mutability":"mutable","name":"target","nameLocation":"11132:6:0","nodeType":"VariableDeclaration","scope":366,"src":"11124:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":351,"name":"address","nodeType":"ElementaryTypeName","src":"11124:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"data","nameLocation":"11157:4:0","nodeType":"VariableDeclaration","scope":366,"src":"11144:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":353,"name":"bytes","nodeType":"ElementaryTypeName","src":"11144:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11118:47:0"},"returnParameters":{"id":358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":366,"src":"11184:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":356,"name":"bytes","nodeType":"ElementaryTypeName","src":"11184:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11183:14:0"},"scope":479,"src":"11089:242:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":394,"nodeType":"Block","src":"11644:166:0","statements":[{"assignments":[379,381],"declarations":[{"constant":false,"id":379,"mutability":"mutable","name":"success","nameLocation":"11656:7:0","nodeType":"VariableDeclaration","scope":394,"src":"11651:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":378,"name":"bool","nodeType":"ElementaryTypeName","src":"11651:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":381,"mutability":"mutable","name":"returndata","nameLocation":"11678:10:0","nodeType":"VariableDeclaration","scope":394,"src":"11665:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":380,"name":"bytes","nodeType":"ElementaryTypeName","src":"11665:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":386,"initialValue":{"arguments":[{"id":384,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":371,"src":"11712:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":382,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":369,"src":"11692:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11699:12:0","memberName":"delegatecall","nodeType":"MemberAccess","src":"11692:19:0","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11692:25:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"11650:67:0"},{"expression":{"arguments":[{"id":388,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":369,"src":"11763:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":389,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":379,"src":"11771:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":390,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":381,"src":"11780:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":391,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":373,"src":"11792:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":387,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":434,"src":"11736:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11736:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":377,"id":393,"nodeType":"Return","src":"11723:82:0"}]},"documentation":{"id":367,"nodeType":"StructuredDocumentation","src":"11335:165:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":395,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"11512:20:0","nodeType":"FunctionDefinition","parameters":{"id":374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":369,"mutability":"mutable","name":"target","nameLocation":"11546:6:0","nodeType":"VariableDeclaration","scope":395,"src":"11538:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":368,"name":"address","nodeType":"ElementaryTypeName","src":"11538:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":371,"mutability":"mutable","name":"data","nameLocation":"11571:4:0","nodeType":"VariableDeclaration","scope":395,"src":"11558:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":370,"name":"bytes","nodeType":"ElementaryTypeName","src":"11558:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":373,"mutability":"mutable","name":"errorMessage","nameLocation":"11595:12:0","nodeType":"VariableDeclaration","scope":395,"src":"11581:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":372,"name":"string","nodeType":"ElementaryTypeName","src":"11581:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11532:79:0"},"returnParameters":{"id":377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":395,"src":"11630:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":375,"name":"bytes","nodeType":"ElementaryTypeName","src":"11630:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11629:14:0"},"scope":479,"src":"11503:307:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":433,"nodeType":"Block","src":"12260:372:0","statements":[{"condition":{"id":409,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":400,"src":"12270:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":431,"nodeType":"Block","src":"12580:48:0","statements":[{"expression":{"arguments":[{"id":427,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"12596:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":428,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":404,"src":"12608:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":426,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":478,"src":"12588:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12588:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":430,"nodeType":"ExpressionStatement","src":"12588:33:0"}]},"id":432,"nodeType":"IfStatement","src":"12266:362:0","trueBody":{"id":425,"nodeType":"Block","src":"12279:295:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":410,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"12291:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12302:6:0","memberName":"length","nodeType":"MemberAccess","src":"12291:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12312:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12291:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":422,"nodeType":"IfStatement","src":"12287:256:0","trueBody":{"id":421,"nodeType":"Block","src":"12315:228:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":416,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"12493:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":415,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":167,"src":"12482:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12482:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12502:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":414,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12474:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12474:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":420,"nodeType":"ExpressionStatement","src":"12474:60:0"}]}},{"expression":{"id":423,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"12557:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":408,"id":424,"nodeType":"Return","src":"12550:17:0"}]}}]},"documentation":{"id":396,"nodeType":"StructuredDocumentation","src":"11814:267:0","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":434,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"12093:26:0","nodeType":"FunctionDefinition","parameters":{"id":405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":398,"mutability":"mutable","name":"target","nameLocation":"12133:6:0","nodeType":"VariableDeclaration","scope":434,"src":"12125:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":397,"name":"address","nodeType":"ElementaryTypeName","src":"12125:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":400,"mutability":"mutable","name":"success","nameLocation":"12150:7:0","nodeType":"VariableDeclaration","scope":434,"src":"12145:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":399,"name":"bool","nodeType":"ElementaryTypeName","src":"12145:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":402,"mutability":"mutable","name":"returndata","nameLocation":"12176:10:0","nodeType":"VariableDeclaration","scope":434,"src":"12163:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":401,"name":"bytes","nodeType":"ElementaryTypeName","src":"12163:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":404,"mutability":"mutable","name":"errorMessage","nameLocation":"12206:12:0","nodeType":"VariableDeclaration","scope":434,"src":"12192:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":403,"name":"string","nodeType":"ElementaryTypeName","src":"12192:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12119:103:0"},"returnParameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":434,"src":"12246:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":406,"name":"bytes","nodeType":"ElementaryTypeName","src":"12246:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12245:14:0"},"scope":479,"src":"12084:548:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":457,"nodeType":"Block","src":"12985:109:0","statements":[{"condition":{"id":446,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":437,"src":"12995:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":455,"nodeType":"Block","src":"13042:48:0","statements":[{"expression":{"arguments":[{"id":451,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":439,"src":"13058:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":452,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"13070:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":450,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":478,"src":"13050:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13050:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":454,"nodeType":"ExpressionStatement","src":"13050:33:0"}]},"id":456,"nodeType":"IfStatement","src":"12991:99:0","trueBody":{"id":449,"nodeType":"Block","src":"13004:32:0","statements":[{"expression":{"id":447,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":439,"src":"13019:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":445,"id":448,"nodeType":"Return","src":"13012:17:0"}]}}]},"documentation":{"id":435,"nodeType":"StructuredDocumentation","src":"12636:200:0","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":458,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"12848:16:0","nodeType":"FunctionDefinition","parameters":{"id":442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":437,"mutability":"mutable","name":"success","nameLocation":"12875:7:0","nodeType":"VariableDeclaration","scope":458,"src":"12870:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":436,"name":"bool","nodeType":"ElementaryTypeName","src":"12870:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":439,"mutability":"mutable","name":"returndata","nameLocation":"12901:10:0","nodeType":"VariableDeclaration","scope":458,"src":"12888:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":438,"name":"bytes","nodeType":"ElementaryTypeName","src":"12888:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"errorMessage","nameLocation":"12931:12:0","nodeType":"VariableDeclaration","scope":458,"src":"12917:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":440,"name":"string","nodeType":"ElementaryTypeName","src":"12917:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12864:83:0"},"returnParameters":{"id":445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":458,"src":"12971:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":443,"name":"bytes","nodeType":"ElementaryTypeName","src":"12971:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12970:14:0"},"scope":479,"src":"12839:255:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":477,"nodeType":"Block","src":"13193:393:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":465,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":460,"src":"13261:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13272:6:0","memberName":"length","nodeType":"MemberAccess","src":"13261:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13281:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13261:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":475,"nodeType":"Block","src":"13547:35:0","statements":[{"expression":{"arguments":[{"id":472,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":462,"src":"13562:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":471,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"13555:6:0","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13555:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":474,"nodeType":"ExpressionStatement","src":"13555:20:0"}]},"id":476,"nodeType":"IfStatement","src":"13257:325:0","trueBody":{"id":470,"nodeType":"Block","src":"13284:257:0","statements":[{"AST":{"nativeSrc":"13424:111:0","nodeType":"YulBlock","src":"13424:111:0","statements":[{"nativeSrc":"13434:40:0","nodeType":"YulVariableDeclaration","src":"13434:40:0","value":{"arguments":[{"name":"returndata","nativeSrc":"13463:10:0","nodeType":"YulIdentifier","src":"13463:10:0"}],"functionName":{"name":"mload","nativeSrc":"13457:5:0","nodeType":"YulIdentifier","src":"13457:5:0"},"nativeSrc":"13457:17:0","nodeType":"YulFunctionCall","src":"13457:17:0"},"variables":[{"name":"returndata_size","nativeSrc":"13438:15:0","nodeType":"YulTypedName","src":"13438:15:0","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"13494:2:0","nodeType":"YulLiteral","src":"13494:2:0","type":"","value":"32"},{"name":"returndata","nativeSrc":"13498:10:0","nodeType":"YulIdentifier","src":"13498:10:0"}],"functionName":{"name":"add","nativeSrc":"13490:3:0","nodeType":"YulIdentifier","src":"13490:3:0"},"nativeSrc":"13490:19:0","nodeType":"YulFunctionCall","src":"13490:19:0"},{"name":"returndata_size","nativeSrc":"13511:15:0","nodeType":"YulIdentifier","src":"13511:15:0"}],"functionName":{"name":"revert","nativeSrc":"13483:6:0","nodeType":"YulIdentifier","src":"13483:6:0"},"nativeSrc":"13483:44:0","nodeType":"YulFunctionCall","src":"13483:44:0"},"nativeSrc":"13483:44:0","nodeType":"YulExpressionStatement","src":"13483:44:0"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":460,"isOffset":false,"isSlot":false,"src":"13463:10:0","valueSize":1},{"declaration":460,"isOffset":false,"isSlot":false,"src":"13498:10:0","valueSize":1}],"id":469,"nodeType":"InlineAssembly","src":"13415:120:0"}]}}]},"id":478,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"13107:7:0","nodeType":"FunctionDefinition","parameters":{"id":463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":460,"mutability":"mutable","name":"returndata","nameLocation":"13133:10:0","nodeType":"VariableDeclaration","scope":478,"src":"13120:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":459,"name":"bytes","nodeType":"ElementaryTypeName","src":"13120:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":462,"mutability":"mutable","name":"errorMessage","nameLocation":"13163:12:0","nodeType":"VariableDeclaration","scope":478,"src":"13149:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":461,"name":"string","nodeType":"ElementaryTypeName","src":"13149:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13114:65:0"},"returnParameters":{"id":464,"nodeType":"ParameterList","parameters":[],"src":"13193:0:0"},"scope":479,"src":"13098:488:0","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":3994,"src":"5044:8544:0","usedErrors":[],"usedEvents":[]},{"id":480,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"13725:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":481,"nodeType":"StructuredDocumentation","src":"13750:1148:0","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```\n contract ERC1967 {\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._"},"fullyImplemented":true,"id":538,"linearizedBaseContracts":[538],"name":"StorageSlot","nameLocation":"14907:11:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":484,"members":[{"constant":false,"id":483,"mutability":"mutable","name":"value","nameLocation":"14956:5:0","nodeType":"VariableDeclaration","scope":484,"src":"14948:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":482,"name":"address","nodeType":"ElementaryTypeName","src":"14948:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"14930:11:0","nodeType":"StructDefinition","scope":538,"src":"14923:43:0","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":487,"members":[{"constant":false,"id":486,"mutability":"mutable","name":"value","nameLocation":"15000:5:0","nodeType":"VariableDeclaration","scope":487,"src":"14995:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":485,"name":"bool","nodeType":"ElementaryTypeName","src":"14995:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"14977:11:0","nodeType":"StructDefinition","scope":538,"src":"14970:40:0","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":490,"members":[{"constant":false,"id":489,"mutability":"mutable","name":"value","nameLocation":"15047:5:0","nodeType":"VariableDeclaration","scope":490,"src":"15039:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":488,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15039:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"15021:11:0","nodeType":"StructDefinition","scope":538,"src":"15014:43:0","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":493,"members":[{"constant":false,"id":492,"mutability":"mutable","name":"value","nameLocation":"15094:5:0","nodeType":"VariableDeclaration","scope":493,"src":"15086:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":491,"name":"uint256","nodeType":"ElementaryTypeName","src":"15086:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"15068:11:0","nodeType":"StructDefinition","scope":538,"src":"15061:43:0","visibility":"public"},{"body":{"id":503,"nodeType":"Block","src":"15286:86:0","statements":[{"AST":{"nativeSrc":"15340:28:0","nodeType":"YulBlock","src":"15340:28:0","statements":[{"nativeSrc":"15348:14:0","nodeType":"YulAssignment","src":"15348:14:0","value":{"name":"slot","nativeSrc":"15358:4:0","nodeType":"YulIdentifier","src":"15358:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"15348:6:0","nodeType":"YulIdentifier","src":"15348:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":500,"isOffset":false,"isSlot":true,"src":"15348:6:0","suffix":"slot","valueSize":1},{"declaration":496,"isOffset":false,"isSlot":false,"src":"15358:4:0","valueSize":1}],"id":502,"nodeType":"InlineAssembly","src":"15331:37:0"}]},"documentation":{"id":494,"nodeType":"StructuredDocumentation","src":"15108:83:0","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":504,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"15203:14:0","nodeType":"FunctionDefinition","parameters":{"id":497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":496,"mutability":"mutable","name":"slot","nameLocation":"15231:4:0","nodeType":"VariableDeclaration","scope":504,"src":"15223:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":495,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15223:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15217:22:0"},"returnParameters":{"id":501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":500,"mutability":"mutable","name":"r","nameLocation":"15283:1:0","nodeType":"VariableDeclaration","scope":504,"src":"15263:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":499,"nodeType":"UserDefinedTypeName","pathNode":{"id":498,"name":"AddressSlot","nameLocations":["15263:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"15263:11:0"},"referencedDeclaration":484,"src":"15263:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"15262:23:0"},"scope":538,"src":"15194:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":514,"nodeType":"Block","src":"15554:86:0","statements":[{"AST":{"nativeSrc":"15608:28:0","nodeType":"YulBlock","src":"15608:28:0","statements":[{"nativeSrc":"15616:14:0","nodeType":"YulAssignment","src":"15616:14:0","value":{"name":"slot","nativeSrc":"15626:4:0","nodeType":"YulIdentifier","src":"15626:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"15616:6:0","nodeType":"YulIdentifier","src":"15616:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":511,"isOffset":false,"isSlot":true,"src":"15616:6:0","suffix":"slot","valueSize":1},{"declaration":507,"isOffset":false,"isSlot":false,"src":"15626:4:0","valueSize":1}],"id":513,"nodeType":"InlineAssembly","src":"15599:37:0"}]},"documentation":{"id":505,"nodeType":"StructuredDocumentation","src":"15376:83:0","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":515,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"15471:14:0","nodeType":"FunctionDefinition","parameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"slot","nameLocation":"15499:4:0","nodeType":"VariableDeclaration","scope":515,"src":"15491:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":506,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15491:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15485:22:0"},"returnParameters":{"id":512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":511,"mutability":"mutable","name":"r","nameLocation":"15551:1:0","nodeType":"VariableDeclaration","scope":515,"src":"15531:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$487_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":510,"nodeType":"UserDefinedTypeName","pathNode":{"id":509,"name":"BooleanSlot","nameLocations":["15531:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":487,"src":"15531:11:0"},"referencedDeclaration":487,"src":"15531:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$487_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"15530:23:0"},"scope":538,"src":"15462:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":525,"nodeType":"Block","src":"15822:86:0","statements":[{"AST":{"nativeSrc":"15876:28:0","nodeType":"YulBlock","src":"15876:28:0","statements":[{"nativeSrc":"15884:14:0","nodeType":"YulAssignment","src":"15884:14:0","value":{"name":"slot","nativeSrc":"15894:4:0","nodeType":"YulIdentifier","src":"15894:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"15884:6:0","nodeType":"YulIdentifier","src":"15884:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":522,"isOffset":false,"isSlot":true,"src":"15884:6:0","suffix":"slot","valueSize":1},{"declaration":518,"isOffset":false,"isSlot":false,"src":"15894:4:0","valueSize":1}],"id":524,"nodeType":"InlineAssembly","src":"15867:37:0"}]},"documentation":{"id":516,"nodeType":"StructuredDocumentation","src":"15644:83:0","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":526,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"15739:14:0","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"slot","nameLocation":"15767:4:0","nodeType":"VariableDeclaration","scope":526,"src":"15759:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15759:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15753:22:0"},"returnParameters":{"id":523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":522,"mutability":"mutable","name":"r","nameLocation":"15819:1:0","nodeType":"VariableDeclaration","scope":526,"src":"15799:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$490_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":521,"nodeType":"UserDefinedTypeName","pathNode":{"id":520,"name":"Bytes32Slot","nameLocations":["15799:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":490,"src":"15799:11:0"},"referencedDeclaration":490,"src":"15799:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$490_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"15798:23:0"},"scope":538,"src":"15730:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":536,"nodeType":"Block","src":"16090:86:0","statements":[{"AST":{"nativeSrc":"16144:28:0","nodeType":"YulBlock","src":"16144:28:0","statements":[{"nativeSrc":"16152:14:0","nodeType":"YulAssignment","src":"16152:14:0","value":{"name":"slot","nativeSrc":"16162:4:0","nodeType":"YulIdentifier","src":"16162:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"16152:6:0","nodeType":"YulIdentifier","src":"16152:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":533,"isOffset":false,"isSlot":true,"src":"16152:6:0","suffix":"slot","valueSize":1},{"declaration":529,"isOffset":false,"isSlot":false,"src":"16162:4:0","valueSize":1}],"id":535,"nodeType":"InlineAssembly","src":"16135:37:0"}]},"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"15912:83:0","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":537,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"16007:14:0","nodeType":"FunctionDefinition","parameters":{"id":530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":529,"mutability":"mutable","name":"slot","nameLocation":"16035:4:0","nodeType":"VariableDeclaration","scope":537,"src":"16027:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16027:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16021:22:0"},"returnParameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":533,"mutability":"mutable","name":"r","nameLocation":"16087:1:0","nodeType":"VariableDeclaration","scope":537,"src":"16067:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$493_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":532,"nodeType":"UserDefinedTypeName","pathNode":{"id":531,"name":"Uint256Slot","nameLocations":["16067:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":493,"src":"16067:11:0"},"referencedDeclaration":493,"src":"16067:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$493_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"16066:23:0"},"scope":538,"src":"15998:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3994,"src":"14899:1279:0","usedErrors":[],"usedEvents":[]},{"id":539,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"16337:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"ERC1967Upgrade","contractDependencies":[],"contractKind":"contract","documentation":{"id":540,"nodeType":"StructuredDocumentation","src":"16362:236:0","text":" @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"},"fullyImplemented":true,"id":851,"linearizedBaseContracts":[851],"name":"ERC1967Upgrade","nameLocation":"16617:14:0","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":543,"mutability":"constant","name":"_ROLLBACK_SLOT","nameLocation":"16738:14:0","nodeType":"VariableDeclaration","scope":851,"src":"16713:112:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16713:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433","id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16759:66:0","typeDescriptions":{"typeIdentifier":"t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1","typeString":"int_const 3304...(69 digits omitted)...9347"},"value":"0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"},"visibility":"private"},{"constant":true,"documentation":{"id":544,"nodeType":"StructuredDocumentation","src":"16830:206:0","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":547,"mutability":"constant","name":"_IMPLEMENTATION_SLOT","nameLocation":"17065:20:0","nodeType":"VariableDeclaration","scope":851,"src":"17039:119:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17039:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17092:66:0","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"17163:64:0","text":" @dev Emitted when the implementation is upgraded."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":552,"name":"Upgraded","nameLocation":"17236:8:0","nodeType":"EventDefinition","parameters":{"id":551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":550,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"17261:14:0","nodeType":"VariableDeclaration","scope":552,"src":"17245:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":549,"name":"address","nodeType":"ElementaryTypeName","src":"17245:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17244:32:0"},"src":"17230:47:0"},{"body":{"id":564,"nodeType":"Block","src":"17409:72:0","statements":[{"expression":{"expression":{"arguments":[{"id":560,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"17449:20:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":558,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"17422:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17434:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"17422:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17422:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":562,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17471:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"17422:54:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":557,"id":563,"nodeType":"Return","src":"17415:61:0"}]},"documentation":{"id":553,"nodeType":"StructuredDocumentation","src":"17281:63:0","text":" @dev Returns the current implementation address."},"id":565,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"17356:18:0","nodeType":"FunctionDefinition","parameters":{"id":554,"nodeType":"ParameterList","parameters":[],"src":"17374:2:0"},"returnParameters":{"id":557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":565,"src":"17400:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":555,"name":"address","nodeType":"ElementaryTypeName","src":"17400:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17399:9:0"},"scope":851,"src":"17347:134:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":588,"nodeType":"Block","src":"17627:204:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":574,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":568,"src":"17667:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":572,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"17648:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17656:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":167,"src":"17648:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17648:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17693:47:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""},"value":"ERC1967: new implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""}],"id":571,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17633:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17633:113:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":578,"nodeType":"ExpressionStatement","src":"17633:113:0"},{"expression":{"id":586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":582,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"17779:20:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":579,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"17752:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17764:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"17752:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17752:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17801:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"17752:54:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":585,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":568,"src":"17809:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17752:74:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":587,"nodeType":"ExpressionStatement","src":"17752:74:0"}]},"documentation":{"id":566,"nodeType":"StructuredDocumentation","src":"17485:76:0","text":" @dev Stores a new address in the EIP1967 implementation slot."},"id":589,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"17573:18:0","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":568,"mutability":"mutable","name":"newImplementation","nameLocation":"17600:17:0","nodeType":"VariableDeclaration","scope":589,"src":"17592:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":567,"name":"address","nodeType":"ElementaryTypeName","src":"17592:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17591:27:0"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"17627:0:0"},"scope":851,"src":"17564:267:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":603,"nodeType":"Block","src":"17981:86:0","statements":[{"expression":{"arguments":[{"id":596,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"18006:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":595,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"17987:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17987:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":598,"nodeType":"ExpressionStatement","src":"17987:37:0"},{"eventCall":{"arguments":[{"id":600,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"18044:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":599,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":552,"src":"18035:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18035:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":602,"nodeType":"EmitStatement","src":"18030:32:0"}]},"documentation":{"id":590,"nodeType":"StructuredDocumentation","src":"17835:87:0","text":" @dev Perform implementation upgrade\n Emits an {Upgraded} event."},"id":604,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"17934:10:0","nodeType":"FunctionDefinition","parameters":{"id":593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":592,"mutability":"mutable","name":"newImplementation","nameLocation":"17953:17:0","nodeType":"VariableDeclaration","scope":604,"src":"17945:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":591,"name":"address","nodeType":"ElementaryTypeName","src":"17945:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17944:27:0"},"returnParameters":{"id":594,"nodeType":"ParameterList","parameters":[],"src":"17981:0:0"},"scope":851,"src":"17925:142:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":633,"nodeType":"Block","src":"18303:147:0","statements":[{"expression":{"arguments":[{"id":615,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":607,"src":"18320:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":614,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":604,"src":"18309:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18309:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":617,"nodeType":"ExpressionStatement","src":"18309:29:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":618,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"18348:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18353:6:0","memberName":"length","nodeType":"MemberAccess","src":"18348:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18362:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18348:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":622,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":611,"src":"18367:9:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18348:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":632,"nodeType":"IfStatement","src":"18344:102:0","trueBody":{"id":631,"nodeType":"Block","src":"18378:68:0","statements":[{"expression":{"arguments":[{"id":627,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":607,"src":"18415:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":628,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"18434:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":624,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"18386:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18394:20:0","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":366,"src":"18386:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18386:53:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":630,"nodeType":"ExpressionStatement","src":"18386:53:0"}]}}]},"documentation":{"id":605,"nodeType":"StructuredDocumentation","src":"18071:115:0","text":" @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."},"id":634,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCall","nameLocation":"18198:17:0","nodeType":"FunctionDefinition","parameters":{"id":612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":607,"mutability":"mutable","name":"newImplementation","nameLocation":"18229:17:0","nodeType":"VariableDeclaration","scope":634,"src":"18221:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":606,"name":"address","nodeType":"ElementaryTypeName","src":"18221:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":609,"mutability":"mutable","name":"data","nameLocation":"18265:4:0","nodeType":"VariableDeclaration","scope":634,"src":"18252:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":608,"name":"bytes","nodeType":"ElementaryTypeName","src":"18252:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":611,"mutability":"mutable","name":"forceCall","nameLocation":"18280:9:0","nodeType":"VariableDeclaration","scope":634,"src":"18275:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":610,"name":"bool","nodeType":"ElementaryTypeName","src":"18275:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18215:78:0"},"returnParameters":{"id":613,"nodeType":"ParameterList","parameters":[],"src":"18303:0:0"},"scope":851,"src":"18189:261:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":686,"nodeType":"Block","src":"18728:794:0","statements":[{"condition":{"expression":{"arguments":[{"id":646,"name":"_ROLLBACK_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"19053:14:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":644,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"19026:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19038:14:0","memberName":"getBooleanSlot","nodeType":"MemberAccess","referencedDeclaration":515,"src":"19026:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$487_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"}},"id":647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19026:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$487_storage_ptr","typeString":"struct StorageSlot.BooleanSlot storage pointer"}},"id":648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19069:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":486,"src":"19026:48:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":684,"nodeType":"Block","src":"19134:384:0","statements":[{"clauses":[{"block":{"id":669,"nodeType":"Block","src":"19238:131:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":663,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":660,"src":"19267:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":664,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"19275:20:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"19267:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944","id":666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19307:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""},"value":"ERC1967Upgrade: unsupported proxiableUUID"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""}],"id":662,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19248:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19248:112:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":668,"nodeType":"ExpressionStatement","src":"19248:112:0"}]},"errorName":"","id":670,"nodeType":"TryCatchClause","parameters":{"id":661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":660,"mutability":"mutable","name":"slot","nameLocation":"19225:4:0","nodeType":"VariableDeclaration","scope":670,"src":"19217:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":659,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19217:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19207:30:0"},"src":"19199:170:0"},{"block":{"id":675,"nodeType":"Block","src":"19376:75:0","statements":[{"expression":{"arguments":[{"hexValue":"45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053","id":672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19393:48:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""},"value":"ERC1967Upgrade: new implementation is not UUPS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""}],"id":671,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"19386:6:0","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19386:56:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":674,"nodeType":"ExpressionStatement","src":"19386:56:0"}]},"errorName":"","id":676,"nodeType":"TryCatchClause","src":"19370:81:0"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":655,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"19164:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":654,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":141,"src":"19146:17:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1822Proxiable_$141_$","typeString":"type(contract IERC1822Proxiable)"}},"id":656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19146:36:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC1822Proxiable_$141","typeString":"contract IERC1822Proxiable"}},"id":657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19183:13:0","memberName":"proxiableUUID","nodeType":"MemberAccess","referencedDeclaration":140,"src":"19146:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19146:52:0","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":677,"nodeType":"TryStatement","src":"19142:309:0"},{"expression":{"arguments":[{"id":679,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"19476:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":680,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":639,"src":"19495:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":681,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":641,"src":"19501:9:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":678,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"19458:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19458:53:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":683,"nodeType":"ExpressionStatement","src":"19458:53:0"}]},"id":685,"nodeType":"IfStatement","src":"19022:496:0","trueBody":{"id":653,"nodeType":"Block","src":"19076:52:0","statements":[{"expression":{"arguments":[{"id":650,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"19103:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":649,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"19084:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19084:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":652,"nodeType":"ExpressionStatement","src":"19084:37:0"}]}}]},"documentation":{"id":635,"nodeType":"StructuredDocumentation","src":"18454:153:0","text":" @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."},"id":687,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCallUUPS","nameLocation":"18619:21:0","nodeType":"FunctionDefinition","parameters":{"id":642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"newImplementation","nameLocation":"18654:17:0","nodeType":"VariableDeclaration","scope":687,"src":"18646:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":636,"name":"address","nodeType":"ElementaryTypeName","src":"18646:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":639,"mutability":"mutable","name":"data","nameLocation":"18690:4:0","nodeType":"VariableDeclaration","scope":687,"src":"18677:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":638,"name":"bytes","nodeType":"ElementaryTypeName","src":"18677:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":641,"mutability":"mutable","name":"forceCall","nameLocation":"18705:9:0","nodeType":"VariableDeclaration","scope":687,"src":"18700:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":640,"name":"bool","nodeType":"ElementaryTypeName","src":"18700:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18640:78:0"},"returnParameters":{"id":643,"nodeType":"ParameterList","parameters":[],"src":"18728:0:0"},"scope":851,"src":"18610:912:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"19526:181:0","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":691,"mutability":"constant","name":"_ADMIN_SLOT","nameLocation":"19736:11:0","nodeType":"VariableDeclaration","scope":851,"src":"19710:110:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":689,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19710:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19754:66:0","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":692,"nodeType":"StructuredDocumentation","src":"19825:63:0","text":" @dev Emitted when the admin account has changed."},"eventSelector":"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f","id":698,"name":"AdminChanged","nameLocation":"19897:12:0","nodeType":"EventDefinition","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":694,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"19918:13:0","nodeType":"VariableDeclaration","scope":698,"src":"19910:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":693,"name":"address","nodeType":"ElementaryTypeName","src":"19910:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":696,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"19941:8:0","nodeType":"VariableDeclaration","scope":698,"src":"19933:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":695,"name":"address","nodeType":"ElementaryTypeName","src":"19933:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19909:41:0"},"src":"19891:60:0"},{"body":{"id":710,"nodeType":"Block","src":"20057:63:0","statements":[{"expression":{"expression":{"arguments":[{"id":706,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"20097:11:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":704,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"20070:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20082:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"20070:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20070:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20110:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"20070:45:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":703,"id":709,"nodeType":"Return","src":"20063:52:0"}]},"documentation":{"id":699,"nodeType":"StructuredDocumentation","src":"19955:46:0","text":" @dev Returns the current admin."},"id":711,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdmin","nameLocation":"20013:9:0","nodeType":"FunctionDefinition","parameters":{"id":700,"nodeType":"ParameterList","parameters":[],"src":"20022:2:0"},"returnParameters":{"id":703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":702,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":711,"src":"20048:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"20048:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20047:9:0"},"scope":851,"src":"20004:116:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":736,"nodeType":"Block","src":"20239:146:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":718,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"20253:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20273:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":720,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20265:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":719,"name":"address","nodeType":"ElementaryTypeName","src":"20265:7:0","typeDescriptions":{}}},"id":722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20265:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20253:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373","id":724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20277:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""},"value":"ERC1967: new admin is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""}],"id":717,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20245:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20245:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":726,"nodeType":"ExpressionStatement","src":"20245:73:0"},{"expression":{"id":734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":730,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"20351:11:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":727,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"20324:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20336:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"20324:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20324:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20364:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"20324:45:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":733,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"20372:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20324:56:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":735,"nodeType":"ExpressionStatement","src":"20324:56:0"}]},"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"20124:67:0","text":" @dev Stores a new address in the EIP1967 admin slot."},"id":737,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"20203:9:0","nodeType":"FunctionDefinition","parameters":{"id":715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":714,"mutability":"mutable","name":"newAdmin","nameLocation":"20221:8:0","nodeType":"VariableDeclaration","scope":737,"src":"20213:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":713,"name":"address","nodeType":"ElementaryTypeName","src":"20213:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20212:18:0"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[],"src":"20239:0:0"},"scope":851,"src":"20194:191:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":753,"nodeType":"Block","src":"20533:76:0","statements":[{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":744,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"20557:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20557:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":746,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":740,"src":"20570:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":743,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":698,"src":"20544:12:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20544:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":748,"nodeType":"EmitStatement","src":"20539:40:0"},{"expression":{"arguments":[{"id":750,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":740,"src":"20595:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":749,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":737,"src":"20585:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20585:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":752,"nodeType":"ExpressionStatement","src":"20585:19:0"}]},"documentation":{"id":738,"nodeType":"StructuredDocumentation","src":"20389:92:0","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."},"id":754,"implemented":true,"kind":"function","modifiers":[],"name":"_changeAdmin","nameLocation":"20493:12:0","nodeType":"FunctionDefinition","parameters":{"id":741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":740,"mutability":"mutable","name":"newAdmin","nameLocation":"20514:8:0","nodeType":"VariableDeclaration","scope":754,"src":"20506:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":739,"name":"address","nodeType":"ElementaryTypeName","src":"20506:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20505:18:0"},"returnParameters":{"id":742,"nodeType":"ParameterList","parameters":[],"src":"20533:0:0"},"scope":851,"src":"20484:125:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":755,"nodeType":"StructuredDocumentation","src":"20613:226:0","text":" @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"id":758,"mutability":"constant","name":"_BEACON_SLOT","nameLocation":"20868:12:0","nodeType":"VariableDeclaration","scope":851,"src":"20842:111:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20842:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530","id":757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20887:66:0","typeDescriptions":{"typeIdentifier":"t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1","typeString":"int_const 7415...(69 digits omitted)...4704"},"value":"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":759,"nodeType":"StructuredDocumentation","src":"20958:56:0","text":" @dev Emitted when the beacon is upgraded."},"eventSelector":"1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e","id":763,"name":"BeaconUpgraded","nameLocation":"21023:14:0","nodeType":"EventDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"21054:6:0","nodeType":"VariableDeclaration","scope":763,"src":"21038:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":760,"name":"address","nodeType":"ElementaryTypeName","src":"21038:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21037:24:0"},"src":"21017:45:0"},{"body":{"id":775,"nodeType":"Block","src":"21170:64:0","statements":[{"expression":{"expression":{"arguments":[{"id":771,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":758,"src":"21210:12:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":769,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"21183:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21195:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"21183:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21183:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21224:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"21183:46:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":768,"id":774,"nodeType":"Return","src":"21176:53:0"}]},"documentation":{"id":764,"nodeType":"StructuredDocumentation","src":"21066:47:0","text":" @dev Returns the current beacon."},"id":776,"implemented":true,"kind":"function","modifiers":[],"name":"_getBeacon","nameLocation":"21125:10:0","nodeType":"FunctionDefinition","parameters":{"id":765,"nodeType":"ParameterList","parameters":[],"src":"21135:2:0"},"returnParameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":776,"src":"21161:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":766,"name":"address","nodeType":"ElementaryTypeName","src":"21161:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21160:9:0"},"scope":851,"src":"21116:118:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":811,"nodeType":"Block","src":"21355:312:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":785,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"21395:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":783,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"21376:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21384:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":167,"src":"21376:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21376:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374","id":787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21413:39:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""},"value":"ERC1967: new beacon is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""}],"id":782,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21361:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21361:97:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":789,"nodeType":"ExpressionStatement","src":"21361:97:0"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":794,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"21506:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":793,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"21498:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$150_$","typeString":"type(contract IBeacon)"}},"id":795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21498:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$150","typeString":"contract IBeacon"}},"id":796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21517:14:0","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":149,"src":"21498:33:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21498:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":791,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"21479:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21487:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":167,"src":"21479:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21479:55:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21542:50:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""},"value":"ERC1967: beacon implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""}],"id":790,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21464:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21464:134:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":801,"nodeType":"ExpressionStatement","src":"21464:134:0"},{"expression":{"id":809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":805,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":758,"src":"21631:12:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":802,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"21604:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21616:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"21604:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21604:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"21645:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"21604:46:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":808,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"21653:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21604:58:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":810,"nodeType":"ExpressionStatement","src":"21604:58:0"}]},"documentation":{"id":777,"nodeType":"StructuredDocumentation","src":"21238:67:0","text":" @dev Stores a new beacon in the EIP1967 beacon slot."},"id":812,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"21317:10:0","nodeType":"FunctionDefinition","parameters":{"id":780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":779,"mutability":"mutable","name":"newBeacon","nameLocation":"21336:9:0","nodeType":"VariableDeclaration","scope":812,"src":"21328:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":778,"name":"address","nodeType":"ElementaryTypeName","src":"21328:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21327:19:0"},"returnParameters":{"id":781,"nodeType":"ParameterList","parameters":[],"src":"21355:0:0"},"scope":851,"src":"21308:359:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":849,"nodeType":"Block","src":"22068:193:0","statements":[{"expression":{"arguments":[{"id":823,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"22085:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":822,"name":"_setBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"22074:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22074:21:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":825,"nodeType":"ExpressionStatement","src":"22074:21:0"},{"eventCall":{"arguments":[{"id":827,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"22121:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":826,"name":"BeaconUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"22106:14:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22106:25:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":829,"nodeType":"EmitStatement","src":"22101:30:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":830,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":817,"src":"22141:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22146:6:0","memberName":"length","nodeType":"MemberAccess","src":"22141:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22155:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22141:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":834,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":819,"src":"22160:9:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"22141:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":848,"nodeType":"IfStatement","src":"22137:120:0","trueBody":{"id":847,"nodeType":"Block","src":"22171:86:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":840,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"22216:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":839,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"22208:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$150_$","typeString":"type(contract IBeacon)"}},"id":841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22208:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$150","typeString":"contract IBeacon"}},"id":842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22227:14:0","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":149,"src":"22208:33:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22208:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":844,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":817,"src":"22245:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":836,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"22179:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22187:20:0","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":366,"src":"22179:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22179:71:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":846,"nodeType":"ExpressionStatement","src":"22179:71:0"}]}}]},"documentation":{"id":813,"nodeType":"StructuredDocumentation","src":"21671:282:0","text":" @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."},"id":850,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeBeaconToAndCall","nameLocation":"21965:23:0","nodeType":"FunctionDefinition","parameters":{"id":820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":815,"mutability":"mutable","name":"newBeacon","nameLocation":"22002:9:0","nodeType":"VariableDeclaration","scope":850,"src":"21994:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":814,"name":"address","nodeType":"ElementaryTypeName","src":"21994:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":817,"mutability":"mutable","name":"data","nameLocation":"22030:4:0","nodeType":"VariableDeclaration","scope":850,"src":"22017:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":816,"name":"bytes","nodeType":"ElementaryTypeName","src":"22017:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":819,"mutability":"mutable","name":"forceCall","nameLocation":"22045:9:0","nodeType":"VariableDeclaration","scope":850,"src":"22040:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":818,"name":"bool","nodeType":"ElementaryTypeName","src":"22040:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21988:70:0"},"returnParameters":{"id":821,"nodeType":"ParameterList","parameters":[],"src":"22068:0:0"},"scope":851,"src":"21956:305:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3994,"src":"16599:5664:0","usedErrors":[],"usedEvents":[552,698,763]},{"id":852,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"22388:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":853,"nodeType":"StructuredDocumentation","src":"22413:598:0","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":902,"linearizedBaseContracts":[902],"name":"Proxy","nameLocation":"23030:5:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":860,"nodeType":"Block","src":"23285:719:0","statements":[{"AST":{"nativeSrc":"23300:700:0","nodeType":"YulBlock","src":"23300:700:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"23529:1:0","nodeType":"YulLiteral","src":"23529:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"23532:1:0","nodeType":"YulLiteral","src":"23532:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"23535:12:0","nodeType":"YulIdentifier","src":"23535:12:0"},"nativeSrc":"23535:14:0","nodeType":"YulFunctionCall","src":"23535:14:0"}],"functionName":{"name":"calldatacopy","nativeSrc":"23516:12:0","nodeType":"YulIdentifier","src":"23516:12:0"},"nativeSrc":"23516:34:0","nodeType":"YulFunctionCall","src":"23516:34:0"},"nativeSrc":"23516:34:0","nodeType":"YulExpressionStatement","src":"23516:34:0"},{"nativeSrc":"23659:74:0","nodeType":"YulVariableDeclaration","src":"23659:74:0","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"23686:3:0","nodeType":"YulIdentifier","src":"23686:3:0"},"nativeSrc":"23686:5:0","nodeType":"YulFunctionCall","src":"23686:5:0"},{"name":"implementation","nativeSrc":"23693:14:0","nodeType":"YulIdentifier","src":"23693:14:0"},{"kind":"number","nativeSrc":"23709:1:0","nodeType":"YulLiteral","src":"23709:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"23712:12:0","nodeType":"YulIdentifier","src":"23712:12:0"},"nativeSrc":"23712:14:0","nodeType":"YulFunctionCall","src":"23712:14:0"},{"kind":"number","nativeSrc":"23728:1:0","nodeType":"YulLiteral","src":"23728:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"23731:1:0","nodeType":"YulLiteral","src":"23731:1:0","type":"","value":"0"}],"functionName":{"name":"delegatecall","nativeSrc":"23673:12:0","nodeType":"YulIdentifier","src":"23673:12:0"},"nativeSrc":"23673:60:0","nodeType":"YulFunctionCall","src":"23673:60:0"},"variables":[{"name":"result","nativeSrc":"23663:6:0","nodeType":"YulTypedName","src":"23663:6:0","type":""}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"23789:1:0","nodeType":"YulLiteral","src":"23789:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"23792:1:0","nodeType":"YulLiteral","src":"23792:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"23795:14:0","nodeType":"YulIdentifier","src":"23795:14:0"},"nativeSrc":"23795:16:0","nodeType":"YulFunctionCall","src":"23795:16:0"}],"functionName":{"name":"returndatacopy","nativeSrc":"23774:14:0","nodeType":"YulIdentifier","src":"23774:14:0"},"nativeSrc":"23774:38:0","nodeType":"YulFunctionCall","src":"23774:38:0"},"nativeSrc":"23774:38:0","nodeType":"YulExpressionStatement","src":"23774:38:0"},{"cases":[{"body":{"nativeSrc":"23889:45:0","nodeType":"YulBlock","src":"23889:45:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"23906:1:0","nodeType":"YulLiteral","src":"23906:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"23909:14:0","nodeType":"YulIdentifier","src":"23909:14:0"},"nativeSrc":"23909:16:0","nodeType":"YulFunctionCall","src":"23909:16:0"}],"functionName":{"name":"revert","nativeSrc":"23899:6:0","nodeType":"YulIdentifier","src":"23899:6:0"},"nativeSrc":"23899:27:0","nodeType":"YulFunctionCall","src":"23899:27:0"},"nativeSrc":"23899:27:0","nodeType":"YulExpressionStatement","src":"23899:27:0"}]},"nativeSrc":"23882:52:0","nodeType":"YulCase","src":"23882:52:0","value":{"kind":"number","nativeSrc":"23887:1:0","nodeType":"YulLiteral","src":"23887:1:0","type":"","value":"0"}},{"body":{"nativeSrc":"23949:45:0","nodeType":"YulBlock","src":"23949:45:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"23966:1:0","nodeType":"YulLiteral","src":"23966:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"23969:14:0","nodeType":"YulIdentifier","src":"23969:14:0"},"nativeSrc":"23969:16:0","nodeType":"YulFunctionCall","src":"23969:16:0"}],"functionName":{"name":"return","nativeSrc":"23959:6:0","nodeType":"YulIdentifier","src":"23959:6:0"},"nativeSrc":"23959:27:0","nodeType":"YulFunctionCall","src":"23959:27:0"},"nativeSrc":"23959:27:0","nodeType":"YulExpressionStatement","src":"23959:27:0"}]},"nativeSrc":"23941:53:0","nodeType":"YulCase","src":"23941:53:0","value":"default"}],"expression":{"name":"result","nativeSrc":"23827:6:0","nodeType":"YulIdentifier","src":"23827:6:0"},"nativeSrc":"23820:174:0","nodeType":"YulSwitch","src":"23820:174:0"}]},"evmVersion":"shanghai","externalReferences":[{"declaration":856,"isOffset":false,"isSlot":false,"src":"23693:14:0","valueSize":1}],"id":859,"nodeType":"InlineAssembly","src":"23291:709:0"}]},"documentation":{"id":854,"nodeType":"StructuredDocumentation","src":"23040:182:0","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":861,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"23234:9:0","nodeType":"FunctionDefinition","parameters":{"id":857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":856,"mutability":"mutable","name":"implementation","nameLocation":"23252:14:0","nodeType":"VariableDeclaration","scope":861,"src":"23244:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":855,"name":"address","nodeType":"ElementaryTypeName","src":"23244:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23243:24:0"},"returnParameters":{"id":858,"nodeType":"ParameterList","parameters":[],"src":"23285:0:0"},"scope":902,"src":"23225:779:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":862,"nodeType":"StructuredDocumentation","src":"24008:167:0","text":" @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n and {_fallback} should delegate."},"id":867,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"24187:15:0","nodeType":"FunctionDefinition","parameters":{"id":863,"nodeType":"ParameterList","parameters":[],"src":"24202:2:0"},"returnParameters":{"id":866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":867,"src":"24236:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":864,"name":"address","nodeType":"ElementaryTypeName","src":"24236:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24235:9:0"},"scope":902,"src":"24178:67:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":879,"nodeType":"Block","src":"24499:62:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":871,"name":"_beforeFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":901,"src":"24505:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24505:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":873,"nodeType":"ExpressionStatement","src":"24505:17:0"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":875,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":867,"src":"24538:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24538:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":874,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":861,"src":"24528:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24528:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":878,"nodeType":"ExpressionStatement","src":"24528:28:0"}]},"documentation":{"id":868,"nodeType":"StructuredDocumentation","src":"24249:209:0","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":880,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"24470:9:0","nodeType":"FunctionDefinition","parameters":{"id":869,"nodeType":"ParameterList","parameters":[],"src":"24479:2:0"},"returnParameters":{"id":870,"nodeType":"ParameterList","parameters":[],"src":"24499:0:0"},"scope":902,"src":"24461:100:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":887,"nodeType":"Block","src":"24784:22:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":884,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":880,"src":"24790:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24790:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"24790:11:0"}]},"documentation":{"id":881,"nodeType":"StructuredDocumentation","src":"24565:180:0","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":888,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":882,"nodeType":"ParameterList","parameters":[],"src":"24756:2:0"},"returnParameters":{"id":883,"nodeType":"ParameterList","parameters":[],"src":"24784:0:0"},"scope":902,"src":"24748:58:0","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":895,"nodeType":"Block","src":"24991:22:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":892,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":880,"src":"24997:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24997:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":894,"nodeType":"ExpressionStatement","src":"24997:11:0"}]},"documentation":{"id":889,"nodeType":"StructuredDocumentation","src":"24810:143:0","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n is empty."},"id":896,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[],"src":"24963:2:0"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"24991:0:0"},"scope":902,"src":"24956:57:0","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":900,"nodeType":"Block","src":"25325:2:0","statements":[]},"documentation":{"id":897,"nodeType":"StructuredDocumentation","src":"25017:261:0","text":" @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n call, or as part of the Solidity `fallback` or `receive` functions.\n If overridden should call `super._beforeFallback()`."},"id":901,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"25290:15:0","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[],"src":"25305:2:0"},"returnParameters":{"id":899,"nodeType":"ParameterList","parameters":[],"src":"25325:0:0"},"scope":902,"src":"25281:46:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3994,"src":"23012:2317:0","usedErrors":[],"usedEvents":[]},{"id":903,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"25484:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":905,"name":"Proxy","nameLocations":["25907:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":902,"src":"25907:5:0"},"id":906,"nodeType":"InheritanceSpecifier","src":"25907:5:0"},{"baseName":{"id":907,"name":"ERC1967Upgrade","nameLocations":["25914:14:0"],"nodeType":"IdentifierPath","referencedDeclaration":851,"src":"25914:14:0"},"id":908,"nodeType":"InheritanceSpecifier","src":"25914:14:0"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":904,"nodeType":"StructuredDocumentation","src":"25509:372:0","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"id":936,"linearizedBaseContracts":[936,851,902],"name":"ERC1967Proxy","nameLocation":"25891:12:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":922,"nodeType":"Block","src":"26315:50:0","statements":[{"expression":{"arguments":[{"id":917,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":911,"src":"26339:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":918,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"26347:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26354:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":916,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"26321:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26321:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":921,"nodeType":"ExpressionStatement","src":"26321:39:0"}]},"documentation":{"id":909,"nodeType":"StructuredDocumentation","src":"25933:323:0","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n function call, and allows initializing the storage of the proxy like a Solidity constructor."},"id":923,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"_logic","nameLocation":"26279:6:0","nodeType":"VariableDeclaration","scope":923,"src":"26271:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":910,"name":"address","nodeType":"ElementaryTypeName","src":"26271:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"_data","nameLocation":"26300:5:0","nodeType":"VariableDeclaration","scope":923,"src":"26287:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":912,"name":"bytes","nodeType":"ElementaryTypeName","src":"26287:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"26270:36:0"},"returnParameters":{"id":915,"nodeType":"ParameterList","parameters":[],"src":"26315:0:0"},"scope":936,"src":"26259:106:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[867],"body":{"id":934,"nodeType":"Block","src":"26538:53:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":930,"name":"ERC1967Upgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":851,"src":"26551:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Upgrade_$851_$","typeString":"type(contract ERC1967Upgrade)"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26566:18:0","memberName":"_getImplementation","nodeType":"MemberAccess","referencedDeclaration":565,"src":"26551:33:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26551:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":929,"id":933,"nodeType":"Return","src":"26544:42:0"}]},"documentation":{"id":924,"nodeType":"StructuredDocumentation","src":"26369:63:0","text":" @dev Returns the current implementation address."},"id":935,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"26444:15:0","nodeType":"FunctionDefinition","overrides":{"id":926,"nodeType":"OverrideSpecifier","overrides":[],"src":"26500:8:0"},"parameters":{"id":925,"nodeType":"ParameterList","parameters":[],"src":"26459:2:0"},"returnParameters":{"id":929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":928,"mutability":"mutable","name":"impl","nameLocation":"26530:4:0","nodeType":"VariableDeclaration","scope":935,"src":"26522:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":927,"name":"address","nodeType":"ElementaryTypeName","src":"26522:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26521:14:0"},"scope":936,"src":"26435:156:0","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":3994,"src":"25882:711:0","usedErrors":[],"usedEvents":[552,698,763]},{"id":937,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"26786:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":939,"name":"ERC1967Proxy","nameLocations":["28303:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":936,"src":"28303:12:0"},"id":940,"nodeType":"InheritanceSpecifier","src":"28303:12:0"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":938,"nodeType":"StructuredDocumentation","src":"26811:1451:0","text":" @dev This contract implements a proxy that is upgradeable by an admin.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches one of the admin functions exposed by the proxy itself.\n 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n \"admin cannot fallback to proxy target\".\n These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n to sudden errors when trying to call a function from the proxy implementation.\n Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy."},"fullyImplemented":true,"id":1082,"linearizedBaseContracts":[1082,936,851,902],"name":"TransparentUpgradeableProxy","nameLocation":"28272:27:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":958,"nodeType":"Block","src":"28643:31:0","statements":[{"expression":{"arguments":[{"id":955,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":945,"src":"28662:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":954,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":754,"src":"28649:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28649:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":957,"nodeType":"ExpressionStatement","src":"28649:20:0"}]},"documentation":{"id":941,"nodeType":"StructuredDocumentation","src":"28320:204:0","text":" @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"id":959,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":950,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":943,"src":"28628:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":951,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":947,"src":"28636:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":952,"kind":"baseConstructorSpecifier","modifierName":{"id":949,"name":"ERC1967Proxy","nameLocations":["28615:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":936,"src":"28615:12:0"},"nodeType":"ModifierInvocation","src":"28615:27:0"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":943,"mutability":"mutable","name":"_logic","nameLocation":"28552:6:0","nodeType":"VariableDeclaration","scope":959,"src":"28544:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":942,"name":"address","nodeType":"ElementaryTypeName","src":"28544:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":945,"mutability":"mutable","name":"admin_","nameLocation":"28572:6:0","nodeType":"VariableDeclaration","scope":959,"src":"28564:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":944,"name":"address","nodeType":"ElementaryTypeName","src":"28564:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":947,"mutability":"mutable","name":"_data","nameLocation":"28597:5:0","nodeType":"VariableDeclaration","scope":959,"src":"28584:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":946,"name":"bytes","nodeType":"ElementaryTypeName","src":"28584:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"28538:68:0"},"returnParameters":{"id":953,"nodeType":"ParameterList","parameters":[],"src":"28643:0:0"},"scope":1082,"src":"28527:147:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":974,"nodeType":"Block","src":"28826:89:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":962,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"28836:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28840:6:0","memberName":"sender","nodeType":"MemberAccess","src":"28836:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":964,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"28850:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28850:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"28836:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":972,"nodeType":"Block","src":"28885:26:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":969,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":880,"src":"28893:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28893:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":971,"nodeType":"ExpressionStatement","src":"28893:11:0"}]},"id":973,"nodeType":"IfStatement","src":"28832:79:0","trueBody":{"id":968,"nodeType":"Block","src":"28863:16:0","statements":[{"id":967,"nodeType":"PlaceholderStatement","src":"28871:1:0"}]}}]},"documentation":{"id":960,"nodeType":"StructuredDocumentation","src":"28678:126:0","text":" @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin."},"id":975,"name":"ifAdmin","nameLocation":"28816:7:0","nodeType":"ModifierDefinition","parameters":{"id":961,"nodeType":"ParameterList","parameters":[],"src":"28823:2:0"},"src":"28807:108:0","virtual":false,"visibility":"internal"},{"body":{"id":988,"nodeType":"Block","src":"29396:31:0","statements":[{"expression":{"id":986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":983,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":981,"src":"29402:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":984,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"29411:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29411:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29402:20:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":987,"nodeType":"ExpressionStatement","src":"29402:20:0"}]},"documentation":{"id":976,"nodeType":"StructuredDocumentation","src":"28919:415:0","text":" @dev Returns the current admin.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"functionSelector":"f851a440","id":989,"implemented":true,"kind":"function","modifiers":[{"id":979,"kind":"modifierInvocation","modifierName":{"id":978,"name":"ifAdmin","nameLocations":["29363:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"29363:7:0"},"nodeType":"ModifierInvocation","src":"29363:7:0"}],"name":"admin","nameLocation":"29346:5:0","nodeType":"FunctionDefinition","parameters":{"id":977,"nodeType":"ParameterList","parameters":[],"src":"29351:2:0"},"returnParameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"admin_","nameLocation":"29388:6:0","nodeType":"VariableDeclaration","scope":989,"src":"29380:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":980,"name":"address","nodeType":"ElementaryTypeName","src":"29380:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29379:16:0"},"scope":1082,"src":"29337:90:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1002,"nodeType":"Block","src":"29944:46:0","statements":[{"expression":{"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":997,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":995,"src":"29950:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":998,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[935],"referencedDeclaration":935,"src":"29968:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29968:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29950:35:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1001,"nodeType":"ExpressionStatement","src":"29950:35:0"}]},"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"29431:433:0","text":" @dev Returns the current implementation.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"functionSelector":"5c60da1b","id":1003,"implemented":true,"kind":"function","modifiers":[{"id":993,"kind":"modifierInvocation","modifierName":{"id":992,"name":"ifAdmin","nameLocations":["29902:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"29902:7:0"},"nodeType":"ModifierInvocation","src":"29902:7:0"}],"name":"implementation","nameLocation":"29876:14:0","nodeType":"FunctionDefinition","parameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"29890:2:0"},"returnParameters":{"id":996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":995,"mutability":"mutable","name":"implementation_","nameLocation":"29927:15:0","nodeType":"VariableDeclaration","scope":1003,"src":"29919:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":994,"name":"address","nodeType":"ElementaryTypeName","src":"29919:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29918:25:0"},"scope":1082,"src":"29867:123:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1015,"nodeType":"Block","src":"30243:33:0","statements":[{"expression":{"arguments":[{"id":1012,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1006,"src":"30262:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1011,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":754,"src":"30249:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30249:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1014,"nodeType":"ExpressionStatement","src":"30249:22:0"}]},"documentation":{"id":1004,"nodeType":"StructuredDocumentation","src":"29994:182:0","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event.\n NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}."},"functionSelector":"8f283970","id":1016,"implemented":true,"kind":"function","modifiers":[{"id":1009,"kind":"modifierInvocation","modifierName":{"id":1008,"name":"ifAdmin","nameLocations":["30235:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"30235:7:0"},"nodeType":"ModifierInvocation","src":"30235:7:0"}],"name":"changeAdmin","nameLocation":"30188:11:0","nodeType":"FunctionDefinition","parameters":{"id":1007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1006,"mutability":"mutable","name":"newAdmin","nameLocation":"30208:8:0","nodeType":"VariableDeclaration","scope":1016,"src":"30200:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1005,"name":"address","nodeType":"ElementaryTypeName","src":"30200:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30199:18:0"},"returnParameters":{"id":1010,"nodeType":"ParameterList","parameters":[],"src":"30243:0:0"},"scope":1082,"src":"30179:97:0","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":1033,"nodeType":"Block","src":"30487:65:0","statements":[{"expression":{"arguments":[{"id":1025,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1019,"src":"30511:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"","id":1028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30536:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":1027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30530:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1026,"name":"bytes","nodeType":"ElementaryTypeName","src":"30530:5:0","typeDescriptions":{}}},"id":1029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30530:9:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":1030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30541:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1024,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"30493:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":1031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30493:54:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1032,"nodeType":"ExpressionStatement","src":"30493:54:0"}]},"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"30280:141:0","text":" @dev Upgrade the implementation of the proxy.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"functionSelector":"3659cfe6","id":1034,"implemented":true,"kind":"function","modifiers":[{"id":1022,"kind":"modifierInvocation","modifierName":{"id":1021,"name":"ifAdmin","nameLocations":["30479:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"30479:7:0"},"nodeType":"ModifierInvocation","src":"30479:7:0"}],"name":"upgradeTo","nameLocation":"30433:9:0","nodeType":"FunctionDefinition","parameters":{"id":1020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1019,"mutability":"mutable","name":"newImplementation","nameLocation":"30451:17:0","nodeType":"VariableDeclaration","scope":1034,"src":"30443:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1018,"name":"address","nodeType":"ElementaryTypeName","src":"30443:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30442:27:0"},"returnParameters":{"id":1023,"nodeType":"ParameterList","parameters":[],"src":"30487:0:0"},"scope":1082,"src":"30424:128:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1050,"nodeType":"Block","src":"31023:59:0","statements":[{"expression":{"arguments":[{"id":1045,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"31047:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1046,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"31066:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"74727565","id":1047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"31072:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1044,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"31029:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":1048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31029:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1049,"nodeType":"ExpressionStatement","src":"31029:48:0"}]},"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"30556:353:0","text":" @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n proxied contract.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."},"functionSelector":"4f1ef286","id":1051,"implemented":true,"kind":"function","modifiers":[{"id":1042,"kind":"modifierInvocation","modifierName":{"id":1041,"name":"ifAdmin","nameLocations":["31015:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"31015:7:0"},"nodeType":"ModifierInvocation","src":"31015:7:0"}],"name":"upgradeToAndCall","nameLocation":"30921:16:0","nodeType":"FunctionDefinition","parameters":{"id":1040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1037,"mutability":"mutable","name":"newImplementation","nameLocation":"30951:17:0","nodeType":"VariableDeclaration","scope":1051,"src":"30943:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1036,"name":"address","nodeType":"ElementaryTypeName","src":"30943:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1039,"mutability":"mutable","name":"data","nameLocation":"30989:4:0","nodeType":"VariableDeclaration","scope":1051,"src":"30974:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1038,"name":"bytes","nodeType":"ElementaryTypeName","src":"30974:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"30937:60:0"},"returnParameters":{"id":1043,"nodeType":"ParameterList","parameters":[],"src":"31023:0:0"},"scope":1082,"src":"30912:170:0","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":1060,"nodeType":"Block","src":"31193:29:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1057,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"31206:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31206:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1056,"id":1059,"nodeType":"Return","src":"31199:18:0"}]},"documentation":{"id":1052,"nodeType":"StructuredDocumentation","src":"31086:46:0","text":" @dev Returns the current admin."},"id":1061,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"31144:6:0","nodeType":"FunctionDefinition","parameters":{"id":1053,"nodeType":"ParameterList","parameters":[],"src":"31150:2:0"},"returnParameters":{"id":1056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1061,"src":"31184:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1054,"name":"address","nodeType":"ElementaryTypeName","src":"31184:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31183:9:0"},"scope":1082,"src":"31135:87:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[901],"body":{"id":1080,"nodeType":"Block","src":"31388:162:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31409:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31413:6:0","memberName":"sender","nodeType":"MemberAccess","src":"31409:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1069,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"31423:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31423:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"31409:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574","id":1072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31442:68:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""},"value":"TransparentUpgradeableProxy: admin cannot fallback to proxy target"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""}],"id":1066,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31394:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31394:122:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1074,"nodeType":"ExpressionStatement","src":"31394:122:0"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1075,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"31522:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$1082_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":1077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31528:15:0","memberName":"_beforeFallback","nodeType":"MemberAccess","referencedDeclaration":901,"src":"31522:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31522:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1079,"nodeType":"ExpressionStatement","src":"31522:23:0"}]},"documentation":{"id":1062,"nodeType":"StructuredDocumentation","src":"31226:106:0","text":" @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}."},"id":1081,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"31344:15:0","nodeType":"FunctionDefinition","overrides":{"id":1064,"nodeType":"OverrideSpecifier","overrides":[],"src":"31379:8:0"},"parameters":{"id":1063,"nodeType":"ParameterList","parameters":[],"src":"31359:2:0"},"returnParameters":{"id":1065,"nodeType":"ParameterList","parameters":[],"src":"31388:0:0"},"scope":1082,"src":"31335:215:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3994,"src":"28263:3289:0","usedErrors":[],"usedEvents":[552,698,763]},{"id":1083,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"31696:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":1085,"name":"Ownable","nameLocations":["31973:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":132,"src":"31973:7:0"},"id":1086,"nodeType":"InheritanceSpecifier","src":"31973:7:0"}],"canonicalName":"ProxyAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":1084,"nodeType":"StructuredDocumentation","src":"31721:228:0","text":" @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}."},"fullyImplemented":true,"id":1215,"linearizedBaseContracts":[1215,132,21],"name":"ProxyAdmin","nameLocation":"31959:10:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":1119,"nodeType":"Block","src":"32247:322:0","statements":[{"assignments":[1096,1098],"declarations":[{"constant":false,"id":1096,"mutability":"mutable","name":"success","nameLocation":"32408:7:0","nodeType":"VariableDeclaration","scope":1119,"src":"32403:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1095,"name":"bool","nodeType":"ElementaryTypeName","src":"32403:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1098,"mutability":"mutable","name":"returndata","nameLocation":"32430:10:0","nodeType":"VariableDeclaration","scope":1119,"src":"32417:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1097,"name":"bytes","nodeType":"ElementaryTypeName","src":"32417:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1106,"initialValue":{"arguments":[{"hexValue":"5c60da1b","id":1104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"32477:13:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}],"expression":{"arguments":[{"id":1101,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"32452:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}],"id":1100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32444:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1099,"name":"address","nodeType":"ElementaryTypeName","src":"32444:7:0","typeDescriptions":{}}},"id":1102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32444:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32459:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"32444:25:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":1105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32444:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"32402:94:0"},{"expression":{"arguments":[{"id":1108,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1096,"src":"32510:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1107,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"32502:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32502:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1110,"nodeType":"ExpressionStatement","src":"32502:16:0"},{"expression":{"arguments":[{"id":1113,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1098,"src":"32542:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32555:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1114,"name":"address","nodeType":"ElementaryTypeName","src":"32555:7:0","typeDescriptions":{}}}],"id":1116,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"32554:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":1111,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32531:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32535:6:0","memberName":"decode","nodeType":"MemberAccess","src":"32531:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32531:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":1094,"id":1118,"nodeType":"Return","src":"32524:40:0"}]},"documentation":{"id":1087,"nodeType":"StructuredDocumentation","src":"31985:146:0","text":" @dev Returns the current implementation of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"204e1c7a","id":1120,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyImplementation","nameLocation":"32143:22:0","nodeType":"FunctionDefinition","parameters":{"id":1091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1090,"mutability":"mutable","name":"proxy","nameLocation":"32199:5:0","nodeType":"VariableDeclaration","scope":1120,"src":"32171:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1089,"nodeType":"UserDefinedTypeName","pathNode":{"id":1088,"name":"TransparentUpgradeableProxy","nameLocations":["32171:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"32171:27:0"},"referencedDeclaration":1082,"src":"32171:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"32165:43:0"},"returnParameters":{"id":1094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1120,"src":"32238:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1092,"name":"address","nodeType":"ElementaryTypeName","src":"32238:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32237:9:0"},"scope":1215,"src":"32134:435:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":1153,"nodeType":"Block","src":"32817:313:0","statements":[{"assignments":[1130,1132],"declarations":[{"constant":false,"id":1130,"mutability":"mutable","name":"success","nameLocation":"32969:7:0","nodeType":"VariableDeclaration","scope":1153,"src":"32964:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1129,"name":"bool","nodeType":"ElementaryTypeName","src":"32964:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1132,"mutability":"mutable","name":"returndata","nameLocation":"32991:10:0","nodeType":"VariableDeclaration","scope":1153,"src":"32978:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1131,"name":"bytes","nodeType":"ElementaryTypeName","src":"32978:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1140,"initialValue":{"arguments":[{"hexValue":"f851a440","id":1138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"33038:13:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}],"expression":{"arguments":[{"id":1135,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1124,"src":"33013:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}],"id":1134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33005:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1133,"name":"address","nodeType":"ElementaryTypeName","src":"33005:7:0","typeDescriptions":{}}},"id":1136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33005:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33020:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"33005:25:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":1139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33005:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"32963:94:0"},{"expression":{"arguments":[{"id":1142,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1130,"src":"33071:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1141,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33063:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33063:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1144,"nodeType":"ExpressionStatement","src":"33063:16:0"},{"expression":{"arguments":[{"id":1147,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1132,"src":"33103:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33116:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1148,"name":"address","nodeType":"ElementaryTypeName","src":"33116:7:0","typeDescriptions":{}}}],"id":1150,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"33115:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":1145,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"33092:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33096:6:0","memberName":"decode","nodeType":"MemberAccess","src":"33092:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33092:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":1128,"id":1152,"nodeType":"Return","src":"33085:40:0"}]},"documentation":{"id":1121,"nodeType":"StructuredDocumentation","src":"32573:137:0","text":" @dev Returns the current admin of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"f3b7dead","id":1154,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyAdmin","nameLocation":"32722:13:0","nodeType":"FunctionDefinition","parameters":{"id":1125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1124,"mutability":"mutable","name":"proxy","nameLocation":"32769:5:0","nodeType":"VariableDeclaration","scope":1154,"src":"32741:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1123,"nodeType":"UserDefinedTypeName","pathNode":{"id":1122,"name":"TransparentUpgradeableProxy","nameLocations":["32741:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"32741:27:0"},"referencedDeclaration":1082,"src":"32741:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"32735:43:0"},"returnParameters":{"id":1128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1154,"src":"32808:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1126,"name":"address","nodeType":"ElementaryTypeName","src":"32808:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32807:9:0"},"scope":1215,"src":"32713:417:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":1171,"nodeType":"Block","src":"33404:38:0","statements":[{"expression":{"arguments":[{"id":1168,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"33428:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1165,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"33410:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"id":1167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33416:11:0","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":1016,"src":"33410:17:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":1169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33410:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1170,"nodeType":"ExpressionStatement","src":"33410:27:0"}]},"documentation":{"id":1155,"nodeType":"StructuredDocumentation","src":"33134:151:0","text":" @dev Changes the admin of `proxy` to `newAdmin`.\n Requirements:\n - This contract must be the current admin of `proxy`."},"functionSelector":"7eff275e","id":1172,"implemented":true,"kind":"function","modifiers":[{"id":1163,"kind":"modifierInvocation","modifierName":{"id":1162,"name":"onlyOwner","nameLocations":["33394:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"33394:9:0"},"nodeType":"ModifierInvocation","src":"33394:9:0"}],"name":"changeProxyAdmin","nameLocation":"33297:16:0","nodeType":"FunctionDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1158,"mutability":"mutable","name":"proxy","nameLocation":"33347:5:0","nodeType":"VariableDeclaration","scope":1172,"src":"33319:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1157,"nodeType":"UserDefinedTypeName","pathNode":{"id":1156,"name":"TransparentUpgradeableProxy","nameLocations":["33319:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"33319:27:0"},"referencedDeclaration":1082,"src":"33319:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":1160,"mutability":"mutable","name":"newAdmin","nameLocation":"33366:8:0","nodeType":"VariableDeclaration","scope":1172,"src":"33358:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1159,"name":"address","nodeType":"ElementaryTypeName","src":"33358:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33313:65:0"},"returnParameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"33404:0:0"},"scope":1215,"src":"33288:154:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1189,"nodeType":"Block","src":"33744:42:0","statements":[{"expression":{"arguments":[{"id":1186,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1178,"src":"33766:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1183,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"33750:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"id":1185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33756:9:0","memberName":"upgradeTo","nodeType":"MemberAccess","referencedDeclaration":1034,"src":"33750:15:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":1187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33750:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1188,"nodeType":"ExpressionStatement","src":"33750:31:0"}]},"documentation":{"id":1173,"nodeType":"StructuredDocumentation","src":"33446:182:0","text":" @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"99a88ec4","id":1190,"implemented":true,"kind":"function","modifiers":[{"id":1181,"kind":"modifierInvocation","modifierName":{"id":1180,"name":"onlyOwner","nameLocations":["33734:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"33734:9:0"},"nodeType":"ModifierInvocation","src":"33734:9:0"}],"name":"upgrade","nameLocation":"33640:7:0","nodeType":"FunctionDefinition","parameters":{"id":1179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1176,"mutability":"mutable","name":"proxy","nameLocation":"33681:5:0","nodeType":"VariableDeclaration","scope":1190,"src":"33653:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1175,"nodeType":"UserDefinedTypeName","pathNode":{"id":1174,"name":"TransparentUpgradeableProxy","nameLocations":["33653:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"33653:27:0"},"referencedDeclaration":1082,"src":"33653:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":1178,"mutability":"mutable","name":"implementation","nameLocation":"33700:14:0","nodeType":"VariableDeclaration","scope":1190,"src":"33692:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1177,"name":"address","nodeType":"ElementaryTypeName","src":"33692:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33647:71:0"},"returnParameters":{"id":1182,"nodeType":"ParameterList","parameters":[],"src":"33744:0:0"},"scope":1215,"src":"33631:155:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1213,"nodeType":"Block","src":"34185:73:0","statements":[{"expression":{"arguments":[{"id":1209,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1196,"src":"34232:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1210,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"34248:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1203,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1194,"src":"34191:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"id":1205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34197:16:0","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":1051,"src":"34191:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":1208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":1206,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34221:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34225:5:0","memberName":"value","nodeType":"MemberAccess","src":"34221:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"34191:40:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (address,bytes memory) payable external"}},"id":1211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34191:62:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1212,"nodeType":"ExpressionStatement","src":"34191:62:0"}]},"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"33790:241:0","text":" @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n {TransparentUpgradeableProxy-upgradeToAndCall}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"9623609d","id":1214,"implemented":true,"kind":"function","modifiers":[{"id":1201,"kind":"modifierInvocation","modifierName":{"id":1200,"name":"onlyOwner","nameLocations":["34175:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"34175:9:0"},"nodeType":"ModifierInvocation","src":"34175:9:0"}],"name":"upgradeAndCall","nameLocation":"34043:14:0","nodeType":"FunctionDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1194,"mutability":"mutable","name":"proxy","nameLocation":"34091:5:0","nodeType":"VariableDeclaration","scope":1214,"src":"34063:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1193,"nodeType":"UserDefinedTypeName","pathNode":{"id":1192,"name":"TransparentUpgradeableProxy","nameLocations":["34063:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"34063:27:0"},"referencedDeclaration":1082,"src":"34063:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":1196,"mutability":"mutable","name":"implementation","nameLocation":"34110:14:0","nodeType":"VariableDeclaration","scope":1214,"src":"34102:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1195,"name":"address","nodeType":"ElementaryTypeName","src":"34102:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"data","nameLocation":"34143:4:0","nodeType":"VariableDeclaration","scope":1214,"src":"34130:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1197,"name":"bytes","nodeType":"ElementaryTypeName","src":"34130:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"34057:94:0"},"returnParameters":{"id":1202,"nodeType":"ParameterList","parameters":[],"src":"34185:0:0"},"scope":1215,"src":"34034:224:0","stateMutability":"payable","virtual":true,"visibility":"public"}],"scope":3994,"src":"31950:2310:0","usedErrors":[],"usedEvents":[33]},{"id":1216,"literals":["solidity",">=","0.5",".17","<","0.9",".0"],"nodeType":"PragmaDirective","src":"34311:32:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IMintableERC20","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1256,"linearizedBaseContracts":[1256],"name":"IMintableERC20","nameLocation":"34355:14:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"40c10f19","id":1225,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"34383:4:0","nodeType":"FunctionDefinition","parameters":{"id":1221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1218,"mutability":"mutable","name":"account","nameLocation":"34396:7:0","nodeType":"VariableDeclaration","scope":1225,"src":"34388:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1217,"name":"address","nodeType":"ElementaryTypeName","src":"34388:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1220,"mutability":"mutable","name":"amount","nameLocation":"34413:6:0","nodeType":"VariableDeclaration","scope":1225,"src":"34405:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1219,"name":"uint256","nodeType":"ElementaryTypeName","src":"34405:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34387:33:0"},"returnParameters":{"id":1224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1225,"src":"34439:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1222,"name":"bool","nodeType":"ElementaryTypeName","src":"34439:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34438:6:0"},"scope":1256,"src":"34374:71:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a9059cbb","id":1234,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"34458:8:0","nodeType":"FunctionDefinition","parameters":{"id":1230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1227,"mutability":"mutable","name":"recipient","nameLocation":"34475:9:0","nodeType":"VariableDeclaration","scope":1234,"src":"34467:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1226,"name":"address","nodeType":"ElementaryTypeName","src":"34467:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1229,"mutability":"mutable","name":"amount","nameLocation":"34494:6:0","nodeType":"VariableDeclaration","scope":1234,"src":"34486:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1228,"name":"uint256","nodeType":"ElementaryTypeName","src":"34486:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34466:35:0"},"returnParameters":{"id":1233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1234,"src":"34520:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1231,"name":"bool","nodeType":"ElementaryTypeName","src":"34520:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34519:6:0"},"scope":1256,"src":"34449:77:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"18160ddd","id":1239,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"34539:11:0","nodeType":"FunctionDefinition","parameters":{"id":1235,"nodeType":"ParameterList","parameters":[],"src":"34550:2:0"},"returnParameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1239,"src":"34576:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1236,"name":"uint256","nodeType":"ElementaryTypeName","src":"34576:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34575:9:0"},"scope":1256,"src":"34530:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"70a08231","id":1246,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"34598:9:0","nodeType":"FunctionDefinition","parameters":{"id":1242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1241,"mutability":"mutable","name":"account","nameLocation":"34616:7:0","nodeType":"VariableDeclaration","scope":1246,"src":"34608:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1240,"name":"address","nodeType":"ElementaryTypeName","src":"34608:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34607:17:0"},"returnParameters":{"id":1245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1246,"src":"34648:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1243,"name":"uint256","nodeType":"ElementaryTypeName","src":"34648:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34647:9:0"},"scope":1256,"src":"34589:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":1255,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"34670:7:0","nodeType":"FunctionDefinition","parameters":{"id":1251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1248,"mutability":"mutable","name":"spender","nameLocation":"34686:7:0","nodeType":"VariableDeclaration","scope":1255,"src":"34678:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1247,"name":"address","nodeType":"ElementaryTypeName","src":"34678:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1250,"mutability":"mutable","name":"amount","nameLocation":"34703:6:0","nodeType":"VariableDeclaration","scope":1255,"src":"34695:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1249,"name":"uint256","nodeType":"ElementaryTypeName","src":"34695:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34677:33:0"},"returnParameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1253,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1255,"src":"34729:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1252,"name":"bool","nodeType":"ElementaryTypeName","src":"34729:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34728:6:0"},"scope":1256,"src":"34661:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3994,"src":"34345:392:0","usedErrors":[],"usedEvents":[]},{"id":1257,"literals":["solidity",">=","0.5",".17","<","0.9",".0"],"nodeType":"PragmaDirective","src":"34785:32:0"},{"id":1258,"literals":["experimental","ABIEncoderV2"],"nodeType":"PragmaDirective","src":"34818:33:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IPublicLock","contractDependencies":[],"contractKind":"interface","documentation":{"id":1259,"nodeType":"StructuredDocumentation","src":"34853:42:0","text":" @title The PublicLock Interface"},"fullyImplemented":false,"id":1907,"linearizedBaseContracts":[1907],"name":"IPublicLock","nameLocation":"34907:11:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"34923:13:0","text":"Functions"},"functionSelector":"6eadde43","id":1275,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"34948:10:0","nodeType":"FunctionDefinition","parameters":{"id":1273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1262,"mutability":"mutable","name":"_lockCreator","nameLocation":"34972:12:0","nodeType":"VariableDeclaration","scope":1275,"src":"34964:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1261,"name":"address","nodeType":"ElementaryTypeName","src":"34964:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1264,"mutability":"mutable","name":"_expirationDuration","nameLocation":"34995:19:0","nodeType":"VariableDeclaration","scope":1275,"src":"34990:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1263,"name":"uint","nodeType":"ElementaryTypeName","src":"34990:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1266,"mutability":"mutable","name":"_tokenAddress","nameLocation":"35028:13:0","nodeType":"VariableDeclaration","scope":1275,"src":"35020:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1265,"name":"address","nodeType":"ElementaryTypeName","src":"35020:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1268,"mutability":"mutable","name":"_keyPrice","nameLocation":"35052:9:0","nodeType":"VariableDeclaration","scope":1275,"src":"35047:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1267,"name":"uint","nodeType":"ElementaryTypeName","src":"35047:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1270,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"35072:16:0","nodeType":"VariableDeclaration","scope":1275,"src":"35067:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1269,"name":"uint","nodeType":"ElementaryTypeName","src":"35067:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"_lockName","nameLocation":"35110:9:0","nodeType":"VariableDeclaration","scope":1275,"src":"35094:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1271,"name":"string","nodeType":"ElementaryTypeName","src":"35094:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"34958:165:0"},"returnParameters":{"id":1274,"nodeType":"ParameterList","parameters":[],"src":"35132:0:0"},"scope":1907,"src":"34939:194:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a217fddf","id":1280,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"35182:18:0","nodeType":"FunctionDefinition","parameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"35200:2:0"},"returnParameters":{"id":1279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1278,"mutability":"mutable","name":"role","nameLocation":"35234:4:0","nodeType":"VariableDeclaration","scope":1280,"src":"35226:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35226:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"35225:14:0"},"scope":1907,"src":"35173:67:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1281,"nodeType":"StructuredDocumentation","src":"35244:129:0","text":" @notice The version number of the current implementation on this network.\n @return The current version number."},"functionSelector":"d1bbd49c","id":1286,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockVersion","nameLocation":"35385:17:0","nodeType":"FunctionDefinition","parameters":{"id":1282,"nodeType":"ParameterList","parameters":[],"src":"35402:2:0"},"returnParameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1286,"src":"35428:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1283,"name":"uint16","nodeType":"ElementaryTypeName","src":"35428:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"35427:8:0"},"scope":1907,"src":"35376:60:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"35440:577:0","text":" @dev Called by lock manager to withdraw all funds from the lock\n @param _tokenAddress specifies the token address to withdraw or 0 for ETH. This is usually\n the same as `tokenAddress` in MixinFunds.\n @param _recipient specifies the address that will receive the tokens\n @param _amount specifies the max amount to withdraw, which may be reduced when\n considering the available balance. Set to 0 or MAX_UINT to withdraw everything.\n -- however be wary of draining funds as it breaks the `cancelAndRefund` and `expireAndRefundFor` use cases."},"functionSelector":"d9caed12","id":1296,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"36029:8:0","nodeType":"FunctionDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1289,"mutability":"mutable","name":"_tokenAddress","nameLocation":"36051:13:0","nodeType":"VariableDeclaration","scope":1296,"src":"36043:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"36043:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1291,"mutability":"mutable","name":"_recipient","nameLocation":"36086:10:0","nodeType":"VariableDeclaration","scope":1296,"src":"36070:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1290,"name":"address","nodeType":"ElementaryTypeName","src":"36070:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1293,"mutability":"mutable","name":"_amount","nameLocation":"36107:7:0","nodeType":"VariableDeclaration","scope":1296,"src":"36102:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1292,"name":"uint","nodeType":"ElementaryTypeName","src":"36102:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36037:81:0"},"returnParameters":{"id":1295,"nodeType":"ParameterList","parameters":[],"src":"36127:0:0"},"scope":1907,"src":"36020:108:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1297,"nodeType":"StructuredDocumentation","src":"36132:418:0","text":" A function which lets a Lock manager of the lock to change the price for future purchases.\n @dev Throws if called by other than a Lock manager\n @dev Throws if lock has been disabled\n @dev Throws if _tokenAddress is not a valid token\n @param _keyPrice The new price to set for keys\n @param _tokenAddress The address of the erc20 token to use for pricing the keys,\n or 0 to use ETH"},"functionSelector":"a2e4cd2e","id":1304,"implemented":false,"kind":"function","modifiers":[],"name":"updateKeyPricing","nameLocation":"36562:16:0","nodeType":"FunctionDefinition","parameters":{"id":1302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1299,"mutability":"mutable","name":"_keyPrice","nameLocation":"36584:9:0","nodeType":"VariableDeclaration","scope":1304,"src":"36579:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1298,"name":"uint","nodeType":"ElementaryTypeName","src":"36579:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1301,"mutability":"mutable","name":"_tokenAddress","nameLocation":"36603:13:0","nodeType":"VariableDeclaration","scope":1304,"src":"36595:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1300,"name":"address","nodeType":"ElementaryTypeName","src":"36595:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36578:39:0"},"returnParameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"36626:0:0"},"scope":1907,"src":"36553:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"36631:712:0","text":" Update the main key properties for the entire lock:\n - default duration of each key\n - the maximum number of keys the lock can edit\n - the maximum number of keys a single address can hold\n @notice keys previously bought are unaffected by this changes in expiration duration (i.e.\n existing keys timestamps are not recalculated/updated)\n @param _newExpirationDuration the new amount of time for each key purchased or type(uint).max for a non-expiring key\n @param _maxKeysPerAcccount the maximum amount of key a single user can own\n @param _maxNumberOfKeys uint the maximum number of keys\n @dev _maxNumberOfKeys Can't be smaller than the existing supply"},"functionSelector":"282478df","id":1314,"implemented":false,"kind":"function","modifiers":[],"name":"updateLockConfig","nameLocation":"37355:16:0","nodeType":"FunctionDefinition","parameters":{"id":1312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1307,"mutability":"mutable","name":"_newExpirationDuration","nameLocation":"37382:22:0","nodeType":"VariableDeclaration","scope":1314,"src":"37377:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint","nodeType":"ElementaryTypeName","src":"37377:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1309,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"37415:16:0","nodeType":"VariableDeclaration","scope":1314,"src":"37410:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1308,"name":"uint","nodeType":"ElementaryTypeName","src":"37410:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1311,"mutability":"mutable","name":"_maxKeysPerAcccount","nameLocation":"37442:19:0","nodeType":"VariableDeclaration","scope":1314,"src":"37437:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1310,"name":"uint","nodeType":"ElementaryTypeName","src":"37437:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37371:94:0"},"returnParameters":{"id":1313,"nodeType":"ParameterList","parameters":[],"src":"37474:0:0"},"scope":1907,"src":"37346:129:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1315,"nodeType":"StructuredDocumentation","src":"37479:103:0","text":" Checks if the user has a non-expired key.\n @param _user The address of the key owner"},"functionSelector":"6d8ea5b4","id":1322,"implemented":false,"kind":"function","modifiers":[],"name":"getHasValidKey","nameLocation":"37594:14:0","nodeType":"FunctionDefinition","parameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1317,"mutability":"mutable","name":"_user","nameLocation":"37617:5:0","nodeType":"VariableDeclaration","scope":1322,"src":"37609:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1316,"name":"address","nodeType":"ElementaryTypeName","src":"37609:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"37608:15:0"},"returnParameters":{"id":1321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1322,"src":"37647:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1319,"name":"bool","nodeType":"ElementaryTypeName","src":"37647:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"37646:6:0"},"scope":1907,"src":"37585:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"37657:190:0","text":" @dev Returns the key's ExpirationTimestamp field for a given owner.\n @param _tokenId the id of the key\n @dev Returns 0 if the owner has never owned a key for this lock"},"functionSelector":"54b249fb","id":1330,"implemented":false,"kind":"function","modifiers":[],"name":"keyExpirationTimestampFor","nameLocation":"37859:25:0","nodeType":"FunctionDefinition","parameters":{"id":1326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"mutability":"mutable","name":"_tokenId","nameLocation":"37895:8:0","nodeType":"VariableDeclaration","scope":1330,"src":"37890:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1324,"name":"uint","nodeType":"ElementaryTypeName","src":"37890:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37884:23:0"},"returnParameters":{"id":1329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1328,"mutability":"mutable","name":"timestamp","nameLocation":"37936:9:0","nodeType":"VariableDeclaration","scope":1330,"src":"37931:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1327,"name":"uint","nodeType":"ElementaryTypeName","src":"37931:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37930:16:0"},"scope":1907,"src":"37850:97:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1331,"nodeType":"StructuredDocumentation","src":"37951:147:0","text":" Public function which returns the total number of unique owners (both expired\n and valid). This may be larger than totalSupply."},"functionSelector":"93fd1844","id":1336,"implemented":false,"kind":"function","modifiers":[],"name":"numberOfOwners","nameLocation":"38110:14:0","nodeType":"FunctionDefinition","parameters":{"id":1332,"nodeType":"ParameterList","parameters":[],"src":"38124:2:0"},"returnParameters":{"id":1335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1336,"src":"38150:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1333,"name":"uint","nodeType":"ElementaryTypeName","src":"38150:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38149:6:0"},"scope":1907,"src":"38101:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1337,"nodeType":"StructuredDocumentation","src":"38160:224:0","text":" Allows the Lock owner to assign\n @param _lockName a descriptive name for this Lock.\n @param _lockSymbol a Symbol for this Lock (default to KEY).\n @param _baseTokenURI the baseTokenURI for this Lock"},"functionSelector":"d1b8759b","id":1346,"implemented":false,"kind":"function","modifiers":[],"name":"setLockMetadata","nameLocation":"38396:15:0","nodeType":"FunctionDefinition","parameters":{"id":1344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1339,"mutability":"mutable","name":"_lockName","nameLocation":"38433:9:0","nodeType":"VariableDeclaration","scope":1346,"src":"38417:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1338,"name":"string","nodeType":"ElementaryTypeName","src":"38417:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1341,"mutability":"mutable","name":"_lockSymbol","nameLocation":"38464:11:0","nodeType":"VariableDeclaration","scope":1346,"src":"38448:27:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1340,"name":"string","nodeType":"ElementaryTypeName","src":"38448:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1343,"mutability":"mutable","name":"_baseTokenURI","nameLocation":"38497:13:0","nodeType":"VariableDeclaration","scope":1346,"src":"38481:29:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1342,"name":"string","nodeType":"ElementaryTypeName","src":"38481:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"38411:103:0"},"returnParameters":{"id":1345,"nodeType":"ParameterList","parameters":[],"src":"38523:0:0"},"scope":1907,"src":"38387:137:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1347,"nodeType":"StructuredDocumentation","src":"38528:91:0","text":" @dev Gets the token symbol\n @return string representing the token symbol"},"functionSelector":"95d89b41","id":1352,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"38631:6:0","nodeType":"FunctionDefinition","parameters":{"id":1348,"nodeType":"ParameterList","parameters":[],"src":"38637:2:0"},"returnParameters":{"id":1351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1352,"src":"38663:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1349,"name":"string","nodeType":"ElementaryTypeName","src":"38663:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"38662:15:0"},"scope":1907,"src":"38622:56:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1353,"nodeType":"StructuredDocumentation","src":"38682:446:0","text":"@notice A distinct Uniform Resource Identifier (URI) for a given asset.\n @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC\n 3986. The URI may point to a JSON file that conforms to the \"ERC721\n Metadata JSON Schema\".\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n @param _tokenId The tokenID we're inquiring about\n @return String representing the URI for the requested token"},"functionSelector":"c87b56dd","id":1360,"implemented":false,"kind":"function","modifiers":[],"name":"tokenURI","nameLocation":"39140:8:0","nodeType":"FunctionDefinition","parameters":{"id":1356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1355,"mutability":"mutable","name":"_tokenId","nameLocation":"39157:8:0","nodeType":"VariableDeclaration","scope":1360,"src":"39149:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1354,"name":"uint256","nodeType":"ElementaryTypeName","src":"39149:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39148:18:0"},"returnParameters":{"id":1359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1360,"src":"39190:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1357,"name":"string","nodeType":"ElementaryTypeName","src":"39190:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"39189:15:0"},"scope":1907,"src":"39131:74:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"39209:651:0","text":" Allows a Lock manager to add or remove an event hook\n @param _onKeyPurchaseHook Hook called when the `purchase` function is called\n @param _onKeyCancelHook Hook called when the internal `_cancelAndRefund` function is called\n @param _onValidKeyHook Hook called to determine if the contract should overide the status for a given address\n @param _onTokenURIHook Hook called to generate a data URI used for NFT metadata\n @param _onKeyTransferHook Hook called when a key is transfered\n @param _onKeyExtendHook Hook called when a key is extended or renewed\n @param _onKeyGrantHook Hook called when a key is granted"},"functionSelector":"74cac47d","id":1378,"implemented":false,"kind":"function","modifiers":[],"name":"setEventHooks","nameLocation":"39872:13:0","nodeType":"FunctionDefinition","parameters":{"id":1376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1363,"mutability":"mutable","name":"_onKeyPurchaseHook","nameLocation":"39899:18:0","nodeType":"VariableDeclaration","scope":1378,"src":"39891:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1362,"name":"address","nodeType":"ElementaryTypeName","src":"39891:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1365,"mutability":"mutable","name":"_onKeyCancelHook","nameLocation":"39931:16:0","nodeType":"VariableDeclaration","scope":1378,"src":"39923:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1364,"name":"address","nodeType":"ElementaryTypeName","src":"39923:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1367,"mutability":"mutable","name":"_onValidKeyHook","nameLocation":"39961:15:0","nodeType":"VariableDeclaration","scope":1378,"src":"39953:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1366,"name":"address","nodeType":"ElementaryTypeName","src":"39953:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1369,"mutability":"mutable","name":"_onTokenURIHook","nameLocation":"39990:15:0","nodeType":"VariableDeclaration","scope":1378,"src":"39982:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1368,"name":"address","nodeType":"ElementaryTypeName","src":"39982:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1371,"mutability":"mutable","name":"_onKeyTransferHook","nameLocation":"40019:18:0","nodeType":"VariableDeclaration","scope":1378,"src":"40011:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1370,"name":"address","nodeType":"ElementaryTypeName","src":"40011:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1373,"mutability":"mutable","name":"_onKeyExtendHook","nameLocation":"40051:16:0","nodeType":"VariableDeclaration","scope":1378,"src":"40043:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1372,"name":"address","nodeType":"ElementaryTypeName","src":"40043:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1375,"mutability":"mutable","name":"_onKeyGrantHook","nameLocation":"40081:15:0","nodeType":"VariableDeclaration","scope":1378,"src":"40073:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1374,"name":"address","nodeType":"ElementaryTypeName","src":"40073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"39885:215:0"},"returnParameters":{"id":1377,"nodeType":"ParameterList","parameters":[],"src":"40109:0:0"},"scope":1907,"src":"39863:247:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1379,"nodeType":"StructuredDocumentation","src":"40114:397:0","text":" Allows a Lock manager to give a collection of users a key with no charge.\n Each key may be assigned a different expiration date.\n @dev Throws if called by other than a Lock manager\n @param _recipients An array of receiving addresses\n @param _expirationTimestamps An array of expiration Timestamps for the keys being granted\n @return the ids of the granted tokens"},"functionSelector":"81a3c943","id":1394,"implemented":false,"kind":"function","modifiers":[],"name":"grantKeys","nameLocation":"40523:9:0","nodeType":"FunctionDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1382,"mutability":"mutable","name":"_recipients","nameLocation":"40557:11:0","nodeType":"VariableDeclaration","scope":1394,"src":"40538:30:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1380,"name":"address","nodeType":"ElementaryTypeName","src":"40538:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1381,"nodeType":"ArrayTypeName","src":"40538:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1385,"mutability":"mutable","name":"_expirationTimestamps","nameLocation":"40590:21:0","nodeType":"VariableDeclaration","scope":1394,"src":"40574:37:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1383,"name":"uint","nodeType":"ElementaryTypeName","src":"40574:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1384,"nodeType":"ArrayTypeName","src":"40574:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1388,"mutability":"mutable","name":"_keyManagers","nameLocation":"40636:12:0","nodeType":"VariableDeclaration","scope":1394,"src":"40617:31:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1386,"name":"address","nodeType":"ElementaryTypeName","src":"40617:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1387,"nodeType":"ArrayTypeName","src":"40617:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"40532:120:0"},"returnParameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1394,"src":"40671:16:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1390,"name":"uint256","nodeType":"ElementaryTypeName","src":"40671:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1391,"nodeType":"ArrayTypeName","src":"40671:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"40670:18:0"},"scope":1907,"src":"40514:175:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"40693:266:0","text":" Allows the Lock owner to extend an existing keys with no charge.\n @param _tokenId The id of the token to extend\n @param _duration The duration in secondes to add ot the key\n @dev set `_duration` to 0 to use the default duration of the lock"},"functionSelector":"4cd38c1d","id":1402,"implemented":false,"kind":"function","modifiers":[],"name":"grantKeyExtension","nameLocation":"40971:17:0","nodeType":"FunctionDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"_tokenId","nameLocation":"40994:8:0","nodeType":"VariableDeclaration","scope":1402,"src":"40989:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1396,"name":"uint","nodeType":"ElementaryTypeName","src":"40989:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"_duration","nameLocation":"41009:9:0","nodeType":"VariableDeclaration","scope":1402,"src":"41004:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint","nodeType":"ElementaryTypeName","src":"41004:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"40988:31:0"},"returnParameters":{"id":1401,"nodeType":"ParameterList","parameters":[],"src":"41028:0:0"},"scope":1907,"src":"40962:67:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1403,"nodeType":"StructuredDocumentation","src":"41033:996:0","text":" @dev Purchase function\n @param _values array of tokens amount to pay for this purchase >= the current keyPrice - any applicable discount\n (_values is ignored when using ETH)\n @param _recipients array of addresses of the recipients of the purchased key\n @param _referrers array of addresses of the users making the referral\n @param _keyManagers optional array of addresses to grant managing rights to a specific address on creation\n @param _data array of arbitrary data populated by the front-end which initiated the sale\n @notice when called for an existing and non-expired key, the `_keyManager` param will be ignored\n @dev Setting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the\n price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more\n than keyPrice is approved for spending).\n @return tokenIds the ids of the created tokens"},"functionSelector":"33818997","id":1424,"implemented":false,"kind":"function","modifiers":[],"name":"purchase","nameLocation":"42041:8:0","nodeType":"FunctionDefinition","parameters":{"id":1419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1406,"mutability":"mutable","name":"_values","nameLocation":"42074:7:0","nodeType":"VariableDeclaration","scope":1424,"src":"42055:26:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1404,"name":"uint256","nodeType":"ElementaryTypeName","src":"42055:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1405,"nodeType":"ArrayTypeName","src":"42055:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1409,"mutability":"mutable","name":"_recipients","nameLocation":"42106:11:0","nodeType":"VariableDeclaration","scope":1424,"src":"42087:30:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1407,"name":"address","nodeType":"ElementaryTypeName","src":"42087:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1408,"nodeType":"ArrayTypeName","src":"42087:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1412,"mutability":"mutable","name":"_referrers","nameLocation":"42142:10:0","nodeType":"VariableDeclaration","scope":1424,"src":"42123:29:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1410,"name":"address","nodeType":"ElementaryTypeName","src":"42123:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1411,"nodeType":"ArrayTypeName","src":"42123:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1415,"mutability":"mutable","name":"_keyManagers","nameLocation":"42177:12:0","nodeType":"VariableDeclaration","scope":1424,"src":"42158:31:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1413,"name":"address","nodeType":"ElementaryTypeName","src":"42158:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1414,"nodeType":"ArrayTypeName","src":"42158:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1418,"mutability":"mutable","name":"_data","nameLocation":"42212:5:0","nodeType":"VariableDeclaration","scope":1424,"src":"42195:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":1416,"name":"bytes","nodeType":"ElementaryTypeName","src":"42195:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":1417,"nodeType":"ArrayTypeName","src":"42195:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"42049:172:0"},"returnParameters":{"id":1423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1422,"mutability":"mutable","name":"tokenIds","nameLocation":"42265:8:0","nodeType":"VariableDeclaration","scope":1424,"src":"42248:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1420,"name":"uint256","nodeType":"ElementaryTypeName","src":"42248:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1421,"nodeType":"ArrayTypeName","src":"42248:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"42247:27:0"},"scope":1907,"src":"42032:243:0","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1425,"nodeType":"StructuredDocumentation","src":"42279:497:0","text":" @dev Extend function\n @param _value the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount\n (_value is ignored when using ETH)\n @param _tokenId the id of the key to extend\n @param _referrer address of the user making the referral\n @param _data arbitrary data populated by the front-end which initiated the sale\n @dev Throws if lock is disabled or key does not exist for _recipient. Throws if _recipient == address(0)."},"functionSelector":"d813cc19","id":1436,"implemented":false,"kind":"function","modifiers":[],"name":"extend","nameLocation":"42788:6:0","nodeType":"FunctionDefinition","parameters":{"id":1434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1427,"mutability":"mutable","name":"_value","nameLocation":"42805:6:0","nodeType":"VariableDeclaration","scope":1436,"src":"42800:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1426,"name":"uint","nodeType":"ElementaryTypeName","src":"42800:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1429,"mutability":"mutable","name":"_tokenId","nameLocation":"42822:8:0","nodeType":"VariableDeclaration","scope":1436,"src":"42817:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1428,"name":"uint","nodeType":"ElementaryTypeName","src":"42817:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1431,"mutability":"mutable","name":"_referrer","nameLocation":"42844:9:0","nodeType":"VariableDeclaration","scope":1436,"src":"42836:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1430,"name":"address","nodeType":"ElementaryTypeName","src":"42836:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1433,"mutability":"mutable","name":"_data","nameLocation":"42874:5:0","nodeType":"VariableDeclaration","scope":1436,"src":"42859:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1432,"name":"bytes","nodeType":"ElementaryTypeName","src":"42859:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"42794:89:0"},"returnParameters":{"id":1435,"nodeType":"ParameterList","parameters":[],"src":"42900:0:0"},"scope":1907,"src":"42779:122:0","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1437,"nodeType":"StructuredDocumentation","src":"42905:249:0","text":" Returns the percentage of the keyPrice to be sent to the referrer (in basis points)\n @param _referrer the address of the referrer\n @return referrerFee the percentage of the keyPrice to be sent to the referrer (in basis points)"},"functionSelector":"c23135dd","id":1444,"implemented":false,"kind":"function","modifiers":[],"name":"referrerFees","nameLocation":"43166:12:0","nodeType":"FunctionDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1439,"mutability":"mutable","name":"_referrer","nameLocation":"43192:9:0","nodeType":"VariableDeclaration","scope":1444,"src":"43184:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1438,"name":"address","nodeType":"ElementaryTypeName","src":"43184:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"43178:27:0"},"returnParameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1442,"mutability":"mutable","name":"referrerFee","nameLocation":"43234:11:0","nodeType":"VariableDeclaration","scope":1444,"src":"43229:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1441,"name":"uint","nodeType":"ElementaryTypeName","src":"43229:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43228:18:0"},"scope":1907,"src":"43157:90:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1445,"nodeType":"StructuredDocumentation","src":"43251:407:0","text":" Set a specific percentage of the keyPrice to be sent to the referrer while purchasing,\n extending or renewing a key.\n @param _referrer the address of the referrer\n @param _feeBasisPoint the percentage of the price to be used for this\n specific referrer (in basis points)\n @dev To send a fixed percentage of the key price to all referrers, sett a percentage to `address(0)`"},"functionSelector":"debe2b0d","id":1452,"implemented":false,"kind":"function","modifiers":[],"name":"setReferrerFee","nameLocation":"43670:14:0","nodeType":"FunctionDefinition","parameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1447,"mutability":"mutable","name":"_referrer","nameLocation":"43693:9:0","nodeType":"VariableDeclaration","scope":1452,"src":"43685:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1446,"name":"address","nodeType":"ElementaryTypeName","src":"43685:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1449,"mutability":"mutable","name":"_feeBasisPoint","nameLocation":"43709:14:0","nodeType":"VariableDeclaration","scope":1452,"src":"43704:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1448,"name":"uint","nodeType":"ElementaryTypeName","src":"43704:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43684:40:0"},"returnParameters":{"id":1451,"nodeType":"ParameterList","parameters":[],"src":"43733:0:0"},"scope":1907,"src":"43661:73:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1453,"nodeType":"StructuredDocumentation","src":"43738:234:0","text":" Merge existing keys\n @param _tokenIdFrom the id of the token to substract time from\n @param _tokenIdTo the id of the destination token to add time\n @param _amount the amount of time to transfer (in seconds)"},"functionSelector":"068208cd","id":1462,"implemented":false,"kind":"function","modifiers":[],"name":"mergeKeys","nameLocation":"43984:9:0","nodeType":"FunctionDefinition","parameters":{"id":1460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"_tokenIdFrom","nameLocation":"43999:12:0","nodeType":"VariableDeclaration","scope":1462,"src":"43994:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1454,"name":"uint","nodeType":"ElementaryTypeName","src":"43994:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"_tokenIdTo","nameLocation":"44018:10:0","nodeType":"VariableDeclaration","scope":1462,"src":"44013:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1456,"name":"uint","nodeType":"ElementaryTypeName","src":"44013:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1459,"mutability":"mutable","name":"_amount","nameLocation":"44035:7:0","nodeType":"VariableDeclaration","scope":1462,"src":"44030:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1458,"name":"uint","nodeType":"ElementaryTypeName","src":"44030:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43993:50:0"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[],"src":"44052:0:0"},"scope":1907,"src":"43975:78:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"44057:163:0","text":" Deactivate an existing key\n @param _tokenId the id of token to burn\n @notice the key will be expired and ownership records will be destroyed"},"functionSelector":"42966c68","id":1468,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"44232:4:0","nodeType":"FunctionDefinition","parameters":{"id":1466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1465,"mutability":"mutable","name":"_tokenId","nameLocation":"44242:8:0","nodeType":"VariableDeclaration","scope":1468,"src":"44237:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1464,"name":"uint","nodeType":"ElementaryTypeName","src":"44237:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"44236:15:0"},"returnParameters":{"id":1467,"nodeType":"ParameterList","parameters":[],"src":"44260:0:0"},"scope":1907,"src":"44223:38:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1469,"nodeType":"StructuredDocumentation","src":"44265:147:0","text":" @param _gasRefundValue price in wei or token in smallest price unit\n @dev Set the value to be refunded to the sender on purchase"},"functionSelector":"f5766b39","id":1474,"implemented":false,"kind":"function","modifiers":[],"name":"setGasRefundValue","nameLocation":"44424:17:0","nodeType":"FunctionDefinition","parameters":{"id":1472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1471,"mutability":"mutable","name":"_gasRefundValue","nameLocation":"44450:15:0","nodeType":"VariableDeclaration","scope":1474,"src":"44442:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1470,"name":"uint256","nodeType":"ElementaryTypeName","src":"44442:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"44441:25:0"},"returnParameters":{"id":1473,"nodeType":"ParameterList","parameters":[],"src":"44475:0:0"},"scope":1907,"src":"44415:61:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1475,"nodeType":"StructuredDocumentation","src":"44480:150:0","text":" _gasRefundValue price in wei or token in smallest price unit\n @dev Returns the value/price to be refunded to the sender on purchase"},"functionSelector":"6207a8da","id":1480,"implemented":false,"kind":"function","modifiers":[],"name":"gasRefundValue","nameLocation":"44642:14:0","nodeType":"FunctionDefinition","parameters":{"id":1476,"nodeType":"ParameterList","parameters":[],"src":"44656:2:0"},"returnParameters":{"id":1479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1478,"mutability":"mutable","name":"_gasRefundValue","nameLocation":"44690:15:0","nodeType":"VariableDeclaration","scope":1480,"src":"44682:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1477,"name":"uint256","nodeType":"ElementaryTypeName","src":"44682:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"44681:25:0"},"scope":1907,"src":"44633:74:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1481,"nodeType":"StructuredDocumentation","src":"44711:164:0","text":" @notice returns the minimum price paid for a purchase with these params.\n @dev this considers any discount from Unlock or the OnKeyPurchase hook."},"functionSelector":"097ba333","id":1492,"implemented":false,"kind":"function","modifiers":[],"name":"purchasePriceFor","nameLocation":"44887:16:0","nodeType":"FunctionDefinition","parameters":{"id":1488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1483,"mutability":"mutable","name":"_recipient","nameLocation":"44917:10:0","nodeType":"VariableDeclaration","scope":1492,"src":"44909:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1482,"name":"address","nodeType":"ElementaryTypeName","src":"44909:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1485,"mutability":"mutable","name":"_referrer","nameLocation":"44941:9:0","nodeType":"VariableDeclaration","scope":1492,"src":"44933:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1484,"name":"address","nodeType":"ElementaryTypeName","src":"44933:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1487,"mutability":"mutable","name":"_data","nameLocation":"44971:5:0","nodeType":"VariableDeclaration","scope":1492,"src":"44956:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1486,"name":"bytes","nodeType":"ElementaryTypeName","src":"44956:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"44903:77:0"},"returnParameters":{"id":1491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1492,"src":"45004:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1489,"name":"uint","nodeType":"ElementaryTypeName","src":"45004:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45003:6:0"},"scope":1907,"src":"44878:132:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1493,"nodeType":"StructuredDocumentation","src":"45014:220:0","text":" Allow a Lock manager to change the transfer fee.\n @dev Throws if called by other than a Lock manager\n @param _transferFeeBasisPoints The new transfer fee in basis-points(bps).\n Ex: 200 bps = 2%"},"functionSelector":"8577a6d5","id":1498,"implemented":false,"kind":"function","modifiers":[],"name":"updateTransferFee","nameLocation":"45246:17:0","nodeType":"FunctionDefinition","parameters":{"id":1496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1495,"mutability":"mutable","name":"_transferFeeBasisPoints","nameLocation":"45269:23:0","nodeType":"VariableDeclaration","scope":1498,"src":"45264:28:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1494,"name":"uint","nodeType":"ElementaryTypeName","src":"45264:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45263:30:0"},"returnParameters":{"id":1497,"nodeType":"ParameterList","parameters":[],"src":"45302:0:0"},"scope":1907,"src":"45237:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"45307:393:0","text":" Determines how much of a fee would need to be paid in order to\n transfer to another account. This is pro-rated so the fee goes\n down overtime.\n @dev Throws if _tokenId does not have a valid key\n @param _tokenId The id of the key check the transfer fee for.\n @param _time The amount of time to calculate the fee for.\n @return The transfer fee in seconds."},"functionSelector":"b1a3b25d","id":1508,"implemented":false,"kind":"function","modifiers":[],"name":"getTransferFee","nameLocation":"45712:14:0","nodeType":"FunctionDefinition","parameters":{"id":1504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"_tokenId","nameLocation":"45737:8:0","nodeType":"VariableDeclaration","scope":1508,"src":"45732:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1500,"name":"uint","nodeType":"ElementaryTypeName","src":"45732:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1503,"mutability":"mutable","name":"_time","nameLocation":"45756:5:0","nodeType":"VariableDeclaration","scope":1508,"src":"45751:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1502,"name":"uint","nodeType":"ElementaryTypeName","src":"45751:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45726:39:0"},"returnParameters":{"id":1507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1508,"src":"45789:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1505,"name":"uint","nodeType":"ElementaryTypeName","src":"45789:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45788:6:0"},"scope":1907,"src":"45703:92:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1509,"nodeType":"StructuredDocumentation","src":"45799:347:0","text":" @dev Invoked by a Lock manager to expire the user's key\n and perform a refund and cancellation of the key\n @param _tokenId The key id we wish to refund to\n @param _amount The amount to refund to the key-owner\n @dev Throws if called by other than a Lock manager\n @dev Throws if _keyOwner does not have a valid key"},"functionSelector":"558b71e9","id":1516,"implemented":false,"kind":"function","modifiers":[],"name":"expireAndRefundFor","nameLocation":"46158:18:0","nodeType":"FunctionDefinition","parameters":{"id":1514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1511,"mutability":"mutable","name":"_tokenId","nameLocation":"46182:8:0","nodeType":"VariableDeclaration","scope":1516,"src":"46177:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1510,"name":"uint","nodeType":"ElementaryTypeName","src":"46177:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1513,"mutability":"mutable","name":"_amount","nameLocation":"46197:7:0","nodeType":"VariableDeclaration","scope":1516,"src":"46192:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1512,"name":"uint","nodeType":"ElementaryTypeName","src":"46192:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46176:29:0"},"returnParameters":{"id":1515,"nodeType":"ParameterList","parameters":[],"src":"46214:0:0"},"scope":1907,"src":"46149:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1517,"nodeType":"StructuredDocumentation","src":"46219:271:0","text":" @dev allows the key manager to expire a given tokenId\n and send a refund to the keyOwner based on the amount of time remaining.\n @param _tokenId The id of the key to cancel.\n @notice cancel is enabled with a 10% penalty by default on all Locks."},"functionSelector":"d32bfb6c","id":1522,"implemented":false,"kind":"function","modifiers":[],"name":"cancelAndRefund","nameLocation":"46502:15:0","nodeType":"FunctionDefinition","parameters":{"id":1520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1519,"mutability":"mutable","name":"_tokenId","nameLocation":"46523:8:0","nodeType":"VariableDeclaration","scope":1522,"src":"46518:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1518,"name":"uint","nodeType":"ElementaryTypeName","src":"46518:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46517:15:0"},"returnParameters":{"id":1521,"nodeType":"ParameterList","parameters":[],"src":"46541:0:0"},"scope":1907,"src":"46493:49:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1523,"nodeType":"StructuredDocumentation","src":"46546:277:0","text":" Allow a Lock manager to change the refund penalty.\n @dev Throws if called by other than a Lock manager\n @param _freeTrialLength The new duration of free trials for this lock\n @param _refundPenaltyBasisPoints The new refund penaly in basis-points(bps)"},"functionSelector":"39f46986","id":1530,"implemented":false,"kind":"function","modifiers":[],"name":"updateRefundPenalty","nameLocation":"46835:19:0","nodeType":"FunctionDefinition","parameters":{"id":1528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1525,"mutability":"mutable","name":"_freeTrialLength","nameLocation":"46865:16:0","nodeType":"VariableDeclaration","scope":1530,"src":"46860:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1524,"name":"uint","nodeType":"ElementaryTypeName","src":"46860:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1527,"mutability":"mutable","name":"_refundPenaltyBasisPoints","nameLocation":"46892:25:0","nodeType":"VariableDeclaration","scope":1530,"src":"46887:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1526,"name":"uint","nodeType":"ElementaryTypeName","src":"46887:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46854:67:0"},"returnParameters":{"id":1529,"nodeType":"ParameterList","parameters":[],"src":"46930:0:0"},"scope":1907,"src":"46826:105:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1531,"nodeType":"StructuredDocumentation","src":"46935:349:0","text":" @dev Determines how much of a refund a key owner would receive if they issued\n @param _tokenId the id of the token to get the refund value for.\n @notice Due to the time required to mine a tx, the actual refund amount will be lower\n than what the user reads from this call.\n @return refund the amount of tokens refunded"},"functionSelector":"92ac98a5","id":1538,"implemented":false,"kind":"function","modifiers":[],"name":"getCancelAndRefundValue","nameLocation":"47296:23:0","nodeType":"FunctionDefinition","parameters":{"id":1534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1533,"mutability":"mutable","name":"_tokenId","nameLocation":"47330:8:0","nodeType":"VariableDeclaration","scope":1538,"src":"47325:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1532,"name":"uint","nodeType":"ElementaryTypeName","src":"47325:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"47319:23:0"},"returnParameters":{"id":1537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1536,"mutability":"mutable","name":"refund","nameLocation":"47371:6:0","nodeType":"VariableDeclaration","scope":1538,"src":"47366:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1535,"name":"uint","nodeType":"ElementaryTypeName","src":"47366:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"47365:13:0"},"scope":1907,"src":"47287:92:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d2503485","id":1543,"implemented":false,"kind":"function","modifiers":[],"name":"addLockManager","nameLocation":"47392:14:0","nodeType":"FunctionDefinition","parameters":{"id":1541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"mutability":"mutable","name":"account","nameLocation":"47415:7:0","nodeType":"VariableDeclaration","scope":1543,"src":"47407:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1539,"name":"address","nodeType":"ElementaryTypeName","src":"47407:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47406:17:0"},"returnParameters":{"id":1542,"nodeType":"ParameterList","parameters":[],"src":"47432:0:0"},"scope":1907,"src":"47383:50:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"aae4b8f7","id":1550,"implemented":false,"kind":"function","modifiers":[],"name":"isLockManager","nameLocation":"47446:13:0","nodeType":"FunctionDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1545,"mutability":"mutable","name":"account","nameLocation":"47468:7:0","nodeType":"VariableDeclaration","scope":1550,"src":"47460:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1544,"name":"address","nodeType":"ElementaryTypeName","src":"47460:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47459:17:0"},"returnParameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1550,"src":"47500:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1547,"name":"bool","nodeType":"ElementaryTypeName","src":"47500:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"47499:6:0"},"scope":1907,"src":"47437:69:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"47510:112:0","text":" Returns the address of the `onKeyPurchaseHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"2d33dd5b","id":1556,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyPurchaseHook","nameLocation":"47634:17:0","nodeType":"FunctionDefinition","parameters":{"id":1552,"nodeType":"ParameterList","parameters":[],"src":"47651:2:0"},"returnParameters":{"id":1555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1554,"mutability":"mutable","name":"hookAddress","nameLocation":"47685:11:0","nodeType":"VariableDeclaration","scope":1556,"src":"47677:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1553,"name":"address","nodeType":"ElementaryTypeName","src":"47677:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47676:21:0"},"scope":1907,"src":"47625:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1557,"nodeType":"StructuredDocumentation","src":"47702:110:0","text":" Returns the address of the `onKeyCancelHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"217751bc","id":1562,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyCancelHook","nameLocation":"47824:15:0","nodeType":"FunctionDefinition","parameters":{"id":1558,"nodeType":"ParameterList","parameters":[],"src":"47839:2:0"},"returnParameters":{"id":1561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1560,"mutability":"mutable","name":"hookAddress","nameLocation":"47873:11:0","nodeType":"VariableDeclaration","scope":1562,"src":"47865:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1559,"name":"address","nodeType":"ElementaryTypeName","src":"47865:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47864:21:0"},"scope":1907,"src":"47815:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"47890:109:0","text":" Returns the address of the `onValidKeyHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"26e9ca07","id":1568,"implemented":false,"kind":"function","modifiers":[],"name":"onValidKeyHook","nameLocation":"48011:14:0","nodeType":"FunctionDefinition","parameters":{"id":1564,"nodeType":"ParameterList","parameters":[],"src":"48025:2:0"},"returnParameters":{"id":1567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1566,"mutability":"mutable","name":"hookAddress","nameLocation":"48059:11:0","nodeType":"VariableDeclaration","scope":1568,"src":"48051:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1565,"name":"address","nodeType":"ElementaryTypeName","src":"48051:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48050:21:0"},"scope":1907,"src":"48002:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1569,"nodeType":"StructuredDocumentation","src":"48076:109:0","text":" Returns the address of the `onTokenURIHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"7ec2a724","id":1574,"implemented":false,"kind":"function","modifiers":[],"name":"onTokenURIHook","nameLocation":"48197:14:0","nodeType":"FunctionDefinition","parameters":{"id":1570,"nodeType":"ParameterList","parameters":[],"src":"48211:2:0"},"returnParameters":{"id":1573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1572,"mutability":"mutable","name":"hookAddress","nameLocation":"48245:11:0","nodeType":"VariableDeclaration","scope":1574,"src":"48237:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1571,"name":"address","nodeType":"ElementaryTypeName","src":"48237:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48236:21:0"},"scope":1907,"src":"48188:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1575,"nodeType":"StructuredDocumentation","src":"48262:112:0","text":" Returns the address of the `onKeyTransferHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"389f07e8","id":1580,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyTransferHook","nameLocation":"48386:17:0","nodeType":"FunctionDefinition","parameters":{"id":1576,"nodeType":"ParameterList","parameters":[],"src":"48403:2:0"},"returnParameters":{"id":1579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1578,"mutability":"mutable","name":"hookAddress","nameLocation":"48437:11:0","nodeType":"VariableDeclaration","scope":1580,"src":"48429:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1577,"name":"address","nodeType":"ElementaryTypeName","src":"48429:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48428:21:0"},"scope":1907,"src":"48377:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1581,"nodeType":"StructuredDocumentation","src":"48454:114:0","text":" Returns the address of the `onKeyExtendHook` hook.\n @return hookAddress the address ok the hook"},"functionSelector":"c907c3ec","id":1586,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyExtendHook","nameLocation":"48580:15:0","nodeType":"FunctionDefinition","parameters":{"id":1582,"nodeType":"ParameterList","parameters":[],"src":"48595:2:0"},"returnParameters":{"id":1585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"mutability":"mutable","name":"hookAddress","nameLocation":"48629:11:0","nodeType":"VariableDeclaration","scope":1586,"src":"48621:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1583,"name":"address","nodeType":"ElementaryTypeName","src":"48621:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48620:21:0"},"scope":1907,"src":"48571:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1587,"nodeType":"StructuredDocumentation","src":"48646:113:0","text":" Returns the address of the `onKeyGrantHook` hook.\n @return hookAddress the address ok the hook"},"functionSelector":"b129694e","id":1592,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyGrantHook","nameLocation":"48771:14:0","nodeType":"FunctionDefinition","parameters":{"id":1588,"nodeType":"ParameterList","parameters":[],"src":"48785:2:0"},"returnParameters":{"id":1591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1590,"mutability":"mutable","name":"hookAddress","nameLocation":"48819:11:0","nodeType":"VariableDeclaration","scope":1592,"src":"48811:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1589,"name":"address","nodeType":"ElementaryTypeName","src":"48811:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48810:21:0"},"scope":1907,"src":"48762:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f0ba6040","id":1595,"implemented":false,"kind":"function","modifiers":[],"name":"renounceLockManager","nameLocation":"48845:19:0","nodeType":"FunctionDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[],"src":"48864:2:0"},"returnParameters":{"id":1594,"nodeType":"ParameterList","parameters":[],"src":"48875:0:0"},"scope":1907,"src":"48836:40:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1596,"nodeType":"StructuredDocumentation","src":"48880:77:0","text":" @return the maximum number of key allowed for a single address"},"functionSelector":"d52e4a10","id":1601,"implemented":false,"kind":"function","modifiers":[],"name":"maxKeysPerAddress","nameLocation":"48969:17:0","nodeType":"FunctionDefinition","parameters":{"id":1597,"nodeType":"ParameterList","parameters":[],"src":"48986:2:0"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1601,"src":"49012:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1598,"name":"uint","nodeType":"ElementaryTypeName","src":"49012:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49011:6:0"},"scope":1907,"src":"48960:58:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"11a4c03a","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"expirationDuration","nameLocation":"49031:18:0","nodeType":"FunctionDefinition","parameters":{"id":1602,"nodeType":"ParameterList","parameters":[],"src":"49049:2:0"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1606,"src":"49075:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"49075:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49074:9:0"},"scope":1907,"src":"49022:62:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a375cb05","id":1611,"implemented":false,"kind":"function","modifiers":[],"name":"freeTrialLength","nameLocation":"49097:15:0","nodeType":"FunctionDefinition","parameters":{"id":1607,"nodeType":"ParameterList","parameters":[],"src":"49112:2:0"},"returnParameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1611,"src":"49138:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"49138:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49137:9:0"},"scope":1907,"src":"49088:59:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"10e56973","id":1616,"implemented":false,"kind":"function","modifiers":[],"name":"keyPrice","nameLocation":"49160:8:0","nodeType":"FunctionDefinition","parameters":{"id":1612,"nodeType":"ParameterList","parameters":[],"src":"49168:2:0"},"returnParameters":{"id":1615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1616,"src":"49194:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"49194:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49193:9:0"},"scope":1907,"src":"49151:52:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"74b6c106","id":1621,"implemented":false,"kind":"function","modifiers":[],"name":"maxNumberOfKeys","nameLocation":"49216:15:0","nodeType":"FunctionDefinition","parameters":{"id":1617,"nodeType":"ParameterList","parameters":[],"src":"49231:2:0"},"returnParameters":{"id":1620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1621,"src":"49257:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1618,"name":"uint256","nodeType":"ElementaryTypeName","src":"49257:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49256:9:0"},"scope":1907,"src":"49207:59:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"56e0d51f","id":1626,"implemented":false,"kind":"function","modifiers":[],"name":"refundPenaltyBasisPoints","nameLocation":"49279:24:0","nodeType":"FunctionDefinition","parameters":{"id":1622,"nodeType":"ParameterList","parameters":[],"src":"49303:2:0"},"returnParameters":{"id":1625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1626,"src":"49329:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1623,"name":"uint256","nodeType":"ElementaryTypeName","src":"49329:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49328:9:0"},"scope":1907,"src":"49270:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9d76ea58","id":1631,"implemented":false,"kind":"function","modifiers":[],"name":"tokenAddress","nameLocation":"49351:12:0","nodeType":"FunctionDefinition","parameters":{"id":1627,"nodeType":"ParameterList","parameters":[],"src":"49363:2:0"},"returnParameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1631,"src":"49389:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1628,"name":"address","nodeType":"ElementaryTypeName","src":"49389:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"49388:9:0"},"scope":1907,"src":"49342:56:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"183767da","id":1636,"implemented":false,"kind":"function","modifiers":[],"name":"transferFeeBasisPoints","nameLocation":"49411:22:0","nodeType":"FunctionDefinition","parameters":{"id":1632,"nodeType":"ParameterList","parameters":[],"src":"49433:2:0"},"returnParameters":{"id":1635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1634,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1636,"src":"49459:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1633,"name":"uint256","nodeType":"ElementaryTypeName","src":"49459:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49458:9:0"},"scope":1907,"src":"49402:66:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0f15023b","id":1641,"implemented":false,"kind":"function","modifiers":[],"name":"unlockProtocol","nameLocation":"49481:14:0","nodeType":"FunctionDefinition","parameters":{"id":1637,"nodeType":"ParameterList","parameters":[],"src":"49495:2:0"},"returnParameters":{"id":1640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1641,"src":"49521:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1638,"name":"address","nodeType":"ElementaryTypeName","src":"49521:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"49520:9:0"},"scope":1907,"src":"49472:58:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4d025fed","id":1648,"implemented":false,"kind":"function","modifiers":[],"name":"keyManagerOf","nameLocation":"49543:12:0","nodeType":"FunctionDefinition","parameters":{"id":1644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1648,"src":"49556:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1642,"name":"uint","nodeType":"ElementaryTypeName","src":"49556:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49555:6:0"},"returnParameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1648,"src":"49585:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1645,"name":"address","nodeType":"ElementaryTypeName","src":"49585:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"49584:9:0"},"scope":1907,"src":"49534:60:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1649,"nodeType":"StructuredDocumentation","src":"49672:630:0","text":" @notice Allows the key owner to safely share their key (parent key) by\n transferring a portion of the remaining time to a new key (child key).\n @dev Throws if key is not valid.\n @dev Throws if `_to` is the zero address\n @param _to The recipient of the shared key\n @param _tokenId the key to share\n @param _timeShared The amount of time shared\n checks if `_to` is a smart contract (code size > 0). If so, it calls\n `onERC721Received` on `_to` and throws if the return value is not\n `bytes4(keccak256('onERC721Received(address,address,uint,bytes)'))`.\n @dev Emit Transfer event"},"functionSelector":"f12c6b6e","id":1658,"implemented":false,"kind":"function","modifiers":[],"name":"shareKey","nameLocation":"50314:8:0","nodeType":"FunctionDefinition","parameters":{"id":1656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"mutability":"mutable","name":"_to","nameLocation":"50331:3:0","nodeType":"VariableDeclaration","scope":1658,"src":"50323:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"50323:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1653,"mutability":"mutable","name":"_tokenId","nameLocation":"50341:8:0","nodeType":"VariableDeclaration","scope":1658,"src":"50336:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1652,"name":"uint","nodeType":"ElementaryTypeName","src":"50336:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"_timeShared","nameLocation":"50356:11:0","nodeType":"VariableDeclaration","scope":1658,"src":"50351:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1654,"name":"uint","nodeType":"ElementaryTypeName","src":"50351:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50322:46:0"},"returnParameters":{"id":1657,"nodeType":"ParameterList","parameters":[],"src":"50377:0:0"},"scope":1907,"src":"50305:73:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1659,"nodeType":"StructuredDocumentation","src":"50382:210:0","text":" @notice Update transfer and cancel rights for a given key\n @param _tokenId The id of the key to assign rights for\n @param _keyManager The address to assign the rights to for the given key"},"functionSelector":"b11d7ec1","id":1666,"implemented":false,"kind":"function","modifiers":[],"name":"setKeyManagerOf","nameLocation":"50604:15:0","nodeType":"FunctionDefinition","parameters":{"id":1664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1661,"mutability":"mutable","name":"_tokenId","nameLocation":"50625:8:0","nodeType":"VariableDeclaration","scope":1666,"src":"50620:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1660,"name":"uint","nodeType":"ElementaryTypeName","src":"50620:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1663,"mutability":"mutable","name":"_keyManager","nameLocation":"50643:11:0","nodeType":"VariableDeclaration","scope":1666,"src":"50635:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1662,"name":"address","nodeType":"ElementaryTypeName","src":"50635:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"50619:36:0"},"returnParameters":{"id":1665,"nodeType":"ParameterList","parameters":[],"src":"50664:0:0"},"scope":1907,"src":"50595:70:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1667,"nodeType":"StructuredDocumentation","src":"50669:166:0","text":" Check if a certain key is valid\n @param _tokenId the id of the key to check validity\n @notice this makes use of the onValidKeyHook if it is set"},"functionSelector":"a98d3623","id":1674,"implemented":false,"kind":"function","modifiers":[],"name":"isValidKey","nameLocation":"50847:10:0","nodeType":"FunctionDefinition","parameters":{"id":1670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1669,"mutability":"mutable","name":"_tokenId","nameLocation":"50863:8:0","nodeType":"VariableDeclaration","scope":1674,"src":"50858:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1668,"name":"uint","nodeType":"ElementaryTypeName","src":"50858:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50857:15:0"},"returnParameters":{"id":1673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1674,"src":"50896:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1671,"name":"bool","nodeType":"ElementaryTypeName","src":"50896:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"50895:6:0"},"scope":1907,"src":"50838:64:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1675,"nodeType":"StructuredDocumentation","src":"50906:230:0","text":" Returns the number of keys owned by `_keyOwner` (expired or not)\n @param _keyOwner address for which we are retrieving the total number of keys\n @return numberOfKeys total number of keys owned by the address"},"functionSelector":"812eecd4","id":1682,"implemented":false,"kind":"function","modifiers":[],"name":"totalKeys","nameLocation":"51148:9:0","nodeType":"FunctionDefinition","parameters":{"id":1678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1677,"mutability":"mutable","name":"_keyOwner","nameLocation":"51171:9:0","nodeType":"VariableDeclaration","scope":1682,"src":"51163:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1676,"name":"address","nodeType":"ElementaryTypeName","src":"51163:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"51157:27:0"},"returnParameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1680,"mutability":"mutable","name":"numberOfKeys","nameLocation":"51213:12:0","nodeType":"VariableDeclaration","scope":1682,"src":"51208:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1679,"name":"uint","nodeType":"ElementaryTypeName","src":"51208:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51207:19:0"},"scope":1907,"src":"51139:88:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"51231:72:0","text":"@notice A descriptive name for a collection of NFTs in this contract"},"functionSelector":"06fdde03","id":1688,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"51315:4:0","nodeType":"FunctionDefinition","parameters":{"id":1684,"nodeType":"ParameterList","parameters":[],"src":"51319:2:0"},"returnParameters":{"id":1687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1686,"mutability":"mutable","name":"_name","nameLocation":"51359:5:0","nodeType":"VariableDeclaration","scope":1688,"src":"51345:19:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1685,"name":"string","nodeType":"ElementaryTypeName","src":"51345:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"51344:21:0"},"scope":1907,"src":"51306:60:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1689,"nodeType":"StructuredDocumentation","src":"51444:19:0","text":"From ERC165.sol"},"functionSelector":"01ffc9a7","id":1696,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"51475:17:0","nodeType":"FunctionDefinition","parameters":{"id":1692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1691,"mutability":"mutable","name":"interfaceId","nameLocation":"51500:11:0","nodeType":"VariableDeclaration","scope":1696,"src":"51493:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1690,"name":"bytes4","nodeType":"ElementaryTypeName","src":"51493:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"51492:20:0"},"returnParameters":{"id":1695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1696,"src":"51536:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1693,"name":"bool","nodeType":"ElementaryTypeName","src":"51536:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"51535:6:0"},"scope":1907,"src":"51466:76:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1697,"nodeType":"StructuredDocumentation","src":"51639:183:0","text":" In the specific case of a Lock, `balanceOf` returns only the tokens with a valid expiration timerange\n @return balance The number of valid keys owned by `_keyOwner`"},"functionSelector":"70a08231","id":1704,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"51834:9:0","nodeType":"FunctionDefinition","parameters":{"id":1700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1699,"mutability":"mutable","name":"_owner","nameLocation":"51852:6:0","nodeType":"VariableDeclaration","scope":1704,"src":"51844:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1698,"name":"address","nodeType":"ElementaryTypeName","src":"51844:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"51843:16:0"},"returnParameters":{"id":1703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1702,"mutability":"mutable","name":"balance","nameLocation":"51891:7:0","nodeType":"VariableDeclaration","scope":1704,"src":"51883:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1701,"name":"uint256","nodeType":"ElementaryTypeName","src":"51883:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51882:17:0"},"scope":1907,"src":"51825:75:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1705,"nodeType":"StructuredDocumentation","src":"51904:72:0","text":" @dev Returns the owner of the NFT specified by `tokenId`."},"functionSelector":"6352211e","id":1712,"implemented":false,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"51988:7:0","nodeType":"FunctionDefinition","parameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"tokenId","nameLocation":"52004:7:0","nodeType":"VariableDeclaration","scope":1712,"src":"51996:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1706,"name":"uint256","nodeType":"ElementaryTypeName","src":"51996:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51995:17:0"},"returnParameters":{"id":1711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1710,"mutability":"mutable","name":"_owner","nameLocation":"52044:6:0","nodeType":"VariableDeclaration","scope":1712,"src":"52036:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1709,"name":"address","nodeType":"ElementaryTypeName","src":"52036:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"52035:16:0"},"scope":1907,"src":"51979:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1713,"nodeType":"StructuredDocumentation","src":"52056:339:0","text":" @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to\n another (`to`).\n Requirements:\n - `from`, `to` cannot be zero.\n - `tokenId` must be owned by `from`.\n - If the caller is not `from`, it must be have been allowed to move this\n NFT by either {approve} or {setApprovalForAll}."},"functionSelector":"42842e0e","id":1722,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"52407:16:0","nodeType":"FunctionDefinition","parameters":{"id":1720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1715,"mutability":"mutable","name":"from","nameLocation":"52432:4:0","nodeType":"VariableDeclaration","scope":1722,"src":"52424:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1714,"name":"address","nodeType":"ElementaryTypeName","src":"52424:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1717,"mutability":"mutable","name":"to","nameLocation":"52446:2:0","nodeType":"VariableDeclaration","scope":1722,"src":"52438:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1716,"name":"address","nodeType":"ElementaryTypeName","src":"52438:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1719,"mutability":"mutable","name":"tokenId","nameLocation":"52458:7:0","nodeType":"VariableDeclaration","scope":1722,"src":"52450:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1718,"name":"uint256","nodeType":"ElementaryTypeName","src":"52450:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"52423:43:0"},"returnParameters":{"id":1721,"nodeType":"ParameterList","parameters":[],"src":"52475:0:0"},"scope":1907,"src":"52398:78:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1723,"nodeType":"StructuredDocumentation","src":"52480:441:0","text":" an ERC721-like function to transfer a token from one account to another.\n @param from the owner of token to transfer\n @param to the address that will receive the token\n @param tokenId the id of the token\n @dev Requirements: if the caller is not `from`, it must be approved to move this token by\n either {approve} or {setApprovalForAll}.\n The key manager will be reset to address zero after the transfer"},"functionSelector":"23b872dd","id":1732,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"52933:12:0","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1725,"mutability":"mutable","name":"from","nameLocation":"52954:4:0","nodeType":"VariableDeclaration","scope":1732,"src":"52946:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1724,"name":"address","nodeType":"ElementaryTypeName","src":"52946:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1727,"mutability":"mutable","name":"to","nameLocation":"52968:2:0","nodeType":"VariableDeclaration","scope":1732,"src":"52960:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1726,"name":"address","nodeType":"ElementaryTypeName","src":"52960:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1729,"mutability":"mutable","name":"tokenId","nameLocation":"52980:7:0","nodeType":"VariableDeclaration","scope":1732,"src":"52972:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1728,"name":"uint256","nodeType":"ElementaryTypeName","src":"52972:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"52945:43:0"},"returnParameters":{"id":1731,"nodeType":"ParameterList","parameters":[],"src":"52997:0:0"},"scope":1907,"src":"52924:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1733,"nodeType":"StructuredDocumentation","src":"53002:537:0","text":" Lending a key allows you to transfer the token while retaining the\n ownerships right by setting yourself as a key manager first.\n @param from the owner of token to transfer\n @param to the address that will receive the token\n @param tokenId the id of the token\n @notice This function can only be called by 1) the key owner when no key manager is set or 2) the key manager.\n After calling the function, the `_recipent` will be the new owner, and the sender of the tx\n will become the key manager."},"functionSelector":"0c2db8d1","id":1742,"implemented":false,"kind":"function","modifiers":[],"name":"lendKey","nameLocation":"53551:7:0","nodeType":"FunctionDefinition","parameters":{"id":1740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1735,"mutability":"mutable","name":"from","nameLocation":"53567:4:0","nodeType":"VariableDeclaration","scope":1742,"src":"53559:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1734,"name":"address","nodeType":"ElementaryTypeName","src":"53559:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1737,"mutability":"mutable","name":"to","nameLocation":"53581:2:0","nodeType":"VariableDeclaration","scope":1742,"src":"53573:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1736,"name":"address","nodeType":"ElementaryTypeName","src":"53573:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1739,"mutability":"mutable","name":"tokenId","nameLocation":"53590:7:0","nodeType":"VariableDeclaration","scope":1742,"src":"53585:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1738,"name":"uint","nodeType":"ElementaryTypeName","src":"53585:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53558:40:0"},"returnParameters":{"id":1741,"nodeType":"ParameterList","parameters":[],"src":"53607:0:0"},"scope":1907,"src":"53542:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1743,"nodeType":"StructuredDocumentation","src":"53612:280:0","text":" Unlend is called when you have lent a key and want to claim its full ownership back.\n @param _recipient the address that will receive the token ownership\n @param _tokenId the id of the token\n @dev Only the key manager of the token can call this function"},"functionSelector":"407dc589","id":1750,"implemented":false,"kind":"function","modifiers":[],"name":"unlendKey","nameLocation":"53904:9:0","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1745,"mutability":"mutable","name":"_recipient","nameLocation":"53922:10:0","nodeType":"VariableDeclaration","scope":1750,"src":"53914:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1744,"name":"address","nodeType":"ElementaryTypeName","src":"53914:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1747,"mutability":"mutable","name":"_tokenId","nameLocation":"53939:8:0","nodeType":"VariableDeclaration","scope":1750,"src":"53934:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1746,"name":"uint","nodeType":"ElementaryTypeName","src":"53934:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53913:35:0"},"returnParameters":{"id":1749,"nodeType":"ParameterList","parameters":[],"src":"53957:0:0"},"scope":1907,"src":"53895:63:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":1757,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"53971:7:0","nodeType":"FunctionDefinition","parameters":{"id":1755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1752,"mutability":"mutable","name":"to","nameLocation":"53987:2:0","nodeType":"VariableDeclaration","scope":1757,"src":"53979:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1751,"name":"address","nodeType":"ElementaryTypeName","src":"53979:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1754,"mutability":"mutable","name":"tokenId","nameLocation":"53999:7:0","nodeType":"VariableDeclaration","scope":1757,"src":"53991:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1753,"name":"uint256","nodeType":"ElementaryTypeName","src":"53991:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53978:29:0"},"returnParameters":{"id":1756,"nodeType":"ParameterList","parameters":[],"src":"54016:0:0"},"scope":1907,"src":"53962:55:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1758,"nodeType":"StructuredDocumentation","src":"54021:271:0","text":" @notice Get the approved address for a single NFT\n @dev Throws if `_tokenId` is not a valid NFT.\n @param _tokenId The NFT to find the approved address for\n @return operator The approved address for this NFT, or the zero address if there is none"},"functionSelector":"081812fc","id":1765,"implemented":false,"kind":"function","modifiers":[],"name":"getApproved","nameLocation":"54304:11:0","nodeType":"FunctionDefinition","parameters":{"id":1761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1760,"mutability":"mutable","name":"_tokenId","nameLocation":"54329:8:0","nodeType":"VariableDeclaration","scope":1765,"src":"54321:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1759,"name":"uint256","nodeType":"ElementaryTypeName","src":"54321:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"54315:26:0"},"returnParameters":{"id":1764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1763,"mutability":"mutable","name":"operator","nameLocation":"54373:8:0","nodeType":"VariableDeclaration","scope":1765,"src":"54365:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1762,"name":"address","nodeType":"ElementaryTypeName","src":"54365:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"54364:18:0"},"scope":1907,"src":"54295:88:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1766,"nodeType":"StructuredDocumentation","src":"54387:329:0","text":" @dev Sets or unsets the approval of a given operator\n An operator is allowed to transfer all tokens of the sender on their behalf\n @param _operator operator address to set the approval\n @param _approved representing the status of the approval to be set\n @notice disabled when transfers are disabled"},"functionSelector":"a22cb465","id":1773,"implemented":false,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"54728:17:0","nodeType":"FunctionDefinition","parameters":{"id":1771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1768,"mutability":"mutable","name":"_operator","nameLocation":"54754:9:0","nodeType":"VariableDeclaration","scope":1773,"src":"54746:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1767,"name":"address","nodeType":"ElementaryTypeName","src":"54746:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1770,"mutability":"mutable","name":"_approved","nameLocation":"54770:9:0","nodeType":"VariableDeclaration","scope":1773,"src":"54765:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1769,"name":"bool","nodeType":"ElementaryTypeName","src":"54765:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"54745:35:0"},"returnParameters":{"id":1772,"nodeType":"ParameterList","parameters":[],"src":"54789:0:0"},"scope":1907,"src":"54719:71:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1774,"nodeType":"StructuredDocumentation","src":"54794:307:0","text":" @dev Tells whether an operator is approved by a given keyManager\n @param _owner owner address which you want to query the approval of\n @param _operator operator address which you want to query the approval of\n @return bool whether the given operator is approved by the given owner"},"functionSelector":"e985e9c5","id":1783,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"55113:16:0","nodeType":"FunctionDefinition","parameters":{"id":1779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1776,"mutability":"mutable","name":"_owner","nameLocation":"55143:6:0","nodeType":"VariableDeclaration","scope":1783,"src":"55135:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1775,"name":"address","nodeType":"ElementaryTypeName","src":"55135:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1778,"mutability":"mutable","name":"_operator","nameLocation":"55163:9:0","nodeType":"VariableDeclaration","scope":1783,"src":"55155:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1777,"name":"address","nodeType":"ElementaryTypeName","src":"55155:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"55129:47:0"},"returnParameters":{"id":1782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1781,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1783,"src":"55200:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1780,"name":"bool","nodeType":"ElementaryTypeName","src":"55200:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"55199:6:0"},"scope":1907,"src":"55104:102:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b88d4fde","id":1794,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"55219:16:0","nodeType":"FunctionDefinition","parameters":{"id":1792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"from","nameLocation":"55249:4:0","nodeType":"VariableDeclaration","scope":1794,"src":"55241:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1784,"name":"address","nodeType":"ElementaryTypeName","src":"55241:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1787,"mutability":"mutable","name":"to","nameLocation":"55267:2:0","nodeType":"VariableDeclaration","scope":1794,"src":"55259:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1786,"name":"address","nodeType":"ElementaryTypeName","src":"55259:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1789,"mutability":"mutable","name":"tokenId","nameLocation":"55283:7:0","nodeType":"VariableDeclaration","scope":1794,"src":"55275:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1788,"name":"uint256","nodeType":"ElementaryTypeName","src":"55275:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1791,"mutability":"mutable","name":"data","nameLocation":"55311:4:0","nodeType":"VariableDeclaration","scope":1794,"src":"55296:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1790,"name":"bytes","nodeType":"ElementaryTypeName","src":"55296:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"55235:84:0"},"returnParameters":{"id":1793,"nodeType":"ParameterList","parameters":[],"src":"55328:0:0"},"scope":1907,"src":"55210:119:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1795,"nodeType":"StructuredDocumentation","src":"55333:143:0","text":" Returns the total number of keys, including non-valid ones\n @return _totalKeysCreated the total number of keys, valid or not"},"functionSelector":"18160ddd","id":1800,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"55488:11:0","nodeType":"FunctionDefinition","parameters":{"id":1796,"nodeType":"ParameterList","parameters":[],"src":"55499:2:0"},"returnParameters":{"id":1799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1798,"mutability":"mutable","name":"_totalKeysCreated","nameLocation":"55533:17:0","nodeType":"VariableDeclaration","scope":1800,"src":"55525:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1797,"name":"uint256","nodeType":"ElementaryTypeName","src":"55525:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55524:27:0"},"scope":1907,"src":"55479:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f745c59","id":1809,"implemented":false,"kind":"function","modifiers":[],"name":"tokenOfOwnerByIndex","nameLocation":"55565:19:0","nodeType":"FunctionDefinition","parameters":{"id":1805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1802,"mutability":"mutable","name":"_owner","nameLocation":"55598:6:0","nodeType":"VariableDeclaration","scope":1809,"src":"55590:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1801,"name":"address","nodeType":"ElementaryTypeName","src":"55590:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1804,"mutability":"mutable","name":"index","nameLocation":"55618:5:0","nodeType":"VariableDeclaration","scope":1809,"src":"55610:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1803,"name":"uint256","nodeType":"ElementaryTypeName","src":"55610:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55584:43:0"},"returnParameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1807,"mutability":"mutable","name":"tokenId","nameLocation":"55659:7:0","nodeType":"VariableDeclaration","scope":1809,"src":"55651:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1806,"name":"uint256","nodeType":"ElementaryTypeName","src":"55651:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55650:17:0"},"scope":1907,"src":"55556:112:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4f6ccce7","id":1816,"implemented":false,"kind":"function","modifiers":[],"name":"tokenByIndex","nameLocation":"55681:12:0","nodeType":"FunctionDefinition","parameters":{"id":1812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1811,"mutability":"mutable","name":"index","nameLocation":"55702:5:0","nodeType":"VariableDeclaration","scope":1816,"src":"55694:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1810,"name":"uint256","nodeType":"ElementaryTypeName","src":"55694:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55693:15:0"},"returnParameters":{"id":1815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1816,"src":"55732:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1813,"name":"uint256","nodeType":"ElementaryTypeName","src":"55732:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55731:9:0"},"scope":1907,"src":"55672:69:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1817,"nodeType":"StructuredDocumentation","src":"55745:62:0","text":" Innherited from Open Zeppelin AccessControl.sol"},"functionSelector":"248a9ca3","id":1824,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"55819:12:0","nodeType":"FunctionDefinition","parameters":{"id":1820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1819,"mutability":"mutable","name":"role","nameLocation":"55840:4:0","nodeType":"VariableDeclaration","scope":1824,"src":"55832:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55832:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"55831:14:0"},"returnParameters":{"id":1823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1824,"src":"55869:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1821,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55869:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"55868:9:0"},"scope":1907,"src":"55810:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":1831,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"55891:9:0","nodeType":"FunctionDefinition","parameters":{"id":1829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"role","nameLocation":"55909:4:0","nodeType":"VariableDeclaration","scope":1831,"src":"55901:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1825,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55901:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1828,"mutability":"mutable","name":"account","nameLocation":"55923:7:0","nodeType":"VariableDeclaration","scope":1831,"src":"55915:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1827,"name":"address","nodeType":"ElementaryTypeName","src":"55915:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"55900:31:0"},"returnParameters":{"id":1830,"nodeType":"ParameterList","parameters":[],"src":"55940:0:0"},"scope":1907,"src":"55882:59:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":1838,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"55954:10:0","nodeType":"FunctionDefinition","parameters":{"id":1836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1833,"mutability":"mutable","name":"role","nameLocation":"55973:4:0","nodeType":"VariableDeclaration","scope":1838,"src":"55965:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1832,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55965:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1835,"mutability":"mutable","name":"account","nameLocation":"55987:7:0","nodeType":"VariableDeclaration","scope":1838,"src":"55979:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1834,"name":"address","nodeType":"ElementaryTypeName","src":"55979:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"55964:31:0"},"returnParameters":{"id":1837,"nodeType":"ParameterList","parameters":[],"src":"56004:0:0"},"scope":1907,"src":"55945:60:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":1845,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"56018:12:0","nodeType":"FunctionDefinition","parameters":{"id":1843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1840,"mutability":"mutable","name":"role","nameLocation":"56039:4:0","nodeType":"VariableDeclaration","scope":1845,"src":"56031:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"56031:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1842,"mutability":"mutable","name":"account","nameLocation":"56053:7:0","nodeType":"VariableDeclaration","scope":1845,"src":"56045:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1841,"name":"address","nodeType":"ElementaryTypeName","src":"56045:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56030:31:0"},"returnParameters":{"id":1844,"nodeType":"ParameterList","parameters":[],"src":"56070:0:0"},"scope":1907,"src":"56009:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"91d14854","id":1854,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"56084:7:0","nodeType":"FunctionDefinition","parameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1847,"mutability":"mutable","name":"role","nameLocation":"56100:4:0","nodeType":"VariableDeclaration","scope":1854,"src":"56092:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1846,"name":"bytes32","nodeType":"ElementaryTypeName","src":"56092:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"account","nameLocation":"56114:7:0","nodeType":"VariableDeclaration","scope":1854,"src":"56106:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1848,"name":"address","nodeType":"ElementaryTypeName","src":"56106:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56091:31:0"},"returnParameters":{"id":1853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1854,"src":"56146:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1851,"name":"bool","nodeType":"ElementaryTypeName","src":"56146:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"56145:6:0"},"scope":1907,"src":"56075:77:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1855,"nodeType":"StructuredDocumentation","src":"56156:362:0","text":"`owner()` is provided as an helper to mimick the `Ownable` contract ABI.\n The `Ownable` logic is used by many 3rd party services to determine\n contract ownership - e.g. who is allowed to edit metadata on Opensea.\n @notice This logic is NOT used internally by the Unlock Protocol and is made\n available only as a convenience helper."},"functionSelector":"8da5cb5b","id":1860,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"56530:5:0","nodeType":"FunctionDefinition","parameters":{"id":1856,"nodeType":"ParameterList","parameters":[],"src":"56535:2:0"},"returnParameters":{"id":1859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1858,"mutability":"mutable","name":"owner","nameLocation":"56569:5:0","nodeType":"VariableDeclaration","scope":1860,"src":"56561:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1857,"name":"address","nodeType":"ElementaryTypeName","src":"56561:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56560:15:0"},"scope":1907,"src":"56521:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"13af4035","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"setOwner","nameLocation":"56589:8:0","nodeType":"FunctionDefinition","parameters":{"id":1863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1862,"mutability":"mutable","name":"account","nameLocation":"56606:7:0","nodeType":"VariableDeclaration","scope":1865,"src":"56598:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1861,"name":"address","nodeType":"ElementaryTypeName","src":"56598:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56597:17:0"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[],"src":"56623:0:0"},"scope":1907,"src":"56580:44:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2f54bf6e","id":1872,"implemented":false,"kind":"function","modifiers":[],"name":"isOwner","nameLocation":"56637:7:0","nodeType":"FunctionDefinition","parameters":{"id":1868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1867,"mutability":"mutable","name":"account","nameLocation":"56653:7:0","nodeType":"VariableDeclaration","scope":1872,"src":"56645:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1866,"name":"address","nodeType":"ElementaryTypeName","src":"56645:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56644:17:0"},"returnParameters":{"id":1871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1870,"mutability":"mutable","name":"isOwner","nameLocation":"56690:7:0","nodeType":"VariableDeclaration","scope":1872,"src":"56685:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1869,"name":"bool","nodeType":"ElementaryTypeName","src":"56685:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"56684:14:0"},"scope":1907,"src":"56628:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1873,"nodeType":"StructuredDocumentation","src":"56703:394:0","text":" Migrate data from the previous single owner => key mapping to\n the new data structure w multiple tokens.\n @param _calldata an ABI-encoded representation of the params (v10: the number of records to migrate as `uint`)\n @dev when all record schemas are sucessfully upgraded, this function will update the `schemaVersion`\n variable to the latest/current lock version"},"functionSelector":"8932a90d","id":1878,"implemented":false,"kind":"function","modifiers":[],"name":"migrate","nameLocation":"57109:7:0","nodeType":"FunctionDefinition","parameters":{"id":1876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1875,"mutability":"mutable","name":"_calldata","nameLocation":"57132:9:0","nodeType":"VariableDeclaration","scope":1878,"src":"57117:24:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1874,"name":"bytes","nodeType":"ElementaryTypeName","src":"57117:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"57116:26:0"},"returnParameters":{"id":1877,"nodeType":"ParameterList","parameters":[],"src":"57151:0:0"},"scope":1907,"src":"57100:52:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1879,"nodeType":"StructuredDocumentation","src":"57156:274:0","text":" Returns the version number of the data schema currently used by the lock\n @notice if this is different from `publicLockVersion`, then the ability to purchase, grant\n or extend keys is disabled.\n @dev will return 0 if no ;igration has ever been run"},"functionSelector":"4e2ce6d3","id":1884,"implemented":false,"kind":"function","modifiers":[],"name":"schemaVersion","nameLocation":"57442:13:0","nodeType":"FunctionDefinition","parameters":{"id":1880,"nodeType":"ParameterList","parameters":[],"src":"57455:2:0"},"returnParameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1884,"src":"57481:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1881,"name":"uint","nodeType":"ElementaryTypeName","src":"57481:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"57480:6:0"},"scope":1907,"src":"57433:54:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1885,"nodeType":"StructuredDocumentation","src":"57491:97:0","text":" Set the schema version to the latest\n @notice only lock manager call call this"},"functionSelector":"f32e8b24","id":1888,"implemented":false,"kind":"function","modifiers":[],"name":"updateSchemaVersion","nameLocation":"57600:19:0","nodeType":"FunctionDefinition","parameters":{"id":1886,"nodeType":"ParameterList","parameters":[],"src":"57619:2:0"},"returnParameters":{"id":1887,"nodeType":"ParameterList","parameters":[],"src":"57630:0:0"},"scope":1907,"src":"57591:40:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1889,"nodeType":"StructuredDocumentation","src":"57635:210:0","text":" Renew a given token\n @notice only works for non-free, expiring, ERC20 locks\n @param _tokenId the ID fo the token to renew\n @param _referrer the address of the person to be granted UDT"},"functionSelector":"8505fe95","id":1896,"implemented":false,"kind":"function","modifiers":[],"name":"renewMembershipFor","nameLocation":"57857:18:0","nodeType":"FunctionDefinition","parameters":{"id":1894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"mutability":"mutable","name":"_tokenId","nameLocation":"57881:8:0","nodeType":"VariableDeclaration","scope":1896,"src":"57876:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1890,"name":"uint","nodeType":"ElementaryTypeName","src":"57876:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1893,"mutability":"mutable","name":"_referrer","nameLocation":"57899:9:0","nodeType":"VariableDeclaration","scope":1896,"src":"57891:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1892,"name":"address","nodeType":"ElementaryTypeName","src":"57891:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"57875:34:0"},"returnParameters":{"id":1895,"nodeType":"ParameterList","parameters":[],"src":"57918:0:0"},"scope":1907,"src":"57848:71:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1897,"nodeType":"StructuredDocumentation","src":"57923:505:0","text":" @dev helper to check if a key is currently renewable\n it will revert if the pricing or duration of the lock have been modified\n unfavorably since the key was bought(price increase or duration decrease).\n It will also revert if a lock is not renewable or if the key is not ready for renewal yet\n (at least 90% expired).\n @param tokenId the id of the token to check\n @param referrer the address where to send the referrer fee\n @return true if the terms has changed"},"functionSelector":"50878a47","id":1906,"implemented":false,"kind":"function","modifiers":[],"name":"isRenewable","nameLocation":"58440:11:0","nodeType":"FunctionDefinition","parameters":{"id":1902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1899,"mutability":"mutable","name":"tokenId","nameLocation":"58465:7:0","nodeType":"VariableDeclaration","scope":1906,"src":"58457:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1898,"name":"uint256","nodeType":"ElementaryTypeName","src":"58457:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1901,"mutability":"mutable","name":"referrer","nameLocation":"58486:8:0","nodeType":"VariableDeclaration","scope":1906,"src":"58478:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1900,"name":"address","nodeType":"ElementaryTypeName","src":"58478:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58451:47:0"},"returnParameters":{"id":1905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1906,"src":"58522:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1903,"name":"bool","nodeType":"ElementaryTypeName","src":"58522:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"58521:6:0"},"scope":1907,"src":"58431:97:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3994,"src":"34897:23633:0","usedErrors":[],"usedEvents":[]},{"id":1908,"literals":["solidity",">=","0.5",".0"],"nodeType":"PragmaDirective","src":"58583:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IUniswapOracleV3","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1948,"linearizedBaseContracts":[1948],"name":"IUniswapOracleV3","nameLocation":"58619:16:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"b4d1d795","id":1913,"implemented":false,"kind":"function","modifiers":[],"name":"PERIOD","nameLocation":"58649:6:0","nodeType":"FunctionDefinition","parameters":{"id":1909,"nodeType":"ParameterList","parameters":[],"src":"58655:2:0"},"returnParameters":{"id":1912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1911,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1913,"src":"58676:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1910,"name":"uint256","nodeType":"ElementaryTypeName","src":"58676:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"58675:9:0"},"scope":1948,"src":"58640:45:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c45a0155","id":1918,"implemented":false,"kind":"function","modifiers":[],"name":"factory","nameLocation":"58698:7:0","nodeType":"FunctionDefinition","parameters":{"id":1914,"nodeType":"ParameterList","parameters":[],"src":"58705:2:0"},"returnParameters":{"id":1917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1918,"src":"58726:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"58726:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58725:9:0"},"scope":1948,"src":"58689:46:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c640752d","id":1925,"implemented":false,"kind":"function","modifiers":[],"name":"update","nameLocation":"58748:6:0","nodeType":"FunctionDefinition","parameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1920,"mutability":"mutable","name":"_tokenIn","nameLocation":"58763:8:0","nodeType":"VariableDeclaration","scope":1925,"src":"58755:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1919,"name":"address","nodeType":"ElementaryTypeName","src":"58755:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1922,"mutability":"mutable","name":"_tokenOut","nameLocation":"58781:9:0","nodeType":"VariableDeclaration","scope":1925,"src":"58773:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1921,"name":"address","nodeType":"ElementaryTypeName","src":"58773:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58754:37:0"},"returnParameters":{"id":1924,"nodeType":"ParameterList","parameters":[],"src":"58800:0:0"},"scope":1948,"src":"58739:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8c86f1e4","id":1936,"implemented":false,"kind":"function","modifiers":[],"name":"consult","nameLocation":"58814:7:0","nodeType":"FunctionDefinition","parameters":{"id":1932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"_tokenIn","nameLocation":"58835:8:0","nodeType":"VariableDeclaration","scope":1936,"src":"58827:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1926,"name":"address","nodeType":"ElementaryTypeName","src":"58827:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1929,"mutability":"mutable","name":"_amountIn","nameLocation":"58857:9:0","nodeType":"VariableDeclaration","scope":1936,"src":"58849:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1928,"name":"uint256","nodeType":"ElementaryTypeName","src":"58849:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1931,"mutability":"mutable","name":"_tokenOut","nameLocation":"58880:9:0","nodeType":"VariableDeclaration","scope":1936,"src":"58872:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1930,"name":"address","nodeType":"ElementaryTypeName","src":"58872:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58821:72:0"},"returnParameters":{"id":1935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1934,"mutability":"mutable","name":"_amountOut","nameLocation":"58925:10:0","nodeType":"VariableDeclaration","scope":1936,"src":"58917:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1933,"name":"uint256","nodeType":"ElementaryTypeName","src":"58917:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"58916:20:0"},"scope":1948,"src":"58805:132:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c1e553e7","id":1947,"implemented":false,"kind":"function","modifiers":[],"name":"updateAndConsult","nameLocation":"58950:16:0","nodeType":"FunctionDefinition","parameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1938,"mutability":"mutable","name":"_tokenIn","nameLocation":"58980:8:0","nodeType":"VariableDeclaration","scope":1947,"src":"58972:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1937,"name":"address","nodeType":"ElementaryTypeName","src":"58972:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1940,"mutability":"mutable","name":"_amountIn","nameLocation":"59002:9:0","nodeType":"VariableDeclaration","scope":1947,"src":"58994:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1939,"name":"uint256","nodeType":"ElementaryTypeName","src":"58994:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1942,"mutability":"mutable","name":"_tokenOut","nameLocation":"59025:9:0","nodeType":"VariableDeclaration","scope":1947,"src":"59017:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1941,"name":"address","nodeType":"ElementaryTypeName","src":"59017:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58966:72:0"},"returnParameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1945,"mutability":"mutable","name":"_amountOut","nameLocation":"59065:10:0","nodeType":"VariableDeclaration","scope":1947,"src":"59057:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1944,"name":"uint256","nodeType":"ElementaryTypeName","src":"59057:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"59056:20:0"},"scope":1948,"src":"58941:136:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3994,"src":"58609:470:0","usedErrors":[],"usedEvents":[]},{"id":1949,"literals":["solidity",">=","0.5",".17","<","0.9",".0"],"nodeType":"PragmaDirective","src":"59123:32:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IUnlock","contractDependencies":[],"contractKind":"interface","documentation":{"id":1950,"nodeType":"StructuredDocumentation","src":"59157:39:0","text":" @title The Unlock Interface*"},"fullyImplemented":false,"id":2258,"linearizedBaseContracts":[2258],"name":"IUnlock","nameLocation":"59208:7:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"c4d66de8","id":1955,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"59322:10:0","nodeType":"FunctionDefinition","parameters":{"id":1953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1952,"mutability":"mutable","name":"_unlockOwner","nameLocation":"59341:12:0","nodeType":"VariableDeclaration","scope":1955,"src":"59333:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1951,"name":"address","nodeType":"ElementaryTypeName","src":"59333:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"59332:22:0"},"returnParameters":{"id":1954,"nodeType":"ParameterList","parameters":[],"src":"59363:0:0"},"scope":2258,"src":"59313:51:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1956,"nodeType":"StructuredDocumentation","src":"59368:70:0","text":" @dev deploy a ProxyAdmin contract used to upgrade locks"},"functionSelector":"c7d7d0c9","id":1959,"implemented":false,"kind":"function","modifiers":[],"name":"initializeProxyAdmin","nameLocation":"59450:20:0","nodeType":"FunctionDefinition","parameters":{"id":1957,"nodeType":"ParameterList","parameters":[],"src":"59470:2:0"},"returnParameters":{"id":1958,"nodeType":"ParameterList","parameters":[],"src":"59481:0:0"},"scope":2258,"src":"59441:41:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1960,"nodeType":"StructuredDocumentation","src":"59486:157:0","text":" Retrieve the contract address of the proxy admin that manages the locks\n @return _proxyAdminAddress the address of the ProxyAdmin instance"},"functionSelector":"5979e755","id":1965,"implemented":false,"kind":"function","modifiers":[],"name":"proxyAdminAddress","nameLocation":"59655:17:0","nodeType":"FunctionDefinition","parameters":{"id":1961,"nodeType":"ParameterList","parameters":[],"src":"59672:2:0"},"returnParameters":{"id":1964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1963,"mutability":"mutable","name":"_proxyAdminAddress","nameLocation":"59718:18:0","nodeType":"VariableDeclaration","scope":1965,"src":"59710:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1962,"name":"address","nodeType":"ElementaryTypeName","src":"59710:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"59709:28:0"},"scope":2258,"src":"59646:92:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1966,"nodeType":"StructuredDocumentation","src":"59742:708:0","text":" @notice Create lock (legacy)\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param _expirationDuration the duration of the lock (pass 0 for unlimited duration)\n @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n @param _keyPrice the price of each key\n @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n @param _lockName the name of the lock\n param _salt [deprec] -- kept only for backwards copatibility\n This may be implemented as a sequence ID or with RNG. It's used with `create2`\n to know the lock's address before the transaction is mined.\n @dev internally call `createUpgradeableLock`"},"functionSelector":"42d92106","id":1983,"implemented":false,"kind":"function","modifiers":[],"name":"createLock","nameLocation":"60462:10:0","nodeType":"FunctionDefinition","parameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1968,"mutability":"mutable","name":"_expirationDuration","nameLocation":"60483:19:0","nodeType":"VariableDeclaration","scope":1983,"src":"60478:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1967,"name":"uint","nodeType":"ElementaryTypeName","src":"60478:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1970,"mutability":"mutable","name":"_tokenAddress","nameLocation":"60516:13:0","nodeType":"VariableDeclaration","scope":1983,"src":"60508:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1969,"name":"address","nodeType":"ElementaryTypeName","src":"60508:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1972,"mutability":"mutable","name":"_keyPrice","nameLocation":"60540:9:0","nodeType":"VariableDeclaration","scope":1983,"src":"60535:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1971,"name":"uint","nodeType":"ElementaryTypeName","src":"60535:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1974,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"60560:16:0","nodeType":"VariableDeclaration","scope":1983,"src":"60555:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1973,"name":"uint","nodeType":"ElementaryTypeName","src":"60555:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1976,"mutability":"mutable","name":"_lockName","nameLocation":"60598:9:0","nodeType":"VariableDeclaration","scope":1983,"src":"60582:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1975,"name":"string","nodeType":"ElementaryTypeName","src":"60582:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1983,"src":"60613:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"},"typeName":{"id":1977,"name":"bytes12","nodeType":"ElementaryTypeName","src":"60613:7:0","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"}},"visibility":"internal"}],"src":"60472:161:0"},"returnParameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1983,"src":"60652:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1980,"name":"address","nodeType":"ElementaryTypeName","src":"60652:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"60651:9:0"},"scope":2258,"src":"60453:208:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1984,"nodeType":"StructuredDocumentation","src":"60665:572:0","text":" @notice Create lock (default)\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param data bytes containing the call to initialize the lock template\n @dev this call is passed as encoded function - for instance:\n bytes memory data = abi.encodeWithSignature(\n 'initialize(address,uint256,address,uint256,uint256,string)',\n msg.sender,\n _expirationDuration,\n _tokenAddress,\n _keyPrice,\n _maxNumberOfKeys,\n _lockName\n );\n @return address of the create lock"},"functionSelector":"4452c2b2","id":1991,"implemented":false,"kind":"function","modifiers":[],"name":"createUpgradeableLock","nameLocation":"61249:21:0","nodeType":"FunctionDefinition","parameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1986,"mutability":"mutable","name":"data","nameLocation":"61284:4:0","nodeType":"VariableDeclaration","scope":1991,"src":"61271:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1985,"name":"bytes","nodeType":"ElementaryTypeName","src":"61271:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"61270:19:0"},"returnParameters":{"id":1990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1991,"src":"61308:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1988,"name":"address","nodeType":"ElementaryTypeName","src":"61308:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"61307:9:0"},"scope":2258,"src":"61240:77:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1992,"nodeType":"StructuredDocumentation","src":"61321:263:0","text":" Create an upgradeable lock using a specific PublicLock version\n @param data bytes containing the call to initialize the lock template\n (refer to createUpgradeableLock for more details)\n @param _lockVersion the version of the lock to use"},"functionSelector":"487a8a76","id":2001,"implemented":false,"kind":"function","modifiers":[],"name":"createUpgradeableLockAtVersion","nameLocation":"61596:30:0","nodeType":"FunctionDefinition","parameters":{"id":1997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1994,"mutability":"mutable","name":"data","nameLocation":"61645:4:0","nodeType":"VariableDeclaration","scope":2001,"src":"61632:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1993,"name":"bytes","nodeType":"ElementaryTypeName","src":"61632:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1996,"mutability":"mutable","name":"_lockVersion","nameLocation":"61662:12:0","nodeType":"VariableDeclaration","scope":2001,"src":"61655:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1995,"name":"uint16","nodeType":"ElementaryTypeName","src":"61655:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"61626:52:0"},"returnParameters":{"id":2000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2001,"src":"61697:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1998,"name":"address","nodeType":"ElementaryTypeName","src":"61697:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"61696:9:0"},"scope":2258,"src":"61587:119:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2002,"nodeType":"StructuredDocumentation","src":"61710:309:0","text":" @notice Upgrade a lock to a specific version\n @dev only available for publicLockVersion > 10 (proxyAdmin /required)\n @param lockAddress the existing lock address\n @param version the version number you are targeting\n Likely implemented with OpenZeppelin TransparentProxy contract"},"functionSelector":"ccf54648","id":2011,"implemented":false,"kind":"function","modifiers":[],"name":"upgradeLock","nameLocation":"62031:11:0","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2004,"mutability":"mutable","name":"lockAddress","nameLocation":"62064:11:0","nodeType":"VariableDeclaration","scope":2011,"src":"62048:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2003,"name":"address","nodeType":"ElementaryTypeName","src":"62048:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2006,"mutability":"mutable","name":"version","nameLocation":"62088:7:0","nodeType":"VariableDeclaration","scope":2011,"src":"62081:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2005,"name":"uint16","nodeType":"ElementaryTypeName","src":"62081:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"62042:57:0"},"returnParameters":{"id":2010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2011,"src":"62118:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2008,"name":"address","nodeType":"ElementaryTypeName","src":"62118:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"62117:9:0"},"scope":2258,"src":"62022:105:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2012,"nodeType":"StructuredDocumentation","src":"62131:356:0","text":" This function keeps track of the added GDP, as well as grants of discount tokens\n to the referrer, if applicable.\n The number of discount tokens granted is based on the value of the referal,\n the current growth rate and the lock's discount token distribution rate\n This function is invoked by a previously deployed lock only."},"functionSelector":"939d9f1f","id":2019,"implemented":false,"kind":"function","modifiers":[],"name":"recordKeyPurchase","nameLocation":"62499:17:0","nodeType":"FunctionDefinition","parameters":{"id":2017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2014,"mutability":"mutable","name":"_value","nameLocation":"62527:6:0","nodeType":"VariableDeclaration","scope":2019,"src":"62522:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2013,"name":"uint","nodeType":"ElementaryTypeName","src":"62522:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2016,"mutability":"mutable","name":"_referrer","nameLocation":"62547:9:0","nodeType":"VariableDeclaration","scope":2019,"src":"62539:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2015,"name":"address","nodeType":"ElementaryTypeName","src":"62539:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"62516:83:0"},"returnParameters":{"id":2018,"nodeType":"ParameterList","parameters":[],"src":"62608:0:0"},"scope":2258,"src":"62490:119:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2020,"nodeType":"StructuredDocumentation","src":"62613:436:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] Kept for backwards compatibility\n This function will keep track of consumed discounts by a given user.\n It will also grant discount tokens to the creator who is granting the discount based on the\n amount of discount and compensation rate.\n This function is invoked by a previously deployed lock only."},"functionSelector":"36524663","id":2027,"implemented":false,"kind":"function","modifiers":[],"name":"recordConsumedDiscount","nameLocation":"63061:22:0","nodeType":"FunctionDefinition","parameters":{"id":2025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2022,"mutability":"mutable","name":"_discount","nameLocation":"63094:9:0","nodeType":"VariableDeclaration","scope":2027,"src":"63089:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2021,"name":"uint","nodeType":"ElementaryTypeName","src":"63089:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2024,"mutability":"mutable","name":"_tokens","nameLocation":"63114:7:0","nodeType":"VariableDeclaration","scope":2027,"src":"63109:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2023,"name":"uint","nodeType":"ElementaryTypeName","src":"63109:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63083:81:0"},"returnParameters":{"id":2026,"nodeType":"ParameterList","parameters":[],"src":"63178:0:0"},"scope":2258,"src":"63052:127:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2028,"nodeType":"StructuredDocumentation","src":"63183:385:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] Kept for backwards compatibility\n This function returns the discount available for a user, when purchasing a\n a key from a lock.\n This does not modify the state. It returns both the discount and the number of tokens\n consumed to grant that discount."},"functionSelector":"0cb175e3","id":2039,"implemented":false,"kind":"function","modifiers":[],"name":"computeAvailableDiscountFor","nameLocation":"63580:27:0","nodeType":"FunctionDefinition","parameters":{"id":2033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2030,"mutability":"mutable","name":"_purchaser","nameLocation":"63621:10:0","nodeType":"VariableDeclaration","scope":2039,"src":"63613:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2029,"name":"address","nodeType":"ElementaryTypeName","src":"63613:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2032,"mutability":"mutable","name":"_keyPrice","nameLocation":"63681:9:0","nodeType":"VariableDeclaration","scope":2039,"src":"63676:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2031,"name":"uint","nodeType":"ElementaryTypeName","src":"63676:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63607:126:0"},"returnParameters":{"id":2038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2035,"mutability":"mutable","name":"discount","nameLocation":"63762:8:0","nodeType":"VariableDeclaration","scope":2039,"src":"63757:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2034,"name":"uint","nodeType":"ElementaryTypeName","src":"63757:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2037,"mutability":"mutable","name":"tokens","nameLocation":"63777:6:0","nodeType":"VariableDeclaration","scope":2039,"src":"63772:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2036,"name":"uint","nodeType":"ElementaryTypeName","src":"63772:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63756:28:0"},"scope":2258,"src":"63571:214:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"a998e9fb","id":2044,"implemented":false,"kind":"function","modifiers":[],"name":"globalBaseTokenURI","nameLocation":"63846:18:0","nodeType":"FunctionDefinition","parameters":{"id":2040,"nodeType":"ParameterList","parameters":[],"src":"63864:2:0"},"returnParameters":{"id":2043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2044,"src":"63890:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2041,"name":"string","nodeType":"ElementaryTypeName","src":"63890:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"63889:15:0"},"scope":2258,"src":"63837:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2045,"nodeType":"StructuredDocumentation","src":"63909:103:0","text":" @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks."},"functionSelector":"7ff94bb2","id":2050,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalBaseTokenURI","nameLocation":"64024:21:0","nodeType":"FunctionDefinition","parameters":{"id":2046,"nodeType":"ParameterList","parameters":[],"src":"64045:2:0"},"returnParameters":{"id":2049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2050,"src":"64071:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2047,"name":"string","nodeType":"ElementaryTypeName","src":"64071:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"64070:15:0"},"scope":2258,"src":"64015:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"cec41052","id":2055,"implemented":false,"kind":"function","modifiers":[],"name":"globalTokenSymbol","nameLocation":"64150:17:0","nodeType":"FunctionDefinition","parameters":{"id":2051,"nodeType":"ParameterList","parameters":[],"src":"64167:2:0"},"returnParameters":{"id":2054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2055,"src":"64193:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2052,"name":"string","nodeType":"ElementaryTypeName","src":"64193:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"64192:15:0"},"scope":2258,"src":"64141:67:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9a8a0592","id":2060,"implemented":false,"kind":"function","modifiers":[],"name":"chainId","nameLocation":"64262:7:0","nodeType":"FunctionDefinition","parameters":{"id":2056,"nodeType":"ParameterList","parameters":[],"src":"64269:2:0"},"returnParameters":{"id":2059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2060,"src":"64295:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2057,"name":"uint","nodeType":"ElementaryTypeName","src":"64295:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"64294:6:0"},"scope":2258,"src":"64253:48:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2061,"nodeType":"StructuredDocumentation","src":"64305:102:0","text":" @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks."},"functionSelector":"35a750de","id":2066,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalTokenSymbol","nameLocation":"64419:20:0","nodeType":"FunctionDefinition","parameters":{"id":2062,"nodeType":"ParameterList","parameters":[],"src":"64439:2:0"},"returnParameters":{"id":2065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2066,"src":"64465:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2063,"name":"string","nodeType":"ElementaryTypeName","src":"64465:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"64464:15:0"},"scope":2258,"src":"64410:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2067,"nodeType":"StructuredDocumentation","src":"64484:73:0","text":" @notice Allows the owner to update configuration variables"},"functionSelector":"7d8fb641","id":2082,"implemented":false,"kind":"function","modifiers":[],"name":"configUnlock","nameLocation":"64569:12:0","nodeType":"FunctionDefinition","parameters":{"id":2080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2069,"mutability":"mutable","name":"_udt","nameLocation":"64595:4:0","nodeType":"VariableDeclaration","scope":2082,"src":"64587:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2068,"name":"address","nodeType":"ElementaryTypeName","src":"64587:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2071,"mutability":"mutable","name":"_weth","nameLocation":"64613:5:0","nodeType":"VariableDeclaration","scope":2082,"src":"64605:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2070,"name":"address","nodeType":"ElementaryTypeName","src":"64605:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2073,"mutability":"mutable","name":"_estimatedGasForPurchase","nameLocation":"64629:24:0","nodeType":"VariableDeclaration","scope":2082,"src":"64624:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2072,"name":"uint","nodeType":"ElementaryTypeName","src":"64624:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2075,"mutability":"mutable","name":"_symbol","nameLocation":"64675:7:0","nodeType":"VariableDeclaration","scope":2082,"src":"64659:23:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2074,"name":"string","nodeType":"ElementaryTypeName","src":"64659:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"_URI","nameLocation":"64704:4:0","nodeType":"VariableDeclaration","scope":2082,"src":"64688:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2076,"name":"string","nodeType":"ElementaryTypeName","src":"64688:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2079,"mutability":"mutable","name":"_chainId","nameLocation":"64719:8:0","nodeType":"VariableDeclaration","scope":2082,"src":"64714:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2078,"name":"uint","nodeType":"ElementaryTypeName","src":"64714:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"64581:150:0"},"returnParameters":{"id":2081,"nodeType":"ParameterList","parameters":[],"src":"64740:0:0"},"scope":2258,"src":"64560:181:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2083,"nodeType":"StructuredDocumentation","src":"64745:156:0","text":" @notice Add a PublicLock template to be used for future calls to `createLock`.\n @dev This is used to upgrade conytract per version number"},"functionSelector":"caeee3a3","id":2090,"implemented":false,"kind":"function","modifiers":[],"name":"addLockTemplate","nameLocation":"64913:15:0","nodeType":"FunctionDefinition","parameters":{"id":2088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2085,"mutability":"mutable","name":"impl","nameLocation":"64937:4:0","nodeType":"VariableDeclaration","scope":2090,"src":"64929:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2084,"name":"address","nodeType":"ElementaryTypeName","src":"64929:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2087,"mutability":"mutable","name":"version","nameLocation":"64950:7:0","nodeType":"VariableDeclaration","scope":2090,"src":"64943:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2086,"name":"uint16","nodeType":"ElementaryTypeName","src":"64943:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"64928:30:0"},"returnParameters":{"id":2089,"nodeType":"ParameterList","parameters":[],"src":"64967:0:0"},"scope":2258,"src":"64904:64:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2091,"nodeType":"StructuredDocumentation","src":"64972:185:0","text":" Match lock templates addresses with version numbers\n @param _version the number of the version of the template\n @return _implAddress address of the lock templates"},"functionSelector":"666018a5","id":2098,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockImpls","nameLocation":"65169:15:0","nodeType":"FunctionDefinition","parameters":{"id":2094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2093,"mutability":"mutable","name":"_version","nameLocation":"65197:8:0","nodeType":"VariableDeclaration","scope":2098,"src":"65190:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2092,"name":"uint16","nodeType":"ElementaryTypeName","src":"65190:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"65184:25:0"},"returnParameters":{"id":2097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"mutability":"mutable","name":"_implAddress","nameLocation":"65241:12:0","nodeType":"VariableDeclaration","scope":2098,"src":"65233:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2095,"name":"address","nodeType":"ElementaryTypeName","src":"65233:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"65232:22:0"},"scope":2258,"src":"65160:95:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2099,"nodeType":"StructuredDocumentation","src":"65259:208:0","text":" Match version numbers with lock templates addresses\n @param _impl the address of the deployed template contract (PublicLock)\n @return number of the version corresponding to this address"},"functionSelector":"25772ad9","id":2106,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockVersions","nameLocation":"65479:18:0","nodeType":"FunctionDefinition","parameters":{"id":2102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"_impl","nameLocation":"65506:5:0","nodeType":"VariableDeclaration","scope":2106,"src":"65498:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2100,"name":"address","nodeType":"ElementaryTypeName","src":"65498:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"65497:15:0"},"returnParameters":{"id":2105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2106,"src":"65536:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2103,"name":"uint16","nodeType":"ElementaryTypeName","src":"65536:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"65535:8:0"},"scope":2258,"src":"65470:74:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2107,"nodeType":"StructuredDocumentation","src":"65548:155:0","text":" Retrive the latest existing lock template version\n @return _version the version number of the latest template (used to deploy contracts)"},"functionSelector":"cd93b532","id":2112,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockLatestVersion","nameLocation":"65715:23:0","nodeType":"FunctionDefinition","parameters":{"id":2108,"nodeType":"ParameterList","parameters":[],"src":"65738:2:0"},"returnParameters":{"id":2111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2110,"mutability":"mutable","name":"_version","nameLocation":"65771:8:0","nodeType":"VariableDeclaration","scope":2112,"src":"65764:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2109,"name":"uint16","nodeType":"ElementaryTypeName","src":"65764:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"65763:17:0"},"scope":2258,"src":"65706:75:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2113,"nodeType":"StructuredDocumentation","src":"65785:158:0","text":" @notice Upgrade the PublicLock template used for future calls to `createLock`.\n @dev This will initialize the template and revokeOwnership."},"functionSelector":"ef67fde6","id":2118,"implemented":false,"kind":"function","modifiers":[],"name":"setLockTemplate","nameLocation":"65955:15:0","nodeType":"FunctionDefinition","parameters":{"id":2116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2115,"mutability":"mutable","name":"_publicLockAddress","nameLocation":"65987:18:0","nodeType":"VariableDeclaration","scope":2118,"src":"65971:34:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2114,"name":"address","nodeType":"ElementaryTypeName","src":"65971:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"65970:36:0"},"returnParameters":{"id":2117,"nodeType":"ParameterList","parameters":[],"src":"66015:0:0"},"scope":2258,"src":"65946:70:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"963a9478","id":2125,"implemented":false,"kind":"function","modifiers":[],"name":"resetTrackedValue","nameLocation":"66101:17:0","nodeType":"FunctionDefinition","parameters":{"id":2123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2120,"mutability":"mutable","name":"_grossNetworkProduct","nameLocation":"66129:20:0","nodeType":"VariableDeclaration","scope":2125,"src":"66124:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2119,"name":"uint","nodeType":"ElementaryTypeName","src":"66124:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2122,"mutability":"mutable","name":"_totalDiscountGranted","nameLocation":"66160:21:0","nodeType":"VariableDeclaration","scope":2125,"src":"66155:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2121,"name":"uint","nodeType":"ElementaryTypeName","src":"66155:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66118:67:0"},"returnParameters":{"id":2124,"nodeType":"ParameterList","parameters":[],"src":"66194:0:0"},"scope":2258,"src":"66092:103:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d6e9e803","id":2130,"implemented":false,"kind":"function","modifiers":[],"name":"grossNetworkProduct","nameLocation":"66208:19:0","nodeType":"FunctionDefinition","parameters":{"id":2126,"nodeType":"ParameterList","parameters":[],"src":"66227:2:0"},"returnParameters":{"id":2129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2130,"src":"66253:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2127,"name":"uint","nodeType":"ElementaryTypeName","src":"66253:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66252:6:0"},"scope":2258,"src":"66199:60:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a082eb0e","id":2135,"implemented":false,"kind":"function","modifiers":[],"name":"totalDiscountGranted","nameLocation":"66272:20:0","nodeType":"FunctionDefinition","parameters":{"id":2131,"nodeType":"ParameterList","parameters":[],"src":"66292:2:0"},"returnParameters":{"id":2134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2135,"src":"66318:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2132,"name":"uint","nodeType":"ElementaryTypeName","src":"66318:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66317:6:0"},"scope":2258,"src":"66263:61:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"5de9a137","id":2146,"implemented":false,"kind":"function","modifiers":[],"name":"locks","nameLocation":"66337:5:0","nodeType":"FunctionDefinition","parameters":{"id":2138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2146,"src":"66348:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2136,"name":"address","nodeType":"ElementaryTypeName","src":"66348:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66342:17:0"},"returnParameters":{"id":2145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2140,"mutability":"mutable","name":"deployed","nameLocation":"66400:8:0","nodeType":"VariableDeclaration","scope":2146,"src":"66395:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2139,"name":"bool","nodeType":"ElementaryTypeName","src":"66395:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2142,"mutability":"mutable","name":"totalSales","nameLocation":"66415:10:0","nodeType":"VariableDeclaration","scope":2146,"src":"66410:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2141,"name":"uint","nodeType":"ElementaryTypeName","src":"66410:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2144,"mutability":"mutable","name":"yieldedDiscountTokens","nameLocation":"66432:21:0","nodeType":"VariableDeclaration","scope":2146,"src":"66427:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2143,"name":"uint","nodeType":"ElementaryTypeName","src":"66427:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66394:60:0"},"scope":2258,"src":"66328:127:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f8328991","id":2151,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockAddress","nameLocation":"66547:17:0","nodeType":"FunctionDefinition","parameters":{"id":2147,"nodeType":"ParameterList","parameters":[],"src":"66564:2:0"},"returnParameters":{"id":2150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2151,"src":"66590:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2148,"name":"address","nodeType":"ElementaryTypeName","src":"66590:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66589:9:0"},"scope":2258,"src":"66538:61:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6bced5a2","id":2158,"implemented":false,"kind":"function","modifiers":[],"name":"uniswapOracles","nameLocation":"66721:14:0","nodeType":"FunctionDefinition","parameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2153,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2158,"src":"66736:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2152,"name":"address","nodeType":"ElementaryTypeName","src":"66736:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66735:9:0"},"returnParameters":{"id":2157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2158,"src":"66768:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2155,"name":"address","nodeType":"ElementaryTypeName","src":"66768:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66767:9:0"},"scope":2258,"src":"66712:65:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3fc8cef3","id":2163,"implemented":false,"kind":"function","modifiers":[],"name":"weth","nameLocation":"66847:4:0","nodeType":"FunctionDefinition","parameters":{"id":2159,"nodeType":"ParameterList","parameters":[],"src":"66851:2:0"},"returnParameters":{"id":2162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2163,"src":"66877:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2160,"name":"address","nodeType":"ElementaryTypeName","src":"66877:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66876:9:0"},"scope":2258,"src":"66838:48:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"262d0a85","id":2168,"implemented":false,"kind":"function","modifiers":[],"name":"udt","nameLocation":"66959:3:0","nodeType":"FunctionDefinition","parameters":{"id":2164,"nodeType":"ParameterList","parameters":[],"src":"66962:2:0"},"returnParameters":{"id":2167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2168,"src":"66988:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2165,"name":"address","nodeType":"ElementaryTypeName","src":"66988:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66987:9:0"},"scope":2258,"src":"66950:47:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"743bbc2f","id":2173,"implemented":false,"kind":"function","modifiers":[],"name":"estimatedGasForPurchase","nameLocation":"67067:23:0","nodeType":"FunctionDefinition","parameters":{"id":2169,"nodeType":"ParameterList","parameters":[],"src":"67090:2:0"},"returnParameters":{"id":2172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2173,"src":"67116:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2170,"name":"uint","nodeType":"ElementaryTypeName","src":"67116:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67115:6:0"},"scope":2258,"src":"67058:64:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2174,"nodeType":"StructuredDocumentation","src":"67126:208:0","text":" Helper to get the network mining basefee as introduced in EIP-1559\n @dev this helper can be wrapped in try/catch statement to avoid\n revert in networks where EIP-1559 is not implemented"},"functionSelector":"ba5ea0d5","id":2179,"implemented":false,"kind":"function","modifiers":[],"name":"networkBaseFee","nameLocation":"67346:14:0","nodeType":"FunctionDefinition","parameters":{"id":2175,"nodeType":"ParameterList","parameters":[],"src":"67360:2:0"},"returnParameters":{"id":2178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2177,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2179,"src":"67386:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2176,"name":"uint","nodeType":"ElementaryTypeName","src":"67386:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67385:6:0"},"scope":2258,"src":"67337:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4220bd46","id":2184,"implemented":false,"kind":"function","modifiers":[],"name":"unlockVersion","nameLocation":"67482:13:0","nodeType":"FunctionDefinition","parameters":{"id":2180,"nodeType":"ParameterList","parameters":[],"src":"67495:2:0"},"returnParameters":{"id":2183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2182,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2184,"src":"67521:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2181,"name":"uint16","nodeType":"ElementaryTypeName","src":"67521:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"67520:8:0"},"scope":2258,"src":"67473:56:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2185,"nodeType":"StructuredDocumentation","src":"67533:259:0","text":" @notice allows the owner to set the oracle address to use for value conversions\n setting the _oracleAddress to address(0) removes support for the token\n @dev This will also call update to ensure at least one datapoint has been recorded."},"functionSelector":"5c38eb3a","id":2192,"implemented":false,"kind":"function","modifiers":[],"name":"setOracle","nameLocation":"67804:9:0","nodeType":"FunctionDefinition","parameters":{"id":2190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2187,"mutability":"mutable","name":"_tokenAddress","nameLocation":"67822:13:0","nodeType":"VariableDeclaration","scope":2192,"src":"67814:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2186,"name":"address","nodeType":"ElementaryTypeName","src":"67814:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"_oracleAddress","nameLocation":"67845:14:0","nodeType":"VariableDeclaration","scope":2192,"src":"67837:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2188,"name":"address","nodeType":"ElementaryTypeName","src":"67837:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"67813:47:0"},"returnParameters":{"id":2191,"nodeType":"ParameterList","parameters":[],"src":"67869:0:0"},"scope":2258,"src":"67795:75:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b0ca0c83","id":2197,"implemented":false,"kind":"function","modifiers":[],"name":"__initializeOwnable","nameLocation":"67973:19:0","nodeType":"FunctionDefinition","parameters":{"id":2195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2194,"mutability":"mutable","name":"sender","nameLocation":"68001:6:0","nodeType":"VariableDeclaration","scope":2197,"src":"67993:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2193,"name":"address","nodeType":"ElementaryTypeName","src":"67993:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"67992:16:0"},"returnParameters":{"id":2196,"nodeType":"ParameterList","parameters":[],"src":"68017:0:0"},"scope":2258,"src":"67964:54:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2198,"nodeType":"StructuredDocumentation","src":"68022:68:0","text":" @dev Returns true if the caller is the current owner."},"functionSelector":"8f32d59b","id":2203,"implemented":false,"kind":"function","modifiers":[],"name":"isOwner","nameLocation":"68102:7:0","nodeType":"FunctionDefinition","parameters":{"id":2199,"nodeType":"ParameterList","parameters":[],"src":"68109:2:0"},"returnParameters":{"id":2202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2203,"src":"68135:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2200,"name":"bool","nodeType":"ElementaryTypeName","src":"68135:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"68134:6:0"},"scope":2258,"src":"68093:48:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2204,"nodeType":"StructuredDocumentation","src":"68145:61:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":2209,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"68218:5:0","nodeType":"FunctionDefinition","parameters":{"id":2205,"nodeType":"ParameterList","parameters":[],"src":"68223:2:0"},"returnParameters":{"id":2208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2209,"src":"68249:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2206,"name":"address","nodeType":"ElementaryTypeName","src":"68249:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"68248:9:0"},"scope":2258,"src":"68209:49:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2210,"nodeType":"StructuredDocumentation","src":"68262:319:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":2213,"implemented":false,"kind":"function","modifiers":[],"name":"renounceOwnership","nameLocation":"68593:17:0","nodeType":"FunctionDefinition","parameters":{"id":2211,"nodeType":"ParameterList","parameters":[],"src":"68610:2:0"},"returnParameters":{"id":2212,"nodeType":"ParameterList","parameters":[],"src":"68621:0:0"},"scope":2258,"src":"68584:38:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2214,"nodeType":"StructuredDocumentation","src":"68626:132:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":2219,"implemented":false,"kind":"function","modifiers":[],"name":"transferOwnership","nameLocation":"68770:17:0","nodeType":"FunctionDefinition","parameters":{"id":2217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2216,"mutability":"mutable","name":"newOwner","nameLocation":"68796:8:0","nodeType":"VariableDeclaration","scope":2219,"src":"68788:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2215,"name":"address","nodeType":"ElementaryTypeName","src":"68788:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"68787:18:0"},"returnParameters":{"id":2218,"nodeType":"ParameterList","parameters":[],"src":"68814:0:0"},"scope":2258,"src":"68761:54:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2220,"nodeType":"StructuredDocumentation","src":"68819:99:0","text":" Set the fee collected by the protocol\n @param _protocolFee fee (in basis points)"},"functionSelector":"787dce3d","id":2225,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFee","nameLocation":"68930:14:0","nodeType":"FunctionDefinition","parameters":{"id":2223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2222,"mutability":"mutable","name":"_protocolFee","nameLocation":"68950:12:0","nodeType":"VariableDeclaration","scope":2225,"src":"68945:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2221,"name":"uint","nodeType":"ElementaryTypeName","src":"68945:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"68944:19:0"},"returnParameters":{"id":2224,"nodeType":"ParameterList","parameters":[],"src":"68972:0:0"},"scope":2258,"src":"68921:52:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2226,"nodeType":"StructuredDocumentation","src":"68977:163:0","text":" The fee (in basis points) collected by the protocol on each purchase / \nextension / renewal of a key\n @return the protocol fee in basic point"},"functionSelector":"b0e21e8a","id":2231,"implemented":false,"kind":"function","modifiers":[],"name":"protocolFee","nameLocation":"69152:11:0","nodeType":"FunctionDefinition","parameters":{"id":2227,"nodeType":"ParameterList","parameters":[],"src":"69163:2:0"},"returnParameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2231,"src":"69189:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2228,"name":"uint","nodeType":"ElementaryTypeName","src":"69189:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"69188:6:0"},"scope":2258,"src":"69143:52:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2232,"nodeType":"StructuredDocumentation","src":"69199:343:0","text":" Returns the ProxyAdmin contract address that manage upgrades for\n the current Unlock contract.\n @dev this reads the address directly from storage, at the slot `_ADMIN_SLOT`\n defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds\n to the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1"},"functionSelector":"6e9960c3","id":2237,"implemented":false,"kind":"function","modifiers":[],"name":"getAdmin","nameLocation":"69554:8:0","nodeType":"FunctionDefinition","parameters":{"id":2233,"nodeType":"ParameterList","parameters":[],"src":"69562:2:0"},"returnParameters":{"id":2236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2237,"src":"69588:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2234,"name":"address","nodeType":"ElementaryTypeName","src":"69588:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"69587:9:0"},"scope":2258,"src":"69545:52:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2238,"nodeType":"StructuredDocumentation","src":"69601:255:0","text":" Call executed by a lock after its version upgrade triggred by `upgradeLock`\n - PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance\n of the Unlock contract\n @dev The `msg.sender` will be the upgraded lock"},"functionSelector":"ed9674bd","id":2241,"implemented":false,"kind":"function","modifiers":[],"name":"postLockUpgrade","nameLocation":"69868:15:0","nodeType":"FunctionDefinition","parameters":{"id":2239,"nodeType":"ParameterList","parameters":[],"src":"69883:2:0"},"returnParameters":{"id":2240,"nodeType":"ParameterList","parameters":[],"src":"69894:0:0"},"scope":2258,"src":"69859:36:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2242,"nodeType":"StructuredDocumentation","src":"69899:360:0","text":" Functions which transfers tokens held by the contract\n It handles both ERC20 and the base currency.\n @dev This function is onlyOwner\n @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n @param to the address to transfer the tokens to\n @param amount the amount of tokens to transfer"},"functionSelector":"a64b6e5f","id":2251,"implemented":false,"kind":"function","modifiers":[],"name":"transferTokens","nameLocation":"70271:14:0","nodeType":"FunctionDefinition","parameters":{"id":2249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2244,"mutability":"mutable","name":"token","nameLocation":"70294:5:0","nodeType":"VariableDeclaration","scope":2251,"src":"70286:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2243,"name":"address","nodeType":"ElementaryTypeName","src":"70286:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"to","nameLocation":"70309:2:0","nodeType":"VariableDeclaration","scope":2251,"src":"70301:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2245,"name":"address","nodeType":"ElementaryTypeName","src":"70301:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2248,"mutability":"mutable","name":"amount","nameLocation":"70321:6:0","nodeType":"VariableDeclaration","scope":2251,"src":"70313:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2247,"name":"uint256","nodeType":"ElementaryTypeName","src":"70313:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"70285:43:0"},"returnParameters":{"id":2250,"nodeType":"ParameterList","parameters":[],"src":"70337:0:0"},"scope":2258,"src":"70262:76:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2252,"nodeType":"StructuredDocumentation","src":"70342:268:0","text":" Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n The lock will still be able to sell its memberships.\n @dev This function is onlyOwner\n @param lock address of the lock to remove"},"functionSelector":"4a387bef","id":2257,"implemented":false,"kind":"function","modifiers":[],"name":"removeLock","nameLocation":"70622:10:0","nodeType":"FunctionDefinition","parameters":{"id":2255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2254,"mutability":"mutable","name":"lock","nameLocation":"70641:4:0","nodeType":"VariableDeclaration","scope":2257,"src":"70633:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2253,"name":"address","nodeType":"ElementaryTypeName","src":"70633:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"70632:14:0"},"returnParameters":{"id":2256,"nodeType":"ParameterList","parameters":[],"src":"70655:0:0"},"scope":2258,"src":"70613:43:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3994,"src":"59198:11460:0","usedErrors":[],"usedEvents":[]},{"id":2259,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"70810:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"AddressUpgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":2260,"nodeType":"StructuredDocumentation","src":"70835:67:0","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":2541,"linearizedBaseContracts":[2541],"name":"AddressUpgradeable","nameLocation":"70911:18:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":2274,"nodeType":"Block","src":"71907:236:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2268,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2263,"src":"72115:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72123:4:0","memberName":"code","nodeType":"MemberAccess","src":"72115:12:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72128:6:0","memberName":"length","nodeType":"MemberAccess","src":"72115:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"72137:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"72115:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2267,"id":2273,"nodeType":"Return","src":"72108:30:0"}]},"documentation":{"id":2261,"nodeType":"StructuredDocumentation","src":"70934:904:0","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":2275,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"71850:10:0","nodeType":"FunctionDefinition","parameters":{"id":2264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2263,"mutability":"mutable","name":"account","nameLocation":"71869:7:0","nodeType":"VariableDeclaration","scope":2275,"src":"71861:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2262,"name":"address","nodeType":"ElementaryTypeName","src":"71861:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"71860:17:0"},"returnParameters":{"id":2267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2275,"src":"71901:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2265,"name":"bool","nodeType":"ElementaryTypeName","src":"71901:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"71900:6:0"},"scope":2541,"src":"71841:302:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2308,"nodeType":"Block","src":"73097:245:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2286,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"73119:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}],"id":2285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73111:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2284,"name":"address","nodeType":"ElementaryTypeName","src":"73111:7:0","typeDescriptions":{}}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73111:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73125:7:0","memberName":"balance","nodeType":"MemberAccess","src":"73111:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2289,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"73136:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"73111:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":2291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"73144:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":2283,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"73103:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73103:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2293,"nodeType":"ExpressionStatement","src":"73103:73:0"},{"assignments":[2295,null],"declarations":[{"constant":false,"id":2295,"mutability":"mutable","name":"success","nameLocation":"73189:7:0","nodeType":"VariableDeclaration","scope":2308,"src":"73184:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2294,"name":"bool","nodeType":"ElementaryTypeName","src":"73184:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2302,"initialValue":{"arguments":[{"hexValue":"","id":2300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"73232:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2296,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2278,"src":"73202:9:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73212:4:0","memberName":"call","nodeType":"MemberAccess","src":"73202:14:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2298,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"73224:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"73202:29:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73202:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"73183:52:0"},{"expression":{"arguments":[{"id":2304,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"73256:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":2305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"73271:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":2303,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"73241:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73241:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2307,"nodeType":"ExpressionStatement","src":"73241:96:0"}]},"documentation":{"id":2276,"nodeType":"StructuredDocumentation","src":"72147:876:0","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":2309,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"73035:9:0","nodeType":"FunctionDefinition","parameters":{"id":2281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2278,"mutability":"mutable","name":"recipient","nameLocation":"73061:9:0","nodeType":"VariableDeclaration","scope":2309,"src":"73045:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2277,"name":"address","nodeType":"ElementaryTypeName","src":"73045:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2280,"mutability":"mutable","name":"amount","nameLocation":"73080:6:0","nodeType":"VariableDeclaration","scope":2309,"src":"73072:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2279,"name":"uint256","nodeType":"ElementaryTypeName","src":"73072:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"73044:43:0"},"returnParameters":{"id":2282,"nodeType":"ParameterList","parameters":[],"src":"73097:0:0"},"scope":2541,"src":"73026:316:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2326,"nodeType":"Block","src":"74147:96:0","statements":[{"expression":{"arguments":[{"id":2320,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2312,"src":"74188:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2321,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2314,"src":"74196:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"74202:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":2323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"74205:32:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":2319,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2367,2411],"referencedDeclaration":2411,"src":"74166:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74166:72:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2318,"id":2325,"nodeType":"Return","src":"74153:85:0"}]},"documentation":{"id":2310,"nodeType":"StructuredDocumentation","src":"73346:697:0","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":2327,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"74055:12:0","nodeType":"FunctionDefinition","parameters":{"id":2315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2312,"mutability":"mutable","name":"target","nameLocation":"74081:6:0","nodeType":"VariableDeclaration","scope":2327,"src":"74073:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2311,"name":"address","nodeType":"ElementaryTypeName","src":"74073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2314,"mutability":"mutable","name":"data","nameLocation":"74106:4:0","nodeType":"VariableDeclaration","scope":2327,"src":"74093:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2313,"name":"bytes","nodeType":"ElementaryTypeName","src":"74093:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"74067:47:0"},"returnParameters":{"id":2318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2327,"src":"74133:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2316,"name":"bytes","nodeType":"ElementaryTypeName","src":"74133:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"74132:14:0"},"scope":2541,"src":"74046:197:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2346,"nodeType":"Block","src":"74584:70:0","statements":[{"expression":{"arguments":[{"id":2340,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2330,"src":"74619:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2341,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"74627:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"74633:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2343,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"74636:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2339,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2367,2411],"referencedDeclaration":2411,"src":"74597:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74597:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2338,"id":2345,"nodeType":"Return","src":"74590:59:0"}]},"documentation":{"id":2328,"nodeType":"StructuredDocumentation","src":"74247:201:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":2347,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"74460:12:0","nodeType":"FunctionDefinition","parameters":{"id":2335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2330,"mutability":"mutable","name":"target","nameLocation":"74486:6:0","nodeType":"VariableDeclaration","scope":2347,"src":"74478:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2329,"name":"address","nodeType":"ElementaryTypeName","src":"74478:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"data","nameLocation":"74511:4:0","nodeType":"VariableDeclaration","scope":2347,"src":"74498:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2331,"name":"bytes","nodeType":"ElementaryTypeName","src":"74498:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"errorMessage","nameLocation":"74535:12:0","nodeType":"VariableDeclaration","scope":2347,"src":"74521:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2333,"name":"string","nodeType":"ElementaryTypeName","src":"74521:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"74472:79:0"},"returnParameters":{"id":2338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2347,"src":"74570:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2336,"name":"bytes","nodeType":"ElementaryTypeName","src":"74570:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"74569:14:0"},"scope":2541,"src":"74451:203:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2366,"nodeType":"Block","src":"75121:151:0","statements":[{"expression":{"arguments":[{"id":2360,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2350,"src":"75171:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2361,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2352,"src":"75187:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2354,"src":"75201:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":2363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"75216:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":2359,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2367,2411],"referencedDeclaration":2411,"src":"75140:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75140:127:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2358,"id":2365,"nodeType":"Return","src":"75127:140:0"}]},"documentation":{"id":2348,"nodeType":"StructuredDocumentation","src":"74658:331:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":2367,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"75001:21:0","nodeType":"FunctionDefinition","parameters":{"id":2355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2350,"mutability":"mutable","name":"target","nameLocation":"75036:6:0","nodeType":"VariableDeclaration","scope":2367,"src":"75028:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2349,"name":"address","nodeType":"ElementaryTypeName","src":"75028:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"data","nameLocation":"75061:4:0","nodeType":"VariableDeclaration","scope":2367,"src":"75048:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2351,"name":"bytes","nodeType":"ElementaryTypeName","src":"75048:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2354,"mutability":"mutable","name":"value","nameLocation":"75079:5:0","nodeType":"VariableDeclaration","scope":2367,"src":"75071:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2353,"name":"uint256","nodeType":"ElementaryTypeName","src":"75071:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"75022:66:0"},"returnParameters":{"id":2358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2367,"src":"75107:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2356,"name":"bytes","nodeType":"ElementaryTypeName","src":"75107:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"75106:14:0"},"scope":2541,"src":"74992:280:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2410,"nodeType":"Block","src":"75667:277:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2384,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"75696:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}],"id":2383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"75688:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2382,"name":"address","nodeType":"ElementaryTypeName","src":"75688:7:0","typeDescriptions":{}}},"id":2385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75688:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"75702:7:0","memberName":"balance","nodeType":"MemberAccess","src":"75688:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2387,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"75713:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75688:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":2389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"75726:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":2381,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"75673:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75673:99:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2391,"nodeType":"ExpressionStatement","src":"75673:99:0"},{"assignments":[2393,2395],"declarations":[{"constant":false,"id":2393,"mutability":"mutable","name":"success","nameLocation":"75784:7:0","nodeType":"VariableDeclaration","scope":2410,"src":"75779:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2392,"name":"bool","nodeType":"ElementaryTypeName","src":"75779:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2395,"mutability":"mutable","name":"returndata","nameLocation":"75806:10:0","nodeType":"VariableDeclaration","scope":2410,"src":"75793:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2394,"name":"bytes","nodeType":"ElementaryTypeName","src":"75793:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2402,"initialValue":{"arguments":[{"id":2400,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2372,"src":"75846:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2396,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2370,"src":"75820:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"75827:4:0","memberName":"call","nodeType":"MemberAccess","src":"75820:11:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2398,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"75839:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"75820:25:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75820:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"75778:73:0"},{"expression":{"arguments":[{"id":2404,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2370,"src":"75897:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2405,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"75905:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2406,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"75914:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2407,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2376,"src":"75926:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2403,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2496,"src":"75870:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75870:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2380,"id":2409,"nodeType":"Return","src":"75857:82:0"}]},"documentation":{"id":2368,"nodeType":"StructuredDocumentation","src":"75276:227:0","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":2411,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"75515:21:0","nodeType":"FunctionDefinition","parameters":{"id":2377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2370,"mutability":"mutable","name":"target","nameLocation":"75550:6:0","nodeType":"VariableDeclaration","scope":2411,"src":"75542:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2369,"name":"address","nodeType":"ElementaryTypeName","src":"75542:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2372,"mutability":"mutable","name":"data","nameLocation":"75575:4:0","nodeType":"VariableDeclaration","scope":2411,"src":"75562:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2371,"name":"bytes","nodeType":"ElementaryTypeName","src":"75562:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"value","nameLocation":"75593:5:0","nodeType":"VariableDeclaration","scope":2411,"src":"75585:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2373,"name":"uint256","nodeType":"ElementaryTypeName","src":"75585:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2376,"mutability":"mutable","name":"errorMessage","nameLocation":"75618:12:0","nodeType":"VariableDeclaration","scope":2411,"src":"75604:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2375,"name":"string","nodeType":"ElementaryTypeName","src":"75604:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"75536:98:0"},"returnParameters":{"id":2380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2411,"src":"75653:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2378,"name":"bytes","nodeType":"ElementaryTypeName","src":"75653:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"75652:14:0"},"scope":2541,"src":"75506:438:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2427,"nodeType":"Block","src":"76219:97:0","statements":[{"expression":{"arguments":[{"id":2422,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2414,"src":"76257:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2423,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2416,"src":"76265:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":2424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"76271:39:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":2421,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[2428,2457],"referencedDeclaration":2457,"src":"76238:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":2425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76238:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2420,"id":2426,"nodeType":"Return","src":"76225:86:0"}]},"documentation":{"id":2412,"nodeType":"StructuredDocumentation","src":"75948:156:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":2428,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"76116:18:0","nodeType":"FunctionDefinition","parameters":{"id":2417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2414,"mutability":"mutable","name":"target","nameLocation":"76148:6:0","nodeType":"VariableDeclaration","scope":2428,"src":"76140:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2413,"name":"address","nodeType":"ElementaryTypeName","src":"76140:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2416,"mutability":"mutable","name":"data","nameLocation":"76173:4:0","nodeType":"VariableDeclaration","scope":2428,"src":"76160:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2415,"name":"bytes","nodeType":"ElementaryTypeName","src":"76160:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"76134:47:0"},"returnParameters":{"id":2420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2428,"src":"76205:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2418,"name":"bytes","nodeType":"ElementaryTypeName","src":"76205:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"76204:14:0"},"scope":2541,"src":"76107:209:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2456,"nodeType":"Block","src":"76630:164:0","statements":[{"assignments":[2441,2443],"declarations":[{"constant":false,"id":2441,"mutability":"mutable","name":"success","nameLocation":"76642:7:0","nodeType":"VariableDeclaration","scope":2456,"src":"76637:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2440,"name":"bool","nodeType":"ElementaryTypeName","src":"76637:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"returndata","nameLocation":"76664:10:0","nodeType":"VariableDeclaration","scope":2456,"src":"76651:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2442,"name":"bytes","nodeType":"ElementaryTypeName","src":"76651:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2448,"initialValue":{"arguments":[{"id":2446,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"76696:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2444,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"76678:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"76685:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"76678:17:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":2447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76678:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"76636:65:0"},{"expression":{"arguments":[{"id":2450,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"76747:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2451,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"76755:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2452,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2443,"src":"76764:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2453,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2435,"src":"76776:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2449,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2496,"src":"76720:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76720:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2439,"id":2455,"nodeType":"Return","src":"76707:82:0"}]},"documentation":{"id":2429,"nodeType":"StructuredDocumentation","src":"76320:163:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":2457,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"76495:18:0","nodeType":"FunctionDefinition","parameters":{"id":2436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2431,"mutability":"mutable","name":"target","nameLocation":"76527:6:0","nodeType":"VariableDeclaration","scope":2457,"src":"76519:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2430,"name":"address","nodeType":"ElementaryTypeName","src":"76519:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2433,"mutability":"mutable","name":"data","nameLocation":"76552:4:0","nodeType":"VariableDeclaration","scope":2457,"src":"76539:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2432,"name":"bytes","nodeType":"ElementaryTypeName","src":"76539:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2435,"mutability":"mutable","name":"errorMessage","nameLocation":"76576:12:0","nodeType":"VariableDeclaration","scope":2457,"src":"76562:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2434,"name":"string","nodeType":"ElementaryTypeName","src":"76562:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"76513:79:0"},"returnParameters":{"id":2439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2438,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2457,"src":"76616:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2437,"name":"bytes","nodeType":"ElementaryTypeName","src":"76616:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"76615:14:0"},"scope":2541,"src":"76486:308:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2495,"nodeType":"Block","src":"77244:372:0","statements":[{"condition":{"id":2471,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2462,"src":"77254:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2493,"nodeType":"Block","src":"77564:48:0","statements":[{"expression":{"arguments":[{"id":2489,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2464,"src":"77580:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2490,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2466,"src":"77592:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2488,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2540,"src":"77572:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":2491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77572:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2492,"nodeType":"ExpressionStatement","src":"77572:33:0"}]},"id":2494,"nodeType":"IfStatement","src":"77250:362:0","trueBody":{"id":2487,"nodeType":"Block","src":"77263:295:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2472,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2464,"src":"77275:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"77286:6:0","memberName":"length","nodeType":"MemberAccess","src":"77275:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"77296:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"77275:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2484,"nodeType":"IfStatement","src":"77271:256:0","trueBody":{"id":2483,"nodeType":"Block","src":"77299:228:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":2478,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2460,"src":"77477:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2477,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"77466:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77466:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":2480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"77486:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":2476,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"77458:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77458:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2482,"nodeType":"ExpressionStatement","src":"77458:60:0"}]}},{"expression":{"id":2485,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2464,"src":"77541:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2470,"id":2486,"nodeType":"Return","src":"77534:17:0"}]}}]},"documentation":{"id":2458,"nodeType":"StructuredDocumentation","src":"76798:267:0","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":2496,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"77077:26:0","nodeType":"FunctionDefinition","parameters":{"id":2467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2460,"mutability":"mutable","name":"target","nameLocation":"77117:6:0","nodeType":"VariableDeclaration","scope":2496,"src":"77109:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2459,"name":"address","nodeType":"ElementaryTypeName","src":"77109:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2462,"mutability":"mutable","name":"success","nameLocation":"77134:7:0","nodeType":"VariableDeclaration","scope":2496,"src":"77129:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2461,"name":"bool","nodeType":"ElementaryTypeName","src":"77129:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2464,"mutability":"mutable","name":"returndata","nameLocation":"77160:10:0","nodeType":"VariableDeclaration","scope":2496,"src":"77147:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2463,"name":"bytes","nodeType":"ElementaryTypeName","src":"77147:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2466,"mutability":"mutable","name":"errorMessage","nameLocation":"77190:12:0","nodeType":"VariableDeclaration","scope":2496,"src":"77176:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2465,"name":"string","nodeType":"ElementaryTypeName","src":"77176:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"77103:103:0"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2496,"src":"77230:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2468,"name":"bytes","nodeType":"ElementaryTypeName","src":"77230:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"77229:14:0"},"scope":2541,"src":"77068:548:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2519,"nodeType":"Block","src":"77969:109:0","statements":[{"condition":{"id":2508,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"77979:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2517,"nodeType":"Block","src":"78026:48:0","statements":[{"expression":{"arguments":[{"id":2513,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"78042:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2514,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"78054:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2512,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2540,"src":"78034:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":2515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78034:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2516,"nodeType":"ExpressionStatement","src":"78034:33:0"}]},"id":2518,"nodeType":"IfStatement","src":"77975:99:0","trueBody":{"id":2511,"nodeType":"Block","src":"77988:32:0","statements":[{"expression":{"id":2509,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"78003:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2507,"id":2510,"nodeType":"Return","src":"77996:17:0"}]}}]},"documentation":{"id":2497,"nodeType":"StructuredDocumentation","src":"77620:200:0","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":2520,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"77832:16:0","nodeType":"FunctionDefinition","parameters":{"id":2504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2499,"mutability":"mutable","name":"success","nameLocation":"77859:7:0","nodeType":"VariableDeclaration","scope":2520,"src":"77854:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2498,"name":"bool","nodeType":"ElementaryTypeName","src":"77854:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2501,"mutability":"mutable","name":"returndata","nameLocation":"77885:10:0","nodeType":"VariableDeclaration","scope":2520,"src":"77872:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2500,"name":"bytes","nodeType":"ElementaryTypeName","src":"77872:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2503,"mutability":"mutable","name":"errorMessage","nameLocation":"77915:12:0","nodeType":"VariableDeclaration","scope":2520,"src":"77901:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2502,"name":"string","nodeType":"ElementaryTypeName","src":"77901:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"77848:83:0"},"returnParameters":{"id":2507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2520,"src":"77955:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2505,"name":"bytes","nodeType":"ElementaryTypeName","src":"77955:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"77954:14:0"},"scope":2541,"src":"77823:255:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2539,"nodeType":"Block","src":"78177:393:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2527,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2522,"src":"78245:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"78256:6:0","memberName":"length","nodeType":"MemberAccess","src":"78245:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"78265:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"78245:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2537,"nodeType":"Block","src":"78531:35:0","statements":[{"expression":{"arguments":[{"id":2534,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2524,"src":"78546:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2533,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"78539:6:0","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":2535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78539:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2536,"nodeType":"ExpressionStatement","src":"78539:20:0"}]},"id":2538,"nodeType":"IfStatement","src":"78241:325:0","trueBody":{"id":2532,"nodeType":"Block","src":"78268:257:0","statements":[{"AST":{"nativeSrc":"78408:111:0","nodeType":"YulBlock","src":"78408:111:0","statements":[{"nativeSrc":"78418:40:0","nodeType":"YulVariableDeclaration","src":"78418:40:0","value":{"arguments":[{"name":"returndata","nativeSrc":"78447:10:0","nodeType":"YulIdentifier","src":"78447:10:0"}],"functionName":{"name":"mload","nativeSrc":"78441:5:0","nodeType":"YulIdentifier","src":"78441:5:0"},"nativeSrc":"78441:17:0","nodeType":"YulFunctionCall","src":"78441:17:0"},"variables":[{"name":"returndata_size","nativeSrc":"78422:15:0","nodeType":"YulTypedName","src":"78422:15:0","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"78478:2:0","nodeType":"YulLiteral","src":"78478:2:0","type":"","value":"32"},{"name":"returndata","nativeSrc":"78482:10:0","nodeType":"YulIdentifier","src":"78482:10:0"}],"functionName":{"name":"add","nativeSrc":"78474:3:0","nodeType":"YulIdentifier","src":"78474:3:0"},"nativeSrc":"78474:19:0","nodeType":"YulFunctionCall","src":"78474:19:0"},{"name":"returndata_size","nativeSrc":"78495:15:0","nodeType":"YulIdentifier","src":"78495:15:0"}],"functionName":{"name":"revert","nativeSrc":"78467:6:0","nodeType":"YulIdentifier","src":"78467:6:0"},"nativeSrc":"78467:44:0","nodeType":"YulFunctionCall","src":"78467:44:0"},"nativeSrc":"78467:44:0","nodeType":"YulExpressionStatement","src":"78467:44:0"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":2522,"isOffset":false,"isSlot":false,"src":"78447:10:0","valueSize":1},{"declaration":2522,"isOffset":false,"isSlot":false,"src":"78482:10:0","valueSize":1}],"id":2531,"nodeType":"InlineAssembly","src":"78399:120:0"}]}}]},"id":2540,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"78091:7:0","nodeType":"FunctionDefinition","parameters":{"id":2525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2522,"mutability":"mutable","name":"returndata","nameLocation":"78117:10:0","nodeType":"VariableDeclaration","scope":2540,"src":"78104:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2521,"name":"bytes","nodeType":"ElementaryTypeName","src":"78104:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2524,"mutability":"mutable","name":"errorMessage","nameLocation":"78147:12:0","nodeType":"VariableDeclaration","scope":2540,"src":"78133:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2523,"name":"string","nodeType":"ElementaryTypeName","src":"78133:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"78098:65:0"},"returnParameters":{"id":2526,"nodeType":"ParameterList","parameters":[],"src":"78177:0:0"},"scope":2541,"src":"78082:488:0","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":3994,"src":"70903:7669:0","usedErrors":[],"usedEvents":[]},{"id":2542,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"78689:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"UnlockInitializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2543,"nodeType":"StructuredDocumentation","src":"78714:1497:0","text":" @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() initializer {}\n ```\n ===="},"fullyImplemented":true,"id":2613,"linearizedBaseContracts":[2613],"name":"UnlockInitializable","nameLocation":"80230:19:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"80254:69:0","text":" @dev Indicates that the contract has been initialized."},"id":2546,"mutability":"mutable","name":"initialized","nameLocation":"80339:11:0","nodeType":"VariableDeclaration","scope":2613,"src":"80326:24:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2545,"name":"bool","nodeType":"ElementaryTypeName","src":"80326:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"documentation":{"id":2547,"nodeType":"StructuredDocumentation","src":"80355:87:0","text":" @dev Indicates that the contract is in the process of being initialized."},"id":2549,"mutability":"mutable","name":"initializing","nameLocation":"80458:12:0","nodeType":"VariableDeclaration","scope":2613,"src":"80445:25:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2548,"name":"bool","nodeType":"ElementaryTypeName","src":"80445:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":2586,"nodeType":"Block","src":"80590:561:0","statements":[{"expression":{"arguments":[{"condition":{"id":2553,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"80869:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":2557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"80903:12:0","subExpression":{"id":2556,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"80904:11:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"80869:46:0","trueExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2554,"name":"_isConstructor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2612,"src":"80884:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"80884:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"414c52454144595f494e495449414c495a4544","id":2559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"80923:21:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3","typeString":"literal_string \"ALREADY_INITIALIZED\""},"value":"ALREADY_INITIALIZED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3","typeString":"literal_string \"ALREADY_INITIALIZED\""}],"id":2552,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"80854:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"80854:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2561,"nodeType":"ExpressionStatement","src":"80854:96:0"},{"assignments":[2563],"declarations":[{"constant":false,"id":2563,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"80962:14:0","nodeType":"VariableDeclaration","scope":2586,"src":"80957:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2562,"name":"bool","nodeType":"ElementaryTypeName","src":"80957:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2566,"initialValue":{"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"80979:13:0","subExpression":{"id":2564,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"80980:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"80957:35:0"},{"condition":{"id":2567,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2563,"src":"81002:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2577,"nodeType":"IfStatement","src":"80998:80:0","trueBody":{"id":2576,"nodeType":"Block","src":"81018:60:0","statements":[{"expression":{"id":2570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2568,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"81026:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"81041:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"81026:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2571,"nodeType":"ExpressionStatement","src":"81026:19:0"},{"expression":{"id":2574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2572,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"81053:11:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"81067:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"81053:18:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2575,"nodeType":"ExpressionStatement","src":"81053:18:0"}]}},{"id":2578,"nodeType":"PlaceholderStatement","src":"81084:1:0"},{"condition":{"id":2579,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2563,"src":"81096:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2585,"nodeType":"IfStatement","src":"81092:55:0","trueBody":{"id":2584,"nodeType":"Block","src":"81112:35:0","statements":[{"expression":{"id":2582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2580,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"81120:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":2581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"81135:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"81120:20:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2583,"nodeType":"ExpressionStatement","src":"81120:20:0"}]}}]},"documentation":{"id":2550,"nodeType":"StructuredDocumentation","src":"80475:89:0","text":" @dev Modifier to protect an initializer function from being invoked twice."},"id":2587,"name":"initializer","nameLocation":"80576:11:0","nodeType":"ModifierDefinition","parameters":{"id":2551,"nodeType":"ParameterList","parameters":[],"src":"80587:2:0"},"src":"80567:584:0","virtual":false,"visibility":"internal"},{"body":{"id":2596,"nodeType":"Block","src":"81358:59:0","statements":[{"expression":{"arguments":[{"id":2591,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"81372:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e4f545f494e495449414c495a494e47","id":2592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"81386:18:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ccf6bdc0b751d2d263b8778f2da89b11c590f3d1857d3b2825769eaa0a2647a","typeString":"literal_string \"NOT_INITIALIZING\""},"value":"NOT_INITIALIZING"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ccf6bdc0b751d2d263b8778f2da89b11c590f3d1857d3b2825769eaa0a2647a","typeString":"literal_string \"NOT_INITIALIZING\""}],"id":2590,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"81364:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81364:41:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2594,"nodeType":"ExpressionStatement","src":"81364:41:0"},{"id":2595,"nodeType":"PlaceholderStatement","src":"81411:1:0"}]},"documentation":{"id":2588,"nodeType":"StructuredDocumentation","src":"81155:172:0","text":" @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} modifier, directly or indirectly."},"id":2597,"name":"onlyInitializing","nameLocation":"81339:16:0","nodeType":"ModifierDefinition","parameters":{"id":2589,"nodeType":"ParameterList","parameters":[],"src":"81355:2:0"},"src":"81330:87:0","virtual":false,"visibility":"internal"},{"body":{"id":2611,"nodeType":"Block","src":"81475:63:0","statements":[{"expression":{"id":2609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"81488:45:0","subExpression":{"arguments":[{"arguments":[{"id":2606,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"81527:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_UnlockInitializable_$2613","typeString":"contract UnlockInitializable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UnlockInitializable_$2613","typeString":"contract UnlockInitializable"}],"id":2605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"81519:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2604,"name":"address","nodeType":"ElementaryTypeName","src":"81519:7:0","typeDescriptions":{}}},"id":2607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81519:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2602,"name":"AddressUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2541,"src":"81489:18:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressUpgradeable_$2541_$","typeString":"type(library AddressUpgradeable)"}},"id":2603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"81508:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":2275,"src":"81489:29:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81489:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2601,"id":2610,"nodeType":"Return","src":"81481:52:0"}]},"id":2612,"implemented":true,"kind":"function","modifiers":[],"name":"_isConstructor","nameLocation":"81430:14:0","nodeType":"FunctionDefinition","parameters":{"id":2598,"nodeType":"ParameterList","parameters":[],"src":"81444:2:0"},"returnParameters":{"id":2601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2612,"src":"81469:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2599,"name":"bool","nodeType":"ElementaryTypeName","src":"81469:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"81468:6:0"},"scope":2613,"src":"81421:117:0","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":3994,"src":"80212:1328:0","usedErrors":[],"usedEvents":[]},{"id":2614,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"81650:23:0"},{"abstract":true,"baseContracts":[{"baseName":{"id":2616,"name":"UnlockInitializable","nameLocations":["82218:19:0"],"nodeType":"IdentifierPath","referencedDeclaration":2613,"src":"82218:19:0"},"id":2617,"nodeType":"InheritanceSpecifier","src":"82218:19:0"}],"canonicalName":"UnlockContextUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2615,"nodeType":"StructuredDocumentation","src":"81675:496:0","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":2655,"linearizedBaseContracts":[2655,2613],"name":"UnlockContextUpgradeable","nameLocation":"82190:24:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":2625,"nodeType":"Block","src":"82294:37:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2622,"name":"__Context_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2632,"src":"82300:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"82300:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2624,"nodeType":"ExpressionStatement","src":"82300:26:0"}]},"id":2626,"implemented":true,"kind":"function","modifiers":[{"id":2620,"kind":"modifierInvocation","modifierName":{"id":2619,"name":"onlyInitializing","nameLocations":["82277:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"82277:16:0"},"nodeType":"ModifierInvocation","src":"82277:16:0"}],"name":"__Context_init","nameLocation":"82251:14:0","nodeType":"FunctionDefinition","parameters":{"id":2618,"nodeType":"ParameterList","parameters":[],"src":"82265:2:0"},"returnParameters":{"id":2621,"nodeType":"ParameterList","parameters":[],"src":"82294:0:0"},"scope":2655,"src":"82242:89:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2631,"nodeType":"Block","src":"82397:2:0","statements":[]},"id":2632,"implemented":true,"kind":"function","modifiers":[{"id":2629,"kind":"modifierInvocation","modifierName":{"id":2628,"name":"onlyInitializing","nameLocations":["82380:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"82380:16:0"},"nodeType":"ModifierInvocation","src":"82380:16:0"}],"name":"__Context_init_unchained","nameLocation":"82344:24:0","nodeType":"FunctionDefinition","parameters":{"id":2627,"nodeType":"ParameterList","parameters":[],"src":"82368:2:0"},"returnParameters":{"id":2630,"nodeType":"ParameterList","parameters":[],"src":"82397:0:0"},"scope":2655,"src":"82335:64:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2640,"nodeType":"Block","src":"82465:28:0","statements":[{"expression":{"expression":{"id":2637,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"82478:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"82482:6:0","memberName":"sender","nodeType":"MemberAccess","src":"82478:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2636,"id":2639,"nodeType":"Return","src":"82471:17:0"}]},"id":2641,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"82412:10:0","nodeType":"FunctionDefinition","parameters":{"id":2633,"nodeType":"ParameterList","parameters":[],"src":"82422:2:0"},"returnParameters":{"id":2636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2641,"src":"82456:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2634,"name":"address","nodeType":"ElementaryTypeName","src":"82456:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"82455:9:0"},"scope":2655,"src":"82403:90:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2649,"nodeType":"Block","src":"82564:26:0","statements":[{"expression":{"expression":{"id":2646,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"82577:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"82581:4:0","memberName":"data","nodeType":"MemberAccess","src":"82577:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":2645,"id":2648,"nodeType":"Return","src":"82570:15:0"}]},"id":2650,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"82506:8:0","nodeType":"FunctionDefinition","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"82514:2:0"},"returnParameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2650,"src":"82548:14:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2643,"name":"bytes","nodeType":"ElementaryTypeName","src":"82548:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"82547:16:0"},"scope":2655,"src":"82497:93:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"constant":false,"id":2654,"mutability":"mutable","name":"______gap","nameLocation":"82614:9:0","nodeType":"VariableDeclaration","scope":2655,"src":"82594:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":2651,"name":"uint256","nodeType":"ElementaryTypeName","src":"82594:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2653,"length":{"hexValue":"3530","id":2652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"82602:2:0","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"82594:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":3994,"src":"82172:454:0","usedErrors":[],"usedEvents":[]},{"id":2656,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"82726:23:0"},{"abstract":true,"baseContracts":[{"baseName":{"id":2658,"name":"UnlockInitializable","nameLocations":["83382:19:0"],"nodeType":"IdentifierPath","referencedDeclaration":2613,"src":"83382:19:0"},"id":2659,"nodeType":"InheritanceSpecifier","src":"83382:19:0"},{"baseName":{"id":2660,"name":"UnlockContextUpgradeable","nameLocations":["83405:24:0"],"nodeType":"IdentifierPath","referencedDeclaration":2655,"src":"83405:24:0"},"id":2661,"nodeType":"InheritanceSpecifier","src":"83405:24:0"}],"canonicalName":"UnlockOwnable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2657,"nodeType":"StructuredDocumentation","src":"82751:593:0","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be aplied to your functions to restrict their use to\n the owner.\n This contract was originally part of openzeppelin/contracts-ethereum-package\n but had to be included (instead of using the one in openzeppelin/contracts-upgradeable )\n because the ______gap array length was 49 instead of 50"},"fullyImplemented":true,"id":2784,"linearizedBaseContracts":[2784,2655,2613],"name":"UnlockOwnable","nameLocation":"83363:13:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2663,"mutability":"mutable","name":"_owner","nameLocation":"83450:6:0","nodeType":"VariableDeclaration","scope":2784,"src":"83434:22:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2662,"name":"address","nodeType":"ElementaryTypeName","src":"83434:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":2669,"name":"OwnershipTransferred","nameLocation":"83467:20:0","nodeType":"EventDefinition","parameters":{"id":2668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2665,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"83509:13:0","nodeType":"VariableDeclaration","scope":2669,"src":"83493:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2664,"name":"address","nodeType":"ElementaryTypeName","src":"83493:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2667,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"83544:8:0","nodeType":"VariableDeclaration","scope":2669,"src":"83528:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2666,"name":"address","nodeType":"ElementaryTypeName","src":"83528:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"83487:69:0"},"src":"83461:96:0"},{"body":{"id":2689,"nodeType":"Block","src":"83715:77:0","statements":[{"expression":{"id":2679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2677,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"83721:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2678,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"83730:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"83721:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2680,"nodeType":"ExpressionStatement","src":"83721:15:0"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"83776:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"83768:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2682,"name":"address","nodeType":"ElementaryTypeName","src":"83768:7:0","typeDescriptions":{}}},"id":2685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"83768:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2686,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"83780:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2681,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2669,"src":"83747:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"83747:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2688,"nodeType":"EmitStatement","src":"83742:45:0"}]},"documentation":{"id":2670,"nodeType":"StructuredDocumentation","src":"83561:87:0","text":" @dev Initializes the contract setting the deployer as the initial owner."},"functionSelector":"b0ca0c83","id":2690,"implemented":true,"kind":"function","modifiers":[{"id":2675,"kind":"modifierInvocation","modifierName":{"id":2674,"name":"initializer","nameLocations":["83703:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":2587,"src":"83703:11:0"},"nodeType":"ModifierInvocation","src":"83703:11:0"}],"name":"__initializeOwnable","nameLocation":"83660:19:0","nodeType":"FunctionDefinition","parameters":{"id":2673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2672,"mutability":"mutable","name":"sender","nameLocation":"83688:6:0","nodeType":"VariableDeclaration","scope":2690,"src":"83680:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2671,"name":"address","nodeType":"ElementaryTypeName","src":"83680:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"83679:16:0"},"returnParameters":{"id":2676,"nodeType":"ParameterList","parameters":[],"src":"83715:0:0"},"scope":2784,"src":"83651:141:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2698,"nodeType":"Block","src":"83907:24:0","statements":[{"expression":{"id":2696,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"83920:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2695,"id":2697,"nodeType":"Return","src":"83913:13:0"}]},"documentation":{"id":2691,"nodeType":"StructuredDocumentation","src":"83796:61:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":2699,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"83869:5:0","nodeType":"FunctionDefinition","parameters":{"id":2692,"nodeType":"ParameterList","parameters":[],"src":"83874:2:0"},"returnParameters":{"id":2695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2699,"src":"83898:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2693,"name":"address","nodeType":"ElementaryTypeName","src":"83898:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"83897:9:0"},"scope":2784,"src":"83860:71:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2709,"nodeType":"Block","src":"84032:50:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2703,"name":"isOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2722,"src":"84046:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84046:9:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f4f574e4552","id":2705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"84057:12:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed52dd835ef8b4a2cee9a7c6acf4a6ded47de936e18191957aa373d7aa16dbef","typeString":"literal_string \"ONLY_OWNER\""},"value":"ONLY_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed52dd835ef8b4a2cee9a7c6acf4a6ded47de936e18191957aa373d7aa16dbef","typeString":"literal_string \"ONLY_OWNER\""}],"id":2702,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"84038:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84038:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2707,"nodeType":"ExpressionStatement","src":"84038:32:0"},{"id":2708,"nodeType":"PlaceholderStatement","src":"84076:1:0"}]},"documentation":{"id":2700,"nodeType":"StructuredDocumentation","src":"83935:73:0","text":" @dev Throws if called by any account other than the owner."},"id":2710,"name":"onlyOwner","nameLocation":"84020:9:0","nodeType":"ModifierDefinition","parameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"84029:2:0"},"src":"84011:71:0","virtual":false,"visibility":"internal"},{"body":{"id":2721,"nodeType":"Block","src":"84203:40:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2716,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"84216:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84216:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2718,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"84232:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"84216:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2715,"id":2720,"nodeType":"Return","src":"84209:29:0"}]},"documentation":{"id":2711,"nodeType":"StructuredDocumentation","src":"84086:68:0","text":" @dev Returns true if the caller is the current owner."},"functionSelector":"8f32d59b","id":2722,"implemented":true,"kind":"function","modifiers":[],"name":"isOwner","nameLocation":"84166:7:0","nodeType":"FunctionDefinition","parameters":{"id":2712,"nodeType":"ParameterList","parameters":[],"src":"84173:2:0"},"returnParameters":{"id":2715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2722,"src":"84197:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2713,"name":"bool","nodeType":"ElementaryTypeName","src":"84197:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"84196:6:0"},"scope":2784,"src":"84157:86:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2735,"nodeType":"Block","src":"84617:41:0","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":2731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"84650:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"84642:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2729,"name":"address","nodeType":"ElementaryTypeName","src":"84642:7:0","typeDescriptions":{}}},"id":2732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84642:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2728,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"84623:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84623:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2734,"nodeType":"ExpressionStatement","src":"84623:30:0"}]},"documentation":{"id":2723,"nodeType":"StructuredDocumentation","src":"84247:321:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n > Note: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":2736,"implemented":true,"kind":"function","modifiers":[{"id":2726,"kind":"modifierInvocation","modifierName":{"id":2725,"name":"onlyOwner","nameLocations":["84607:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"84607:9:0"},"nodeType":"ModifierInvocation","src":"84607:9:0"}],"name":"renounceOwnership","nameLocation":"84580:17:0","nodeType":"FunctionDefinition","parameters":{"id":2724,"nodeType":"ParameterList","parameters":[],"src":"84597:2:0"},"returnParameters":{"id":2727,"nodeType":"ParameterList","parameters":[],"src":"84617:0:0"},"scope":2784,"src":"84571:87:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2758,"nodeType":"Block","src":"84859:93:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2745,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"84873:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"84893:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"84885:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2746,"name":"address","nodeType":"ElementaryTypeName","src":"84885:7:0","typeDescriptions":{}}},"id":2749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84885:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"84873:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4f574e4552","id":2751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"84897:15:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""},"value":"INVALID_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""}],"id":2744,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"84865:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84865:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2753,"nodeType":"ExpressionStatement","src":"84865:48:0"},{"expression":{"arguments":[{"id":2755,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"84938:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2754,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"84919:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84919:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2757,"nodeType":"ExpressionStatement","src":"84919:28:0"}]},"documentation":{"id":2737,"nodeType":"StructuredDocumentation","src":"84662:132:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":2759,"implemented":true,"kind":"function","modifiers":[{"id":2742,"kind":"modifierInvocation","modifierName":{"id":2741,"name":"onlyOwner","nameLocations":["84849:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"84849:9:0"},"nodeType":"ModifierInvocation","src":"84849:9:0"}],"name":"transferOwnership","nameLocation":"84806:17:0","nodeType":"FunctionDefinition","parameters":{"id":2740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2739,"mutability":"mutable","name":"newOwner","nameLocation":"84832:8:0","nodeType":"VariableDeclaration","scope":2759,"src":"84824:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2738,"name":"address","nodeType":"ElementaryTypeName","src":"84824:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"84823:18:0"},"returnParameters":{"id":2743,"nodeType":"ParameterList","parameters":[],"src":"84859:0:0"},"scope":2784,"src":"84797:155:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2778,"nodeType":"Block","src":"85100:110:0","statements":[{"assignments":[2766],"declarations":[{"constant":false,"id":2766,"mutability":"mutable","name":"oldOwner","nameLocation":"85114:8:0","nodeType":"VariableDeclaration","scope":2778,"src":"85106:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2765,"name":"address","nodeType":"ElementaryTypeName","src":"85106:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2768,"initialValue":{"id":2767,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"85125:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"85106:25:0"},{"expression":{"id":2771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2769,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"85137:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2770,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"85146:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"85137:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2772,"nodeType":"ExpressionStatement","src":"85137:17:0"},{"eventCall":{"arguments":[{"id":2774,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"85186:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2775,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"85196:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2773,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2669,"src":"85165:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"85165:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2777,"nodeType":"EmitStatement","src":"85160:45:0"}]},"documentation":{"id":2760,"nodeType":"StructuredDocumentation","src":"84956:86:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`)."},"id":2779,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"85054:18:0","nodeType":"FunctionDefinition","parameters":{"id":2763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2762,"mutability":"mutable","name":"newOwner","nameLocation":"85081:8:0","nodeType":"VariableDeclaration","scope":2779,"src":"85073:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2761,"name":"address","nodeType":"ElementaryTypeName","src":"85073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"85072:18:0"},"returnParameters":{"id":2764,"nodeType":"ParameterList","parameters":[],"src":"85100:0:0"},"scope":2784,"src":"85045:165:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":false,"id":2783,"mutability":"mutable","name":"______gap","nameLocation":"85234:9:0","nodeType":"VariableDeclaration","scope":2784,"src":"85214:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":2780,"name":"uint256","nodeType":"ElementaryTypeName","src":"85214:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2782,"length":{"hexValue":"3530","id":2781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"85222:2:0","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"85214:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":3994,"src":"83345:1901:0","usedErrors":[],"usedEvents":[2669]},{"id":2785,"literals":["solidity","^","0.8",".7"],"nodeType":"PragmaDirective","src":"85278:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":2787,"name":"UnlockInitializable","nameLocations":["86822:19:0"],"nodeType":"IdentifierPath","referencedDeclaration":2613,"src":"86822:19:0"},"id":2788,"nodeType":"InheritanceSpecifier","src":"86822:19:0"},{"baseName":{"id":2789,"name":"UnlockOwnable","nameLocations":["86843:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":2784,"src":"86843:13:0"},"id":2790,"nodeType":"InheritanceSpecifier","src":"86843:13:0"}],"canonicalName":"Unlock","contractDependencies":[1082,1215],"contractKind":"contract","documentation":{"id":2786,"nodeType":"StructuredDocumentation","src":"86596:207:0","text":"@dev Must list the direct base contracts in the order from “most base-like” to “most derived”.\n https://solidity.readthedocs.io/en/latest/contracts.html#multiple-inheritance-and-linearization"},"fullyImplemented":true,"id":3993,"linearizedBaseContracts":[3993,2784,2655,2613],"name":"Unlock","nameLocation":"86812:6:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Unlock.LockBalances","documentation":{"id":2791,"nodeType":"StructuredDocumentation","src":"86861:245:0","text":" The struct for a lock\n We use deployed to keep track of deployments.\n This is required because both totalSales and yieldedDiscountTokens are 0 when initialized,\n which would be the same values when the lock is not set."},"id":2798,"members":[{"constant":false,"id":2793,"mutability":"mutable","name":"deployed","nameLocation":"87140:8:0","nodeType":"VariableDeclaration","scope":2798,"src":"87135:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2792,"name":"bool","nodeType":"ElementaryTypeName","src":"87135:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2795,"mutability":"mutable","name":"totalSales","nameLocation":"87159:10:0","nodeType":"VariableDeclaration","scope":2798,"src":"87154:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2794,"name":"uint","nodeType":"ElementaryTypeName","src":"87154:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2797,"mutability":"mutable","name":"yieldedDiscountTokens","nameLocation":"87198:21:0","nodeType":"VariableDeclaration","scope":2798,"src":"87193:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2796,"name":"uint","nodeType":"ElementaryTypeName","src":"87193:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"LockBalances","nameLocation":"87116:12:0","nodeType":"StructDefinition","scope":3993,"src":"87109:115:0","visibility":"public"},{"body":{"id":2810,"nodeType":"Block","src":"87260:67:0","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":2801,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"87274:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":2804,"indexExpression":{"expression":{"id":2802,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"87280:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"87284:6:0","memberName":"sender","nodeType":"MemberAccess","src":"87280:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"87274:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":2805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"87292:8:0","memberName":"deployed","nodeType":"MemberAccess","referencedDeclaration":2793,"src":"87274:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f4c4f434b53","id":2806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"87302:12:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f7a57ed2eb35ddf4bed51ee630a02fca60e093675c5fed0b5d65ba05e2cb9fc","typeString":"literal_string \"ONLY_LOCKS\""},"value":"ONLY_LOCKS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f7a57ed2eb35ddf4bed51ee630a02fca60e093675c5fed0b5d65ba05e2cb9fc","typeString":"literal_string \"ONLY_LOCKS\""}],"id":2800,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"87266:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"87266:49:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2808,"nodeType":"ExpressionStatement","src":"87266:49:0"},{"id":2809,"nodeType":"PlaceholderStatement","src":"87321:1:0"}]},"id":2811,"name":"onlyFromDeployedLock","nameLocation":"87237:20:0","nodeType":"ModifierDefinition","parameters":{"id":2799,"nodeType":"ParameterList","parameters":[],"src":"87257:2:0"},"src":"87228:99:0","virtual":false,"visibility":"internal"},{"constant":false,"functionSelector":"d6e9e803","id":2813,"mutability":"mutable","name":"grossNetworkProduct","nameLocation":"87343:19:0","nodeType":"VariableDeclaration","scope":3993,"src":"87331:31:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2812,"name":"uint","nodeType":"ElementaryTypeName","src":"87331:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"a082eb0e","id":2815,"mutability":"mutable","name":"totalDiscountGranted","nameLocation":"87379:20:0","nodeType":"VariableDeclaration","scope":3993,"src":"87367:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2814,"name":"uint","nodeType":"ElementaryTypeName","src":"87367:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"5de9a137","id":2820,"mutability":"mutable","name":"locks","nameLocation":"87528:5:0","nodeType":"VariableDeclaration","scope":3993,"src":"87488:45:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances)"},"typeName":{"id":2819,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2816,"name":"address","nodeType":"ElementaryTypeName","src":"87496:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"87488:32:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2818,"nodeType":"UserDefinedTypeName","pathNode":{"id":2817,"name":"LockBalances","nameLocations":["87507:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":2798,"src":"87507:12:0"},"referencedDeclaration":2798,"src":"87507:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage_ptr","typeString":"struct Unlock.LockBalances"}}},"visibility":"public"},{"constant":false,"functionSelector":"a998e9fb","id":2822,"mutability":"mutable","name":"globalBaseTokenURI","nameLocation":"87645:18:0","nodeType":"VariableDeclaration","scope":3993,"src":"87631:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2821,"name":"string","nodeType":"ElementaryTypeName","src":"87631:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"cec41052","id":2824,"mutability":"mutable","name":"globalTokenSymbol","nameLocation":"87775:17:0","nodeType":"VariableDeclaration","scope":3993,"src":"87761:31:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2823,"name":"string","nodeType":"ElementaryTypeName","src":"87761:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"f8328991","id":2826,"mutability":"mutable","name":"publicLockAddress","nameLocation":"87909:17:0","nodeType":"VariableDeclaration","scope":3993,"src":"87894:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2825,"name":"address","nodeType":"ElementaryTypeName","src":"87894:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"6bced5a2","id":2831,"mutability":"mutable","name":"uniswapOracles","nameLocation":"88082:14:0","nodeType":"VariableDeclaration","scope":3993,"src":"88038:58:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"},"typeName":{"id":2830,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2827,"name":"address","nodeType":"ElementaryTypeName","src":"88046:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"88038:36:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2829,"nodeType":"UserDefinedTypeName","pathNode":{"id":2828,"name":"IUniswapOracleV3","nameLocations":["88057:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":1948,"src":"88057:16:0"},"referencedDeclaration":1948,"src":"88057:16:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}}},"visibility":"public"},{"constant":false,"functionSelector":"3fc8cef3","id":2833,"mutability":"mutable","name":"weth","nameLocation":"88173:4:0","nodeType":"VariableDeclaration","scope":3993,"src":"88158:19:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2832,"name":"address","nodeType":"ElementaryTypeName","src":"88158:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"262d0a85","id":2835,"mutability":"mutable","name":"udt","nameLocation":"88257:3:0","nodeType":"VariableDeclaration","scope":3993,"src":"88242:18:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2834,"name":"address","nodeType":"ElementaryTypeName","src":"88242:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"743bbc2f","id":2837,"mutability":"mutable","name":"estimatedGasForPurchase","nameLocation":"88334:23:0","nodeType":"VariableDeclaration","scope":3993,"src":"88322:35:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2836,"name":"uint","nodeType":"ElementaryTypeName","src":"88322:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"9a8a0592","id":2839,"mutability":"mutable","name":"chainId","nameLocation":"88453:7:0","nodeType":"VariableDeclaration","scope":3993,"src":"88441:19:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2838,"name":"uint","nodeType":"ElementaryTypeName","src":"88441:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"5979e755","id":2841,"mutability":"mutable","name":"proxyAdminAddress","nameLocation":"88503:17:0","nodeType":"VariableDeclaration","scope":3993,"src":"88488:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2840,"name":"address","nodeType":"ElementaryTypeName","src":"88488:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"id":2844,"mutability":"mutable","name":"proxyAdmin","nameLocation":"88543:10:0","nodeType":"VariableDeclaration","scope":3993,"src":"88524:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"},"typeName":{"id":2843,"nodeType":"UserDefinedTypeName","pathNode":{"id":2842,"name":"ProxyAdmin","nameLocations":["88524:10:0"],"nodeType":"IdentifierPath","referencedDeclaration":1215,"src":"88524:10:0"},"referencedDeclaration":1215,"src":"88524:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"visibility":"private"},{"constant":false,"id":2848,"mutability":"mutable","name":"_publicLockVersions","nameLocation":"88619:19:0","nodeType":"VariableDeclaration","scope":3993,"src":"88584:54:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"},"typeName":{"id":2847,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"88592:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"88584:26:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2846,"name":"uint16","nodeType":"ElementaryTypeName","src":"88603:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}},"visibility":"private"},{"constant":false,"id":2852,"mutability":"mutable","name":"_publicLockImpls","nameLocation":"88677:16:0","nodeType":"VariableDeclaration","scope":3993,"src":"88642:51:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"},"typeName":{"id":2851,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2849,"name":"uint16","nodeType":"ElementaryTypeName","src":"88650:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Mapping","src":"88642:26:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2850,"name":"address","nodeType":"ElementaryTypeName","src":"88660:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"functionSelector":"cd93b532","id":2854,"mutability":"mutable","name":"publicLockLatestVersion","nameLocation":"88711:23:0","nodeType":"VariableDeclaration","scope":3993,"src":"88697:37:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2853,"name":"uint16","nodeType":"ElementaryTypeName","src":"88697:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"public"},{"constant":false,"functionSelector":"b0e21e8a","id":2856,"mutability":"mutable","name":"protocolFee","nameLocation":"88769:11:0","nodeType":"VariableDeclaration","scope":3993,"src":"88757:23:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2855,"name":"uint","nodeType":"ElementaryTypeName","src":"88757:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"errorSelector":"a2cfffa0","id":2858,"name":"Unlock__MANAGER_ONLY","nameLocation":"88803:20:0","nodeType":"ErrorDefinition","parameters":{"id":2857,"nodeType":"ParameterList","parameters":[],"src":"88823:2:0"},"src":"88797:29:0"},{"errorSelector":"37bb0061","id":2860,"name":"Unlock__VERSION_TOO_HIGH","nameLocation":"88835:24:0","nodeType":"ErrorDefinition","parameters":{"id":2859,"nodeType":"ParameterList","parameters":[],"src":"88859:2:0"},"src":"88829:33:0"},{"errorSelector":"d6a7ab8e","id":2862,"name":"Unlock__MISSING_TEMPLATE","nameLocation":"88871:24:0","nodeType":"ErrorDefinition","parameters":{"id":2861,"nodeType":"ParameterList","parameters":[],"src":"88895:2:0"},"src":"88865:33:0"},{"errorSelector":"feb51c9f","id":2864,"name":"Unlock__ALREADY_DEPLOYED","nameLocation":"88907:24:0","nodeType":"ErrorDefinition","parameters":{"id":2863,"nodeType":"ParameterList","parameters":[],"src":"88931:2:0"},"src":"88901:33:0"},{"errorSelector":"82b5cfcc","id":2866,"name":"Unlock__MISSING_PROXY_ADMIN","nameLocation":"88943:27:0","nodeType":"ErrorDefinition","parameters":{"id":2865,"nodeType":"ParameterList","parameters":[],"src":"88970:2:0"},"src":"88937:36:0"},{"errorSelector":"adf22763","id":2868,"name":"Unlock__MISSING_LOCK_TEMPLATE","nameLocation":"88982:29:0","nodeType":"ErrorDefinition","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[],"src":"89011:2:0"},"src":"88976:38:0"},{"errorSelector":"822f134e","id":2872,"name":"Unlock__MISSING_LOCK","nameLocation":"89023:20:0","nodeType":"ErrorDefinition","parameters":{"id":2871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2870,"mutability":"mutable","name":"lockAddress","nameLocation":"89052:11:0","nodeType":"VariableDeclaration","scope":2872,"src":"89044:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2869,"name":"address","nodeType":"ElementaryTypeName","src":"89044:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89043:21:0"},"src":"89017:48:0"},{"errorSelector":"000111e2","id":2874,"name":"Unlock__INVALID_AMOUNT","nameLocation":"89074:22:0","nodeType":"ErrorDefinition","parameters":{"id":2873,"nodeType":"ParameterList","parameters":[],"src":"89096:2:0"},"src":"89068:31:0"},{"anonymous":false,"eventSelector":"01017ed19df0c7f8acc436147b234b09664a9fb4797b4fa3fb9e599c2eb67be7","id":2880,"name":"NewLock","nameLocation":"89121:7:0","nodeType":"EventDefinition","parameters":{"id":2879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2876,"indexed":true,"mutability":"mutable","name":"lockOwner","nameLocation":"89145:9:0","nodeType":"VariableDeclaration","scope":2880,"src":"89129:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2875,"name":"address","nodeType":"ElementaryTypeName","src":"89129:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2878,"indexed":true,"mutability":"mutable","name":"newLockAddress","nameLocation":"89172:14:0","nodeType":"VariableDeclaration","scope":2880,"src":"89156:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2877,"name":"address","nodeType":"ElementaryTypeName","src":"89156:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89128:59:0"},"src":"89115:73:0"},{"anonymous":false,"eventSelector":"5e7b70a9e6f0b4c7cf2657cf563ce85eed3aebb7731396118d01a195d218fd5e","id":2886,"name":"LockUpgraded","nameLocation":"89198:12:0","nodeType":"EventDefinition","parameters":{"id":2885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2882,"indexed":false,"mutability":"mutable","name":"lockAddress","nameLocation":"89219:11:0","nodeType":"VariableDeclaration","scope":2886,"src":"89211:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2881,"name":"address","nodeType":"ElementaryTypeName","src":"89211:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2884,"indexed":false,"mutability":"mutable","name":"version","nameLocation":"89239:7:0","nodeType":"VariableDeclaration","scope":2886,"src":"89232:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2883,"name":"uint16","nodeType":"ElementaryTypeName","src":"89232:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"89210:37:0"},"src":"89192:56:0"},{"anonymous":false,"eventSelector":"a14230a1687e9bb8cdc0f3931d27c3a806e88c1c2235ba7756d6911feb35be67","id":2900,"name":"ConfigUnlock","nameLocation":"89258:12:0","nodeType":"EventDefinition","parameters":{"id":2899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2888,"indexed":false,"mutability":"mutable","name":"udt","nameLocation":"89284:3:0","nodeType":"VariableDeclaration","scope":2900,"src":"89276:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2887,"name":"address","nodeType":"ElementaryTypeName","src":"89276:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2890,"indexed":false,"mutability":"mutable","name":"weth","nameLocation":"89301:4:0","nodeType":"VariableDeclaration","scope":2900,"src":"89293:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2889,"name":"address","nodeType":"ElementaryTypeName","src":"89293:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2892,"indexed":false,"mutability":"mutable","name":"estimatedGasForPurchase","nameLocation":"89316:23:0","nodeType":"VariableDeclaration","scope":2900,"src":"89311:28:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2891,"name":"uint","nodeType":"ElementaryTypeName","src":"89311:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2894,"indexed":false,"mutability":"mutable","name":"globalTokenSymbol","nameLocation":"89352:17:0","nodeType":"VariableDeclaration","scope":2900,"src":"89345:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2893,"name":"string","nodeType":"ElementaryTypeName","src":"89345:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2896,"indexed":false,"mutability":"mutable","name":"globalTokenURI","nameLocation":"89382:14:0","nodeType":"VariableDeclaration","scope":2900,"src":"89375:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2895,"name":"string","nodeType":"ElementaryTypeName","src":"89375:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2898,"indexed":false,"mutability":"mutable","name":"chainId","nameLocation":"89407:7:0","nodeType":"VariableDeclaration","scope":2900,"src":"89402:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2897,"name":"uint","nodeType":"ElementaryTypeName","src":"89402:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"89270:148:0"},"src":"89252:167:0"},{"anonymous":false,"eventSelector":"4fa58418e580e78539e8d3d8d17d94dbaca0927533953c8248f313e6f8927c21","id":2904,"name":"SetLockTemplate","nameLocation":"89429:15:0","nodeType":"EventDefinition","parameters":{"id":2903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2902,"indexed":false,"mutability":"mutable","name":"publicLockAddress","nameLocation":"89453:17:0","nodeType":"VariableDeclaration","scope":2904,"src":"89445:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2901,"name":"address","nodeType":"ElementaryTypeName","src":"89445:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89444:27:0"},"src":"89423:49:0"},{"anonymous":false,"eventSelector":"3b50eb9d9b4a8db204f2928c9e572c2865b0d02803493ccb6aa256848323ebb7","id":2916,"name":"GNPChanged","nameLocation":"89482:10:0","nodeType":"EventDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2906,"indexed":false,"mutability":"mutable","name":"grossNetworkProduct","nameLocation":"89503:19:0","nodeType":"VariableDeclaration","scope":2916,"src":"89498:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2905,"name":"uint","nodeType":"ElementaryTypeName","src":"89498:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2908,"indexed":false,"mutability":"mutable","name":"_valueInETH","nameLocation":"89533:11:0","nodeType":"VariableDeclaration","scope":2916,"src":"89528:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2907,"name":"uint","nodeType":"ElementaryTypeName","src":"89528:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2910,"indexed":false,"mutability":"mutable","name":"tokenAddress","nameLocation":"89558:12:0","nodeType":"VariableDeclaration","scope":2916,"src":"89550:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2909,"name":"address","nodeType":"ElementaryTypeName","src":"89550:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2912,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"89581:5:0","nodeType":"VariableDeclaration","scope":2916,"src":"89576:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2911,"name":"uint","nodeType":"ElementaryTypeName","src":"89576:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2914,"indexed":false,"mutability":"mutable","name":"lockAddress","nameLocation":"89600:11:0","nodeType":"VariableDeclaration","scope":2916,"src":"89592:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2913,"name":"address","nodeType":"ElementaryTypeName","src":"89592:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89492:123:0"},"src":"89476:140:0"},{"anonymous":false,"eventSelector":"7b2ce3c83b45f79993ff2cbf5651caff2dfe04010b4846e03066b84e3e4059bb","id":2922,"name":"ResetTrackedValue","nameLocation":"89626:17:0","nodeType":"EventDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"indexed":false,"mutability":"mutable","name":"grossNetworkProduct","nameLocation":"89649:19:0","nodeType":"VariableDeclaration","scope":2922,"src":"89644:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2917,"name":"uint","nodeType":"ElementaryTypeName","src":"89644:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2920,"indexed":false,"mutability":"mutable","name":"totalDiscountGranted","nameLocation":"89675:20:0","nodeType":"VariableDeclaration","scope":2922,"src":"89670:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2919,"name":"uint","nodeType":"ElementaryTypeName","src":"89670:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"89643:53:0"},"src":"89620:77:0"},{"anonymous":false,"eventSelector":"d36d021c4aa145e30eadc73e34284101030d688b9eb9413a4dc3af40ab1d4748","id":2928,"name":"UnlockTemplateAdded","nameLocation":"89707:19:0","nodeType":"EventDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2924,"indexed":true,"mutability":"mutable","name":"impl","nameLocation":"89743:4:0","nodeType":"VariableDeclaration","scope":2928,"src":"89727:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2923,"name":"address","nodeType":"ElementaryTypeName","src":"89727:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2926,"indexed":true,"mutability":"mutable","name":"version","nameLocation":"89764:7:0","nodeType":"VariableDeclaration","scope":2928,"src":"89749:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2925,"name":"uint16","nodeType":"ElementaryTypeName","src":"89749:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"89726:46:0"},"src":"89701:72:0"},{"body":{"id":2944,"nodeType":"Block","src":"89931:165:0","statements":[{"expression":{"arguments":[{"id":2938,"name":"_unlockOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2930,"src":"90014:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2935,"name":"UnlockOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2784,"src":"89980:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UnlockOwnable_$2784_$","typeString":"type(contract UnlockOwnable)"}},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"89994:19:0","memberName":"__initializeOwnable","nodeType":"MemberAccess","referencedDeclaration":2690,"src":"89980:33:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"89980:47:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2940,"nodeType":"ExpressionStatement","src":"89980:47:0"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2941,"name":"_deployProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"90072:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_address_$","typeString":"function () returns (address)"}},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90072:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2943,"nodeType":"ExpressionStatement","src":"90072:19:0"}]},"functionSelector":"c4d66de8","id":2945,"implemented":true,"kind":"function","modifiers":[{"id":2933,"kind":"modifierInvocation","modifierName":{"id":2932,"name":"initializer","nameLocations":["89919:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":2587,"src":"89919:11:0"},"nodeType":"ModifierInvocation","src":"89919:11:0"}],"name":"initialize","nameLocation":"89879:10:0","nodeType":"FunctionDefinition","parameters":{"id":2931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2930,"mutability":"mutable","name":"_unlockOwner","nameLocation":"89898:12:0","nodeType":"VariableDeclaration","scope":2945,"src":"89890:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2929,"name":"address","nodeType":"ElementaryTypeName","src":"89890:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89889:22:0"},"returnParameters":{"id":2934,"nodeType":"ParameterList","parameters":[],"src":"89931:0:0"},"scope":3993,"src":"89870:226:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2964,"nodeType":"Block","src":"90149:120:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2950,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"90159:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"90188:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"90180:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2951,"name":"address","nodeType":"ElementaryTypeName","src":"90180:7:0","typeDescriptions":{}}},"id":2954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90180:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"90159:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2960,"nodeType":"IfStatement","src":"90155:85:0","trueBody":{"id":2959,"nodeType":"Block","src":"90192:48:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2956,"name":"Unlock__ALREADY_DEPLOYED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2864,"src":"90207:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":2957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90207:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2958,"nodeType":"RevertStatement","src":"90200:33:0"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2961,"name":"_deployProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"90245:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_address_$","typeString":"function () returns (address)"}},"id":2962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90245:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2963,"nodeType":"ExpressionStatement","src":"90245:19:0"}]},"functionSelector":"c7d7d0c9","id":2965,"implemented":true,"kind":"function","modifiers":[{"id":2948,"kind":"modifierInvocation","modifierName":{"id":2947,"name":"onlyOwner","nameLocations":["90139:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"90139:9:0"},"nodeType":"ModifierInvocation","src":"90139:9:0"}],"name":"initializeProxyAdmin","nameLocation":"90109:20:0","nodeType":"FunctionDefinition","parameters":{"id":2946,"nodeType":"ParameterList","parameters":[],"src":"90129:2:0"},"returnParameters":{"id":2949,"nodeType":"ParameterList","parameters":[],"src":"90149:0:0"},"scope":3993,"src":"90100:169:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2990,"nodeType":"Block","src":"90506:117:0","statements":[{"expression":{"id":2976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2971,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"90512:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"90525:14:0","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_ProxyAdmin_$1215_$","typeString":"function () returns (contract ProxyAdmin)"},"typeName":{"id":2973,"nodeType":"UserDefinedTypeName","pathNode":{"id":2972,"name":"ProxyAdmin","nameLocations":["90529:10:0"],"nodeType":"IdentifierPath","referencedDeclaration":1215,"src":"90529:10:0"},"referencedDeclaration":1215,"src":"90529:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}}},"id":2975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90525:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"src":"90512:29:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"id":2977,"nodeType":"ExpressionStatement","src":"90512:29:0"},{"expression":{"id":2983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2978,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"90547:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2981,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"90575:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}],"id":2980,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"90567:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2979,"name":"address","nodeType":"ElementaryTypeName","src":"90567:7:0","typeDescriptions":{}}},"id":2982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90567:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"90547:39:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2984,"nodeType":"ExpressionStatement","src":"90547:39:0"},{"expression":{"arguments":[{"id":2987,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"90607:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}],"id":2986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"90599:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2985,"name":"address","nodeType":"ElementaryTypeName","src":"90599:7:0","typeDescriptions":{}}},"id":2988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90599:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2970,"id":2989,"nodeType":"Return","src":"90592:26:0"}]},"documentation":{"id":2966,"nodeType":"StructuredDocumentation","src":"90273:175:0","text":" @dev Deploy the ProxyAdmin contract that will manage lock templates upgrades\n This deploys an instance of ProxyAdmin used by PublicLock transparent proxies."},"id":2991,"implemented":true,"kind":"function","modifiers":[],"name":"_deployProxyAdmin","nameLocation":"90460:17:0","nodeType":"FunctionDefinition","parameters":{"id":2967,"nodeType":"ParameterList","parameters":[],"src":"90477:2:0"},"returnParameters":{"id":2970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2991,"src":"90497:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2968,"name":"address","nodeType":"ElementaryTypeName","src":"90497:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"90496:9:0"},"scope":3993,"src":"90451:172:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":3003,"nodeType":"Block","src":"90787:44:0","statements":[{"expression":{"baseExpression":{"id":2999,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"90800:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3001,"indexExpression":{"id":3000,"name":"_impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"90820:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"90800:26:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":2998,"id":3002,"nodeType":"Return","src":"90793:33:0"}]},"documentation":{"id":2992,"nodeType":"StructuredDocumentation","src":"90627:83:0","text":" @dev Helper to get the version number of a template from his address"},"functionSelector":"25772ad9","id":3004,"implemented":true,"kind":"function","modifiers":[],"name":"publicLockVersions","nameLocation":"90722:18:0","nodeType":"FunctionDefinition","parameters":{"id":2995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2994,"mutability":"mutable","name":"_impl","nameLocation":"90749:5:0","nodeType":"VariableDeclaration","scope":3004,"src":"90741:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2993,"name":"address","nodeType":"ElementaryTypeName","src":"90741:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"90740:15:0"},"returnParameters":{"id":2998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2997,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3004,"src":"90779:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2996,"name":"uint16","nodeType":"ElementaryTypeName","src":"90779:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"90778:8:0"},"scope":3993,"src":"90713:118:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3016,"nodeType":"Block","src":"90999:44:0","statements":[{"expression":{"baseExpression":{"id":3012,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"91012:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3014,"indexExpression":{"id":3013,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3007,"src":"91029:8:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"91012:26:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3011,"id":3015,"nodeType":"Return","src":"91005:33:0"}]},"documentation":{"id":3005,"nodeType":"StructuredDocumentation","src":"90835:87:0","text":" @dev Helper to get the address of a template based on its version number"},"functionSelector":"666018a5","id":3017,"implemented":true,"kind":"function","modifiers":[],"name":"publicLockImpls","nameLocation":"90934:15:0","nodeType":"FunctionDefinition","parameters":{"id":3008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3007,"mutability":"mutable","name":"_version","nameLocation":"90957:8:0","nodeType":"VariableDeclaration","scope":3017,"src":"90950:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3006,"name":"uint16","nodeType":"ElementaryTypeName","src":"90950:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"90949:17:0"},"returnParameters":{"id":3011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3017,"src":"90990:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3009,"name":"address","nodeType":"ElementaryTypeName","src":"90990:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"90989:9:0"},"scope":3993,"src":"90925:118:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3068,"nodeType":"Block","src":"91385:373:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":3033,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"91551:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}],"id":3032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"91543:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3031,"name":"address","nodeType":"ElementaryTypeName","src":"91543:7:0","typeDescriptions":{}}},"id":3034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91543:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":3035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91558:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":3038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91569:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"91561:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3036,"name":"address","nodeType":"ElementaryTypeName","src":"91561:7:0","typeDescriptions":{}}},"id":3039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91561:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":3040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91573:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91576:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"","id":3042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"91579:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"arguments":[{"id":3028,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91526:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3027,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"91514:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91514:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"91532:10:0","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":1275,"src":"91514:28:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256,string memory) external"}},"id":3043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91514:68:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3044,"nodeType":"ExpressionStatement","src":"91514:68:0"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3046,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91600:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3045,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"91588:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91588:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"91606:19:0","memberName":"renounceLockManager","nodeType":"MemberAccess","referencedDeclaration":1595,"src":"91588:37:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91588:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3050,"nodeType":"ExpressionStatement","src":"91588:39:0"},{"expression":{"id":3055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3051,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"91634:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3053,"indexExpression":{"id":3052,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91654:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"91634:25:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3054,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"91662:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"91634:35:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":3056,"nodeType":"ExpressionStatement","src":"91634:35:0"},{"expression":{"id":3061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3057,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"91675:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3059,"indexExpression":{"id":3058,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"91692:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"91675:25:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3060,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91703:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"91675:32:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3062,"nodeType":"ExpressionStatement","src":"91675:32:0"},{"eventCall":{"arguments":[{"id":3064,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91739:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3065,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"91745:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":3063,"name":"UnlockTemplateAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2928,"src":"91719:19:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint16)"}},"id":3066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91719:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3067,"nodeType":"EmitStatement","src":"91714:39:0"}]},"documentation":{"id":3018,"nodeType":"StructuredDocumentation","src":"91047:263:0","text":" @dev Registers a new PublicLock template immplementation\n The template is identified by a version number\n Once registered, the template can be used to upgrade an existing Lock\n @dev This will initialize the template and revokeOwnership."},"functionSelector":"caeee3a3","id":3069,"implemented":true,"kind":"function","modifiers":[{"id":3025,"kind":"modifierInvocation","modifierName":{"id":3024,"name":"onlyOwner","nameLocations":["91375:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"91375:9:0"},"nodeType":"ModifierInvocation","src":"91375:9:0"}],"name":"addLockTemplate","nameLocation":"91322:15:0","nodeType":"FunctionDefinition","parameters":{"id":3023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3020,"mutability":"mutable","name":"impl","nameLocation":"91346:4:0","nodeType":"VariableDeclaration","scope":3069,"src":"91338:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3019,"name":"address","nodeType":"ElementaryTypeName","src":"91338:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3022,"mutability":"mutable","name":"version","nameLocation":"91359:7:0","nodeType":"VariableDeclaration","scope":3069,"src":"91352:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3021,"name":"uint16","nodeType":"ElementaryTypeName","src":"91352:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"91337:30:0"},"returnParameters":{"id":3026,"nodeType":"ParameterList","parameters":[],"src":"91385:0:0"},"scope":3993,"src":"91313:445:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3105,"nodeType":"Block","src":"92692:293:0","statements":[{"assignments":[3088],"declarations":[{"constant":false,"id":3088,"mutability":"mutable","name":"data","nameLocation":"92711:4:0","nodeType":"VariableDeclaration","scope":3105,"src":"92698:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3087,"name":"bytes","nodeType":"ElementaryTypeName","src":"92698:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3100,"initialValue":{"arguments":[{"hexValue":"696e697469616c697a6528616464726573732c75696e743235362c616464726573732c75696e743235362c75696e743235362c737472696e6729","id":3091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"92749:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_6eadde437099d0265e7165a15d81631ed9730315ed96ffeb677d29c93655bb57","typeString":"literal_string \"initialize(address,uint256,address,uint256,uint256,string)\""},"value":"initialize(address,uint256,address,uint256,uint256,string)"},{"expression":{"id":3092,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"92817:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"92821:6:0","memberName":"sender","nodeType":"MemberAccess","src":"92817:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3094,"name":"_expirationDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"92835:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3095,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3074,"src":"92862:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3096,"name":"_keyPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3076,"src":"92883:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3097,"name":"_maxNumberOfKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3078,"src":"92900:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3098,"name":"_lockName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3080,"src":"92924:9:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6eadde437099d0265e7165a15d81631ed9730315ed96ffeb677d29c93655bb57","typeString":"literal_string \"initialize(address,uint256,address,uint256,uint256,string)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":3089,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"92718:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"92722:19:0","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"92718:23:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":3099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"92718:221:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"92698:241:0"},{"expression":{"arguments":[{"id":3102,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3088,"src":"92975:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3101,"name":"createUpgradeableLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3124,"src":"92953:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes memory) returns (address)"}},"id":3103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"92953:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3086,"id":3104,"nodeType":"Return","src":"92946:34:0"}]},"documentation":{"id":3070,"nodeType":"StructuredDocumentation","src":"91762:721:0","text":" @notice Create lock (legacy)\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param _expirationDuration the duration of the lock (pass type(uint).max for unlimited duration)\n @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n @param _keyPrice the price of each key\n @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n @param _lockName the name of the lock\n param _salt [deprec] -- kept only for backwards copatibility\n This may be implemented as a sequence ID or with RNG. It's used with `create2`\n to know the lock's address before the transaction is mined.\n @dev internally call `createUpgradeableLock`"},"functionSelector":"42d92106","id":3106,"implemented":true,"kind":"function","modifiers":[],"name":"createLock","nameLocation":"92495:10:0","nodeType":"FunctionDefinition","parameters":{"id":3083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3072,"mutability":"mutable","name":"_expirationDuration","nameLocation":"92516:19:0","nodeType":"VariableDeclaration","scope":3106,"src":"92511:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3071,"name":"uint","nodeType":"ElementaryTypeName","src":"92511:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3074,"mutability":"mutable","name":"_tokenAddress","nameLocation":"92549:13:0","nodeType":"VariableDeclaration","scope":3106,"src":"92541:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3073,"name":"address","nodeType":"ElementaryTypeName","src":"92541:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3076,"mutability":"mutable","name":"_keyPrice","nameLocation":"92573:9:0","nodeType":"VariableDeclaration","scope":3106,"src":"92568:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3075,"name":"uint","nodeType":"ElementaryTypeName","src":"92568:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3078,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"92593:16:0","nodeType":"VariableDeclaration","scope":3106,"src":"92588:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3077,"name":"uint","nodeType":"ElementaryTypeName","src":"92588:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3080,"mutability":"mutable","name":"_lockName","nameLocation":"92631:9:0","nodeType":"VariableDeclaration","scope":3106,"src":"92615:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":3079,"name":"string","nodeType":"ElementaryTypeName","src":"92615:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3082,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3106,"src":"92646:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"},"typeName":{"id":3081,"name":"bytes12","nodeType":"ElementaryTypeName","src":"92646:7:0","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"}},"visibility":"internal"}],"src":"92505:161:0"},"returnParameters":{"id":3086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3106,"src":"92683:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3084,"name":"address","nodeType":"ElementaryTypeName","src":"92683:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"92682:9:0"},"scope":3993,"src":"92486:499:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3123,"nodeType":"Block","src":"93641:128:0","statements":[{"assignments":[3115],"declarations":[{"constant":false,"id":3115,"mutability":"mutable","name":"newLock","nameLocation":"93655:7:0","nodeType":"VariableDeclaration","scope":3123,"src":"93647:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3114,"name":"address","nodeType":"ElementaryTypeName","src":"93647:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3120,"initialValue":{"arguments":[{"id":3117,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3109,"src":"93703:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3118,"name":"publicLockLatestVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2854,"src":"93715:23:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":3116,"name":"createUpgradeableLockAtVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"93665:30:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_uint16_$returns$_t_address_$","typeString":"function (bytes memory,uint16) returns (address)"}},"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"93665:79:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"93647:97:0"},{"expression":{"id":3121,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3115,"src":"93757:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3113,"id":3122,"nodeType":"Return","src":"93750:14:0"}]},"documentation":{"id":3107,"nodeType":"StructuredDocumentation","src":"92989:574:0","text":" @notice Create upgradeable lock\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param data bytes containing the call to initialize the lock template\n @dev this call is passed as encoded function - for instance:\n bytes memory data = abi.encodeWithSignature(\n 'initialize(address,uint256,address,uint256,uint256,string)',\n msg.sender,\n _expirationDuration,\n _tokenAddress,\n _keyPrice,\n _maxNumberOfKeys,\n _lockName\n );\n @return address of the create lock"},"functionSelector":"4452c2b2","id":3124,"implemented":true,"kind":"function","modifiers":[],"name":"createUpgradeableLock","nameLocation":"93575:21:0","nodeType":"FunctionDefinition","parameters":{"id":3110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3109,"mutability":"mutable","name":"data","nameLocation":"93610:4:0","nodeType":"VariableDeclaration","scope":3124,"src":"93597:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3108,"name":"bytes","nodeType":"ElementaryTypeName","src":"93597:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"93596:19:0"},"returnParameters":{"id":3113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3124,"src":"93632:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3111,"name":"address","nodeType":"ElementaryTypeName","src":"93632:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"93631:9:0"},"scope":3993,"src":"93566:203:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3201,"nodeType":"Block","src":"94156:736:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3134,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"94166:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94195:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94187:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3135,"name":"address","nodeType":"ElementaryTypeName","src":"94187:7:0","typeDescriptions":{}}},"id":3138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94187:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"94166:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3144,"nodeType":"IfStatement","src":"94162:88:0","trueBody":{"id":3143,"nodeType":"Block","src":"94199:51:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3140,"name":"Unlock__MISSING_PROXY_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"94214:27:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94214:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3142,"nodeType":"RevertStatement","src":"94207:36:0"}]}},{"assignments":[3146],"declarations":[{"constant":false,"id":3146,"mutability":"mutable","name":"publicLockImpl","nameLocation":"94288:14:0","nodeType":"VariableDeclaration","scope":3201,"src":"94280:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3145,"name":"address","nodeType":"ElementaryTypeName","src":"94280:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3150,"initialValue":{"baseExpression":{"id":3147,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"94305:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3149,"indexExpression":{"id":3148,"name":"_lockVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3129,"src":"94322:12:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"94305:30:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"94280:55:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3151,"name":"publicLockImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3146,"src":"94345:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94371:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94363:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3152,"name":"address","nodeType":"ElementaryTypeName","src":"94363:7:0","typeDescriptions":{}}},"id":3155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94363:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"94345:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3161,"nodeType":"IfStatement","src":"94341:87:0","trueBody":{"id":3160,"nodeType":"Block","src":"94375:53:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3157,"name":"Unlock__MISSING_LOCK_TEMPLATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"94390:29:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94390:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3159,"nodeType":"RevertStatement","src":"94383:38:0"}]}},{"assignments":[3164],"declarations":[{"constant":false,"id":3164,"mutability":"mutable","name":"proxy","nameLocation":"94501:5:0","nodeType":"VariableDeclaration","scope":3201,"src":"94473:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":3163,"nodeType":"UserDefinedTypeName","pathNode":{"id":3162,"name":"TransparentUpgradeableProxy","nameLocations":["94473:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"94473:27:0"},"referencedDeclaration":1082,"src":"94473:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"id":3172,"initialValue":{"arguments":[{"id":3168,"name":"publicLockImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3146,"src":"94548:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3169,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"94570:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3170,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3127,"src":"94595:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"94509:31:0","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_TransparentUpgradeableProxy_$1082_$","typeString":"function (address,address,bytes memory) payable returns (contract TransparentUpgradeableProxy)"},"typeName":{"id":3166,"nodeType":"UserDefinedTypeName","pathNode":{"id":3165,"name":"TransparentUpgradeableProxy","nameLocations":["94513:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"94513:27:0"},"referencedDeclaration":1082,"src":"94513:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}},"id":3171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94509:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"nodeType":"VariableDeclarationStatement","src":"94473:132:0"},{"assignments":[3174],"declarations":[{"constant":false,"id":3174,"mutability":"mutable","name":"newLock","nameLocation":"94627:7:0","nodeType":"VariableDeclaration","scope":3201,"src":"94611:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3173,"name":"address","nodeType":"ElementaryTypeName","src":"94611:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":3182,"initialValue":{"arguments":[{"arguments":[{"id":3179,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3164,"src":"94653:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}],"id":3178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94645:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3177,"name":"address","nodeType":"ElementaryTypeName","src":"94645:7:0","typeDescriptions":{}}},"id":3180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94645:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94637:8:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3175,"name":"address","nodeType":"ElementaryTypeName","src":"94637:8:0","stateMutability":"payable","typeDescriptions":{}}},"id":3181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94637:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"94611:49:0"},{"expression":{"id":3191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3183,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"94694:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3185,"indexExpression":{"id":3184,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"94700:7:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"94694:14:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"74727565","id":3187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"94742:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":3188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94766:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94798:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3186,"name":"LockBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"94711:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_LockBalances_$2798_storage_ptr_$","typeString":"type(struct Unlock.LockBalances storage pointer)"}},"id":3190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["94732:8:0","94754:10:0","94775:21:0"],"names":["deployed","totalSales","yieldedDiscountTokens"],"nodeType":"FunctionCall","src":"94711:95:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_memory_ptr","typeString":"struct Unlock.LockBalances memory"}},"src":"94694:112:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3192,"nodeType":"ExpressionStatement","src":"94694:112:0"},{"eventCall":{"arguments":[{"expression":{"id":3194,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"94847:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"94851:6:0","memberName":"sender","nodeType":"MemberAccess","src":"94847:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3196,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"94859:7:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3193,"name":"NewLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"94839:7:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94839:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3198,"nodeType":"EmitStatement","src":"94834:33:0"},{"expression":{"id":3199,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"94880:7:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":3133,"id":3200,"nodeType":"Return","src":"94873:14:0"}]},"documentation":{"id":3125,"nodeType":"StructuredDocumentation","src":"93773:263:0","text":" Create an upgradeable lock using a specific PublicLock version\n @param data bytes containing the call to initialize the lock template\n (refer to createUpgradeableLock for more details)\n @param _lockVersion the version of the lock to use"},"functionSelector":"487a8a76","id":3202,"implemented":true,"kind":"function","modifiers":[],"name":"createUpgradeableLockAtVersion","nameLocation":"94048:30:0","nodeType":"FunctionDefinition","parameters":{"id":3130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3127,"mutability":"mutable","name":"data","nameLocation":"94097:4:0","nodeType":"VariableDeclaration","scope":3202,"src":"94084:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3126,"name":"bytes","nodeType":"ElementaryTypeName","src":"94084:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3129,"mutability":"mutable","name":"_lockVersion","nameLocation":"94114:12:0","nodeType":"VariableDeclaration","scope":3202,"src":"94107:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3128,"name":"uint16","nodeType":"ElementaryTypeName","src":"94107:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"94078:52:0"},"returnParameters":{"id":3133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3202,"src":"94147:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3131,"name":"address","nodeType":"ElementaryTypeName","src":"94147:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"94146:9:0"},"scope":3993,"src":"94039:853:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3302,"nodeType":"Block","src":"95242:966:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3212,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"95252:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"95281:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"95273:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3213,"name":"address","nodeType":"ElementaryTypeName","src":"95273:7:0","typeDescriptions":{}}},"id":3216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95273:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"95252:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3222,"nodeType":"IfStatement","src":"95248:88:0","trueBody":{"id":3221,"nodeType":"Block","src":"95285:51:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3218,"name":"Unlock__MISSING_PROXY_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"95300:27:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95300:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3220,"nodeType":"RevertStatement","src":"95293:36:0"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3224,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"95380:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":3225,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"95393:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"95397:6:0","memberName":"sender","nodeType":"MemberAccess","src":"95393:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3223,"name":"_isLockManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"95365:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":3227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95365:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"74727565","id":3228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"95408:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"95365:47:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3234,"nodeType":"IfStatement","src":"95361:97:0","trueBody":{"id":3233,"nodeType":"Block","src":"95414:44:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3230,"name":"Unlock__MANAGER_ONLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2858,"src":"95429:20:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95429:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3232,"nodeType":"RevertStatement","src":"95422:29:0"}]}},{"assignments":[3237],"declarations":[{"constant":false,"id":3237,"mutability":"mutable","name":"lock","nameLocation":"95497:4:0","nodeType":"VariableDeclaration","scope":3302,"src":"95485:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"},"typeName":{"id":3236,"nodeType":"UserDefinedTypeName","pathNode":{"id":3235,"name":"IPublicLock","nameLocations":["95485:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":1907,"src":"95485:11:0"},"referencedDeclaration":1907,"src":"95485:11:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"visibility":"internal"}],"id":3241,"initialValue":{"arguments":[{"id":3239,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"95516:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3238,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"95504:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95504:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"nodeType":"VariableDeclarationStatement","src":"95485:43:0"},{"assignments":[3243],"declarations":[{"constant":false,"id":3243,"mutability":"mutable","name":"currentVersion","nameLocation":"95541:14:0","nodeType":"VariableDeclaration","scope":3302,"src":"95534:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3242,"name":"uint16","nodeType":"ElementaryTypeName","src":"95534:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":3247,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3244,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3237,"src":"95558:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"95563:17:0","memberName":"publicLockVersion","nodeType":"MemberAccess","referencedDeclaration":1286,"src":"95558:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint16_$","typeString":"function () pure external returns (uint16)"}},"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95558:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"95534:48:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3248,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"95593:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3249,"name":"currentVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3243,"src":"95604:14:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"95621:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"95604:18:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"95593:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3257,"nodeType":"IfStatement","src":"95589:83:0","trueBody":{"id":3256,"nodeType":"Block","src":"95624:48:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3253,"name":"Unlock__VERSION_TOO_HIGH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"95639:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95639:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3255,"nodeType":"RevertStatement","src":"95632:33:0"}]}},{"assignments":[3259],"declarations":[{"constant":false,"id":3259,"mutability":"mutable","name":"impl","nameLocation":"95710:4:0","nodeType":"VariableDeclaration","scope":3302,"src":"95702:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3258,"name":"address","nodeType":"ElementaryTypeName","src":"95702:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3263,"initialValue":{"baseExpression":{"id":3260,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"95717:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3262,"indexExpression":{"id":3261,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"95734:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"95717:25:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"95702:40:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3264,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3259,"src":"95752:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"95768:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"95760:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3265,"name":"address","nodeType":"ElementaryTypeName","src":"95760:7:0","typeDescriptions":{}}},"id":3268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95760:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"95752:18:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3274,"nodeType":"IfStatement","src":"95748:72:0","trueBody":{"id":3273,"nodeType":"Block","src":"95772:48:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3270,"name":"Unlock__MISSING_TEMPLATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"95787:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95787:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3272,"nodeType":"RevertStatement","src":"95780:33:0"}]}},{"assignments":[3277],"declarations":[{"constant":false,"id":3277,"mutability":"mutable","name":"proxy","nameLocation":"95854:5:0","nodeType":"VariableDeclaration","scope":3302,"src":"95826:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":3276,"nodeType":"UserDefinedTypeName","pathNode":{"id":3275,"name":"TransparentUpgradeableProxy","nameLocations":["95826:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"95826:27:0"},"referencedDeclaration":1082,"src":"95826:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"id":3281,"initialValue":{"arguments":[{"id":3279,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"95897:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3278,"name":"TransparentUpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1082,"src":"95862:27:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransparentUpgradeableProxy_$1082_$","typeString":"type(contract TransparentUpgradeableProxy)"}},"id":3280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95862:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"nodeType":"VariableDeclarationStatement","src":"95826:88:0"},{"expression":{"arguments":[{"id":3285,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3277,"src":"95940:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},{"id":3286,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3259,"src":"95947:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3282,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"95921:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"id":3284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"95932:7:0","memberName":"upgrade","nodeType":"MemberAccess","referencedDeclaration":1190,"src":"95921:18:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_TransparentUpgradeableProxy_$1082_$_t_address_$returns$__$","typeString":"function (contract TransparentUpgradeableProxy,address) external"}},"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95921:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3288,"nodeType":"ExpressionStatement","src":"95921:31:0"},{"expression":{"arguments":[{"hexValue":"3078","id":3292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"96128:4:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""},"value":"0x"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""}],"expression":{"id":3289,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3237,"src":"96115:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"96120:7:0","memberName":"migrate","nodeType":"MemberAccess","referencedDeclaration":1878,"src":"96115:12:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":3293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96115:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3294,"nodeType":"ExpressionStatement","src":"96115:18:0"},{"eventCall":{"arguments":[{"id":3296,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"96158:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3297,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"96171:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":3295,"name":"LockUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"96145:12:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint16)"}},"id":3298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96145:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3299,"nodeType":"EmitStatement","src":"96140:39:0"},{"expression":{"id":3300,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"96192:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":3211,"id":3301,"nodeType":"Return","src":"96185:18:0"}]},"documentation":{"id":3203,"nodeType":"StructuredDocumentation","src":"94896:237:0","text":" @dev Upgrade a Lock template implementation\n @param lockAddress the address of the lock to be upgraded\n @param version the version number of the template\n @custom:oz-upgrades-unsafe-allow-reachable delegatecall"},"functionSelector":"ccf54648","id":3303,"implemented":true,"kind":"function","modifiers":[],"name":"upgradeLock","nameLocation":"95146:11:0","nodeType":"FunctionDefinition","parameters":{"id":3208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3205,"mutability":"mutable","name":"lockAddress","nameLocation":"95179:11:0","nodeType":"VariableDeclaration","scope":3303,"src":"95163:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3204,"name":"address","nodeType":"ElementaryTypeName","src":"95163:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3207,"mutability":"mutable","name":"version","nameLocation":"95203:7:0","nodeType":"VariableDeclaration","scope":3303,"src":"95196:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3206,"name":"uint16","nodeType":"ElementaryTypeName","src":"95196:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"95157:57:0"},"returnParameters":{"id":3211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3303,"src":"95233:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3209,"name":"address","nodeType":"ElementaryTypeName","src":"95233:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"95232:9:0"},"scope":3993,"src":"95137:1071:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3324,"nodeType":"Block","src":"96324:94:0","statements":[{"assignments":[3314],"declarations":[{"constant":false,"id":3314,"mutability":"mutable","name":"lock","nameLocation":"96342:4:0","nodeType":"VariableDeclaration","scope":3324,"src":"96330:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"},"typeName":{"id":3313,"nodeType":"UserDefinedTypeName","pathNode":{"id":3312,"name":"IPublicLock","nameLocations":["96330:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":1907,"src":"96330:11:0"},"referencedDeclaration":1907,"src":"96330:11:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"visibility":"internal"}],"id":3318,"initialValue":{"arguments":[{"id":3316,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3305,"src":"96361:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3315,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"96349:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96349:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"nodeType":"VariableDeclarationStatement","src":"96330:43:0"},{"expression":{"arguments":[{"id":3321,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3307,"src":"96405:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3319,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3314,"src":"96386:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"96391:13:0","memberName":"isLockManager","nodeType":"MemberAccess","referencedDeclaration":1550,"src":"96386:18:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96386:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3311,"id":3323,"nodeType":"Return","src":"96379:34:0"}]},"id":3325,"implemented":true,"kind":"function","modifiers":[],"name":"_isLockManager","nameLocation":"96221:14:0","nodeType":"FunctionDefinition","parameters":{"id":3308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3305,"mutability":"mutable","name":"lockAddress","nameLocation":"96249:11:0","nodeType":"VariableDeclaration","scope":3325,"src":"96241:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3304,"name":"address","nodeType":"ElementaryTypeName","src":"96241:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3307,"mutability":"mutable","name":"_sender","nameLocation":"96274:7:0","nodeType":"VariableDeclaration","scope":3325,"src":"96266:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3306,"name":"address","nodeType":"ElementaryTypeName","src":"96266:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"96235:50:0"},"returnParameters":{"id":3311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3310,"mutability":"mutable","name":"isManager","nameLocation":"96313:9:0","nodeType":"VariableDeclaration","scope":3325,"src":"96308:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3309,"name":"bool","nodeType":"ElementaryTypeName","src":"96308:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"96307:16:0"},"scope":3993,"src":"96212:206:0","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":3341,"nodeType":"Block","src":"96723:24:0","statements":[{"expression":{"components":[{"hexValue":"30","id":3337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"96737:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"96740:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":3339,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"96736:6:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"functionReturnParameters":3336,"id":3340,"nodeType":"Return","src":"96729:13:0"}]},"documentation":{"id":3326,"nodeType":"StructuredDocumentation","src":"96422:152:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] Kept for backwards compatibility"},"functionSelector":"0cb175e3","id":3342,"implemented":true,"kind":"function","modifiers":[],"name":"computeAvailableDiscountFor","nameLocation":"96586:27:0","nodeType":"FunctionDefinition","parameters":{"id":3331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3342,"src":"96619:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3327,"name":"address","nodeType":"ElementaryTypeName","src":"96619:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3342,"src":"96649:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3329,"name":"uint","nodeType":"ElementaryTypeName","src":"96649:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"96613:60:0"},"returnParameters":{"id":3336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3333,"mutability":"mutable","name":"discount","nameLocation":"96700:8:0","nodeType":"VariableDeclaration","scope":3342,"src":"96695:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3332,"name":"uint","nodeType":"ElementaryTypeName","src":"96695:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3335,"mutability":"mutable","name":"tokens","nameLocation":"96715:6:0","nodeType":"VariableDeclaration","scope":3342,"src":"96710:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3334,"name":"uint","nodeType":"ElementaryTypeName","src":"96710:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"96694:28:0"},"scope":3993,"src":"96577:170:0","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":3351,"nodeType":"Block","src":"97017:31:0","statements":[{"expression":{"expression":{"id":3348,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"97030:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97036:7:0","memberName":"basefee","nodeType":"MemberAccess","src":"97030:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3347,"id":3350,"nodeType":"Return","src":"97023:20:0"}]},"documentation":{"id":3343,"nodeType":"StructuredDocumentation","src":"96751:208:0","text":" Helper to get the network mining basefee as introduced in EIP-1559\n @dev this helper can be wrapped in try/catch statement to avoid\n revert in networks where EIP-1559 is not implemented"},"functionSelector":"ba5ea0d5","id":3352,"implemented":true,"kind":"function","modifiers":[],"name":"networkBaseFee","nameLocation":"96971:14:0","nodeType":"FunctionDefinition","parameters":{"id":3344,"nodeType":"ParameterList","parameters":[],"src":"96985:2:0"},"returnParameters":{"id":3347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3352,"src":"97011:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3345,"name":"uint","nodeType":"ElementaryTypeName","src":"97011:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"97010:6:0"},"scope":3993,"src":"96962:86:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3614,"nodeType":"Block","src":"97510:3076:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3362,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"97520:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"97529:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"97520:10:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3613,"nodeType":"IfStatement","src":"97516:3066:0","trueBody":{"id":3612,"nodeType":"Block","src":"97532:3050:0","statements":[{"assignments":[3366],"declarations":[{"constant":false,"id":3366,"mutability":"mutable","name":"valueInETH","nameLocation":"97545:10:0","nodeType":"VariableDeclaration","scope":3612,"src":"97540:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3365,"name":"uint","nodeType":"ElementaryTypeName","src":"97540:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3367,"nodeType":"VariableDeclarationStatement","src":"97540:15:0"},{"assignments":[3369],"declarations":[{"constant":false,"id":3369,"mutability":"mutable","name":"tokenAddress","nameLocation":"97571:12:0","nodeType":"VariableDeclaration","scope":3612,"src":"97563:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3368,"name":"address","nodeType":"ElementaryTypeName","src":"97563:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3376,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3371,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"97598:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97602:6:0","memberName":"sender","nodeType":"MemberAccess","src":"97598:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3370,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"97586:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97586:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97610:12:0","memberName":"tokenAddress","nodeType":"MemberAccess","referencedDeclaration":1631,"src":"97586:36:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97586:38:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"97563:61:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3377,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97636:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"97660:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"97652:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3378,"name":"address","nodeType":"ElementaryTypeName","src":"97652:7:0","typeDescriptions":{}}},"id":3381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97652:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"97636:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3383,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97666:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3384,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"97682:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"97666:20:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"97636:50:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3419,"nodeType":"Block","src":"97973:109:0","statements":[{"expression":{"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3415,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"98054:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3416,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"98067:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"98054:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3418,"nodeType":"ExpressionStatement","src":"98054:19:0"}]},"id":3420,"nodeType":"IfStatement","src":"97632:450:0","trueBody":{"id":3414,"nodeType":"Block","src":"97688:279:0","statements":[{"assignments":[3389],"declarations":[{"constant":false,"id":3389,"mutability":"mutable","name":"oracle","nameLocation":"97790:6:0","nodeType":"VariableDeclaration","scope":3414,"src":"97773:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"},"typeName":{"id":3388,"nodeType":"UserDefinedTypeName","pathNode":{"id":3387,"name":"IUniswapOracleV3","nameLocations":["97773:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":1948,"src":"97773:16:0"},"referencedDeclaration":1948,"src":"97773:16:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"visibility":"internal"}],"id":3393,"initialValue":{"baseExpression":{"id":3390,"name":"uniswapOracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"97799:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"}},"id":3392,"indexExpression":{"id":3391,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97814:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"97799:28:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"nodeType":"VariableDeclarationStatement","src":"97773:54:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3396,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"97849:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}],"id":3395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"97841:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3394,"name":"address","nodeType":"ElementaryTypeName","src":"97841:7:0","typeDescriptions":{}}},"id":3397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97841:15:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"97868:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3399,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"97860:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3398,"name":"address","nodeType":"ElementaryTypeName","src":"97860:7:0","typeDescriptions":{}}},"id":3401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97860:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"97841:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3413,"nodeType":"IfStatement","src":"97837:122:0","trueBody":{"id":3412,"nodeType":"Block","src":"97872:87:0","statements":[{"expression":{"id":3410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3403,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"97884:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3406,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97921:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3407,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"97935:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3408,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"97943:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3404,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"97897:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97904:16:0","memberName":"updateAndConsult","nodeType":"MemberAccess","referencedDeclaration":1947,"src":"97897:23:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":3409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97897:51:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"97884:64:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3411,"nodeType":"ExpressionStatement","src":"97884:64:0"}]}}]}},{"expression":{"arguments":[{"id":3422,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"98125:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3423,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"98145:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3424,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"98167:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3425,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"98183:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98187:6:0","memberName":"sender","nodeType":"MemberAccess","src":"98183:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3421,"name":"updateGrossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3642,"src":"98090:25:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address,uint256,address)"}},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98090:126:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3428,"nodeType":"ExpressionStatement","src":"98090:126:0"},{"expression":{"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":3429,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"98295:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3432,"indexExpression":{"expression":{"id":3430,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"98301:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98305:6:0","memberName":"sender","nodeType":"MemberAccess","src":"98301:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"98295:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"98313:10:0","memberName":"totalSales","nodeType":"MemberAccess","referencedDeclaration":2795,"src":"98295:28:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3434,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"98327:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"98295:42:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3436,"nodeType":"ExpressionStatement","src":"98295:42:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3437,"name":"_referrer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"98533:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98554:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98546:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3438,"name":"address","nodeType":"ElementaryTypeName","src":"98546:7:0","typeDescriptions":{}}},"id":3441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98546:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"98533:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3444,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"98580:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98584:6:0","memberName":"sender","nodeType":"MemberAccess","src":"98580:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3443,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"98568:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98568:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98592:17:0","memberName":"publicLockVersion","nodeType":"MemberAccess","referencedDeclaration":1286,"src":"98568:41:0","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint16_$","typeString":"function () pure external returns (uint16)"}},"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98568:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"3133","id":3449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98615:2:0","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"98568:49:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"98533:84:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3611,"nodeType":"IfStatement","src":"98520:2056:0","trueBody":{"id":3610,"nodeType":"Block","src":"98626:1950:0","statements":[{"assignments":[3454],"declarations":[{"constant":false,"id":3454,"mutability":"mutable","name":"udtOracle","nameLocation":"98653:9:0","nodeType":"VariableDeclaration","scope":3610,"src":"98636:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"},"typeName":{"id":3453,"nodeType":"UserDefinedTypeName","pathNode":{"id":3452,"name":"IUniswapOracleV3","nameLocations":["98636:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":1948,"src":"98636:16:0"},"referencedDeclaration":1948,"src":"98636:16:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"visibility":"internal"}],"id":3458,"initialValue":{"baseExpression":{"id":3455,"name":"uniswapOracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"98665:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"}},"id":3457,"indexExpression":{"id":3456,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"98680:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"98665:19:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"nodeType":"VariableDeclarationStatement","src":"98636:48:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3461,"name":"udtOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"98706:9:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}],"id":3460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98698:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3459,"name":"address","nodeType":"ElementaryTypeName","src":"98698:7:0","typeDescriptions":{}}},"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98698:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98728:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98720:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3463,"name":"address","nodeType":"ElementaryTypeName","src":"98720:7:0","typeDescriptions":{}}},"id":3466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98720:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"98698:32:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3609,"nodeType":"IfStatement","src":"98694:1874:0","trueBody":{"id":3608,"nodeType":"Block","src":"98732:1836:0","statements":[{"assignments":[3469],"declarations":[{"constant":false,"id":3469,"mutability":"mutable","name":"udtPrice","nameLocation":"98809:8:0","nodeType":"VariableDeclaration","scope":3608,"src":"98804:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3468,"name":"uint","nodeType":"ElementaryTypeName","src":"98804:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3478,"initialValue":{"arguments":[{"id":3472,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"98847:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":3475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98852:2:0","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":3474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98858:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"98852:8:0","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}},{"id":3476,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"98862:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3470,"name":"udtOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"98820:9:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98830:16:0","memberName":"updateAndConsult","nodeType":"MemberAccess","referencedDeclaration":1947,"src":"98820:26:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":3477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98820:47:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"98804:63:0"},{"assignments":[3480],"declarations":[{"constant":false,"id":3480,"mutability":"mutable","name":"balance","nameLocation":"98885:7:0","nodeType":"VariableDeclaration","scope":3608,"src":"98880:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3479,"name":"uint","nodeType":"ElementaryTypeName","src":"98880:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3490,"initialValue":{"arguments":[{"arguments":[{"id":3487,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"98933:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}],"id":3486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98925:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3485,"name":"address","nodeType":"ElementaryTypeName","src":"98925:7:0","typeDescriptions":{}}},"id":3488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98925:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3482,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"98910:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3481,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"98895:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98895:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98915:9:0","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1246,"src":"98895:29:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":3489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98895:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"98880:59:0"},{"assignments":[3492],"declarations":[{"constant":false,"id":3492,"mutability":"mutable","name":"baseFee","nameLocation":"99020:7:0","nodeType":"VariableDeclaration","scope":3608,"src":"99015:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3491,"name":"uint","nodeType":"ElementaryTypeName","src":"99015:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3493,"nodeType":"VariableDeclarationStatement","src":"99015:12:0"},{"clauses":[{"block":{"id":3514,"nodeType":"Block","src":"99089:177:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3500,"name":"_basefee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"99140:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99152:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"99140:13:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3512,"nodeType":"Block","src":"99205:49:0","statements":[{"expression":{"id":3510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3508,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99221:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3509,"name":"_basefee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"99231:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99221:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3511,"nodeType":"ExpressionStatement","src":"99221:18:0"}]},"id":3513,"nodeType":"IfStatement","src":"99136:118:0","trueBody":{"id":3507,"nodeType":"Block","src":"99155:44:0","statements":[{"expression":{"id":3505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3503,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99171:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"313030","id":3504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99181:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"99171:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3506,"nodeType":"ExpressionStatement","src":"99171:13:0"}]}}]},"errorName":"","id":3515,"nodeType":"TryCatchClause","parameters":{"id":3499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3498,"mutability":"mutable","name":"_basefee","nameLocation":"99079:8:0","nodeType":"VariableDeclaration","scope":3515,"src":"99074:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3497,"name":"uint","nodeType":"ElementaryTypeName","src":"99074:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"99073:15:0"},"src":"99065:201:0"},{"block":{"id":3520,"nodeType":"Block","src":"99273:83:0","statements":[{"expression":{"id":3518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3516,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99330:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"313030","id":3517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99340:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"99330:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3519,"nodeType":"ExpressionStatement","src":"99330:13:0"}]},"errorName":"","id":3521,"nodeType":"TryCatchClause","src":"99267:89:0"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3494,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"99043:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}},"id":3495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"99048:14:0","memberName":"networkBaseFee","nodeType":"MemberAccess","referencedDeclaration":3352,"src":"99043:19:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":3496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"99043:21:0","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3522,"nodeType":"TryStatement","src":"99039:317:0"},{"assignments":[3524],"declarations":[{"constant":false,"id":3524,"mutability":"mutable","name":"tokensToDistribute","nameLocation":"99470:18:0","nodeType":"VariableDeclaration","scope":3608,"src":"99465:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3523,"name":"uint","nodeType":"ElementaryTypeName","src":"99465:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3541,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3525,"name":"estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"99493:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3526,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99519:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99493:33:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3528,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99492:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_125000000000000000000_by_1","typeString":"int_const 125000000000000000000"},"id":3533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"313235","id":3529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99543:3:0","typeDescriptions":{"typeIdentifier":"t_rational_125_by_1","typeString":"int_const 125"},"value":"125"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":3532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99549:2:0","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":3531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99555:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"99549:8:0","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}},"src":"99543:14:0","typeDescriptions":{"typeIdentifier":"t_rational_125000000000000000000_by_1","typeString":"int_const 125000000000000000000"}}],"id":3534,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"99542:16:0","typeDescriptions":{"typeIdentifier":"t_rational_125000000000000000000_by_1","typeString":"int_const 125000000000000000000"}},"src":"99492:66:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3536,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99491:68:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99574:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"99491:86:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3539,"name":"udtPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"99592:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99491:109:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"99465:135:0"},{"assignments":[3543],"declarations":[{"constant":false,"id":3543,"mutability":"mutable","name":"maxTokens","nameLocation":"99760:9:0","nodeType":"VariableDeclaration","scope":3608,"src":"99755:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3542,"name":"uint","nodeType":"ElementaryTypeName","src":"99755:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3560,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3544,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"99773:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3545,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"99783:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99773:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3547,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99772:22:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99810:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99815:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3550,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"99819:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99815:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3552,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99814:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3553,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"99833:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99814:38:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99810:42:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3556,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99809:44:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99772:81:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3558,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"99868:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99772:115:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"99755:132:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3561,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"99936:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3562,"name":"maxTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"99957:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99936:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3569,"nodeType":"IfStatement","src":"99932:93:0","trueBody":{"id":3568,"nodeType":"Block","src":"99968:57:0","statements":[{"expression":{"id":3566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3564,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"99982:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3565,"name":"maxTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"100003:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99982:30:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3567,"nodeType":"ExpressionStatement","src":"99982:30:0"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3570,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100041:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"100062:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"100041:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3607,"nodeType":"IfStatement","src":"100037:521:0","trueBody":{"id":3606,"nodeType":"Block","src":"100065:493:0","statements":[{"assignments":[3574],"declarations":[{"constant":false,"id":3574,"mutability":"mutable","name":"devReward","nameLocation":"100180:9:0","nodeType":"VariableDeclaration","scope":3606,"src":"100175:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3573,"name":"uint","nodeType":"ElementaryTypeName","src":"100175:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3581,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3575,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100193:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3230","id":3576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"100214:2:0","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"src":"100193:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3578,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"100192:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"100220:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"100192:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"100175:48:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3582,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"100242:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3583,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100252:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100242:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3605,"nodeType":"IfStatement","src":"100238:308:0","trueBody":{"id":3604,"nodeType":"Block","src":"100272:274:0","statements":[{"expression":{"arguments":[{"id":3589,"name":"_referrer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"100394:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3590,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100421:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3591,"name":"devReward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"100442:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100421:30:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3586,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"100363:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3585,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"100348:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100348:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"100368:8:0","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1234,"src":"100348:28:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100348:119:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3594,"nodeType":"ExpressionStatement","src":"100348:119:0"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3599,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2699,"src":"100512:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100512:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3601,"name":"devReward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"100521:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3596,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"100498:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3595,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"100483:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100483:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"100503:8:0","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1234,"src":"100483:28:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100483:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3603,"nodeType":"ExpressionStatement","src":"100483:48:0"}]}}]}}]}}]}}]}}]},"documentation":{"id":3353,"nodeType":"StructuredDocumentation","src":"97052:356:0","text":" This function keeps track of the added GDP, as well as grants of discount tokens\n to the referrer, if applicable.\n The number of discount tokens granted is based on the value of the referal,\n the current growth rate and the lock's discount token distribution rate\n This function is invoked by a previously deployed lock only."},"functionSelector":"939d9f1f","id":3615,"implemented":true,"kind":"function","modifiers":[{"id":3360,"kind":"modifierInvocation","modifierName":{"id":3359,"name":"onlyFromDeployedLock","nameLocations":["97489:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":2811,"src":"97489:20:0"},"nodeType":"ModifierInvocation","src":"97489:20:0"}],"name":"recordKeyPurchase","nameLocation":"97420:17:0","nodeType":"FunctionDefinition","parameters":{"id":3358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3355,"mutability":"mutable","name":"_value","nameLocation":"97448:6:0","nodeType":"VariableDeclaration","scope":3615,"src":"97443:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3354,"name":"uint","nodeType":"ElementaryTypeName","src":"97443:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3357,"mutability":"mutable","name":"_referrer","nameLocation":"97468:9:0","nodeType":"VariableDeclaration","scope":3615,"src":"97460:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3356,"name":"address","nodeType":"ElementaryTypeName","src":"97460:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"97437:44:0"},"returnParameters":{"id":3361,"nodeType":"ParameterList","parameters":[],"src":"97510:0:0"},"scope":3993,"src":"97411:3175:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3641,"nodeType":"Block","src":"100810:208:0","statements":[{"expression":{"id":3631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3627,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"100836:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3628,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"100858:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3629,"name":"_valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3618,"src":"100880:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100858:33:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100836:55:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3632,"nodeType":"ExpressionStatement","src":"100836:55:0"},{"eventCall":{"arguments":[{"id":3634,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"100921:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3635,"name":"_valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3618,"src":"100948:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3636,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3620,"src":"100967:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3637,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3622,"src":"100988:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3638,"name":"_lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3624,"src":"101002:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3633,"name":"GNPChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2916,"src":"100903:10:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address,uint256,address)"}},"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100903:110:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3640,"nodeType":"EmitStatement","src":"100898:115:0"}]},"documentation":{"id":3616,"nodeType":"StructuredDocumentation","src":"100590:84:0","text":" Update the GNP by a new value.\n Emits an event to simply tracking"},"id":3642,"implemented":true,"kind":"function","modifiers":[],"name":"updateGrossNetworkProduct","nameLocation":"100686:25:0","nodeType":"FunctionDefinition","parameters":{"id":3625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3618,"mutability":"mutable","name":"_valueInETH","nameLocation":"100722:11:0","nodeType":"VariableDeclaration","scope":3642,"src":"100717:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3617,"name":"uint","nodeType":"ElementaryTypeName","src":"100717:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3620,"mutability":"mutable","name":"_tokenAddress","nameLocation":"100747:13:0","nodeType":"VariableDeclaration","scope":3642,"src":"100739:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3619,"name":"address","nodeType":"ElementaryTypeName","src":"100739:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3622,"mutability":"mutable","name":"_value","nameLocation":"100771:6:0","nodeType":"VariableDeclaration","scope":3642,"src":"100766:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3621,"name":"uint","nodeType":"ElementaryTypeName","src":"100766:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3624,"mutability":"mutable","name":"_lock","nameLocation":"100791:5:0","nodeType":"VariableDeclaration","scope":3642,"src":"100783:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3623,"name":"address","nodeType":"ElementaryTypeName","src":"100783:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"100711:89:0"},"returnParameters":{"id":3626,"nodeType":"ParameterList","parameters":[],"src":"100810:0:0"},"scope":3993,"src":"100677:341:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3653,"nodeType":"Block","src":"101301:17:0","statements":[{"functionReturnParameters":3651,"id":3652,"nodeType":"Return","src":"101307:7:0"}]},"documentation":{"id":3643,"nodeType":"StructuredDocumentation","src":"101022:157:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] only Kept for backwards compatibility"},"functionSelector":"36524663","id":3654,"implemented":true,"kind":"function","modifiers":[{"id":3650,"kind":"modifierInvocation","modifierName":{"id":3649,"name":"onlyFromDeployedLock","nameLocations":["101280:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":2811,"src":"101280:20:0"},"nodeType":"ModifierInvocation","src":"101280:20:0"}],"name":"recordConsumedDiscount","nameLocation":"101191:22:0","nodeType":"FunctionDefinition","parameters":{"id":3648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3654,"src":"101219:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3644,"name":"uint","nodeType":"ElementaryTypeName","src":"101219:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3654,"src":"101245:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3646,"name":"uint","nodeType":"ElementaryTypeName","src":"101245:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"101213:54:0"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"101301:0:0"},"scope":3993,"src":"101182:136:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3661,"nodeType":"Block","src":"101455:20:0","statements":[{"expression":{"hexValue":"3132","id":3659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"101468:2:0","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":3658,"id":3660,"nodeType":"Return","src":"101461:9:0"}]},"functionSelector":"4220bd46","id":3662,"implemented":true,"kind":"function","modifiers":[],"name":"unlockVersion","nameLocation":"101408:13:0","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[],"src":"101421:2:0"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3662,"src":"101447:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3656,"name":"uint16","nodeType":"ElementaryTypeName","src":"101447:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"101446:8:0"},"scope":3993,"src":"101399:76:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":3674,"nodeType":"Block","src":"101635:37:0","statements":[{"expression":{"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3670,"name":"protocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"101641:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3671,"name":"_protocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3665,"src":"101655:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"101641:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3673,"nodeType":"ExpressionStatement","src":"101641:26:0"}]},"documentation":{"id":3663,"nodeType":"StructuredDocumentation","src":"101479:91:0","text":" Set the fee used by the protocol\n @param _protocolFee fee in basic point"},"functionSelector":"787dce3d","id":3675,"implemented":true,"kind":"function","modifiers":[{"id":3668,"kind":"modifierInvocation","modifierName":{"id":3667,"name":"onlyOwner","nameLocations":["101625:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"101625:9:0"},"nodeType":"ModifierInvocation","src":"101625:9:0"}],"name":"setProtocolFee","nameLocation":"101582:14:0","nodeType":"FunctionDefinition","parameters":{"id":3666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3665,"mutability":"mutable","name":"_protocolFee","nameLocation":"101602:12:0","nodeType":"VariableDeclaration","scope":3675,"src":"101597:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3664,"name":"uint","nodeType":"ElementaryTypeName","src":"101597:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"101596:19:0"},"returnParameters":{"id":3669,"nodeType":"ParameterList","parameters":[],"src":"101635:0:0"},"scope":3993,"src":"101573:99:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3726,"nodeType":"Block","src":"101943:315:0","statements":[{"expression":{"id":3695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3693,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"101949:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3694,"name":"_udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3678,"src":"101955:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"101949:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3696,"nodeType":"ExpressionStatement","src":"101949:10:0"},{"expression":{"id":3699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3697,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"101965:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3698,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3680,"src":"101972:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"101965:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3700,"nodeType":"ExpressionStatement","src":"101965:12:0"},{"expression":{"id":3703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3701,"name":"estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"101983:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3702,"name":"_estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"102009:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"101983:50:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3704,"nodeType":"ExpressionStatement","src":"101983:50:0"},{"expression":{"id":3707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3705,"name":"globalTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"102040:17:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3706,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3684,"src":"102060:7:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"102040:27:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3708,"nodeType":"ExpressionStatement","src":"102040:27:0"},{"expression":{"id":3711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3709,"name":"globalBaseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"102073:18:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3710,"name":"_URI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3686,"src":"102094:4:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"102073:25:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3712,"nodeType":"ExpressionStatement","src":"102073:25:0"},{"expression":{"id":3715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3713,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2839,"src":"102105:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3714,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3688,"src":"102115:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"102105:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3716,"nodeType":"ExpressionStatement","src":"102105:18:0"},{"eventCall":{"arguments":[{"id":3718,"name":"_udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3678,"src":"102155:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3719,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3680,"src":"102167:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3720,"name":"_estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"102180:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3721,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3684,"src":"102212:7:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":3722,"name":"_URI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3686,"src":"102227:4:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":3723,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3688,"src":"102239:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3717,"name":"ConfigUnlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2900,"src":"102135:12:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,string memory,string memory,uint256)"}},"id":3724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"102135:118:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3725,"nodeType":"EmitStatement","src":"102130:123:0"}]},"documentation":{"id":3676,"nodeType":"StructuredDocumentation","src":"101676:73:0","text":" @notice Allows the owner to update configuration variables"},"functionSelector":"7d8fb641","id":3727,"implemented":true,"kind":"function","modifiers":[{"id":3691,"kind":"modifierInvocation","modifierName":{"id":3690,"name":"onlyOwner","nameLocations":["101933:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"101933:9:0"},"nodeType":"ModifierInvocation","src":"101933:9:0"}],"name":"configUnlock","nameLocation":"101761:12:0","nodeType":"FunctionDefinition","parameters":{"id":3689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3678,"mutability":"mutable","name":"_udt","nameLocation":"101787:4:0","nodeType":"VariableDeclaration","scope":3727,"src":"101779:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3677,"name":"address","nodeType":"ElementaryTypeName","src":"101779:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3680,"mutability":"mutable","name":"_weth","nameLocation":"101805:5:0","nodeType":"VariableDeclaration","scope":3727,"src":"101797:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3679,"name":"address","nodeType":"ElementaryTypeName","src":"101797:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3682,"mutability":"mutable","name":"_estimatedGasForPurchase","nameLocation":"101821:24:0","nodeType":"VariableDeclaration","scope":3727,"src":"101816:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3681,"name":"uint","nodeType":"ElementaryTypeName","src":"101816:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3684,"mutability":"mutable","name":"_symbol","nameLocation":"101867:7:0","nodeType":"VariableDeclaration","scope":3727,"src":"101851:23:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":3683,"name":"string","nodeType":"ElementaryTypeName","src":"101851:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3686,"mutability":"mutable","name":"_URI","nameLocation":"101896:4:0","nodeType":"VariableDeclaration","scope":3727,"src":"101880:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":3685,"name":"string","nodeType":"ElementaryTypeName","src":"101880:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3688,"mutability":"mutable","name":"_chainId","nameLocation":"101911:8:0","nodeType":"VariableDeclaration","scope":3727,"src":"101906:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3687,"name":"uint","nodeType":"ElementaryTypeName","src":"101906:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"101773:150:0"},"returnParameters":{"id":3692,"nodeType":"ParameterList","parameters":[],"src":"101943:0:0"},"scope":3993,"src":"101752:506:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3759,"nodeType":"Block","src":"102422:334:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3735,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"102432:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3737,"indexExpression":{"id":3736,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102452:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"102432:39:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"102475:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"102432:44:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3744,"nodeType":"IfStatement","src":"102428:103:0","trueBody":{"id":3743,"nodeType":"Block","src":"102478:53:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3740,"name":"Unlock__MISSING_LOCK_TEMPLATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"102493:29:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"102493:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3742,"nodeType":"RevertStatement","src":"102486:38:0"}]}},{"expression":{"id":3749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3745,"name":"publicLockLatestVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2854,"src":"102562:23:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3746,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"102588:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3748,"indexExpression":{"id":3747,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102608:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"102588:39:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"102562:65:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":3750,"nodeType":"ExpressionStatement","src":"102562:65:0"},{"expression":{"id":3753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3751,"name":"publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2826,"src":"102667:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3752,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102687:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"102667:38:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3754,"nodeType":"ExpressionStatement","src":"102667:38:0"},{"eventCall":{"arguments":[{"id":3756,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102732:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3755,"name":"SetLockTemplate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"102716:15:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"102716:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3758,"nodeType":"EmitStatement","src":"102711:40:0"}]},"documentation":{"id":3728,"nodeType":"StructuredDocumentation","src":"102262:85:0","text":" @notice Set the default PublicLock template to use when creating locks"},"functionSelector":"ef67fde6","id":3760,"implemented":true,"kind":"function","modifiers":[{"id":3733,"kind":"modifierInvocation","modifierName":{"id":3732,"name":"onlyOwner","nameLocations":["102412:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"102412:9:0"},"nodeType":"ModifierInvocation","src":"102412:9:0"}],"name":"setLockTemplate","nameLocation":"102359:15:0","nodeType":"FunctionDefinition","parameters":{"id":3731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3730,"mutability":"mutable","name":"_publicLockAddress","nameLocation":"102383:18:0","nodeType":"VariableDeclaration","scope":3760,"src":"102375:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3729,"name":"address","nodeType":"ElementaryTypeName","src":"102375:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"102374:28:0"},"returnParameters":{"id":3734,"nodeType":"ParameterList","parameters":[],"src":"102422:0:0"},"scope":3993,"src":"102350:406:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3794,"nodeType":"Block","src":"103119:189:0","statements":[{"expression":{"id":3776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3770,"name":"uniswapOracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"103125:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"}},"id":3772,"indexExpression":{"id":3771,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3763,"src":"103140:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"103125:29:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3774,"name":"_oracleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"103174:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3773,"name":"IUniswapOracleV3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1948,"src":"103157:16:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"type(contract IUniswapOracleV3)"}},"id":3775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103157:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"src":"103125:64:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3777,"nodeType":"ExpressionStatement","src":"103125:64:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3778,"name":"_oracleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"103199:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"103225:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"103217:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"103217:7:0","typeDescriptions":{}}},"id":3782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103217:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"103199:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3793,"nodeType":"IfStatement","src":"103195:109:0","trueBody":{"id":3792,"nodeType":"Block","src":"103229:75:0","statements":[{"expression":{"arguments":[{"id":3788,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3763,"src":"103277:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3789,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"103292:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3785,"name":"_oracleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"103254:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3784,"name":"IUniswapOracleV3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1948,"src":"103237:16:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"type(contract IUniswapOracleV3)"}},"id":3786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103237:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"103270:6:0","memberName":"update","nodeType":"MemberAccess","referencedDeclaration":1925,"src":"103237:39:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":3790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103237:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3791,"nodeType":"ExpressionStatement","src":"103237:60:0"}]}}]},"documentation":{"id":3761,"nodeType":"StructuredDocumentation","src":"102760:259:0","text":" @notice allows the owner to set the oracle address to use for value conversions\n setting the _oracleAddress to address(0) removes support for the token\n @dev This will also call update to ensure at least one datapoint has been recorded."},"functionSelector":"5c38eb3a","id":3795,"implemented":true,"kind":"function","modifiers":[{"id":3768,"kind":"modifierInvocation","modifierName":{"id":3767,"name":"onlyOwner","nameLocations":["103109:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"103109:9:0"},"nodeType":"ModifierInvocation","src":"103109:9:0"}],"name":"setOracle","nameLocation":"103031:9:0","nodeType":"FunctionDefinition","parameters":{"id":3766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3763,"mutability":"mutable","name":"_tokenAddress","nameLocation":"103054:13:0","nodeType":"VariableDeclaration","scope":3795,"src":"103046:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3762,"name":"address","nodeType":"ElementaryTypeName","src":"103046:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3765,"mutability":"mutable","name":"_oracleAddress","nameLocation":"103081:14:0","nodeType":"VariableDeclaration","scope":3795,"src":"103073:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3764,"name":"address","nodeType":"ElementaryTypeName","src":"103073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"103040:59:0"},"returnParameters":{"id":3769,"nodeType":"ParameterList","parameters":[],"src":"103119:0:0"},"scope":3993,"src":"103022:286:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3817,"nodeType":"Block","src":"103497:177:0","statements":[{"expression":{"id":3806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3804,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"103503:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3805,"name":"_grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3797,"src":"103525:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"103503:42:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3807,"nodeType":"ExpressionStatement","src":"103503:42:0"},{"expression":{"id":3810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3808,"name":"totalDiscountGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2815,"src":"103551:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3809,"name":"_totalDiscountGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3799,"src":"103574:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"103551:44:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3811,"nodeType":"ExpressionStatement","src":"103551:44:0"},{"eventCall":{"arguments":[{"id":3813,"name":"_grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3797,"src":"103625:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3814,"name":"_totalDiscountGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3799,"src":"103647:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3812,"name":"ResetTrackedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"103607:17:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":3815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103607:62:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3816,"nodeType":"EmitStatement","src":"103602:67:0"}]},"functionSelector":"963a9478","id":3818,"implemented":true,"kind":"function","modifiers":[{"id":3802,"kind":"modifierInvocation","modifierName":{"id":3801,"name":"onlyOwner","nameLocations":["103487:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"103487:9:0"},"nodeType":"ModifierInvocation","src":"103487:9:0"}],"name":"resetTrackedValue","nameLocation":"103393:17:0","nodeType":"FunctionDefinition","parameters":{"id":3800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3797,"mutability":"mutable","name":"_grossNetworkProduct","nameLocation":"103421:20:0","nodeType":"VariableDeclaration","scope":3818,"src":"103416:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3796,"name":"uint","nodeType":"ElementaryTypeName","src":"103416:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3799,"mutability":"mutable","name":"_totalDiscountGranted","nameLocation":"103452:21:0","nodeType":"VariableDeclaration","scope":3818,"src":"103447:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3798,"name":"uint","nodeType":"ElementaryTypeName","src":"103447:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"103410:67:0"},"returnParameters":{"id":3803,"nodeType":"ParameterList","parameters":[],"src":"103497:0:0"},"scope":3993,"src":"103384:290:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3826,"nodeType":"Block","src":"103855:36:0","statements":[{"expression":{"id":3824,"name":"globalBaseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"103868:18:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3823,"id":3825,"nodeType":"Return","src":"103861:25:0"}]},"documentation":{"id":3819,"nodeType":"StructuredDocumentation","src":"103678:103:0","text":" @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks."},"functionSelector":"7ff94bb2","id":3827,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalBaseTokenURI","nameLocation":"103793:21:0","nodeType":"FunctionDefinition","parameters":{"id":3820,"nodeType":"ParameterList","parameters":[],"src":"103814:2:0"},"returnParameters":{"id":3823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3827,"src":"103840:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3821,"name":"string","nodeType":"ElementaryTypeName","src":"103840:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"103839:15:0"},"scope":3993,"src":"103784:107:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3835,"nodeType":"Block","src":"104070:35:0","statements":[{"expression":{"id":3833,"name":"globalTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"104083:17:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3832,"id":3834,"nodeType":"Return","src":"104076:24:0"}]},"documentation":{"id":3828,"nodeType":"StructuredDocumentation","src":"103895:102:0","text":" @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks."},"functionSelector":"35a750de","id":3836,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalTokenSymbol","nameLocation":"104009:20:0","nodeType":"FunctionDefinition","parameters":{"id":3829,"nodeType":"ParameterList","parameters":[],"src":"104029:2:0"},"returnParameters":{"id":3832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3836,"src":"104055:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3830,"name":"string","nodeType":"ElementaryTypeName","src":"104055:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"104054:15:0"},"scope":3993,"src":"104000:105:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3851,"nodeType":"Block","src":"104189:157:0","statements":[{"assignments":[3842],"declarations":[{"constant":false,"id":3842,"mutability":"mutable","name":"_ADMIN_SLOT","nameLocation":"104203:11:0","nodeType":"VariableDeclaration","scope":3851,"src":"104195:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"104195:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3844,"initialValue":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":3843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104217:66:0","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"nodeType":"VariableDeclarationStatement","src":"104195:88:0"},{"expression":{"expression":{"arguments":[{"id":3847,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"104323:11:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3845,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"104296:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":3846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104308:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"104296:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":3848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104296:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":3849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"104336:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"104296:45:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3840,"id":3850,"nodeType":"Return","src":"104289:52:0"}]},"functionSelector":"6e9960c3","id":3852,"implemented":true,"kind":"function","modifiers":[],"name":"getAdmin","nameLocation":"104148:8:0","nodeType":"FunctionDefinition","parameters":{"id":3837,"nodeType":"ParameterList","parameters":[],"src":"104156:2:0"},"returnParameters":{"id":3840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3839,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3852,"src":"104180:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3838,"name":"address","nodeType":"ElementaryTypeName","src":"104180:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"104179:9:0"},"scope":3993,"src":"104139:207:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3926,"nodeType":"Block","src":"104414:884:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":3855,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"104509:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3858,"indexExpression":{"expression":{"id":3856,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"104515:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104519:6:0","memberName":"sender","nodeType":"MemberAccess","src":"104515:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"104509:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"104527:8:0","memberName":"deployed","nodeType":"MemberAccess","referencedDeclaration":2793,"src":"104509:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":3860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"104539:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"104509:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3863,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"104566:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104570:6:0","memberName":"sender","nodeType":"MemberAccess","src":"104566:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3862,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"104554:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104554:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104578:17:0","memberName":"publicLockVersion","nodeType":"MemberAccess","referencedDeclaration":1286,"src":"104554:41:0","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint16_$","typeString":"function () pure external returns (uint16)"}},"id":3867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104554:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3133","id":3868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104601:2:0","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"104554:49:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"104509:94:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3871,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"104613:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104619:7:0","memberName":"chainid","nodeType":"MemberAccess","src":"104613:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":3873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104630:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"104613:18:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"104509:122:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3877,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"104653:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104657:6:0","memberName":"sender","nodeType":"MemberAccess","src":"104653:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3876,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"104641:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104641:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104665:14:0","memberName":"unlockProtocol","nodeType":"MemberAccess","referencedDeclaration":1641,"src":"104641:38:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104641:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"307833643534303943634531643435323333644531443465424445653734623845303034616244443133","id":3882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104691:42:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13"},"src":"104641:92:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"104509:224:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3925,"nodeType":"IfStatement","src":"104498:796:0","trueBody":{"id":3924,"nodeType":"Block","src":"104780:514:0","statements":[{"assignments":[3887],"declarations":[{"constant":false,"id":3887,"mutability":"mutable","name":"previousUnlock","nameLocation":"104796:14:0","nodeType":"VariableDeclaration","scope":3924,"src":"104788:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"},"typeName":{"id":3886,"nodeType":"UserDefinedTypeName","pathNode":{"id":3885,"name":"IUnlock","nameLocations":["104788:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":2258,"src":"104788:7:0"},"referencedDeclaration":2258,"src":"104788:7:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"}},"visibility":"internal"}],"id":3891,"initialValue":{"arguments":[{"hexValue":"307833643534303943634531643435323333644531443465424445653734623845303034616244443133","id":3889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104830:42:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3888,"name":"IUnlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2258,"src":"104813:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUnlock_$2258_$","typeString":"type(contract IUnlock)"}},"id":3890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104813:67:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"}},"nodeType":"VariableDeclarationStatement","src":"104788:92:0"},{"assignments":[3893,3895,3897],"declarations":[{"constant":false,"id":3893,"mutability":"mutable","name":"deployed","nameLocation":"104904:8:0","nodeType":"VariableDeclaration","scope":3924,"src":"104899:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3892,"name":"bool","nodeType":"ElementaryTypeName","src":"104899:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3895,"mutability":"mutable","name":"totalSales","nameLocation":"104927:10:0","nodeType":"VariableDeclaration","scope":3924,"src":"104922:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3894,"name":"uint","nodeType":"ElementaryTypeName","src":"104922:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3897,"mutability":"mutable","name":"yieldedDiscountTokens","nameLocation":"104952:21:0","nodeType":"VariableDeclaration","scope":3924,"src":"104947:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3896,"name":"uint","nodeType":"ElementaryTypeName","src":"104947:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3903,"initialValue":{"arguments":[{"expression":{"id":3900,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"105005:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105009:6:0","memberName":"sender","nodeType":"MemberAccess","src":"105005:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3898,"name":"previousUnlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"104984:14:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"}},"id":3899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104999:5:0","memberName":"locks","nodeType":"MemberAccess","referencedDeclaration":2146,"src":"104984:20:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address) view external returns (bool,uint256,uint256)"}},"id":3902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104984:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"104889:127:0"},{"condition":{"id":3904,"name":"deployed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3893,"src":"105078:8:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3922,"nodeType":"Block","src":"105230:58:0","statements":[{"errorCall":{"arguments":[{"expression":{"id":3918,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"105268:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105272:6:0","memberName":"sender","nodeType":"MemberAccess","src":"105268:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3917,"name":"Unlock__MISSING_LOCK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2872,"src":"105247:20:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":3920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105247:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3921,"nodeType":"RevertStatement","src":"105240:39:0"}]},"id":3923,"nodeType":"IfStatement","src":"105074:214:0","trueBody":{"id":3916,"nodeType":"Block","src":"105088:136:0","statements":[{"expression":{"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3905,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"105098:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3908,"indexExpression":{"expression":{"id":3906,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"105104:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105108:6:0","memberName":"sender","nodeType":"MemberAccess","src":"105104:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"105098:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3910,"name":"deployed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3893,"src":"105142:8:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":3911,"name":"totalSales","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3895,"src":"105162:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3912,"name":"yieldedDiscountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3897,"src":"105184:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3909,"name":"LockBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"105118:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_LockBalances_$2798_storage_ptr_$","typeString":"type(struct Unlock.LockBalances storage pointer)"}},"id":3913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105118:97:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_memory_ptr","typeString":"struct Unlock.LockBalances memory"}},"src":"105098:117:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3915,"nodeType":"ExpressionStatement","src":"105098:117:0"}]}}]}}]},"functionSelector":"ed9674bd","id":3927,"implemented":true,"kind":"function","modifiers":[],"name":"postLockUpgrade","nameLocation":"104389:15:0","nodeType":"FunctionDefinition","parameters":{"id":3853,"nodeType":"ParameterList","parameters":[],"src":"104404:2:0"},"returnParameters":{"id":3854,"nodeType":"ParameterList","parameters":[],"src":"104414:0:0"},"scope":3993,"src":"104380:918:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3964,"nodeType":"Block","src":"105765:141:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3939,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3930,"src":"105775:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"105792:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"105784:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3940,"name":"address","nodeType":"ElementaryTypeName","src":"105784:7:0","typeDescriptions":{}}},"id":3943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105784:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"105775:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3962,"nodeType":"Block","src":"105859:43:0","statements":[{"expression":{"arguments":[{"id":3959,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3934,"src":"105888:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3956,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3932,"src":"105875:2:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"105867:8:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3954,"name":"address","nodeType":"ElementaryTypeName","src":"105867:8:0","stateMutability":"payable","typeDescriptions":{}}},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105867:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105879:8:0","memberName":"transfer","nodeType":"MemberAccess","src":"105867:20:0","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105867:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3961,"nodeType":"ExpressionStatement","src":"105867:28:0"}]},"id":3963,"nodeType":"IfStatement","src":"105771:131:0","trueBody":{"id":3953,"nodeType":"Block","src":"105796:57:0","statements":[{"expression":{"arguments":[{"id":3949,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3932,"src":"105835:2:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3950,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3934,"src":"105839:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3946,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3930,"src":"105819:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3945,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"105804:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105804:21:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105826:8:0","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1234,"src":"105804:30:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105804:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3952,"nodeType":"ExpressionStatement","src":"105804:42:0"}]}}]},"documentation":{"id":3928,"nodeType":"StructuredDocumentation","src":"105302:360:0","text":" Functions which transfers tokens held by the contract\n It handles both ERC20 and the base currency.\n @dev This function is onlyOwner\n @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n @param to the address to transfer the tokens to\n @param amount the amount of tokens to transfer"},"functionSelector":"a64b6e5f","id":3965,"implemented":true,"kind":"function","modifiers":[{"id":3937,"kind":"modifierInvocation","modifierName":{"id":3936,"name":"onlyOwner","nameLocations":["105755:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"105755:9:0"},"nodeType":"ModifierInvocation","src":"105755:9:0"}],"name":"transferTokens","nameLocation":"105674:14:0","nodeType":"FunctionDefinition","parameters":{"id":3935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3930,"mutability":"mutable","name":"token","nameLocation":"105702:5:0","nodeType":"VariableDeclaration","scope":3965,"src":"105694:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3929,"name":"address","nodeType":"ElementaryTypeName","src":"105694:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3932,"mutability":"mutable","name":"to","nameLocation":"105721:2:0","nodeType":"VariableDeclaration","scope":3965,"src":"105713:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"105713:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3934,"mutability":"mutable","name":"amount","nameLocation":"105737:6:0","nodeType":"VariableDeclaration","scope":3965,"src":"105729:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3933,"name":"uint256","nodeType":"ElementaryTypeName","src":"105729:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"105688:59:0"},"returnParameters":{"id":3938,"nodeType":"ParameterList","parameters":[],"src":"105765:0:0"},"scope":3993,"src":"105665:241:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3978,"nodeType":"Block","src":"106234:29:0","statements":[{"expression":{"id":3976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"106240:18:0","subExpression":{"baseExpression":{"id":3973,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"106247:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3975,"indexExpression":{"id":3974,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"106253:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"106247:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3977,"nodeType":"ExpressionStatement","src":"106240:18:0"}]},"documentation":{"id":3966,"nodeType":"StructuredDocumentation","src":"105910:268:0","text":" Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n The lock will still be able to sell its memberships.\n @dev This function is onlyOwner\n @param lock address of the lock to remove"},"functionSelector":"4a387bef","id":3979,"implemented":true,"kind":"function","modifiers":[{"id":3971,"kind":"modifierInvocation","modifierName":{"id":3970,"name":"onlyOwner","nameLocations":["106224:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"106224:9:0"},"nodeType":"ModifierInvocation","src":"106224:9:0"}],"name":"removeLock","nameLocation":"106190:10:0","nodeType":"FunctionDefinition","parameters":{"id":3969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3968,"mutability":"mutable","name":"lock","nameLocation":"106209:4:0","nodeType":"VariableDeclaration","scope":3979,"src":"106201:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3967,"name":"address","nodeType":"ElementaryTypeName","src":"106201:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"106200:14:0"},"returnParameters":{"id":3972,"nodeType":"ParameterList","parameters":[],"src":"106234:0:0"},"scope":3993,"src":"106181:82:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3991,"nodeType":"Block","src":"106338:76:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3982,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"106348:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"106352:5:0","memberName":"value","nodeType":"MemberAccess","src":"106348:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":3984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"106361:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"106348:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3990,"nodeType":"IfStatement","src":"106344:66:0","trueBody":{"id":3989,"nodeType":"Block","src":"106364:46:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3986,"name":"Unlock__INVALID_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"106379:22:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"106379:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3988,"nodeType":"RevertStatement","src":"106372:31:0"}]}}]},"id":3992,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3980,"nodeType":"ParameterList","parameters":[],"src":"106318:2:0"},"returnParameters":{"id":3981,"nodeType":"ParameterList","parameters":[],"src":"106338:0:0"},"scope":3993,"src":"106311:103:0","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":3994,"src":"86803:19613:0","usedErrors":[2858,2860,2862,2864,2866,2868,2872,2874],"usedEvents":[2669,2880,2886,2900,2904,2916,2922,2928]}],"src":"208:106209:0"}}},"contracts":{"contracts/past-versions/UnlockV12.sol":{"Address":{"abi":[],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Address\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:Address\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_0[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\n","bytecode":{"object":"00000001012001900000000c0000613d0000008001000039000000400010043f0000000001000416000000000101004b0000000c0000c13d00000020010000390000010000100443000001200000044300000005010000410000000f0001042e000000000100001900000010000104300000000e000004320000000f0001042e00000010000104300000000000000000000000000000000000000000000000000000000200000000000000000000000000000040000001000000000000000000bab1010fbca505cd5e58703a8ecb63e1a12a3ee75f63c0e229e5e3497e4a51ae"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"Address_479\" {\n code {\n {\n /// @src 0:5044:13588 \"library Address {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"Address_479_deployed\")\n codecopy(_1, dataoffset(\"Address_479_deployed\"), _2)\n setimmutable(_1, \"library_deploy_address\", address())\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"Address_479_deployed\" {\n code {\n {\n /// @src 0:5044:13588 \"library Address {...\"\n revert(0, 0)\n }\n }\n data \".metadata\" hex\"a26469706673582212209fb4d236466ad13e5f0ec485713e8bc3bb05f5e03a6520b8b492209f0868e5a764736f6c63430008150033\"\n }\n}\n","hash":"010000073ebdff7330586f247d41146ea73dde9d2845ca003e0fa59ec33e7a40","factoryDependencies":{}},"AddressUpgradeable":{"abi":[],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"AddressUpgradeable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:AddressUpgradeable\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_0[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\n","bytecode":{"object":"00000001012001900000000c0000613d0000008001000039000000400010043f0000000001000416000000000101004b0000000c0000c13d00000020010000390000010000100443000001200000044300000005010000410000000f0001042e000000000100001900000010000104300000000e000004320000000f0001042e0000001000010430000000000000000000000000000000000000000000000000000000020000000000000000000000000000004000000100000000000000000011a5eb54bb86756ecdf8885f38d673712861af1fcc37472c95e9a64fb0d67d22"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"AddressUpgradeable_2541\" {\n code {\n {\n /// @src 0:70903:78572 \"library AddressUpgradeable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"AddressUpgradeable_2541_deployed\")\n codecopy(_1, dataoffset(\"AddressUpgradeable_2541_deployed\"), _2)\n setimmutable(_1, \"library_deploy_address\", address())\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"AddressUpgradeable_2541_deployed\" {\n code {\n {\n /// @src 0:70903:78572 \"library AddressUpgradeable {...\"\n revert(0, 0)\n }\n }\n data \".metadata\" hex\"a2646970667358221220e9e9c9395a5214e3993eb217f0a53e9b966c0a23d9de2b3c66d3c6943e6ac15964736f6c63430008150033\"\n }\n}\n","hash":"01000007362bb1f2b29fcd0894d609830c3d8b1a94e5d36a51cafc5d2f43afeb","factoryDependencies":{}},"Context":{"abi":[],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Context\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"ERC1967Proxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:ERC1967Proxy\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[7]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r3, stack[@ptr_return_data]\n\tadd\t128, r0, r8\n\tst.1\t64, r8\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_1\n\tptr.add\tr1, r3, r4\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tsub!\tr3, r0, r5\n\tjump.ne\t@.BB0_53\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_62\n\tadd\tstack[@returndatasize], r0, r3\n\tand\t31, r3, r2\n\tshr.s!\t5, r3, r1\n\tjump.eq\t@.BB0_76\n\tadd\tr0, r0, r5\n.BB0_51:\n\tshl.s\t5, r5, r6\n\tptr.add\tr4, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_51\n.BB0_76:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_68\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr4, r1, r4\n\tld\tr4, r4\n\tsub\t256, r2, r2\n\tshr\tr4, r2, r4\n\tshl\tr4, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_68\n.BB0_1:\n\tadd\t@CPI0_1[0], r3, r2\n\tsub.s!\t@CPI0_2[0], r2, r2\n\tjump.gt\t@.BB0_3\n.BB0_2:\n\tadd\t@CPI0_23[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI0_24[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_53:\n\tand\t31, r3, r6\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_80\n\tadd\tr0, r0, r7\n.BB0_55:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r5, r8\n\tjump.lt\t@.BB0_55\n.BB0_80:\n\tsub!\tr6, r0, r7\n\tjump.eq\t@.BB0_57\n\tshl.s\t3, r6, r6\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r7\n\tshl\tr7, r6, r7\n\tshr\tr7, r6, r7\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r6, r6\n\tshr\tr1, r6, r1\n\tshl\tr1, r6, r1\n\tor\tr1, r7, r1\n\tst.1\tr5, r1\n.BB0_57:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_69\n\tadd\tstack[@returndatasize], r0, r3\n\tand\t31, r3, r2\n\tshr.s!\t5, r3, r1\n\tjump.eq\t@.BB0_78\n\tadd\tr0, r0, r5\n.BB0_60:\n\tshl.s\t5, r5, r6\n\tptr.add\tr4, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_60\n.BB0_78:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_75\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr4, r1, r4\n\tld\tr4, r4\n\tsub\t256, r2, r2\n\tshr\tr4, r2, r4\n\tshl\tr4, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_75\n.BB0_3:\n\tadd\t159, r3, r2\n\tand\t@CPI0_3[0], r2, r2\n\tst.1\t64, r2\n\tand\t31, r3, r2\n\tshr.s!\t5, r3, r4\n\tjump.eq\t@.BB0_82\n\tadd\tr0, r0, r5\n.BB0_5:\n\tshl.s\t5, r5, r6\n\tptr.add\tr1, r6, r7\n\tld\tr7, r7\n\tadd\t128, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r4, r6\n\tjump.lt\t@.BB0_5\n.BB0_82:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_7\n\tshl.s\t5, r4, r4\n\tptr.add\tr1, r4, r1\n\tshl.s\t3, r2, r2\n\tadd\t128, r4, r4\n\tld.1\tr4, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tld\tr1, r1\n\tsub\t256, r2, r2\n\tshr\tr1, r2, r1\n\tshl\tr1, r2, r1\n\tor\tr1, r5, r1\n\tst.1\tr4, r1\n.BB0_7:\n\tsub.s!\t63, r3, r1\n\tjump.le\t@.BB0_8\n\tld.1\t128, r7\n\tand\t@CPI0_4[0], r7, r10\n\tsub.s!\t@CPI0_4[0], r7, r1\n\tjump.gt\t@.BB0_8\n\tld.1\t160, r2\n\tsub.s!\t@CPI0_5[0], r2, r1\n\tjump.gt\t@.BB0_8\n\tadd\t31, r2, r1\n\tadd\t@CPI0_6[0], r0, r4\n\tsub!\tr1, r3, r5\n\tadd\tr0, r0, r5\n\tadd.ge\tr4, r0, r5\n\tand\t@CPI0_6[0], r1, r1\n\tsub!\tr1, r0, r6\n\tadd.ge\tr0, r0, r4\n\tsub.s!\t@CPI0_6[0], r1, r1\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r1\n\tjump.ne\t@.BB0_8\n\tadd\t128, r2, r1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI0_5[0], r1, r4\n\tjump.gt\t@.BB0_2\n\tadd\t63, r1, r4\n\tsub.s\t32, r0, r9\n\tand\tr4, r9, r4\n\tld.1\t64, r11\n\tadd\tr11, r4, r4\n\tsub!\tr4, r11, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r4, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tadd\t128, r3, r3\n\tst.1\t64, r4\n\tst.1.inc\tr11, r1, r6\n\tadd\t160, r2, r2\n\tadd\tr1, r2, r4\n\tsub!\tr4, r3, r3\n\tjump.le\t@.BB0_16\n.BB0_8:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_62:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t31, r3, r4\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_77\n\tadd\tr0, r0, r6\n.BB0_64:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_64\n.BB0_77:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_66\n\tshl.s\t3, r4, r4\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_66:\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_68\n\tshl.s\t96, r3, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_69:\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr4, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r3, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t31, r3, r4\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_79\n\tadd\tr0, r0, r6\n.BB0_71:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_71\n.BB0_79:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_73\n\tshl.s\t3, r4, r4\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_73:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_74\n.BB0_75:\n.BB0_68:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r2\n\tadd.ge\tr1, r0, r3\n\tshl.s\t96, r3, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_74:\n\tshl.s\t96, r3, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_16:\n\tadd\tr11, r0, stack-[5]\n\tadd\tr10, r0, stack-[6]\n\tadd\tr9, r0, stack-[3]\n\tadd\tr8, r0, stack-[2]\n\tsub!\tr1, r0, r3\n\tjump.eq\t@.BB0_19\n\tadd\tr0, r0, r3\n.BB0_18:\n\tadd\tr3, r6, r4\n\tadd\tr3, r2, r5\n\tld.1\tr5, r5\n\tst.1\tr4, r5\n\tadd\t32, r3, r3\n\tsub!\tr3, r1, r4\n\tjump.lt\t@.BB0_18\n.BB0_19:\n\tadd\tr6, r0, stack-[4]\n\tadd\tr6, r1, r1\n\tst.1\tr1, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr7, r0, stack-[7]\n\tst.2\t4, r7\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_20\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_23\n\tld.1\t64, r1\n\tadd\t100, r1, r2\n\tadd\t@CPI0_20[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tadd\t@CPI0_21[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t45, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_17[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_22[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_23:\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tadd\tstack-[6], r0, r5\n\tor\tr2, r5, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tstack-[5], r0, r5\n\tadd\tstack-[4], r0, r7\n\tjump.eq\t@.BB0_8\n\tld.1\tr5, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_25\n.BB0_26:\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_19[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_25:\n\tld.1\t64, r4\n\tsub.s!\t@CPI0_13[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tadd\t96, r4, r1\n\tst.1\t64, r1\n\tadd\t64, r4, r1\n\tadd\t@CPI0_14[0], r0, r3\n\tst.1\tr1, r3\n\tadd\t39, r0, r1\n\tadd\tr4, r0, stack-[6]\n\tst.1.inc\tr4, r1, r3\n\tadd\t@CPI0_15[0], r0, r1\n\tadd\tr3, r0, stack-[1]\n\tst.1\tr3, r1\n\tld.1\tr5, r6\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_29\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r3\n\tjump\t@.BB0_30\n.BB0_29:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r7, r4\n\tadd.ge\tr3, r0, r7\n\tshl.s\t64, r7, r4\n\tsub.s!\t@CPI0_0[0], r6, r5\n\tadd.ge\tr3, r0, r6\n\tshl.s\t96, r6, r5\n\tor\tr5, r4, r5\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\tr5, r1, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r3\n.BB0_30:\n\tadd\t96, r0, r1\n\tsub!\tr3, r0, r4\n\tjump.ne\t@.BB0_40\n.BB0_31:\n\tld.1\tr1, r1\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_36\n\tsub!\tr1, r0, r2\n\tjump.ne\t@.BB0_34\n\tld.1\t64, r4\n\tadd\tr4, r0, stack-[7]\n\tadd\t@CPI0_17[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tadd\t32, r0, r2\n\tst.1\tr1, r2\n\tadd\tstack-[6], r0, r1\n\tld.1\tr1, r3\n\tadd\tr3, r0, stack-[6]\n\tadd\t36, r4, r1\n\tst.1\tr1, r3\n\tadd\t68, r4, r2\n\tadd\tstack-[1], r0, r1\n\tnear_call\tr0, @copy_memory_to_memory_with_cleanup, @DEFAULT_UNWIND\n\tadd\tstack-[6], r0, r1\n\tadd\t31, r1, r1\n\tand\tstack-[3], r1, r1\n\tadd\t68, r1, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tjump\t@.BB0_35\n.BB0_40:\n\tsub.s!\t@CPI0_5[0], r3, r1\n\tadd\tstack-[3], r0, r4\n\tjump.gt\t@.BB0_2\n\tadd\t63, r3, r1\n\tand\tr1, r4, r4\n\tld.1\t64, r1\n\tadd\tr1, r4, r4\n\tsub!\tr4, r1, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r4, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r4\n\tand\t31, r3, r4\n\tst.1.inc\tr1, r3, r9\n\tptr.add\tstack[@ptr_return_data], r0, r5\n\tshr.s!\t5, r3, r3\n\tjump.eq\t@.BB0_81\n\tadd\tr0, r0, r6\n.BB0_45:\n\tshl.s\t5, r6, r7\n\tadd\tr9, r7, r8\n\tptr.add\tr5, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r3, r7\n\tjump.lt\t@.BB0_45\n.BB0_81:\n\tadd\tr9, r0, stack-[2]\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_31\n\tshl.s\t5, r3, r3\n\tptr.add\tr5, r3, r5\n\tadd\tstack-[2], r3, r3\n\tshl.s\t3, r4, r4\n\tld.1\tr3, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr5, r5\n\tsub\t256, r4, r4\n\tshr\tr5, r4, r5\n\tshl\tr5, r4, r4\n\tor\tr4, r6, r4\n\tst.1\tr3, r4\n\tjump\t@.BB0_31\n.BB0_36:\n\tsub!\tr1, r0, r1\n\tadd\tstack-[7], r0, r2\n\tjump.ne\t@.BB0_26\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tst.2\t4, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_20\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_26\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_16[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t29, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_17[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_18[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_20:\n\trevert\n.BB0_34:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[2], r0, r4\n.BB0_35:\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.ge\tr2, r0, r4\n\tshl.s\t64, r4, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\ncopy_memory_to_memory_with_cleanup:\n.func_begin1:\n\tsub!\tr3, r0, r4\n\tjump.eq\t@.BB1_3\n\tadd\tr0, r0, r4\n.BB1_2:\n\tadd\tr4, r2, r5\n\tadd\tr4, r1, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tadd\t32, r4, r4\n\tsub!\tr4, r3, r5\n\tjump.lt\t@.BB1_2\n.BB1_3:\n\tadd\tr3, r2, r1\n\tst.1\tr1, r0\n\tret\n.func_end1:\n\n__cxa_throw:\n\trevert\n\n__farcall:\n.func_begin2:\n.tmp0:\n\tfar_call\tr1, r2, @.BB3_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB3_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end2:\n\n__staticcall:\n.func_begin3:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB4_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB4_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end3:\n\n__delegatecall:\n.func_begin4:\n.tmp6:\n\tfar_call.delegate\tr1, r2, @.BB5_2\n.tmp7:\n\tadd\t1, r0, r2\n\tret\n.BB5_2:\n.tmp8:\n\tadd\tr0, r0, r2\n\tret\n.func_end4:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.p2align\t5\nptr_return_data:\n.cell\t0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell -18446744073709551457\nCPI0_2:\n\t.cell -18446744073709551489\nCPI0_3:\n\t.cell 8589934560\nCPI0_4:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_5:\n\t.cell 18446744073709551615\nCPI0_6:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_7:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_8:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_9:\n\t.cell 24440054405305269366569402256811496959409073762505157381672968839269610695612\nCPI0_10:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_11:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_12:\n\t.cell -30536698362301869620703524882028299911890425965968411027149867401609008632517\nCPI0_13:\n\t.cell 18446744073709551519\nCPI0_14:\n\t.cell 14654901866877395549149391597484105336708473837108585137082493300548441210880\nCPI0_15:\n\t.cell 29577713123142787666065354962605974352286555015652805685687967870311454567532\nCPI0_16:\n\t.cell 29577713123142787666064487680123823951345158729797978021083438401868913442816\nCPI0_17:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_18:\n\t.cell 7922816251426433759354395033600\nCPI0_19:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_20:\n\t.cell 50411903926665684337970802942352511357568373430877458990420567558264874598400\nCPI0_21:\n\t.cell 31354931755624933654031447922210259146857421806447843296373930569683382247534\nCPI0_22:\n\t.cell 10458117451882892562347801444352\nCPI0_23:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\nCPI0_24:\n\t.cell 2852213850513516153367582212096\n","bytecode":{"object":"00020000000000020007000000000002000000000301001900000060033002700000008b0330019700010000003103550000008008000039000000400080043f00000001022001900000002e0000c13d000000000431034f0000009402000041000000000202041a0000008f02200197000000000503004b000000370000c13d0000000001000414000000040320008c000000ba0000c13d00000000030000310000001f0230018f00000005013002720000001f0000613d00000000050000190000000506500210000000000764034f000000000707043b00000000007604350000000105500039000000000615004b000000180000413d000000000502004b000001080000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000414034f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000210435000001080000013d0000008c023000410000008d0220009c0000006e0000213d000000a20100004100000000001004350000004101000039000000040010043f000000a30100004100000227000104300000001f0630018f0000000505300272000000420000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000857004b0000003b0000413d000000000706004b000000500000613d00000003066002100000000505500210000000000705043300000000076701cf000000000767022f000000000151034f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000000001000414000000040520008c000000e10000c13d00000000030000310000001f0230018f00000005013002720000005f0000613d00000000050000190000000506500210000000000764034f000000000707043b00000000007604350000000105500039000000000615004b000000580000413d000000000502004b000001080000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000414034f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000210435000001080000013d0000009f023000390000008e02200197000000400020043f0000001f0230018f00000005043002720000007d0000613d00000000050000190000000506500210000000000761034f000000000707043b000000800660003900000000007604350000000105500039000000000645004b000000750000413d000000000502004b0000008c0000613d0000000504400210000000000141034f00000003022002100000008004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000003f0130008c000000b80000a13d000000800700043d0000008f0a7001970000008f0170009c000000b80000213d000000a00200043d000000900120009c000000b80000213d0000001f012000390000009104000041000000000531004b000000000500001900000000050480190000009101100197000000000601004b0000000004008019000000910110009c000000000405c019000000000104004b000000b80000c13d00000080012000390000000001010433000000900410009c000000310000213d0000003f04100039000000200900008a000000000494016f000000400b00043d00000000044b00190000000005b4004b00000000050000190000000105004039000000900640009c000000310000213d0000000105500190000000310000c13d0000008003300039000000400040043f00000000061b0436000000a0022000390000000004210019000000000334004b0000010f0000a13d000000000100001900000227000104300000008b030000410000008b0410009c0000000001038019000000c001100210022502200000040f0001000000010355000000000301001900000060033002700000001f0430018f0000008b0030019d0000008b033001970000000505300272000000cf0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000000c80000413d000000000604004b000000dd0000613d00000003044002100000000505500210000000000605043300000000064601cf000000000646022f000000000151034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000000101200190000001080000c13d000000600130021000000227000104300000008b040000410000008b0510009c0000000001048019000000c0011002100000006003300210000000000131019f022502200000040f0001000000010355000000000301001900000060033002700000001f0430018f0000008b0030019d0000008b033001970000000505300272000000f80000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000000f10000413d000000000604004b000001060000613d00000003044002100000000505500210000000000605043300000000064601cf000000000646022f000000000151034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000001012001900000010d0000613d0000008b010000410000008b0230009c00000000030180190000006001300210000002260001042e0000006001300210000002270001043000050000000b001d00060000000a001d000300000009001d000200000008001d000000000301004b0000011d0000613d000000000300001900000000046300190000000005230019000000000505043300000000005404350000002003300039000000000413004b000001160000413d000400000006001d0000000001160019000000000001043500000092010000410000000000100439000700000007001d00000004007004430000008b0100004100000000020004140000008b0320009c0000000002018019000000c00120021000000093011001c700008002020000390225021b0000040f0000000102200190000001fd0000613d000000000101043b000000000101004b000001460000c13d000000400100043d00000064021000390000009f0300004100000000003204350000004402100039000000a003000041000000000032043500000024021000390000002d0300003900000000003204350000009c0200004100000000002104350000000402100039000000200300003900000000003204350000008b020000410000008b0310009c00000000010280190000004001100210000000a1011001c700000227000104300000009401000041000000000201041a00000095022001970000000605000029000000000252019f000000000021041b0000008b0100004100000000020004140000008b0320009c0000000002018019000000c00120021000000096011001c70000800d0200003900000002030000390000009704000041022502160000040f0000000101200190000000070200002900000005050000290000000407000029000000b80000613d0000000001050433000000000101004b000001630000c13d0000002001000039000001000010044300000120000004430000009e01000041000002260001042e000000400400043d000000980140009c000000310000213d0000006001400039000000400010043f0000004001400039000000990300004100000000003104350000002701000039000600000004001d00000000031404360000009a01000041000100000003001d000000000013043500000000060504330000000001000414000000040320008c000001780000c13d000000010200003900000000030000310000018a0000013d0000008b030000410000008b0470009c000000000703801900000040047002100000008b0560009c00000000060380190000006005600210000000000545019f0000008b0410009c0000000001038019000000c001100210000000000115019f022502200000040f000000010220018f000100000001035500000060011002700000008b0010019d0000008b031001970000006001000039000000000403004b000001aa0000c13d0000000001010433000000000202004b000001d80000c13d000000000201004b000001fe0000c13d000000400400043d000700000004001d0000009c01000041000000000014043500000004014000390000002002000039000000000021043500000006010000290000000003010433000600000003001d0000002401400039000000000031043500000044024000390000000101000029022502080000040f00000006010000290000001f01100039000000030110017f00000044011000390000008b020000410000008b0310009c00000000010280190000000704000029000002020000013d000000900130009c0000000304000029000000310000213d0000003f01300039000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000000900640009c000000310000213d0000000105500190000000310000c13d000000400040043f0000001f0430018f000000000931043600000001050003670000000503300272000001c70000613d000000000600001900000005076002100000000008790019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000001bf0000413d000200000009001d000000000604004b0000018d0000613d0000000503300210000000000535034f00000002033000290000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000018d0000013d000000000101004b00000007020000290000015e0000c13d0000009201000041000000000010043900000004002004430000008b0100004100000000020004140000008b0320009c0000000002018019000000c00120021000000093011001c700008002020000390225021b0000040f0000000102200190000001fd0000613d000000000101043b000000000101004b0000015e0000c13d000000400100043d00000044021000390000009b03000041000000000032043500000024021000390000001d0300003900000000003204350000009c0200004100000000002104350000000402100039000000200300003900000000003204350000008b020000410000008b0310009c000000000102801900000040011002100000009d011001c70000022700010430000000000001042f0000008b020000410000008b0310009c000000000102801900000002040000290000008b0340009c000000000402801900000040024002100000006001100210000000000121019f0000022700010430000000000403004b000002120000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b0000020b0000413d00000000012300190000000000010435000000000001042d000000000001042f00000219002104210000000102000039000000000001042d0000000002000019000000000001042d0000021e002104230000000102000039000000000001042d0000000002000019000000000001042d00000223002104250000000102000039000000000001042d0000000002000019000000000001042d0000022500000432000002260001042e0000022700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009fffffffffffffffffffffffffffffffffffffffffffffffff000000000000007f00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b000000000000000000000000000000000000000000000000ffffffffffffff9f206661696c656400000000000000000000000000000000000000000000000000416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000002000000000000000000000000000000400000010000000000000000006f74206120636f6e747261637400000000000000000000000000000000000000455243313936373a206e657720696d706c656d656e746174696f6e206973206e00000000000000000000000000000000000000840000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000cc28bc51883240d7ff37feb1fc014d125103bc452a04f0976179ba22db08d339"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"ERC1967Proxy_936\" {\n code {\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _1 := 64\n mstore(_1, memoryguard(0x80))\n let programSize := datasize(\"ERC1967Proxy_936\")\n let argSize := sub(codesize(), programSize)\n let memoryDataOffset := allocate_memory(argSize)\n codecopy(memoryDataOffset, programSize, argSize)\n let _2 := add(memoryDataOffset, argSize)\n if slt(sub(_2, memoryDataOffset), _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let value := mload(memoryDataOffset)\n let _3 := and(value, sub(shl(160, 1), 1))\n if iszero(eq(value, _3))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _4 := 32\n let offset := mload(add(memoryDataOffset, _4))\n let _5 := sub(shl(64, 1), 1)\n if gt(offset, _5)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _6 := add(memoryDataOffset, offset)\n if iszero(slt(add(_6, 0x1f), _2))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _7 := mload(_6)\n let array := allocate_memory(array_allocation_size_bytes(_7))\n mstore(array, _7)\n let dst := add(array, _4)\n if gt(add(add(_6, _7), _4), _2)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n copy_memory_to_memory_with_cleanup(add(_6, _4), dst, _7)\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(value))\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n {\n let memPtr := mload(_1)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), _4)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _8 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n sstore(_8, or(and(sload(_8), not(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ sub(shl(160, 1), 1))), /** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _3))\n /// @src -1:-1:-1\n let _9 := 0\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ _9, _9, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _3)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _10 := iszero(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ array))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_10)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _10\n {\n expr := /** @src -1:-1:-1 */ _9\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let memPtr_1 := mload(_1)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, _5), lt(newFreePtr, memPtr_1))\n {\n mstore(/** @src -1:-1:-1 */ _9, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _9, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 0x24)\n }\n mstore(_1, newFreePtr)\n mstore(memPtr_1, 39)\n mstore(add(memPtr_1, _4), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, _1), \" failed\")\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), value, dst, mload(array), /** @src -1:-1:-1 */ _9, _9)\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let data := /** @src -1:-1:-1 */ _9\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _11 := returndatasize()\n let memPtr_2 := allocate_memory(array_allocation_size_bytes(_11))\n mstore(memPtr_2, _11)\n data := memPtr_2\n returndatacopy(add(memPtr_2, _4), /** @src -1:-1:-1 */ _9, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ returndatasize())\n }\n /// @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\"\n pop(fun_verifyCallResultFromTarget(value, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ memPtr_1))\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _12 := mload(_1)\n let _13 := datasize(\"ERC1967Proxy_936_deployed\")\n codecopy(_12, dataoffset(\"ERC1967Proxy_936_deployed\"), _13)\n return(_12, _13)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ shl(229, 4594637))\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 32)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 36), length)\n copy_memory_to_memory_with_cleanup(add(var_errorMessage_mpos, 32), add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 68), length)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_target))\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ERC1967Proxy_936_deployed\" {\n code {\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n mstore(64, 128)\n if iszero(calldatasize())\n {\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let value := and(sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), sub(shl(160, 1), 1))\n /// @src -1:-1:-1\n let _1 := 0\n /// @src 0:23291:24000 \"assembly {...\"\n calldatacopy(/** @src -1:-1:-1 */ _1, _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize())\n /// @src 0:23291:24000 \"assembly {...\"\n let usr$result := delegatecall(gas(), value, /** @src -1:-1:-1 */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize(), /** @src -1:-1:-1 */ _1, _1)\n /// @src 0:23291:24000 \"assembly {...\"\n returndatacopy(/** @src -1:-1:-1 */ _1, _1, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n switch usr$result\n case 0 {\n revert(/** @src -1:-1:-1 */ _1, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n default {\n return(/** @src -1:-1:-1 */ _1, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let value_1 := and(sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), sub(shl(160, 1), 1))\n /// @src -1:-1:-1\n let _2 := 0\n /// @src 0:23291:24000 \"assembly {...\"\n calldatacopy(/** @src -1:-1:-1 */ _2, _2, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize())\n /// @src 0:23291:24000 \"assembly {...\"\n let usr$result_1 := delegatecall(gas(), value_1, /** @src -1:-1:-1 */ _2, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize(), /** @src -1:-1:-1 */ _2, _2)\n /// @src 0:23291:24000 \"assembly {...\"\n returndatacopy(/** @src -1:-1:-1 */ _2, _2, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n switch usr$result_1\n case 0 {\n revert(/** @src -1:-1:-1 */ _2, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n default {\n return(/** @src -1:-1:-1 */ _2, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n }\n }\n data \".metadata\" hex\"a2646970667358221220fb523ac7004433b3005bf3bb54b3b0e4b3f023eacac776a1a94605a6b8b0f8c964736f6c63430008150033\"\n }\n}\n","hash":"010000a5ba54bf9917189fc16916c66103e2cddb802cbac01438467b73e85a83","factoryDependencies":{}},"ERC1967Upgrade":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"delegatecall\",\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"IBeacon":{"abi":[{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IBeacon\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"implementation()":"5c60da1b"}},"irOptimized":""},"IERC1822Proxiable":{"abi":[{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"proxiableUUID()":"52d1902d"}},"irOptimized":""},"IMintableERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IMintableERC20\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","mint(address,uint256)":"40c10f19","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb"}},"irOptimized":""},"IPublicLock":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLockManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cancelAndRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expirationDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"expireAndRefundFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"extend","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeTrialLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasRefundValue","outputs":[{"internalType":"uint256","name":"_gasRefundValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getCancelAndRefundValue","outputs":[{"internalType":"uint256","name":"refund","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getHasValidKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"getTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"grantKeyExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_expirationTimestamps","type":"uint256[]"},{"internalType":"address[]","name":"_keyManagers","type":"address[]"}],"name":"grantKeys","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lockCreator","type":"address"},{"internalType":"uint256","name":"_expirationDuration","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"string","name":"_lockName","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLockManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"isOwner","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"isRenewable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isValidKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"keyExpirationTimestampFor","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keyManagerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lendKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxKeysPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNumberOfKeys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenIdFrom","type":"uint256"},{"internalType":"uint256","name":"_tokenIdTo","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mergeKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfOwners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyCancelHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyExtendHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyGrantHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyPurchaseHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyTransferHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onTokenURIHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onValidKeyHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"address[]","name":"_referrers","type":"address[]"},{"internalType":"address[]","name":"_keyManagers","type":"address[]"},{"internalType":"bytes[]","name":"_data","type":"bytes[]"}],"name":"purchase","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"purchasePriceFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"referrerFees","outputs":[{"internalType":"uint256","name":"referrerFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundPenaltyBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"renewMembershipFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceLockManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"schemaVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_onKeyPurchaseHook","type":"address"},{"internalType":"address","name":"_onKeyCancelHook","type":"address"},{"internalType":"address","name":"_onValidKeyHook","type":"address"},{"internalType":"address","name":"_onTokenURIHook","type":"address"},{"internalType":"address","name":"_onKeyTransferHook","type":"address"},{"internalType":"address","name":"_onKeyExtendHook","type":"address"},{"internalType":"address","name":"_onKeyGrantHook","type":"address"}],"name":"setEventHooks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasRefundValue","type":"uint256"}],"name":"setGasRefundValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_keyManager","type":"address"}],"name":"setKeyManagerOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_lockName","type":"string"},{"internalType":"string","name":"_lockSymbol","type":"string"},{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setLockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_feeBasisPoint","type":"uint256"}],"name":"setReferrerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_timeShared","type":"uint256"}],"name":"shareKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_keyOwner","type":"address"}],"name":"totalKeys","outputs":[{"internalType":"uint256","name":"numberOfKeys","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"_totalKeysCreated","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unlendKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockProtocol","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"updateKeyPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newExpirationDuration","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"uint256","name":"_maxKeysPerAcccount","type":"uint256"}],"name":"updateLockConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeTrialLength","type":"uint256"},{"internalType":"uint256","name":"_refundPenaltyBasisPoints","type":"uint256"}],"name":"updateRefundPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateSchemaVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFeeBasisPoints","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addLockManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"cancelAndRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expirationDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"expireAndRefundFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"extend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeTrialLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasRefundValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasRefundValue\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getCancelAndRefundValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"refund\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getHasValidKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"getTransferFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"grantKeyExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_expirationTimestamps\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"_keyManagers\",\"type\":\"address[]\"}],\"name\":\"grantKeys\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lockCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLockManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isOwner\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referrer\",\"type\":\"address\"}],\"name\":\"isRenewable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"isValidKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"keyExpirationTimestampFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"keyManagerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keyPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"lendKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxKeysPerAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNumberOfKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokenIdTo\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mergeKeys\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numberOfOwners\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyCancelHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyExtendHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyGrantHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyPurchaseHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyTransferHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onTokenURIHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onValidKeyHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"_recipients\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_referrers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_keyManagers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_data\",\"type\":\"bytes[]\"}],\"name\":\"purchase\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"purchasePriceFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"referrerFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"referrerFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundPenaltyBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"renewMembershipFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceLockManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"schemaVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_onKeyPurchaseHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyCancelHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onValidKeyHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onTokenURIHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyTransferHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyExtendHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyGrantHook\",\"type\":\"address\"}],\"name\":\"setEventHooks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasRefundValue\",\"type\":\"uint256\"}],\"name\":\"setGasRefundValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_keyManager\",\"type\":\"address\"}],\"name\":\"setKeyManagerOf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_lockSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_baseTokenURI\",\"type\":\"string\"}],\"name\":\"setLockMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeBasisPoint\",\"type\":\"uint256\"}],\"name\":\"setReferrerFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeShared\",\"type\":\"uint256\"}],\"name\":\"shareKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keyOwner\",\"type\":\"address\"}],\"name\":\"totalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeysCreated\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferFeeBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"unlendKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockProtocol\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"updateKeyPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newExpirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxKeysPerAcccount\",\"type\":\"uint256\"}],\"name\":\"updateLockConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_freeTrialLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_refundPenaltyBasisPoints\",\"type\":\"uint256\"}],\"name\":\"updateRefundPenalty\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateSchemaVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_transferFeeBasisPoints\",\"type\":\"uint256\"}],\"name\":\"updateTransferFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address)\":{\"returns\":{\"balance\":\"The number of valid keys owned by `_keyOwner`\"}},\"burn(uint256)\":{\"params\":{\"_tokenId\":\"the id of token to burn\"}},\"cancelAndRefund(uint256)\":{\"details\":\"allows the key manager to expire a given tokenId and send a refund to the keyOwner based on the amount of time remaining.\",\"params\":{\"_tokenId\":\"The id of the key to cancel.\"}},\"expireAndRefundFor(uint256,uint256)\":{\"details\":\"Invoked by a Lock manager to expire the user's key and perform a refund and cancellation of the keyThrows if called by other than a Lock managerThrows if _keyOwner does not have a valid key\",\"params\":{\"_amount\":\"The amount to refund to the key-owner\",\"_tokenId\":\"The key id we wish to refund to\"}},\"extend(uint256,uint256,address,bytes)\":{\"details\":\"Extend functionThrows if lock is disabled or key does not exist for _recipient. Throws if _recipient == address(0).\",\"params\":{\"_data\":\"arbitrary data populated by the front-end which initiated the sale\",\"_referrer\":\"address of the user making the referral\",\"_tokenId\":\"the id of the key to extend\",\"_value\":\"the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount (_value is ignored when using ETH)\"}},\"gasRefundValue()\":{\"details\":\"Returns the value/price to be refunded to the sender on purchase\"},\"getApproved(uint256)\":{\"details\":\"Throws if `_tokenId` is not a valid NFT.\",\"params\":{\"_tokenId\":\"The NFT to find the approved address for\"},\"returns\":{\"operator\":\"The approved address for this NFT, or the zero address if there is none\"}},\"getCancelAndRefundValue(uint256)\":{\"details\":\"Determines how much of a refund a key owner would receive if they issued\",\"params\":{\"_tokenId\":\"the id of the token to get the refund value for.\"},\"returns\":{\"refund\":\"the amount of tokens refunded\"}},\"getHasValidKey(address)\":{\"params\":{\"_user\":\"The address of the key owner\"}},\"getTransferFee(uint256,uint256)\":{\"details\":\"Throws if _tokenId does not have a valid key\",\"params\":{\"_time\":\"The amount of time to calculate the fee for.\",\"_tokenId\":\"The id of the key check the transfer fee for.\"},\"returns\":{\"_0\":\"The transfer fee in seconds.\"}},\"grantKeyExtension(uint256,uint256)\":{\"details\":\"set `_duration` to 0 to use the default duration of the lock\",\"params\":{\"_duration\":\"The duration in secondes to add ot the key\",\"_tokenId\":\"The id of the token to extend\"}},\"grantKeys(address[],uint256[],address[])\":{\"details\":\"Throws if called by other than a Lock manager\",\"params\":{\"_expirationTimestamps\":\"An array of expiration Timestamps for the keys being granted\",\"_recipients\":\"An array of receiving addresses\"},\"returns\":{\"_0\":\"the ids of the granted tokens\"}},\"isApprovedForAll(address,address)\":{\"details\":\"Tells whether an operator is approved by a given keyManager\",\"params\":{\"_operator\":\"operator address which you want to query the approval of\",\"_owner\":\"owner address which you want to query the approval of\"},\"returns\":{\"_0\":\"bool whether the given operator is approved by the given owner\"}},\"isRenewable(uint256,address)\":{\"details\":\"helper to check if a key is currently renewable it will revert if the pricing or duration of the lock have been modified unfavorably since the key was bought(price increase or duration decrease). It will also revert if a lock is not renewable or if the key is not ready for renewal yet (at least 90% expired).\",\"params\":{\"referrer\":\"the address where to send the referrer fee\",\"tokenId\":\"the id of the token to check\"},\"returns\":{\"_0\":\"true if the terms has changed\"}},\"isValidKey(uint256)\":{\"params\":{\"_tokenId\":\"the id of the key to check validity\"}},\"keyExpirationTimestampFor(uint256)\":{\"details\":\"Returns the key's ExpirationTimestamp field for a given owner.Returns 0 if the owner has never owned a key for this lock\",\"params\":{\"_tokenId\":\"the id of the key\"}},\"lendKey(address,address,uint256)\":{\"params\":{\"from\":\"the owner of token to transfer\",\"to\":\"the address that will receive the token\",\"tokenId\":\"the id of the token\"}},\"maxKeysPerAddress()\":{\"returns\":{\"_0\":\"the maximum number of key allowed for a single address\"}},\"mergeKeys(uint256,uint256,uint256)\":{\"params\":{\"_amount\":\"the amount of time to transfer (in seconds)\",\"_tokenIdFrom\":\"the id of the token to substract time from\",\"_tokenIdTo\":\"the id of the destination token to add time\"}},\"migrate(bytes)\":{\"details\":\"when all record schemas are sucessfully upgraded, this function will update the `schemaVersion` variable to the latest/current lock version\",\"params\":{\"_calldata\":\"an ABI-encoded representation of the params (v10: the number of records to migrate as `uint`)\"}},\"onKeyCancelHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onKeyExtendHook()\":{\"returns\":{\"hookAddress\":\"the address ok the hook\"}},\"onKeyGrantHook()\":{\"returns\":{\"hookAddress\":\"the address ok the hook\"}},\"onKeyPurchaseHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onKeyTransferHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onTokenURIHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onValidKeyHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the NFT specified by `tokenId`.\"},\"publicLockVersion()\":{\"returns\":{\"_0\":\"The current version number.\"}},\"purchase(uint256[],address[],address[],address[],bytes[])\":{\"details\":\"Purchase functionSetting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more than keyPrice is approved for spending).\",\"params\":{\"_data\":\"array of arbitrary data populated by the front-end which initiated the sale\",\"_keyManagers\":\"optional array of addresses to grant managing rights to a specific address on creation\",\"_recipients\":\"array of addresses of the recipients of the purchased key\",\"_referrers\":\"array of addresses of the users making the referral\",\"_values\":\"array of tokens amount to pay for this purchase >= the current keyPrice - any applicable discount (_values is ignored when using ETH)\"},\"returns\":{\"tokenIds\":\"the ids of the created tokens\"}},\"purchasePriceFor(address,address,bytes)\":{\"details\":\"this considers any discount from Unlock or the OnKeyPurchase hook.\"},\"referrerFees(address)\":{\"params\":{\"_referrer\":\"the address of the referrer\"},\"returns\":{\"referrerFee\":\"the percentage of the keyPrice to be sent to the referrer (in basis points)\"}},\"renewMembershipFor(uint256,address)\":{\"params\":{\"_referrer\":\"the address of the person to be granted UDT\",\"_tokenId\":\"the ID fo the token to renew\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Transfers a specific NFT (`tokenId`) from one account (`from`) to another (`to`). Requirements: - `from`, `to` cannot be zero. - `tokenId` must be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this NFT by either {approve} or {setApprovalForAll}.\"},\"schemaVersion()\":{\"details\":\"will return 0 if no ;igration has ever been run\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf\",\"params\":{\"_approved\":\"representing the status of the approval to be set\",\"_operator\":\"operator address to set the approval\"}},\"setEventHooks(address,address,address,address,address,address,address)\":{\"params\":{\"_onKeyCancelHook\":\"Hook called when the internal `_cancelAndRefund` function is called\",\"_onKeyExtendHook\":\"Hook called when a key is extended or renewed\",\"_onKeyGrantHook\":\"Hook called when a key is granted\",\"_onKeyPurchaseHook\":\"Hook called when the `purchase` function is called\",\"_onKeyTransferHook\":\"Hook called when a key is transfered\",\"_onTokenURIHook\":\"Hook called to generate a data URI used for NFT metadata\",\"_onValidKeyHook\":\"Hook called to determine if the contract should overide the status for a given address\"}},\"setGasRefundValue(uint256)\":{\"details\":\"Set the value to be refunded to the sender on purchase\",\"params\":{\"_gasRefundValue\":\"price in wei or token in smallest price unit\"}},\"setKeyManagerOf(uint256,address)\":{\"params\":{\"_keyManager\":\"The address to assign the rights to for the given key\",\"_tokenId\":\"The id of the key to assign rights for\"}},\"setLockMetadata(string,string,string)\":{\"params\":{\"_baseTokenURI\":\"the baseTokenURI for this Lock\",\"_lockName\":\"a descriptive name for this Lock.\",\"_lockSymbol\":\"a Symbol for this Lock (default to KEY).\"}},\"setReferrerFee(address,uint256)\":{\"details\":\"To send a fixed percentage of the key price to all referrers, sett a percentage to `address(0)`\",\"params\":{\"_feeBasisPoint\":\"the percentage of the price to be used for this specific referrer (in basis points)\",\"_referrer\":\"the address of the referrer\"}},\"shareKey(address,uint256,uint256)\":{\"details\":\"Throws if key is not valid.Throws if `_to` is the zero addressEmit Transfer event\",\"params\":{\"_timeShared\":\"The amount of time shared checks if `_to` is a smart contract (code size > 0). If so, it calls `onERC721Received` on `_to` and throws if the return value is not `bytes4(keccak256('onERC721Received(address,address,uint,bytes)'))`.\",\"_to\":\"The recipient of the shared key\",\"_tokenId\":\"the key to share\"}},\"symbol()\":{\"details\":\"Gets the token symbol\",\"returns\":{\"_0\":\"string representing the token symbol\"}},\"tokenURI(uint256)\":{\"details\":\"Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \\\"ERC721 Metadata JSON Schema\\\". https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\",\"params\":{\"_tokenId\":\"The tokenID we're inquiring about\"},\"returns\":{\"_0\":\"String representing the URI for the requested token\"}},\"totalKeys(address)\":{\"params\":{\"_keyOwner\":\"address for which we are retrieving the total number of keys\"},\"returns\":{\"numberOfKeys\":\"total number of keys owned by the address\"}},\"totalSupply()\":{\"returns\":{\"_totalKeysCreated\":\"the total number of keys, valid or not\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Requirements: if the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. The key manager will be reset to address zero after the transfer\",\"params\":{\"from\":\"the owner of token to transfer\",\"to\":\"the address that will receive the token\",\"tokenId\":\"the id of the token\"}},\"unlendKey(address,uint256)\":{\"details\":\"Only the key manager of the token can call this function\",\"params\":{\"_recipient\":\"the address that will receive the token ownership\",\"_tokenId\":\"the id of the token\"}},\"updateKeyPricing(uint256,address)\":{\"details\":\"Throws if called by other than a Lock managerThrows if lock has been disabledThrows if _tokenAddress is not a valid token\",\"params\":{\"_keyPrice\":\"The new price to set for keys\",\"_tokenAddress\":\"The address of the erc20 token to use for pricing the keys, or 0 to use ETH\"}},\"updateLockConfig(uint256,uint256,uint256)\":{\"details\":\"_maxNumberOfKeys Can't be smaller than the existing supply\",\"params\":{\"_maxKeysPerAcccount\":\"the maximum amount of key a single user can own\",\"_maxNumberOfKeys\":\"uint the maximum number of keys\",\"_newExpirationDuration\":\"the new amount of time for each key purchased or type(uint).max for a non-expiring key\"}},\"updateRefundPenalty(uint256,uint256)\":{\"details\":\"Throws if called by other than a Lock manager\",\"params\":{\"_freeTrialLength\":\"The new duration of free trials for this lock\",\"_refundPenaltyBasisPoints\":\"The new refund penaly in basis-points(bps)\"}},\"updateTransferFee(uint256)\":{\"details\":\"Throws if called by other than a Lock manager\",\"params\":{\"_transferFeeBasisPoints\":\"The new transfer fee in basis-points(bps). Ex: 200 bps = 2%\"}},\"withdraw(address,address,uint256)\":{\"details\":\"Called by lock manager to withdraw all funds from the lock\",\"params\":{\"_amount\":\"specifies the max amount to withdraw, which may be reduced when considering the available balance. Set to 0 or MAX_UINT to withdraw everything. -- however be wary of draining funds as it breaks the `cancelAndRefund` and `expireAndRefundFor` use cases.\",\"_recipient\":\"specifies the address that will receive the tokens\",\"_tokenAddress\":\"specifies the token address to withdraw or 0 for ETH. This is usually the same as `tokenAddress` in MixinFunds.\"}}},\"title\":\"The PublicLock Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"balanceOf(address)\":{\"notice\":\"In the specific case of a Lock, `balanceOf` returns only the tokens with a valid expiration timerange\"},\"burn(uint256)\":{\"notice\":\"Deactivate an existing keythe key will be expired and ownership records will be destroyed\"},\"cancelAndRefund(uint256)\":{\"notice\":\"cancel is enabled with a 10% penalty by default on all Locks.\"},\"gasRefundValue()\":{\"notice\":\"_gasRefundValue price in wei or token in smallest price unit\"},\"getApproved(uint256)\":{\"notice\":\"Get the approved address for a single NFT\"},\"getCancelAndRefundValue(uint256)\":{\"notice\":\"Due to the time required to mine a tx, the actual refund amount will be lower than what the user reads from this call.\"},\"getHasValidKey(address)\":{\"notice\":\"Checks if the user has a non-expired key.\"},\"getRoleAdmin(bytes32)\":{\"notice\":\"Innherited from Open Zeppelin AccessControl.sol\"},\"getTransferFee(uint256,uint256)\":{\"notice\":\"Determines how much of a fee would need to be paid in order to transfer to another account. This is pro-rated so the fee goes down overtime.\"},\"grantKeyExtension(uint256,uint256)\":{\"notice\":\"Allows the Lock owner to extend an existing keys with no charge.\"},\"grantKeys(address[],uint256[],address[])\":{\"notice\":\"Allows a Lock manager to give a collection of users a key with no charge. Each key may be assigned a different expiration date.\"},\"initialize(address,uint256,address,uint256,uint256,string)\":{\"notice\":\"Functions\"},\"isValidKey(uint256)\":{\"notice\":\"Check if a certain key is validthis makes use of the onValidKeyHook if it is set\"},\"lendKey(address,address,uint256)\":{\"notice\":\"Lending a key allows you to transfer the token while retaining the ownerships right by setting yourself as a key manager first.This function can only be called by 1) the key owner when no key manager is set or 2) the key manager. After calling the function, the `_recipent` will be the new owner, and the sender of the tx will become the key manager.\"},\"mergeKeys(uint256,uint256,uint256)\":{\"notice\":\"Merge existing keys\"},\"migrate(bytes)\":{\"notice\":\"Migrate data from the previous single owner => key mapping to the new data structure w multiple tokens.\"},\"name()\":{\"notice\":\"A descriptive name for a collection of NFTs in this contract\"},\"numberOfOwners()\":{\"notice\":\"Public function which returns the total number of unique owners (both expired and valid). This may be larger than totalSupply.\"},\"onKeyCancelHook()\":{\"notice\":\"Returns the address of the `onKeyCancelHook` hook.\"},\"onKeyExtendHook()\":{\"notice\":\"Returns the address of the `onKeyExtendHook` hook.\"},\"onKeyGrantHook()\":{\"notice\":\"Returns the address of the `onKeyGrantHook` hook.\"},\"onKeyPurchaseHook()\":{\"notice\":\"Returns the address of the `onKeyPurchaseHook` hook.\"},\"onKeyTransferHook()\":{\"notice\":\"Returns the address of the `onKeyTransferHook` hook.\"},\"onTokenURIHook()\":{\"notice\":\"Returns the address of the `onTokenURIHook` hook.\"},\"onValidKeyHook()\":{\"notice\":\"Returns the address of the `onValidKeyHook` hook.\"},\"owner()\":{\"notice\":\"`owner()` is provided as an helper to mimick the `Ownable` contract ABI. The `Ownable` logic is used by many 3rd party services to determine contract ownership - e.g. who is allowed to edit metadata on Opensea.This logic is NOT used internally by the Unlock Protocol and is made available only as a convenience helper.\"},\"publicLockVersion()\":{\"notice\":\"The version number of the current implementation on this network.\"},\"purchase(uint256[],address[],address[],address[],bytes[])\":{\"notice\":\"when called for an existing and non-expired key, the `_keyManager` param will be ignored\"},\"purchasePriceFor(address,address,bytes)\":{\"notice\":\"returns the minimum price paid for a purchase with these params.\"},\"referrerFees(address)\":{\"notice\":\"Returns the percentage of the keyPrice to be sent to the referrer (in basis points)\"},\"renewMembershipFor(uint256,address)\":{\"notice\":\"Renew a given tokenonly works for non-free, expiring, ERC20 locks\"},\"schemaVersion()\":{\"notice\":\"Returns the version number of the data schema currently used by the lockif this is different from `publicLockVersion`, then the ability to purchase, grant or extend keys is disabled.\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"disabled when transfers are disabled\"},\"setEventHooks(address,address,address,address,address,address,address)\":{\"notice\":\"Allows a Lock manager to add or remove an event hook\"},\"setKeyManagerOf(uint256,address)\":{\"notice\":\"Update transfer and cancel rights for a given key\"},\"setLockMetadata(string,string,string)\":{\"notice\":\"Allows the Lock owner to assign\"},\"setReferrerFee(address,uint256)\":{\"notice\":\"Set a specific percentage of the keyPrice to be sent to the referrer while purchasing, extending or renewing a key.\"},\"shareKey(address,uint256,uint256)\":{\"notice\":\"Allows the key owner to safely share their key (parent key) by transferring a portion of the remaining time to a new key (child key).\"},\"supportsInterface(bytes4)\":{\"notice\":\"From ERC165.sol\"},\"tokenURI(uint256)\":{\"notice\":\"A distinct Uniform Resource Identifier (URI) for a given asset.\"},\"totalKeys(address)\":{\"notice\":\"Returns the number of keys owned by `_keyOwner` (expired or not)\"},\"totalSupply()\":{\"notice\":\"Returns the total number of keys, including non-valid ones\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"an ERC721-like function to transfer a token from one account to another.\"},\"unlendKey(address,uint256)\":{\"notice\":\"Unlend is called when you have lent a key and want to claim its full ownership back.\"},\"updateKeyPricing(uint256,address)\":{\"notice\":\"A function which lets a Lock manager of the lock to change the price for future purchases.\"},\"updateLockConfig(uint256,uint256,uint256)\":{\"notice\":\"Update the main key properties for the entire lock: - default duration of each key - the maximum number of keys the lock can edit - the maximum number of keys a single address can holdkeys previously bought are unaffected by this changes in expiration duration (i.e. existing keys timestamps are not recalculated/updated)\"},\"updateRefundPenalty(uint256,uint256)\":{\"notice\":\"Allow a Lock manager to change the refund penalty.\"},\"updateSchemaVersion()\":{\"notice\":\"Set the schema version to the latestonly lock manager call call this\"},\"updateTransferFee(uint256)\":{\"notice\":\"Allow a Lock manager to change the transfer fee.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IPublicLock\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","addLockManager(address)":"d2503485","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","cancelAndRefund(uint256)":"d32bfb6c","expirationDuration()":"11a4c03a","expireAndRefundFor(uint256,uint256)":"558b71e9","extend(uint256,uint256,address,bytes)":"d813cc19","freeTrialLength()":"a375cb05","gasRefundValue()":"6207a8da","getApproved(uint256)":"081812fc","getCancelAndRefundValue(uint256)":"92ac98a5","getHasValidKey(address)":"6d8ea5b4","getRoleAdmin(bytes32)":"248a9ca3","getTransferFee(uint256,uint256)":"b1a3b25d","grantKeyExtension(uint256,uint256)":"4cd38c1d","grantKeys(address[],uint256[],address[])":"81a3c943","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,uint256,address,uint256,uint256,string)":"6eadde43","isApprovedForAll(address,address)":"e985e9c5","isLockManager(address)":"aae4b8f7","isOwner(address)":"2f54bf6e","isRenewable(uint256,address)":"50878a47","isValidKey(uint256)":"a98d3623","keyExpirationTimestampFor(uint256)":"54b249fb","keyManagerOf(uint256)":"4d025fed","keyPrice()":"10e56973","lendKey(address,address,uint256)":"0c2db8d1","maxKeysPerAddress()":"d52e4a10","maxNumberOfKeys()":"74b6c106","mergeKeys(uint256,uint256,uint256)":"068208cd","migrate(bytes)":"8932a90d","name()":"06fdde03","numberOfOwners()":"93fd1844","onKeyCancelHook()":"217751bc","onKeyExtendHook()":"c907c3ec","onKeyGrantHook()":"b129694e","onKeyPurchaseHook()":"2d33dd5b","onKeyTransferHook()":"389f07e8","onTokenURIHook()":"7ec2a724","onValidKeyHook()":"26e9ca07","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","publicLockVersion()":"d1bbd49c","purchase(uint256[],address[],address[],address[],bytes[])":"33818997","purchasePriceFor(address,address,bytes)":"097ba333","referrerFees(address)":"c23135dd","refundPenaltyBasisPoints()":"56e0d51f","renewMembershipFor(uint256,address)":"8505fe95","renounceLockManager()":"f0ba6040","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","schemaVersion()":"4e2ce6d3","setApprovalForAll(address,bool)":"a22cb465","setEventHooks(address,address,address,address,address,address,address)":"74cac47d","setGasRefundValue(uint256)":"f5766b39","setKeyManagerOf(uint256,address)":"b11d7ec1","setLockMetadata(string,string,string)":"d1b8759b","setOwner(address)":"13af4035","setReferrerFee(address,uint256)":"debe2b0d","shareKey(address,uint256,uint256)":"f12c6b6e","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenAddress()":"9d76ea58","tokenByIndex(uint256)":"4f6ccce7","tokenOfOwnerByIndex(address,uint256)":"2f745c59","tokenURI(uint256)":"c87b56dd","totalKeys(address)":"812eecd4","totalSupply()":"18160ddd","transferFeeBasisPoints()":"183767da","transferFrom(address,address,uint256)":"23b872dd","unlendKey(address,uint256)":"407dc589","unlockProtocol()":"0f15023b","updateKeyPricing(uint256,address)":"a2e4cd2e","updateLockConfig(uint256,uint256,uint256)":"282478df","updateRefundPenalty(uint256,uint256)":"39f46986","updateSchemaVersion()":"f32e8b24","updateTransferFee(uint256)":"8577a6d5","withdraw(address,address,uint256)":"d9caed12"}},"irOptimized":""},"IUniswapOracleV3":{"abi":[{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"consult","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"updateAndConsult","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"consult\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"update\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"updateAndConsult\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IUniswapOracleV3\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"PERIOD()":"b4d1d795","consult(address,uint256,address)":"8c86f1e4","factory()":"c45a0155","update(address,address)":"c640752d","updateAndConsult(address,uint256,address)":"c1e553e7"}},"irOptimized":""},"IUnlock":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"__initializeOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"impl","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"addLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_purchaser","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"}],"name":"computeAvailableDiscountFor","outputs":[{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_udt","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_estimatedGasForPurchase","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_URI","type":"string"},{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"configUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirationDuration","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"string","name":"_lockName","type":"string"},{"internalType":"bytes12","name":"","type":"bytes12"}],"name":"createLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createUpgradeableLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint16","name":"_lockVersion","type":"uint16"}],"name":"createUpgradeableLockAtVersion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"estimatedGasForPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grossNetworkProduct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_unlockOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"bool","name":"deployed","type":"bool"},{"internalType":"uint256","name":"totalSales","type":"uint256"},{"internalType":"uint256","name":"yieldedDiscountTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLockUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyAdminAddress","outputs":[{"internalType":"address","name":"_proxyAdminAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"publicLockImpls","outputs":[{"internalType":"address","name":"_implAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockLatestVersion","outputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_impl","type":"address"}],"name":"publicLockVersions","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discount","type":"uint256"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"recordConsumedDiscount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"recordKeyPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lock","type":"address"}],"name":"removeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_grossNetworkProduct","type":"uint256"},{"internalType":"uint256","name":"_totalDiscountGranted","type":"uint256"}],"name":"resetTrackedValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_publicLockAddress","type":"address"}],"name":"setLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_oracleAddress","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDiscountGranted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"udt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapOracles","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"lockAddress","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"upgradeLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"__initializeOwnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"addLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_purchaser\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"}],\"name\":\"computeAvailableDiscountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"discount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_udt\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_estimatedGasForPurchase\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_URI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"name\":\"configUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"},{\"internalType\":\"bytes12\",\"name\":\"\",\"type\":\"bytes12\"}],\"name\":\"createLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createUpgradeableLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"_lockVersion\",\"type\":\"uint16\"}],\"name\":\"createUpgradeableLockAtVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimatedGasForPurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"grossNetworkProduct\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unlockOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"locks\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"deployed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalSales\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"yieldedDiscountTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postLockUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyAdminAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_proxyAdminAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"publicLockImpls\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockLatestVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_impl\",\"type\":\"address\"}],\"name\":\"publicLockVersions\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_discount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokens\",\"type\":\"uint256\"}],\"name\":\"recordConsumedDiscount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"recordKeyPurchase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lock\",\"type\":\"address\"}],\"name\":\"removeLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_grossNetworkProduct\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalDiscountGranted\",\"type\":\"uint256\"}],\"name\":\"resetTrackedValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_publicLockAddress\",\"type\":\"address\"}],\"name\":\"setLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"}],\"name\":\"setProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDiscountGranted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"udt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"uniswapOracles\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"lockAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"upgradeLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLockTemplate(address,uint16)\":{\"details\":\"This is used to upgrade conytract per version number\"},\"computeAvailableDiscountFor(address,uint256)\":{\"details\":\"[DEPRECATED] Kept for backwards compatibility This function returns the discount available for a user, when purchasing a a key from a lock. This does not modify the state. It returns both the discount and the number of tokens consumed to grant that discount.\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"details\":\"internally call `createUpgradeableLock`\",\"params\":{\"_expirationDuration\":\"the duration of the lock (pass 0 for unlimited duration)\",\"_keyPrice\":\"the price of each key\",\"_lockName\":\"the name of the lock param _salt [deprec] -- kept only for backwards copatibility This may be implemented as a sequence ID or with RNG. It's used with `create2` to know the lock's address before the transaction is mined.\",\"_maxNumberOfKeys\":\"the maximum nimbers of keys to be edited\",\"_tokenAddress\":\"set to the ERC20 token address, or 0 for ETH.\"}},\"createUpgradeableLock(bytes)\":{\"details\":\"this call is passed as encoded function - for instance: bytes memory data = abi.encodeWithSignature( 'initialize(address,uint256,address,uint256,uint256,string)', msg.sender, _expirationDuration, _tokenAddress, _keyPrice, _maxNumberOfKeys, _lockName );\",\"params\":{\"data\":\"bytes containing the call to initialize the lock template\"},\"returns\":{\"_0\":\"address of the create lock\"}},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"params\":{\"_lockVersion\":\"the version of the lock to use\",\"data\":\"bytes containing the call to initialize the lock template (refer to createUpgradeableLock for more details)\"}},\"getAdmin()\":{\"details\":\"this reads the address directly from storage, at the slot `_ADMIN_SLOT` defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds to the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1\"},\"getGlobalBaseTokenURI()\":{\"details\":\"Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\"},\"getGlobalTokenSymbol()\":{\"details\":\"Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\"},\"initializeProxyAdmin()\":{\"details\":\"deploy a ProxyAdmin contract used to upgrade locks\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"networkBaseFee()\":{\"details\":\"this helper can be wrapped in try/catch statement to avoid revert in networks where EIP-1559 is not implemented\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"postLockUpgrade()\":{\"details\":\"The `msg.sender` will be the upgraded lock\"},\"protocolFee()\":{\"returns\":{\"_0\":\"the protocol fee in basic point\"}},\"proxyAdminAddress()\":{\"returns\":{\"_proxyAdminAddress\":\"the address of the ProxyAdmin instance\"}},\"publicLockImpls(uint16)\":{\"params\":{\"_version\":\"the number of the version of the template\"},\"returns\":{\"_implAddress\":\"address of the lock templates\"}},\"publicLockLatestVersion()\":{\"returns\":{\"_version\":\"the version number of the latest template (used to deploy contracts)\"}},\"publicLockVersions(address)\":{\"params\":{\"_impl\":\"the address of the deployed template contract (PublicLock)\"},\"returns\":{\"_0\":\"number of the version corresponding to this address\"}},\"recordConsumedDiscount(uint256,uint256)\":{\"details\":\"[DEPRECATED] Kept for backwards compatibility This function will keep track of consumed discounts by a given user. It will also grant discount tokens to the creator who is granting the discount based on the amount of discount and compensation rate. This function is invoked by a previously deployed lock only.\"},\"removeLock(address)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"lock\":\"address of the lock to remove\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setLockTemplate(address)\":{\"details\":\"This will initialize the template and revokeOwnership.\"},\"setOracle(address,address)\":{\"details\":\"This will also call update to ensure at least one datapoint has been recorded.\"},\"setProtocolFee(uint256)\":{\"params\":{\"_protocolFee\":\"fee (in basis points)\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferTokens(address,address,uint256)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"amount\":\"the amount of tokens to transfer\",\"to\":\"the address to transfer the tokens to\",\"token\":\"the address of the token to transfer (pass the 0x0 address for the base currency)\"}},\"upgradeLock(address,uint16)\":{\"details\":\"only available for publicLockVersion > 10 (proxyAdmin /required)\",\"params\":{\"lockAddress\":\"the existing lock address\",\"version\":\"the version number you are targeting Likely implemented with OpenZeppelin TransparentProxy contract\"}}},\"title\":\"The Unlock Interface*\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLockTemplate(address,uint16)\":{\"notice\":\"Add a PublicLock template to be used for future calls to `createLock`.\"},\"computeAvailableDiscountFor(address,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"configUnlock(address,address,uint256,string,string,uint256)\":{\"notice\":\"Allows the owner to update configuration variables\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"notice\":\"Create lock (legacy) This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLock(bytes)\":{\"notice\":\"Create lock (default) This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"notice\":\"Create an upgradeable lock using a specific PublicLock version\"},\"getAdmin()\":{\"notice\":\"Returns the ProxyAdmin contract address that manage upgrades for the current Unlock contract.\"},\"networkBaseFee()\":{\"notice\":\"Helper to get the network mining basefee as introduced in EIP-1559\"},\"postLockUpgrade()\":{\"notice\":\"Call executed by a lock after its version upgrade triggred by `upgradeLock` - PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance of the Unlock contract\"},\"protocolFee()\":{\"notice\":\"The fee (in basis points) collected by the protocol on each purchase / extension / renewal of a key\"},\"proxyAdminAddress()\":{\"notice\":\"Retrieve the contract address of the proxy admin that manages the locks\"},\"publicLockImpls(uint16)\":{\"notice\":\"Match lock templates addresses with version numbers\"},\"publicLockLatestVersion()\":{\"notice\":\"Retrive the latest existing lock template version\"},\"publicLockVersions(address)\":{\"notice\":\"Match version numbers with lock templates addresses\"},\"recordConsumedDiscount(uint256,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"recordKeyPurchase(uint256,address)\":{\"notice\":\"This function keeps track of the added GDP, as well as grants of discount tokens to the referrer, if applicable. The number of discount tokens granted is based on the value of the referal, the current growth rate and the lock's discount token distribution rate This function is invoked by a previously deployed lock only.\"},\"removeLock(address)\":{\"notice\":\"Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens. The lock will still be able to sell its memberships.\"},\"setLockTemplate(address)\":{\"notice\":\"Upgrade the PublicLock template used for future calls to `createLock`.\"},\"setOracle(address,address)\":{\"notice\":\"allows the owner to set the oracle address to use for value conversions setting the _oracleAddress to address(0) removes support for the token\"},\"setProtocolFee(uint256)\":{\"notice\":\"Set the fee collected by the protocol\"},\"transferTokens(address,address,uint256)\":{\"notice\":\"Functions which transfers tokens held by the contract It handles both ERC20 and the base currency.\"},\"upgradeLock(address,uint16)\":{\"notice\":\"Upgrade a lock to a specific version\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IUnlock\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"__initializeOwnable(address)":"b0ca0c83","addLockTemplate(address,uint16)":"caeee3a3","chainId()":"9a8a0592","computeAvailableDiscountFor(address,uint256)":"0cb175e3","configUnlock(address,address,uint256,string,string,uint256)":"7d8fb641","createLock(uint256,address,uint256,uint256,string,bytes12)":"42d92106","createUpgradeableLock(bytes)":"4452c2b2","createUpgradeableLockAtVersion(bytes,uint16)":"487a8a76","estimatedGasForPurchase()":"743bbc2f","getAdmin()":"6e9960c3","getGlobalBaseTokenURI()":"7ff94bb2","getGlobalTokenSymbol()":"35a750de","globalBaseTokenURI()":"a998e9fb","globalTokenSymbol()":"cec41052","grossNetworkProduct()":"d6e9e803","initialize(address)":"c4d66de8","initializeProxyAdmin()":"c7d7d0c9","isOwner()":"8f32d59b","locks(address)":"5de9a137","networkBaseFee()":"ba5ea0d5","owner()":"8da5cb5b","postLockUpgrade()":"ed9674bd","protocolFee()":"b0e21e8a","proxyAdminAddress()":"5979e755","publicLockAddress()":"f8328991","publicLockImpls(uint16)":"666018a5","publicLockLatestVersion()":"cd93b532","publicLockVersions(address)":"25772ad9","recordConsumedDiscount(uint256,uint256)":"36524663","recordKeyPurchase(uint256,address)":"939d9f1f","removeLock(address)":"4a387bef","renounceOwnership()":"715018a6","resetTrackedValue(uint256,uint256)":"963a9478","setLockTemplate(address)":"ef67fde6","setOracle(address,address)":"5c38eb3a","setProtocolFee(uint256)":"787dce3d","totalDiscountGranted()":"a082eb0e","transferOwnership(address)":"f2fde38b","transferTokens(address,address,uint256)":"a64b6e5f","udt()":"262d0a85","uniswapOracles(address)":"6bced5a2","unlockVersion()":"4220bd46","upgradeLock(address,uint16)":"ccf54648","weth()":"3fc8cef3"}},"irOptimized":""},"Ownable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Ownable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":27,"contract":"contracts/past-versions/UnlockV12.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"irOptimized":""},"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Proxy\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"ProxyAdmin":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"ProxyAdmin\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[{"astId":27,"contract":"contracts/past-versions/UnlockV12.sol:ProxyAdmin","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:ProxyAdmin\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[3]\n\tptr.add\tr1, r0, r3\n\tadd\t128, r0, r9\n\tst.1\t64, r9\n\tadd\tr3, r0, r1\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, r4\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_1\n\tsub.s!\t4, r4, r1\n\tjump.lt\t@.BB0_2\n\tptr.add\tr3, r4, r1\n\tld\tr3, r2\n\tshr.s\t224, r2, r2\n\tsub.s!\t@CPI0_6[0], r2, r5\n\tjump.gt\t@.BB0_12\n\tsub.s!\t@CPI0_12[0], r2, r5\n\tjump.gt\t@.BB0_10\n\tsub.s!\t@CPI0_15[0], r2, r5\n\tjump.eq\t@.BB0_17\n\tsub.s!\t@CPI0_16[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r2\n\tcontext.caller\tr5\n\tsub!\tr2, r5, r2\n\tjump.ne\t@.BB0_37\n\tand\t@CPI0_1[0], r1, r1\n\tsstore\tr0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_2[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_4[0], r0, r4\n\tadd\tr0, r0, r6\n.BB0_39:\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_1:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsload\tr0, r2\n\tand\t@CPI0_1[0], r2, r1\n\tcontext.caller\tr6\n\tor\tr1, r6, r1\n\tsstore\tr0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr3\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t192, r3, r1\n\tor\t@CPI0_2[0], r1, r1\n\tand\t@CPI0_3[0], r2, r5\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_4[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_5[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_12:\n\tsub.s!\t@CPI0_7[0], r2, r5\n\tjump.gt\t@.BB0_15\n\tsub.s!\t@CPI0_10[0], r2, r1\n\tjump.eq\t@.BB0_60\n\tsub.s!\t@CPI0_11[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r1\n\tsub.s!\t64, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r4\n\tsub.s!\t@CPI0_3[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r3, r1\n\tld\tr1, r3\n\tsub.s!\t@CPI0_3[0], r3, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_37\n\tadd\tr3, r0, stack-[2]\n\tadd\t@CPI0_25[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr4, r0, stack-[3]\n\tst.2\t4, r4\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_26[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_47\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[3], r0, r2\n\tadd\tstack-[2], r0, r3\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r5\n\tadd\t@CPI0_27[0], r0, r1\n\tst.1\tr5, r1\n\tadd\t4, r5, r1\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.eq\t@.BB0_105\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r5, r3\n\tadd.lt\tr5, r0, r4\n\tshl.s\t64, r4, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_28[0], r1, r1\n\tadd\tr5, r0, stack-[3]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[3], r0, r5\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_100\n.BB0_105:\n\tsub.s!\t@CPI0_19[0], r5, r1\n\tjump.gt\t@.BB0_25\n\tjump\t@.BB0_57\n.BB0_10:\n\tsub.s!\t@CPI0_13[0], r2, r1\n\tjump.eq\t@.BB0_41\n\tsub.s!\t@CPI0_14[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tst.1\t128, r1\n\tadd\t@CPI0_33[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_15:\n\tsub.s!\t@CPI0_8[0], r2, r5\n\tjump.eq\t@.BB0_107\n\tsub.s!\t@CPI0_9[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_3[0], r2, r3\n\tjump.gt\t@.BB0_2\n\tadd\t@CPI0_17[0], r0, r3\n\tst.1\t128, r3\n\tcontext.gas_left\tr3\n\tsub.s!\t4, r2, r4\n\tjump.ne\t@.BB0_119\n\tadd\tstack[@returndatasize], r0, r4\n\tadd\tr0, r0, r2\n\tjump\t@.BB0_120\n.BB0_17:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_3[0], r2, r3\n\tjump.gt\t@.BB0_2\n\tadd\t@CPI0_36[0], r0, r3\n\tst.1\t128, r3\n\tcontext.gas_left\tr3\n\tsub.s!\t4, r2, r4\n\tjump.ne\t@.BB0_22\n\tadd\tstack[@returndatasize], r0, r5\n\tadd\tr0, r0, r2\n\tjump\t@.BB0_23\n.BB0_60:\n\tsub.s\t4, r4, r1\n\tsub.s!\t96, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r8\n\tsub.s!\t@CPI0_3[0], r8, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r3, r1\n\tld\tr1, r9\n\tsub.s!\t@CPI0_3[0], r9, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t68, r3, r1\n\tld\tr1, r2\n\tsub.s!\t@CPI0_19[0], r2, r1\n\tjump.gt\t@.BB0_2\n\tadd\t35, r2, r1\n\tadd\t@CPI0_29[0], r0, r5\n\tsub!\tr1, r4, r6\n\tadd\tr0, r0, r6\n\tadd.ge\tr5, r0, r6\n\tand\t@CPI0_29[0], r1, r1\n\tsub!\tr1, r0, r7\n\tadd.ge\tr0, r0, r5\n\tsub.s!\t@CPI0_29[0], r1, r1\n\tadd.ne\tr6, r0, r5\n\tsub!\tr5, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t4, r2, r5\n\tptr.add\tr3, r5, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_19[0], r1, r6\n\tjump.gt\t@.BB0_25\n\tadd\t191, r1, r6\n\tsub.s\t32, r0, r10\n\tand\tr6, r10, r6\n\tsub.s!\t@CPI0_19[0], r6, r7\n\tjump.gt\t@.BB0_25\n\tst.1\t64, r6\n\tst.1\t128, r1\n\tadd\tr2, r1, r2\n\tadd\t36, r2, r2\n\tsub!\tr2, r4, r2\n\tjump.gt\t@.BB0_2\n\tadd\t32, r5, r2\n\tptr.add\tr3, r2, r2\n\tand\t31, r1, r3\n\tshr.s!\t5, r1, r4\n\tjump.eq\t@.BB0_133\n\tadd\tr0, r0, r5\n.BB0_70:\n\tshl.s\t5, r5, r6\n\tptr.add\tr2, r6, r7\n\tld\tr7, r7\n\tadd\t160, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r4, r6\n\tjump.lt\t@.BB0_70\n.BB0_133:\n\tsub!\tr3, r0, r5\n\tjump.eq\t@.BB0_72\n\tshl.s\t5, r4, r4\n\tptr.add\tr2, r4, r2\n\tshl.s\t3, r3, r3\n\tadd\t160, r4, r4\n\tld.1\tr4, r5\n\tshl\tr5, r3, r5\n\tshr\tr5, r3, r5\n\tld\tr2, r2\n\tsub\t256, r3, r3\n\tshr\tr2, r3, r2\n\tshl\tr2, r3, r2\n\tor\tr2, r5, r2\n\tst.1\tr4, r2\n.BB0_72:\n\tadd\tr10, r0, stack-[2]\n\tadd\tr9, r0, stack-[3]\n\tadd\t160, r1, r1\n\tst.1\tr1, r0\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_73\n\tadd\t@CPI0_25[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr8, r0, stack-[1]\n\tst.2\t4, r8\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_26[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_47\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[3], r0, r3\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r4\n\tadd\t36, r4, r1\n\tadd\t64, r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_32[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tst.1\tr1, r3\n\tadd\t68, r4, r2\n\tld.1\t128, r1\n\tst.1\tr2, r1\n\tadd\tr4, r0, stack-[3]\n\tadd\t100, r4, r2\n\tsub!\tr1, r0, r3\n\tjump.eq\t@.BB0_79\n\tadd\tr0, r0, r3\n.BB0_78:\n\tadd\tr3, r2, r4\n\tadd\t160, r3, r5\n\tld.1\tr5, r5\n\tst.1\tr4, r5\n\tadd\t32, r3, r3\n\tsub!\tr3, r1, r4\n\tjump.lt\t@.BB0_78\n.BB0_79:\n\tadd\tr1, r2, r2\n\tst.1\tr2, r0\n\tcontext.get_context_u128\tr3\n\tcontext.gas_left\tr2\n\tadd\tstack-[1], r0, r4\n\tsub.s!\t4, r4, r4\n\tjump.eq\t@.BB0_89\n\tadd\t31, r1, r1\n\tand\tstack-[2], r1, r1\n\tadd\t@CPI0_0[0], r0, r4\n\tadd\tstack-[3], r0, r6\n\tsub.s!\t@CPI0_0[0], r6, r5\n\tadd\tr4, r0, r5\n\tadd.lt\tr6, r0, r5\n\tshl.s\t64, r5, r5\n\tadd\t100, r1, r1\n\tsub.s!\t@CPI0_0[0], r1, r6\n\tadd.ge\tr4, r0, r1\n\tshl.s\t96, r1, r1\n\tor\tr1, r5, r1\n\tsub.s!\t@CPI0_0[0], r2, r5\n\tadd.ge\tr4, r0, r2\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tsub!\tr3, r0, r2\n\tjump.ne\t@.BB0_83\n\tadd\tstack-[1], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tjump\t@.BB0_81\n.BB0_41:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r1\n\tsub.s!\t64, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r4\n\tsub.s!\t@CPI0_3[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r3, r1\n\tld\tr1, r3\n\tsub.s!\t@CPI0_3[0], r3, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_37\n\tadd\tr3, r0, stack-[2]\n\tadd\t@CPI0_25[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr4, r0, stack-[3]\n\tst.2\t4, r4\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_26[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_47\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[3], r0, r2\n\tadd\tstack-[2], r0, r3\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r5\n\tadd\t@CPI0_34[0], r0, r1\n\tst.1\tr5, r1\n\tadd\t4, r5, r1\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.eq\t@.BB0_56\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r5, r3\n\tadd.lt\tr5, r0, r4\n\tshl.s\t64, r4, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_28[0], r1, r1\n\tadd\tr5, r0, stack-[3]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[3], r0, r5\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_51\n.BB0_56:\n\tsub.s!\t@CPI0_19[0], r5, r1\n\tjump.gt\t@.BB0_25\n.BB0_57:\n\tst.1\t64, r5\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_107:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r1\n\tsub.s!\t32, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r6\n\tsub.s!\t@CPI0_3[0], r6, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r2\n\tcontext.caller\tr5\n\tsub!\tr2, r5, r2\n\tjump.ne\t@.BB0_37\n\tsub!\tr6, r0, r2\n\tjump.ne\t@.BB0_113\n\tadd\t@CPI0_21[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t38, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_22[0], r0, r1\n\tst.1\t196, r1\n\tadd\t@CPI0_23[0], r0, r1\n\tst.1\t228, r1\n\tadd\t@CPI0_24[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_37:\n\tadd\t@CPI0_21[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_30[0], r0, r1\n\tst.1\t196, r1\n\tadd\t@CPI0_35[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_119:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t192, r3, r1\n\tor\t@CPI0_18[0], r1, r1\n\tadd\tr9, r0, stack-[3]\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[3], r0, r9\n\txor\t1, r2, r2\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r4\n.BB0_120:\n\tadd\t96, r0, r3\n\tsub!\tr4, r0, r5\n\tjump.ne\t@.BB0_121\n.BB0_128:\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_2\n\tld.1\tr3, r1\n\tadd\tr1, r9, r2\n\tadd\tr9, r0, r1\n\tjump\t@.BB0_34\n.BB0_22:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t192, r3, r1\n\tor\t@CPI0_18[0], r1, r1\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\txor\t1, r2, r2\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r5\n.BB0_23:\n\tadd\t96, r0, r4\n\tadd\t128, r0, r3\n\tsub!\tr5, r0, r6\n\tjump.ne\t@.BB0_24\n.BB0_32:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_33\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_121:\n\tsub.s!\t@CPI0_19[0], r4, r3\n\tjump.gt\t@.BB0_25\n\tadd\t63, r4, r3\n\tsub.s\t32, r0, r5\n\tand\tr3, r5, r5\n\tld.1\t64, r3\n\tadd\tr3, r5, r5\n\tsub!\tr5, r3, r6\n\tadd\t0, r0, r6\n\tadd.lt\t1, r0, r6\n\tsub.s!\t@CPI0_19[0], r5, r7\n\tjump.gt\t@.BB0_25\n\tand!\t1, r6, r6\n\tjump.ne\t@.BB0_25\n\tst.1\t64, r5\n\tand\t31, r4, r5\n\tst.1.inc\tr3, r4, r9\n\tshr.s!\t5, r4, r4\n\tjump.eq\t@.BB0_135\n\tadd\tr0, r0, r6\n.BB0_126:\n\tshl.s\t5, r6, r7\n\tadd\tr9, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r4, r7\n\tjump.lt\t@.BB0_126\n.BB0_135:\n\tsub!\tr5, r0, r6\n\tjump.eq\t@.BB0_128\n\tshl.s\t5, r4, r4\n\tptr.add\tr1, r4, r1\n\tadd\tr9, r4, r4\n\tshl.s\t3, r5, r5\n\tld.1\tr4, r6\n\tshl\tr6, r5, r6\n\tshr\tr6, r5, r6\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r6, r1\n\tst.1\tr4, r1\n\tjump\t@.BB0_128\n.BB0_24:\n\tsub.s!\t@CPI0_37[0], r5, r3\n\tjump.lt\t@.BB0_26\n.BB0_25:\n\tadd\t@CPI0_38[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI0_28[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_33:\n\tld.1\tr4, r1\n\tadd\tr1, r3, r2\n\tadd\tr3, r0, r1\n.BB0_34:\n\tnear_call\tr0, @abi_decode_address_payable_fromMemory, @DEFAULT_UNWIND\n\tand\t@CPI0_3[0], r1, r1\n\tld.1\t64, r2\n\tst.1\tr2, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tor\t@CPI0_20[0], r1, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_47:\n\trevert\n.BB0_113:\n\tand\t@CPI0_1[0], r1, r1\n\tor\tr1, r6, r1\n\tsstore\tr0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_2[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_4[0], r0, r4\n\tjump\t@.BB0_39\n.BB0_26:\n\tadd\t63, r5, r3\n\tsub.s\t32, r0, r4\n\tand\tr3, r4, r3\n\tld.1\t64, r4\n\tadd\tr4, r3, r3\n\tsub!\tr3, r4, r6\n\tadd\t0, r0, r6\n\tadd.lt\t1, r0, r6\n\tsub.s!\t@CPI0_19[0], r3, r7\n\tjump.gt\t@.BB0_25\n\tand!\t1, r6, r6\n\tjump.ne\t@.BB0_25\n\tst.1\t64, r3\n\tand\t31, r5, r6\n\tst.1.inc\tr4, r5, r3\n\tshr.s!\t5, r5, r5\n\tjump.eq\t@.BB0_130\n\tadd\tr0, r0, r7\n.BB0_30:\n\tshl.s\t5, r7, r8\n\tadd\tr3, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r5, r8\n\tjump.lt\t@.BB0_30\n.BB0_130:\n\tsub!\tr6, r0, r7\n\tjump.eq\t@.BB0_32\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r6, r6\n\tld.1\tr5, r7\n\tshl\tr7, r6, r7\n\tshr\tr7, r6, r7\n\tld\tr1, r1\n\tsub\t256, r6, r6\n\tshr\tr1, r6, r1\n\tshl\tr1, r6, r1\n\tor\tr1, r7, r1\n\tst.1\tr5, r1\n\tjump\t@.BB0_32\n.BB0_100:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_134\n\tadd\tr0, r0, r6\n.BB0_102:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_102\n.BB0_134:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_104\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_104:\n\tjump\t@.BB0_55\n.BB0_73:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_30[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_21[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t36, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t4, r1, r2\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_31[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_51:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_131\n\tadd\tr0, r0, r6\n.BB0_53:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_53\n.BB0_131:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_55\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_55:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tshl.s\t96, r3, r2\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_83:\n\tor\t@CPI0_2[0], r1, r1\n\tadd\t32777, r0, r2\n\tadd\tstack-[1], r0, r4\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n.BB0_81:\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_84\n.BB0_89:\n\tadd\tstack-[3], r0, r1\n\tsub.s!\t@CPI0_19[0], r1, r1\n\tjump.gt\t@.BB0_25\n\tadd\tstack-[3], r0, r1\n\tst.1\t64, r1\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_84:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_132\n\tadd\tr0, r0, r6\n.BB0_86:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_86\n.BB0_132:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_88\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_88:\n\tjump\t@.BB0_55\n.func_end0:\n\nabi_decode_address_payable_fromMemory:\n.func_begin1:\n\tsub\tr2, r1, r2\n\tadd\t@CPI1_0[0], r0, r3\n\tsub.s!\t31, r2, r4\n\tadd\tr0, r0, r4\n\tadd.gt\tr3, r0, r4\n\tand\t@CPI1_0[0], r2, r2\n\tsub!\tr2, r0, r5\n\tadd.ge\tr0, r0, r3\n\tsub.s!\t@CPI1_0[0], r2, r2\n\tadd.ne\tr4, r0, r3\n\tsub!\tr3, r0, r2\n\tjump.eq\t@.BB1_1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI1_1[0], r1, r2\n\tjump.gt\t@.BB1_1\n\tret\n.BB1_1:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end1:\n\n__cxa_throw:\n\trevert\n\n__farcall:\n.func_begin2:\n.tmp0:\n\tfar_call\tr1, r2, @.BB3_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB3_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end2:\n\n__staticcall:\n.func_begin3:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB4_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB4_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end3:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_2:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_3:\nCPI1_1:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_4:\n\t.cell -52524777015005588113349992707137368332388074750292320778649315033004770043936\nCPI0_5:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_6:\n\t.cell 2518900892\nCPI0_7:\n\t.cell 4076725130\nCPI0_8:\n\t.cell 4076725131\nCPI0_9:\n\t.cell 4088913581\nCPI0_10:\n\t.cell 2518900893\nCPI0_11:\n\t.cell 2577960644\nCPI0_12:\n\t.cell 2130650973\nCPI0_13:\n\t.cell 2130650974\nCPI0_14:\n\t.cell 2376452955\nCPI0_15:\n\t.cell 541990010\nCPI0_16:\n\t.cell 1901074598\nCPI0_17:\n\t.cell -3474254564581621626188260025310941719202095730505663504633513953338824065024\nCPI0_18:\n\t.cell 316912652418240591808998408192\nCPI0_19:\n\t.cell 18446744073709551615\nCPI0_20:\n\t.cell 2535301200456458802993406410752\nCPI0_21:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_22:\n\t.cell 35943731656364841964517558219894961445653631979235167635064085396828900499553\nCPI0_23:\n\t.cell 45408759099000846574684193736602357774271237157169010951590501707763511459840\nCPI0_24:\n\t.cell 10458117454244075803782624051200\nCPI0_25:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_26:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_27:\n\t.cell 24583578074543180268843569895713186669491495773330943018694496374928902717440\nCPI0_28:\n\t.cell 2852213850513516153367582212096\nCPI0_29:\nCPI1_0:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_30:\n\t.cell 35943731656364841964516503116990081338611484598491072354577564874054038349170\nCPI0_31:\n\t.cell 7922816251426433759354395033600\nCPI0_32:\n\t.cell 35787394285270172926002399276345764320359862283067404231778073799726653767680\nCPI0_33:\n\t.cell 2535301202817642044428229017600\nCPI0_34:\n\t.cell -51040281588262172729994757417671590548574929652371291425639197795456095617024\nCPI0_35:\n\t.cell 7922816253787617000789217640448\nCPI0_36:\n\t.cell 41783904696501392981958754530355920803367001723273469674524225868246137438208\nCPI0_37:\n\t.cell 18446744073709551616\nCPI0_38:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\n","bytecode":{"object":"00010000000000020003000000000002000000000301034f0000008009000039000000400090043f00000000010300190000006001100270000000c4041001970000000101200190000000300000c13d000000040140008c000001f20000413d000000000143034f000000000203043b000000e002200270000000ca0520009c0000004a0000213d000000d00520009c000000940000213d000000d30520009c000000b60000613d000000d40120009c000001f20000c13d0000000001000416000000000101004b000001f20000c13d000000000100041a000000c7021001970000000005000411000000000252004b000001c20000c13d000000c501100197000000000010041b000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000c6011001c70000800d020000390000000303000039000000c8040000410000000006000019030a03000000040f0000000101200190000001f20000613d00000000010000190000030b0001042e0000000001000416000000000101004b000001f20000c13d000000000200041a000000c5012001970000000006000411000000000161019f000000000010041b000000c4010000410000000003000414000000c40430009c0000000003018019000000c001300210000000c6011001c7000000c7052001970000800d020000390000000303000039000000c804000041030a03000000040f0000000101200190000001f20000613d000000200100003900000100001004430000012000000443000000c9010000410000030b0001042e000000cb0520009c000000a00000213d000000ce0120009c000000c80000613d000000cf0120009c000001f20000c13d0000000001000416000000000101004b000001f20000c13d000000040140008a000000400110008c000001f20000413d0000000401300370000000000401043b000000c70140009c000001f20000213d0000002401300370000000000301043b000000c70130009c000001f20000213d000000000100041a000000c7011001970000000002000411000000000121004b000001c20000c13d000200000003001d000000dd010000410000000000100439000300000004001d0000000400400443000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000de011001c70000800202000039030a03050000040f0000000102200190000002350000613d000000000101043b000000000101004b00000003020000290000000203000029000001f20000613d000000400500043d000000df010000410000000000150435000000040150003900000000003104350000000001000414000000040320008c000000910000613d000000c404000041000000c40310009c0000000001048019000000c40350009c00000000040540190000004003400210000000c001100210000000000131019f000000e0011001c7000300000005001d030a03000000040f000000030500002900000000030100190000006003300270000000c40030019d000000c40330019700000001022001900000026d0000613d000000d70150009c000002220000213d000001a20000013d000000d10120009c0000015f0000613d000000d20120009c000001f20000c13d0000000001000416000000000101004b000001f20000c13d000000000100041a000000c701100197000000800010043f000000e5010000410000030b0001042e000000cc0520009c000001a50000613d000000cd0220009c000001f20000c13d0000000002000416000000000202004b000001f20000c13d000000040240008a000000200220008c000001f20000413d0000000402300370000000000202043b000000c70320009c000001f20000213d000000d503000041000000800030043f0000000003000414000000040420008c000001cb0000c13d00000000040000310000000002000019000001d80000013d0000000002000416000000000202004b000001f20000c13d000000040240008a000000200220008c000001f20000413d0000000402300370000000000202043b000000c70320009c000001f20000213d000000e803000041000000800030043f0000000003000414000000040420008c000001e10000c13d00000000050000310000000002000019000001ec0000013d000000040140008a000000600110008c000001f20000413d0000000401300370000000000801043b000000c70180009c000001f20000213d0000002401300370000000000901043b000000c70190009c000001f20000213d0000004401300370000000000201043b000000d70120009c000001f20000213d0000002301200039000000e105000041000000000641004b00000000060000190000000006058019000000e101100197000000000701004b0000000005008019000000e10110009c000000000506c019000000000105004b000001f20000c13d0000000405200039000000000153034f000000000101043b000000d70610009c000002220000213d000000bf06100039000000200a00008a0000000006a6016f000000d70760009c000002220000213d000000400060043f000000800010043f00000000021200190000002402200039000000000242004b000001f20000213d0000002002500039000000000223034f0000001f0310018f0000000504100272000001010000613d00000000050000190000000506500210000000000762034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000000f90000413d000000000503004b000001100000613d0000000504400210000000000242034f0000000303300210000000a004400039000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500020000000a001d000300000009001d000000a0011000390000000000010435000000000100041a000000c7011001970000000002000411000000000121004b0000028a0000c13d000000dd010000410000000000100439000100000008001d0000000400800443000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000de011001c70000800202000039030a03050000040f0000000102200190000002350000613d000000000101043b000000000101004b0000000303000029000001f20000613d000000400400043d000000240140003900000040020000390000000000210435000000e4010000410000000000140435000000040140003900000000003104350000004402400039000000800100043d0000000000120435000300000004001d0000006402400039000000000301004b000001420000613d00000000030000190000000004230019000000a005300039000000000505043300000000005404350000002003300039000000000413004b0000013b0000413d00000000022100190000000000020435000000000300041600000000020004140000000104000029000000040440008c000002c90000613d0000001f01100039000000020110017f000000c4040000410000000306000029000000c40560009c0000000005040019000000000506401900000040055002100000006401100039000000c40610009c00000000010480190000006001100210000000000151019f000000c40520009c0000000002048019000000c002200210000000000112019f000000000203004b000002be0000c13d0000000102000029030a03000000040f000002c30000013d0000000001000416000000000101004b000001f20000c13d000000040140008a000000400110008c000001f20000413d0000000401300370000000000401043b000000c70140009c000001f20000213d0000002401300370000000000301043b000000c70130009c000001f20000213d000000000100041a000000c7011001970000000002000411000000000121004b000001c20000c13d000200000003001d000000dd010000410000000000100439000300000004001d0000000400400443000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000de011001c70000800202000039030a03050000040f0000000102200190000002350000613d000000000101043b000000000101004b00000003020000290000000203000029000001f20000613d000000400500043d000000e6010000410000000000150435000000040150003900000000003104350000000001000414000000040320008c000001a00000613d000000c404000041000000c40310009c0000000001048019000000c40350009c00000000040540190000004003400210000000c001100210000000000131019f000000e0011001c7000300000005001d030a03000000040f000000030500002900000000030100190000006003300270000000c40030019d000000c40330019700000001022001900000029b0000613d000000d70150009c000002220000213d000000400050043f00000000010000190000030b0001042e0000000001000416000000000101004b000001f20000c13d000000040140008a000000200110008c000001f20000413d0000000401300370000000000601043b000000c70160009c000001f20000213d000000000100041a000000c7021001970000000005000411000000000252004b000001c20000c13d000000000206004b000002360000c13d000000d901000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f000000da01000041000000c40010043f000000db01000041000000e40010043f000000dc010000410000030c00010430000000d901000041000000800010043f0000002001000039000000840010043f000000a40010043f000000e201000041000000c40010043f000000e7010000410000030c00010430000000c401000041000000c40430009c0000000003018019000000c001300210000000d6011001c7000300000009001d030a03050000040f0000000309000029000000010220015f00000000030100190000006003300270000000c40030019d000000c4043001970000006003000039000000000504004b000001f40000c13d0000000101200190000001f20000c13d0000000001030433000000000291001900000000010900190000022b0000013d000000c401000041000000c40430009c0000000003018019000000c001300210000000d6011001c7030a03050000040f000000010220015f00000000030100190000006003300270000000c40030019d000000c40530019700000060040000390000008003000039000000000605004b000002200000c13d0000000101200190000002280000613d00000000010000190000030c00010430000000d70340009c000002220000213d0000003f03400039000000200500008a000000000553016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000000d70750009c000002220000213d0000000106600190000002220000c13d000000400050043f0000001f0540018f00000000094304360000000504400272000002100000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000002080000413d000000000605004b000001db0000613d0000000504400210000000000141034f00000000044900190000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000001db0000013d000000e90350009c000002430000413d000000ea0100004100000000001004350000004101000039000000040010043f000000e0010000410000030c00010430000000000104043300000000023100190000000001030019030a02ed0000040f000000c701100197000000400200043d0000000000120435000000c401000041000000c40320009c00000000020180190000004001200210000000d8011001c70000030b0001042e000000000001042f000000c501100197000000000161019f000000000010041b000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000c6011001c70000800d020000390000000303000039000000c8040000410000002b0000013d0000003f03500039000000200400008a000000000343016f000000400400043d0000000003340019000000000643004b00000000060000190000000106004039000000d70730009c000002220000213d0000000106600190000002220000c13d000000400030043f0000001f0650018f000000000354043600000005055002720000025d0000613d000000000700001900000005087002100000000009830019000000000881034f000000000808043b00000000008904350000000107700039000000000857004b000002550000413d000000000706004b000001f00000613d0000000505500210000000000151034f00000000055300190000000306600210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000001f00000013d000000400200043d0000001f0430018f00000005053002720000027a0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000002720000413d000000000604004b000002890000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000002b70000013d000000400100043d0000004402100039000000e2030000410000000000320435000000d902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000000c402000041000000c40310009c00000000010280190000004001100210000000e3011001c70000030c00010430000000400200043d0000001f0430018f0000000505300272000002a80000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000002a00000413d000000000604004b000002b70000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000000c401000041000000c40420009c000000000201801900000040012002100000006002300210000000000121019f0000030c00010430000000c6011001c7000080090200003900000001040000290000000005000019030a03000000040f00000000030100190000006003300270000000c40030019d000000c4033001970000000102200190000002d00000613d0000000301000029000000d70110009c000002220000213d0000000301000029000000400010043f00000000010000190000030b0001042e000000400200043d0000001f0430018f0000000505300272000002dd0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000002d50000413d000000000604004b000002ec0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000002b70000013d0000000002120049000000e1030000410000001f0420008c00000000040000190000000004032019000000e102200197000000000502004b0000000003008019000000e10220009c000000000304c019000000000203004b000002fd0000613d0000000001010433000000c70210009c000002fd0000213d000000000001042d00000000010000190000030c00010430000000000001042f00000303002104210000000102000039000000000001042d0000000002000019000000000001042d00000308002104230000000102000039000000000001042d0000000002000019000000000001042d0000030a000004320000030b0001042e0000030c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009623609c00000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f3b7dead000000000000000000000000000000000000000000000000000000009623609d0000000000000000000000000000000000000000000000000000000099a88ec4000000000000000000000000000000000000000000000000000000007eff275d000000000000000000000000000000000000000000000000000000007eff275e000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000204e1c7a00000000000000000000000000000000000000000000000000000000715018a6f851a440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000002000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000003659cfe600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000080000000000000000000000000000000000000000000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000640000000000000000000000004f1ef2860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000008f2839700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000008000000000000000005c60da1b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dcae279dc42dc12764932de58667e0eb4e4113a6557107e4fec32063c180b99"},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"ProxyAdmin_1215\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := sload(/** @src 0:3363:3369 \"_owner\" */ 0x00)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n sstore(/** @src 0:3363:3369 \"_owner\" */ 0x00, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ or(and(_2, not(sub(shl(160, 1), 1))), /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:3363:3369 \"_owner\" */ 0x00, 0x00, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_2, sub(shl(160, 1), 1)), /** @src 0:835:845 \"msg.sender\" */ caller())\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _3 := datasize(\"ProxyAdmin_1215_deployed\")\n codecopy(_1, dataoffset(\"ProxyAdmin_1215_deployed\"), _3)\n return(_1, _3)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ProxyAdmin_1215_deployed\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n let _2 := 64\n mstore(_2, _1)\n let _3 := 4\n if iszero(lt(calldatasize(), _3))\n {\n let _4 := 0\n switch shr(224, calldataload(_4))\n case 0x204e1c7a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _5 := sub(shl(160, 1), 1)\n let _6 := and(abi_decode_contract_TransparentUpgradeableProxy(), _5)\n mstore(_1, shl(224, 0x5c60da1b))\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component := staticcall(gas(), _6, _1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component_mpos := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component) { revert(_4, _4) }\n let _7 := and(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ expr_component_mpos)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _5)\n let memPos := mload(_2)\n mstore(memPos, _7)\n return(memPos, 32)\n }\n case 0x715018a6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _8 := sload(_4)\n sstore(_4, and(_8, shl(160, 0xffffffffffffffffffffffff)))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, _4, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_8, sub(shl(160, 1), 1)), _4)\n return(_4, _4)\n }\n case 0x7eff275e {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _9 := sub(shl(160, 1), 1)\n let _10 := and(/** @src 0:33410:33427 \"proxy.changeAdmin\" */ value0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _9)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(extcodesize(_10))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _11 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n mstore(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(228, 0x08f28397))\n mstore(/** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ add(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1, _9))\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _12 := call(gas(), _10, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(_12)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos := mload(_2)\n returndatacopy(pos, _4, returndatasize())\n revert(pos, returndatasize())\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if _12\n {\n finalize_allocation_3427(_11)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n _4 := _4\n }\n return(_4, _4)\n }\n case 0x8da5cb5b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value := and(sload(_4), sub(shl(160, 1), 1))\n let memPos_1 := mload(_2)\n mstore(memPos_1, value)\n return(memPos_1, 32)\n }\n case 0x9623609d {\n if slt(add(calldatasize(), not(3)), 96) { revert(_4, _4) }\n let value0_1 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_1 := abi_decode_address()\n let offset := calldataload(68)\n if gt(offset, 0xffffffffffffffff) { revert(_4, _4) }\n if iszero(slt(add(offset, 35), calldatasize())) { revert(_4, _4) }\n let _13 := calldataload(add(_3, offset))\n let _14 := array_allocation_size_bytes(_13)\n let memPtr := mload(_2)\n finalize_allocation(memPtr, _14)\n mstore(memPtr, _13)\n let _15 := 32\n if gt(add(add(offset, _13), 36), calldatasize()) { revert(_4, _4) }\n calldatacopy(add(memPtr, _15), add(offset, 36), _13)\n mstore(add(add(memPtr, _13), _15), _4)\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _16 := sub(shl(160, 1), 1)\n let _17 := and(/** @src 0:34191:34213 \"proxy.upgradeToAndCall\" */ value0_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _16)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(extcodesize(_17))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _18 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n mstore(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x278f7943))\n mstore(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ add(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_1, _16))\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36), _2)\n let length := mload(memPtr)\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 68), length)\n let i := _4\n for { } lt(i, length) { i := add(i, _15) }\n {\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ i), 100), mload(add(add(memPtr, i), _15)))\n }\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ length), 100), _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _19 := call(gas(), _17, /** @src 0:34221:34230 \"msg.value\" */ callvalue(), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, add(sub(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(add(length, 0x1f), not(31))), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 100), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(_19)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_1 := mload(_2)\n returndatacopy(pos_1, _4, returndatasize())\n revert(pos_1, returndatasize())\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if _19\n {\n finalize_allocation_3427(_18)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0x99a88ec4 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_2 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_2 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _20 := sub(shl(160, 1), 1)\n let _21 := and(/** @src 0:33750:33765 \"proxy.upgradeTo\" */ value0_2, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _20)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(extcodesize(_21))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _22 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n mstore(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x1b2ce7f3))\n mstore(/** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ add(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_2, _20))\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _23 := call(gas(), _21, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(_23)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_2 := mload(_2)\n returndatacopy(pos_2, _4, returndatasize())\n revert(pos_2, returndatasize())\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if _23\n {\n finalize_allocation_3427(_22)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0xf2fde38b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_3 := abi_decode_contract_TransparentUpgradeableProxy()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _24 := sub(shl(160, 1), 1)\n let _25 := and(/** @src 0:3027:3049 \"newOwner != address(0)\" */ value0_3, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _24)\n if /** @src 0:3027:3049 \"newOwner != address(0)\" */ iszero(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _25)\n {\n let memPtr_1 := mload(_2)\n mstore(memPtr_1, shl(229, 4594637))\n mstore(add(memPtr_1, _3), 32)\n mstore(add(memPtr_1, 36), 38)\n mstore(add(memPtr_1, 68), \"Ownable: new owner is the zero a\")\n mstore(add(memPtr_1, 100), \"ddress\")\n revert(memPtr_1, 132)\n }\n let _26 := sload(0)\n sstore(0, or(and(_26, shl(160, 0xffffffffffffffffffffffff)), _25))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 0, 0, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_26, _24), /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ _25)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n return(_4, _4)\n }\n case 0xf3b7dead {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _27 := sub(shl(160, 1), 1)\n let _28 := and(abi_decode_contract_TransparentUpgradeableProxy(), _27)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let _29 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n mstore(_29, shl(230, 0x03e14691))\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_1 := staticcall(gas(), _28, _29, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_mpos_1 := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component_1) { revert(_4, _4) }\n let _30 := and(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ expr_component_mpos_1)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _27)\n let memPos_2 := mload(_2)\n mstore(memPos_2, _30)\n return(memPos_2, 32)\n }\n }\n revert(0, 0)\n }\n function abi_decode_contract_TransparentUpgradeableProxy() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_address() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function finalize_allocation_3427(memPtr)\n {\n if gt(memPtr, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, memPtr)\n }\n function finalize_allocation(memPtr, size)\n {\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 74 @src 0:2259:2383 \"function _checkOwner() internal view virtual {...\"\n function fun_checkOwner()\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let value := and(sload(/** @src 0:2183:2189 \"_owner\" */ 0x00), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ sub(shl(160, 1), 1))\n if iszero(/** @src 0:2318:2341 \"owner() == _msgSender()\" */ eq(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ value, /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 32)\n mstore(add(memPtr, 68), \"Ownable: caller is not the owner\")\n revert(memPtr, 100)\n }\n }\n function extract_returndata() -> data\n {\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let _2 := array_allocation_size_bytes(_1)\n let memPtr := mload(64)\n finalize_allocation(memPtr, _2)\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, 0x20), /** @src -1:-1:-1 */ 0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ returndatasize())\n }\n }\n function abi_decode_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1))))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n value0 := value\n }\n }\n data \".metadata\" hex\"a26469706673582212200c357892ee89f46df6d61d0354d7a1306c19bb275746744c0a9d77ef5644b92664736f6c63430008150033\"\n }\n}\n","hash":"010000ed89a9abe7f27c522a89d1c165b742f032da6ae4b42f62bfda768e4bf9","factoryDependencies":{}},"StorageSlot":{"abi":[],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"StorageSlot\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:StorageSlot\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_0[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\n","bytecode":{"object":"00000001012001900000000c0000613d0000008001000039000000400010043f0000000001000416000000000101004b0000000c0000c13d00000020010000390000010000100443000001200000044300000005010000410000000f0001042e000000000100001900000010000104300000000e000004320000000f0001042e00000010000104300000000000000000000000000000000000000000000000000000000200000000000000000000000000000040000001000000000000000000841f6f3273e8cfd552f742cde8a54ff7b30af1ec387cdb6f6c9489115943c019"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"StorageSlot_538\" {\n code {\n {\n /// @src 0:14899:16178 \"library StorageSlot {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"StorageSlot_538_deployed\")\n codecopy(_1, dataoffset(\"StorageSlot_538_deployed\"), _2)\n setimmutable(_1, \"library_deploy_address\", address())\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"StorageSlot_538_deployed\" {\n code {\n {\n /// @src 0:14899:16178 \"library StorageSlot {...\"\n revert(0, 0)\n }\n }\n data \".metadata\" hex\"a264697066735822122010e1f6cdf942a3ff1b39a3e68c89efd61742209cbed50b532de25e0757ccd1cc64736f6c63430008150033\"\n }\n}\n","hash":"01000007dca37a1ddacb11d9f8c949567a6b8894baf98b5edee2f0686a32dfee","factoryDependencies":{}},"TransparentUpgradeableProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:TransparentUpgradeableProxy\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[8]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r4\n\tptr.add\tr1, r4, stack[@ptr_return_data]\n\tadd\t128, r0, r8\n\tst.1\t64, r8\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_1\n\tptr.add\tr1, r4, r3\n\tsub.s!\t4, r4, r2\n\tjump.lt\t@.BB0_59\n\tld\tr1, r2\n\tshr.s\t224, r2, r2\n\tsub.s!\t@CPI0_21[0], r2, r5\n\tjump.le\t@.BB0_54\n\tsub.s!\t@CPI0_22[0], r2, r5\n\tjump.eq\t@.BB0_161\n\tsub.s!\t@CPI0_23[0], r2, r5\n\tjump.eq\t@.BB0_180\n\tsub.s!\t@CPI0_24[0], r2, r2\n\tjump.ne\t@.BB0_236\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r5\n\tjump.ne\t@.BB0_205\n\tjump\t@.BB0_179\n.BB0_1:\n\tadd\t@CPI0_1[0], r4, r2\n\tsub.s!\t@CPI0_2[0], r2, r2\n\tjump.gt\t@.BB0_3\n.BB0_2:\n\tadd\t@CPI0_35[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI0_36[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_59:\n\tsub!\tr4, r0, r2\n\tjump.ne\t@.BB0_236\n\tadd\t@CPI0_17[0], r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_4[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.eq\t@.BB0_223\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tcontext.gas_left\tr1\n\tand\t@CPI0_4[0], r2, r2\n\tsub.s!\t4, r2, r4\n\tjump.ne\t@.BB0_229\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_271\n\tadd\tr0, r0, r5\n.BB0_227:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_227\n.BB0_271:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_235\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_235\n.BB0_3:\n\tadd\t159, r4, r2\n\tand\t@CPI0_3[0], r2, r2\n\tst.1\t64, r2\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r3\n\tjump.eq\t@.BB0_277\n\tadd\tr0, r0, r5\n.BB0_5:\n\tshl.s\t5, r5, r6\n\tptr.add\tr1, r6, r7\n\tld\tr7, r7\n\tadd\t128, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r3, r6\n\tjump.lt\t@.BB0_5\n.BB0_277:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_7\n\tshl.s\t5, r3, r3\n\tptr.add\tr1, r3, r1\n\tshl.s\t3, r2, r2\n\tadd\t128, r3, r3\n\tld.1\tr3, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tld\tr1, r1\n\tsub\t256, r2, r2\n\tshr\tr1, r2, r1\n\tshl\tr1, r2, r1\n\tor\tr1, r5, r1\n\tst.1\tr3, r1\n.BB0_7:\n\tsub.s!\t95, r4, r1\n\tjump.le\t@.BB0_8\n\tld.1\t128, r9\n\tsub.s!\t@CPI0_4[0], r9, r1\n\tjump.gt\t@.BB0_8\n\tld.1\t160, r7\n\tsub.s!\t@CPI0_4[0], r7, r1\n\tjump.gt\t@.BB0_8\n\tld.1\t192, r2\n\tsub.s!\t@CPI0_5[0], r2, r1\n\tjump.gt\t@.BB0_8\n\tadd\t31, r2, r1\n\tadd\t@CPI0_6[0], r0, r3\n\tsub!\tr1, r4, r5\n\tadd\tr0, r0, r5\n\tadd.ge\tr3, r0, r5\n\tand\t@CPI0_6[0], r1, r1\n\tsub!\tr1, r0, r6\n\tadd.ge\tr0, r0, r3\n\tsub.s!\t@CPI0_6[0], r1, r1\n\tadd.ne\tr5, r0, r3\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_8\n\tadd\t128, r2, r1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI0_5[0], r1, r3\n\tjump.gt\t@.BB0_2\n\tadd\t63, r1, r3\n\tsub.s\t32, r0, r10\n\tand\tr3, r10, r3\n\tld.1\t64, r11\n\tadd\tr11, r3, r3\n\tsub!\tr3, r11, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r3, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tadd\t128, r4, r4\n\tst.1\t64, r3\n\tst.1.inc\tr11, r1, r6\n\tadd\t160, r2, r2\n\tadd\tr1, r2, r3\n\tsub!\tr3, r4, r3\n\tjump.gt\t@.BB0_8\n\tadd\tr11, r0, stack-[6]\n\tadd\tr10, r0, stack-[5]\n\tadd\tr7, r0, stack-[7]\n\tadd\tr8, r0, stack-[3]\n\tsub!\tr1, r0, r3\n\tjump.eq\t@.BB0_20\n\tadd\tr0, r0, r3\n.BB0_19:\n\tadd\tr3, r6, r4\n\tadd\tr3, r2, r5\n\tld.1\tr5, r5\n\tst.1\tr4, r5\n\tadd\t32, r3, r3\n\tsub!\tr3, r1, r4\n\tjump.lt\t@.BB0_19\n.BB0_20:\n\tadd\tr6, r0, stack-[4]\n\tadd\tr6, r1, r1\n\tst.1\tr1, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr9, r0, stack-[8]\n\tst.2\t4, r9\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_23\n\tadd\tstack-[8], r0, r1\n\tand\t@CPI0_4[0], r1, r5\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tor\tr2, r5, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r3\n\tand!\t1, r2, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tstack-[6], r0, r5\n\tjump.eq\t@.BB0_8\n\tld.1\tr5, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_27\n.BB0_28:\n\tadd\t@CPI0_17[0], r0, r1\n\tsload\tr1, r3\n\tand\t@CPI0_4[0], r2, r4\n\tld.1\t64, r1\n\tadd\t32, r1, r2\n\tadd\tr4, r0, stack-[8]\n\tst.1\tr2, r4\n\tadd\tr3, r0, stack-[7]\n\tand\t@CPI0_4[0], r3, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r2\n\tcontext.gas_left\tr3\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_18[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_19[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tsub!\tstack-[8], r0, r1\n\tjump.eq\t@.BB0_50\n\tadd\tstack-[7], r0, r1\n\tand\t@CPI0_10[0], r1, r1\n\tor\tstack-[8], r1, r1\n\tadd\t@CPI0_17[0], r0, r2\n\tsstore\tr2, r1\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_20[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_54:\n\tsub.s!\t@CPI0_25[0], r2, r5\n\tjump.eq\t@.BB0_60\n\tsub.s!\t@CPI0_26[0], r2, r2\n\tjump.ne\t@.BB0_236\n\tsub.s\t4, r4, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_8\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r9\n\tsub.s!\t@CPI0_4[0], r9, r2\n\tjump.gt\t@.BB0_8\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_5[0], r6, r2\n\tjump.gt\t@.BB0_8\n\tadd\t35, r6, r2\n\tadd\t@CPI0_6[0], r0, r5\n\tsub!\tr2, r4, r7\n\tadd\tr0, r0, r7\n\tadd.ge\tr5, r0, r7\n\tand\t@CPI0_6[0], r2, r2\n\tsub!\tr2, r0, r8\n\tadd.ge\tr0, r0, r5\n\tsub.s!\t@CPI0_6[0], r2, r2\n\tadd.ne\tr7, r0, r5\n\tsub!\tr5, r0, r2\n\tjump.ne\t@.BB0_8\n\tadd\t4, r6, r5\n\tptr.add\tr1, r5, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_5[0], r2, r7\n\tjump.gt\t@.BB0_8\n\tadd\tr6, r2, r6\n\tadd\t36, r6, r6\n\tsub!\tr6, r4, r6\n\tjump.gt\t@.BB0_8\n\tadd\t@CPI0_17[0], r0, r6\n\tsload\tr6, r6\n\tand\t@CPI0_4[0], r6, r6\n\tcontext.caller\tr7\n\tsub!\tr7, r6, r6\n\tjump.ne\t@.BB0_115\n\tadd\t191, r2, r3\n\tsub.s\t32, r0, r6\n\tand\tr3, r6, r3\n\tsub.s!\t@CPI0_5[0], r3, r4\n\tjump.gt\t@.BB0_2\n\tadd\tr6, r0, stack-[7]\n\tst.1\t64, r3\n\tadd\t32, r5, r3\n\tptr.add\tr1, r3, r1\n\tand\t31, r2, r3\n\tst.1\t128, r2\n\tshr.s!\t5, r2, r4\n\tjump.eq\t@.BB0_258\n\tadd\tr0, r0, r5\n.BB0_134:\n\tshl.s\t5, r5, r6\n\tptr.add\tr1, r6, r7\n\tld\tr7, r7\n\tadd\t160, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r4, r6\n\tjump.lt\t@.BB0_134\n.BB0_258:\n\tsub!\tr3, r0, r5\n\tjump.eq\t@.BB0_136\n\tshl.s\t5, r4, r4\n\tptr.add\tr1, r4, r1\n\tshl.s\t3, r3, r3\n\tadd\t160, r4, r4\n\tld.1\tr4, r5\n\tshl\tr5, r3, r5\n\tshr\tr5, r3, r5\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r5, r1\n\tst.1\tr4, r1\n.BB0_136:\n\tadd\t160, r2, r1\n\tst.1\tr1, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr9, r0, stack-[8]\n\tst.2\t4, r9\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_23\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tor\tstack-[8], r2, r2\n\tadd\tstack-[8], r0, r5\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r3\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tld.1\t64, r1\n\tadd\tr1, r0, stack-[6]\n\tsub.s!\t@CPI0_13[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\tstack-[6], r0, r4\n\tadd\t96, r4, r1\n\tst.1\t64, r1\n\tadd\t64, r4, r1\n\tadd\t@CPI0_14[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t32, r4, r1\n\tadd\t@CPI0_15[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t39, r0, r1\n\tst.1\tr4, r1\n\tld.1\t128, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r3, r3\n\tjump.ne\t@.BB0_141\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r4\n\tjump\t@.BB0_143\n.BB0_236:\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r2\n\tjump.ne\t@.BB0_237\n.BB0_223:\n\tadd\t@CPI0_16[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t66, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_39[0], r0, r1\n\tst.1\t196, r1\n\tadd\t@CPI0_40[0], r0, r1\n\tst.1\t228, r1\n\tadd\t@CPI0_41[0], r0, r1\n\tst.1\t260, r1\n\tadd\t@CPI0_42[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_237:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_275\n\tadd\tr0, r0, r7\n.BB0_239:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_239\n.BB0_275:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_241\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_241:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_246\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_273\n\tadd\tr0, r0, r5\n.BB0_244:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_244\n.BB0_273:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_252\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_252\n.BB0_161:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tadd\t@CPI0_17[0], r0, r5\n\tsload\tr5, r5\n\tand\t@CPI0_4[0], r5, r5\n\tcontext.caller\tr6\n\tsub!\tr6, r5, r5\n\tjump.ne\t@.BB0_163\n.BB0_179:\n\tst.1\t128, r2\n\tadd\t@CPI0_27[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_180:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_8\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_4[0], r6, r2\n\tjump.gt\t@.BB0_8\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r7\n\tand\t@CPI0_4[0], r7, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r5\n\tjump.ne\t@.BB0_184\n\tadd\tr7, r0, stack-[7]\n\tst.1\t128, r2\n\tst.1\t160, r6\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_28[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_19[0], r0, r4\n\tadd\tr6, r0, stack-[8]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r3\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_202\n.BB0_50:\n\tld.1\t64, r1\n\tadd\t100, r1, r2\n\tadd\t@CPI0_29[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tadd\t@CPI0_30[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t38, r0, r3\n\tjump\t@.BB0_24\n.BB0_60:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_8\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_4[0], r6, r2\n\tjump.le\t@.BB0_63\n.BB0_8:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_246:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_274\n\tadd\tr0, r0, r6\n.BB0_248:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_248\n.BB0_274:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_250\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_250:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_251\n.BB0_252:\n\tjump\t@.BB0_80\n.BB0_229:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_272\n\tadd\tr0, r0, r6\n.BB0_231:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_231\n.BB0_272:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_233\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_233:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_234\n.BB0_235:\n.BB0_80:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r4, r2\n\tadd.ge\tr1, r0, r4\n\tshl.s\t96, r4, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_251:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_234:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_205:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_270\n\tadd\tr0, r0, r7\n.BB0_207:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_207\n.BB0_270:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_209\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_209:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_214\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_268\n\tadd\tr0, r0, r5\n.BB0_212:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_212\n.BB0_268:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_220\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_220\n.BB0_163:\n\tand\t31, r4, r6\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_264\n\tadd\tr0, r0, r7\n.BB0_165:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r5, r8\n\tjump.lt\t@.BB0_165\n.BB0_264:\n\tsub!\tr6, r0, r7\n\tjump.eq\t@.BB0_167\n\tshl.s\t3, r6, r6\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r7\n\tshl\tr7, r6, r7\n\tshr\tr7, r6, r7\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r6, r6\n\tshr\tr1, r6, r1\n\tshl\tr1, r6, r1\n\tor\tr1, r7, r1\n\tst.1\tr5, r1\n.BB0_167:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_172\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_262\n\tadd\tr0, r0, r5\n.BB0_170:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_170\n.BB0_262:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_178\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_178\n.BB0_63:\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r2\n\tjump.ne\t@.BB0_65\n\tadd\t160, r0, r1\n\tst.1\t64, r1\n\tst.1\t128, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr6, r0, stack-[8]\n\tst.2\t4, r6\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_83\n.BB0_23:\n\tld.1\t64, r1\n\tadd\t100, r1, r2\n\tadd\t@CPI0_37[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tadd\t@CPI0_38[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t45, r0, r3\n.BB0_24:\n\tst.1\tr2, r3\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_31[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_184:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_267\n\tadd\tr0, r0, r7\n.BB0_186:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_186\n.BB0_267:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_188\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_188:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_193\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_265\n\tadd\tr0, r0, r5\n.BB0_191:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_191\n.BB0_265:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_199\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_199\n.BB0_214:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_269\n\tadd\tr0, r0, r6\n.BB0_216:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_216\n.BB0_269:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_218\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_218:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_219\n.BB0_220:\n\tjump\t@.BB0_80\n.BB0_172:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_263\n\tadd\tr0, r0, r6\n.BB0_174:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_174\n.BB0_263:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_176\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_176:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_177\n.BB0_178:\n\tjump\t@.BB0_80\n.BB0_65:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_256\n\tadd\tr0, r0, r7\n.BB0_67:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_67\n.BB0_256:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_69\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_69:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_74\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_254\n\tadd\tr0, r0, r5\n.BB0_72:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_72\n.BB0_254:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_80\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_80\n.BB0_193:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_266\n\tadd\tr0, r0, r6\n.BB0_195:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_195\n.BB0_266:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_197\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_197:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_198\n.BB0_199:\n\tjump\t@.BB0_80\n.BB0_219:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_177:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_74:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_255\n\tadd\tr0, r0, r6\n.BB0_76:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_76\n.BB0_255:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_78\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_78:\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_80\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_202:\n\tadd\tstack-[7], r0, r1\n\tand\t@CPI0_10[0], r1, r1\n\tor\tr1, r3, r1\n\tadd\t@CPI0_17[0], r0, r2\n\tsstore\tr2, r1\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_83:\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tor\tstack-[8], r2, r2\n\tadd\tstack-[8], r0, r5\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r5\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tld.1\t128, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_85\n.BB0_64:\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_198:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_115:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_261\n\tadd\tr0, r0, r7\n.BB0_117:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_117\n.BB0_261:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_119\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_119:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_124\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_259\n\tadd\tr0, r0, r5\n.BB0_122:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_122\n.BB0_259:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_130\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_130\n.BB0_85:\n\tld.1\t64, r3\n\tsub.s!\t@CPI0_13[0], r3, r1\n\tjump.gt\t@.BB0_2\n\tadd\t96, r3, r1\n\tst.1\t64, r1\n\tadd\t64, r3, r1\n\tadd\t@CPI0_14[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t32, r3, r1\n\tadd\t@CPI0_15[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t39, r0, r1\n\tadd\tr3, r0, stack-[7]\n\tst.1\tr3, r1\n\tld.1\t128, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r5, r3\n\tjump.ne\t@.BB0_87\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r4\n\tjump\t@.BB0_89\n.BB0_124:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_260\n\tadd\tr0, r0, r6\n.BB0_126:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_126\n.BB0_260:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_128\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_128:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_129\n.BB0_130:\n\tjump\t@.BB0_80\n.BB0_129:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_27:\n\tld.1\t64, r4\n\tsub.s!\t@CPI0_13[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tadd\t96, r4, r1\n\tst.1\t64, r1\n\tadd\t64, r4, r1\n\tadd\t@CPI0_14[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t39, r0, r1\n\tadd\tr4, r0, stack-[2]\n\tst.1.inc\tr4, r1, r2\n\tadd\t@CPI0_15[0], r0, r1\n\tadd\tr2, r0, stack-[1]\n\tst.1\tr2, r1\n\tld.1\tr5, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r3, r3\n\tjump.ne\t@.BB0_31\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r3\n\tjump\t@.BB0_32\n.BB0_87:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_32[0], r1, r1\n\tadd\tr5, r0, r2\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r4\n.BB0_89:\n\tadd\t96, r0, r3\n\tadd\t128, r0, r1\n\tsub!\tr4, r0, r5\n\tjump.ne\t@.BB0_101\n.BB0_90:\n\tld.1\tr3, r3\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_98\n\tsub!\tr3, r0, r2\n\tjump.ne\t@.BB0_97\n\tld.1\t64, r1\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\tstack-[7], r0, r7\n\tld.1\tr7, r2\n\tadd\t36, r1, r3\n\tst.1\tr3, r2\n\tadd\t68, r1, r3\n\tsub!\tr2, r0, r4\n\tjump.eq\t@.BB0_95\n\tadd\tr0, r0, r4\n.BB0_94:\n\tadd\tr4, r3, r5\n\tadd\t32, r4, r4\n\tadd\tr4, r7, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tsub!\tr4, r2, r5\n\tjump.lt\t@.BB0_94\n.BB0_95:\n\tadd\t31, r2, r4\n\tsub.s\t32, r0, r5\n.BB0_96:\n\tand\tr4, r5, r4\n\tadd\tr2, r3, r2\n\tst.1\tr2, r0\n\tadd\t68, r4, r2\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_101:\n\tsub.s!\t@CPI0_5[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tadd\t63, r4, r1\n\tsub.s\t32, r0, r3\n\tand\tr1, r3, r1\n\tld.1\t64, r3\n\tadd\tr3, r1, r1\n\tsub!\tr1, r3, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r1, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r1\n\tand\t31, r4, r5\n\tst.1.inc\tr3, r4, r1\n\tptr.add\tstack[@ptr_return_data], r0, r6\n\tshr.s!\t5, r4, r4\n\tjump.eq\t@.BB0_253\n\tadd\tr0, r0, r7\n.BB0_106:\n\tshl.s\t5, r7, r8\n\tadd\tr1, r8, r9\n\tptr.add\tr6, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r4, r8\n\tjump.lt\t@.BB0_106\n.BB0_253:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_90\n\tshl.s\t5, r4, r4\n\tptr.add\tr6, r4, r6\n\tadd\tr1, r4, r4\n\tshl.s\t3, r5, r5\n\tld.1\tr4, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tld\tr6, r6\n\tsub\t256, r5, r5\n\tshr\tr6, r5, r6\n\tshl\tr6, r5, r5\n\tor\tr5, r7, r5\n\tst.1\tr4, r5\n\tjump\t@.BB0_90\n.BB0_98:\n\tsub!\tr3, r0, r1\n\tadd\tstack-[8], r0, r2\n\tjump.ne\t@.BB0_64\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tst.2\t4, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n.BB0_100:\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_41\n\tjump\t@.BB0_64\n.BB0_31:\n\tadd\t@CPI0_0[0], r0, r3\n\tadd\tstack-[4], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.ge\tr3, r0, r5\n\tshl.s\t64, r5, r4\n\tsub.s!\t@CPI0_0[0], r2, r5\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tor\tr2, r4, r2\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\tr2, r1, r1\n\tadd\tstack-[8], r0, r2\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r3\n.BB0_32:\n\tadd\t96, r0, r1\n\tsub!\tr3, r0, r4\n\tjump.ne\t@.BB0_42\n.BB0_33:\n\tld.1\tr1, r1\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_38\n\tsub!\tr1, r0, r2\n\tjump.ne\t@.BB0_36\n\tld.1\t64, r4\n\tadd\tr4, r0, stack-[8]\n\tadd\t@CPI0_16[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tadd\t32, r0, r2\n\tst.1\tr1, r2\n\tadd\tstack-[2], r0, r1\n\tld.1\tr1, r3\n\tadd\tr3, r0, stack-[7]\n\tadd\t36, r4, r1\n\tst.1\tr1, r3\n\tadd\t68, r4, r2\n\tadd\tstack-[1], r0, r1\n\tnear_call\tr0, @copy_memory_to_memory_with_cleanup, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r1\n\tadd\t31, r1, r1\n\tand\tstack-[5], r1, r1\n\tadd\t68, r1, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[8], r0, r4\n\tjump\t@.BB0_37\n.BB0_42:\n\tsub.s!\t@CPI0_5[0], r3, r1\n\tadd\tstack-[5], r0, r4\n\tjump.gt\t@.BB0_2\n\tadd\t63, r3, r1\n\tand\tr1, r4, r4\n\tld.1\t64, r1\n\tadd\tr1, r4, r4\n\tsub!\tr4, r1, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r4, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r4\n\tand\t31, r3, r4\n\tst.1.inc\tr1, r3, r9\n\tptr.add\tstack[@ptr_return_data], r0, r5\n\tshr.s!\t5, r3, r3\n\tjump.eq\t@.BB0_276\n\tadd\tr0, r0, r6\n.BB0_47:\n\tshl.s\t5, r6, r7\n\tadd\tr9, r7, r8\n\tptr.add\tr5, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r3, r7\n\tjump.lt\t@.BB0_47\n.BB0_276:\n\tadd\tr9, r0, stack-[3]\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_33\n\tshl.s\t5, r3, r3\n\tptr.add\tr5, r3, r5\n\tadd\tstack-[3], r3, r3\n\tshl.s\t3, r4, r4\n\tld.1\tr3, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr5, r5\n\tsub\t256, r4, r4\n\tshr\tr5, r4, r5\n\tshl\tr5, r4, r4\n\tor\tr4, r6, r4\n\tst.1\tr3, r4\n\tjump\t@.BB0_33\n.BB0_38:\n\tsub!\tr1, r0, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tstack-[8], r0, r3\n\tjump.ne\t@.BB0_28\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tst.2\t4, r3\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[7], r0, r2\n\tjump.ne\t@.BB0_28\n.BB0_41:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_33[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t29, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_34[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_141:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_32[0], r1, r1\n\tadd\tstack-[8], r0, r2\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r4\n.BB0_143:\n\tadd\t96, r0, r3\n\tadd\t128, r0, r1\n\tsub!\tr4, r0, r5\n\tjump.ne\t@.BB0_154\n.BB0_144:\n\tld.1\tr3, r3\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_151\n\tsub!\tr3, r0, r2\n\tjump.ne\t@.BB0_150\n\tld.1\t64, r1\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\tstack-[6], r0, r7\n\tld.1\tr7, r2\n\tadd\t36, r1, r3\n\tst.1\tr3, r2\n\tadd\t68, r1, r3\n\tsub!\tr2, r0, r4\n\tjump.eq\t@.BB0_149\n\tadd\tr0, r0, r4\n.BB0_148:\n\tadd\tr4, r3, r5\n\tadd\t32, r4, r4\n\tadd\tr4, r7, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tsub!\tr4, r2, r5\n\tjump.lt\t@.BB0_148\n.BB0_149:\n\tadd\t31, r2, r4\n\tadd\tstack-[7], r0, r5\n\tjump\t@.BB0_96\n.BB0_154:\n\tsub.s!\t@CPI0_5[0], r4, r1\n\tadd\tstack-[7], r0, r3\n\tjump.gt\t@.BB0_2\n\tadd\t63, r4, r1\n\tand\tr1, r3, r1\n\tld.1\t64, r3\n\tadd\tr3, r1, r1\n\tsub!\tr1, r3, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r1, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r1\n\tand\t31, r4, r5\n\tst.1.inc\tr3, r4, r1\n\tptr.add\tstack[@ptr_return_data], r0, r6\n\tshr.s!\t5, r4, r4\n\tjump.eq\t@.BB0_257\n\tadd\tr0, r0, r7\n.BB0_159:\n\tshl.s\t5, r7, r8\n\tadd\tr1, r8, r9\n\tptr.add\tr6, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r4, r8\n\tjump.lt\t@.BB0_159\n.BB0_257:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_144\n\tshl.s\t5, r4, r4\n\tptr.add\tr6, r4, r6\n\tadd\tr1, r4, r4\n\tshl.s\t3, r5, r5\n\tld.1\tr4, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tld\tr6, r6\n\tsub\t256, r5, r5\n\tshr\tr6, r5, r6\n\tshl\tr6, r5, r5\n\tor\tr5, r7, r5\n\tst.1\tr4, r5\n\tjump\t@.BB0_144\n.BB0_36:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[3], r0, r4\n.BB0_37:\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.ge\tr2, r0, r4\n\tshl.s\t64, r4, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_151:\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_64\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tjump\t@.BB0_100\n.BB0_21:\n\trevert\n.BB0_150:\n.BB0_97:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t96, r3, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\ncopy_memory_to_memory_with_cleanup:\n.func_begin1:\n\tsub!\tr3, r0, r4\n\tjump.eq\t@.BB1_3\n\tadd\tr0, r0, r4\n.BB1_2:\n\tadd\tr4, r2, r5\n\tadd\tr4, r1, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tadd\t32, r4, r4\n\tsub!\tr4, r3, r5\n\tjump.lt\t@.BB1_2\n.BB1_3:\n\tadd\tr3, r2, r1\n\tst.1\tr1, r0\n\tret\n.func_end1:\n\n__cxa_throw:\n\trevert\n\n__farcall:\n.func_begin2:\n.tmp0:\n\tfar_call\tr1, r2, @.BB3_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB3_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end2:\n\n__staticcall:\n.func_begin3:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB4_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB4_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end3:\n\n__delegatecall:\n.func_begin4:\n.tmp6:\n\tfar_call.delegate\tr1, r2, @.BB5_2\n.tmp7:\n\tadd\t1, r0, r2\n\tret\n.BB5_2:\n.tmp8:\n\tadd\tr0, r0, r2\n\tret\n.func_end4:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.p2align\t5\nptr_return_data:\n.cell\t0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell -18446744073709551457\nCPI0_2:\n\t.cell -18446744073709551489\nCPI0_3:\n\t.cell 8589934560\nCPI0_4:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_5:\n\t.cell 18446744073709551615\nCPI0_6:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_7:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_8:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_9:\n\t.cell 24440054405305269366569402256811496959409073762505157381672968839269610695612\nCPI0_10:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_11:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_12:\n\t.cell -30536698362301869620703524882028299911890425965968411027149867401609008632517\nCPI0_13:\n\t.cell 18446744073709551519\nCPI0_14:\n\t.cell 14654901866877395549149391597484105336708473837108585137082493300548441210880\nCPI0_15:\n\t.cell 29577713123142787666065354962605974352286555015652805685687967870311454567532\nCPI0_16:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_17:\n\t.cell -33836616157800148473937241991990060311975165975819281289460902511640494382845\nCPI0_18:\n\t.cell 904625697166532776746648320380374280103671760270919307471179981048634146816\nCPI0_19:\n\t.cell 57168638331561637060830620937878871246875502369269713186874178039217247582607\nCPI0_20:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_21:\n\t.cell 1549851162\nCPI0_22:\n\t.cell 1549851163\nCPI0_23:\n\t.cell 2401778032\nCPI0_24:\n\t.cell 4166100032\nCPI0_25:\n\t.cell 911855590\nCPI0_26:\n\t.cell 1327428230\nCPI0_27:\n\t.cell 2535301202817642044428229017600\nCPI0_28:\n\t.cell 904625697166532776746648320380374280103671760270919309832363222483456753664\nCPI0_29:\n\t.cell 45408759099000846574684193736602357774271237157169010951590501707763511459840\nCPI0_30:\n\t.cell 31354931755624933654031447922210079955860470560114867000114460986147043483745\nCPI0_31:\n\t.cell 10458117451882892562347801444352\nCPI0_32:\n\t.cell 2951479051793528258560\nCPI0_33:\n\t.cell 29577713123142787666064487680123823951345158729797978021083438401868913442816\nCPI0_34:\n\t.cell 7922816251426433759354395033600\nCPI0_35:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\nCPI0_36:\n\t.cell 2852213850513516153367582212096\nCPI0_37:\n\t.cell 50411903926665684337970802942352511357568373430877458990420567558264874598400\nCPI0_38:\n\t.cell 31354931755624933654031447922210259146857421806447843296373930569683382247534\nCPI0_39:\n\t.cell 38196372293526028768745537377834664526780728754846428360608283209572903117933\nCPI0_40:\n\t.cell 47687425813547131531374693542026864319719216742175721048342195994864927208039\nCPI0_41:\n\t.cell 45888551966424197807937402689295079693071411769653575580334356259971920822272\nCPI0_42:\n\t.cell 12993418654700534606776030461952\n","bytecode":{"object":"0002000000000002000800000000000200000000030100190000006003300270000001a30430019700010000004103550000008008000039000000400080043f0000000102200190000000210000c13d000000000341034f000000040240008c0000002a0000413d000000000201043b000000e002200270000001b80520009c000001000000a13d000001b90520009c000001d90000613d000001ba0520009c000001e80000613d000001bb0220009c0000018b0000c13d0000000002000416000000000202004b0000021f0000c13d000001b402000041000000000202041a000001a7022001970000000005000411000000000525004b000002770000c13d000001e50000013d000001a402400041000001a50220009c000000530000213d000001c60100004100000000001004350000004101000039000000040010043f000001c7010000410000068800010430000000000204004b0000018b0000c13d000001b401000041000000000101041a000001a7011001970000000002000411000000000112004b000001910000613d000001ac01000041000000000201041a0000000001000414000001a702200197000000040420008c000002490000c13d00000000040000310000001f0240018f0000000501400272000000440000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b0000003d0000413d000000000502004b0000026e0000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f00000000002104350000026e0000013d0000009f02400039000001a602200197000000400020043f0000001f0240018f0000000503400272000000620000613d00000000050000190000000506500210000000000761034f000000000707043b000000800660003900000000007604350000000105500039000000000635004b0000005a0000413d000000000502004b000000710000613d0000000503300210000000000131034f00000003022002100000008003300039000000000503043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001304350000005f0140008c0000021f0000a13d000000800900043d000001a70190009c0000021f0000213d000000a00700043d000001a70170009c0000021f0000213d000000c00200043d000001a80120009c0000021f0000213d0000001f01200039000001a903000041000000000541004b00000000050000190000000005038019000001a901100197000000000601004b0000000003008019000001a90110009c000000000305c019000000000103004b0000021f0000c13d00000080012000390000000001010433000001a80310009c000000240000213d0000003f03100039000000200a00008a0000000003a3016f000000400b00043d00000000033b00190000000005b3004b00000000050000190000000105004039000001a80630009c000000240000213d0000000105500190000000240000c13d0000008004400039000000400030043f00000000061b0436000000a0022000390000000003210019000000000343004b0000021f0000213d00060000000b001d00050000000a001d000700000007001d000300000008001d000000000301004b000000ad0000613d000000000300001900000000046300190000000005230019000000000505043300000000005404350000002003300039000000000413004b000000a60000413d000400000006001d00000000011600190000000000010435000001aa010000410000000000100439000800000009001d0000000400900443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000003020000613d0000000801000029000001a705100197000001ac01000041000000000201041a000001ad02200197000000000252019f000000000021041b000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ae011001c70000800d020000390000000203000039000001af04000041068606770000040f00000008030000290000000101200190000000070200002900000006050000290000021f0000613d0000000001050433000000000101004b000004ca0000c13d000001b401000041000000000301041a000001a704200197000000400100043d0000002002100039000800000004001d0000000000420435000700000003001d000001a7023001970000000000210435000001a3020000410000000003000414000001a30430009c0000000003028019000001a30410009c00000000010280190000004001100210000000c002300210000000000112019f000001b5011001c70000800d020000390000000103000039000001b604000041068606770000040f00000001012001900000021f0000613d000000080100006b0000020b0000613d0000000701000029000001ad0110019700000008011001af000001b402000041000000000012041b000000200100003900000100001004430000012000000443000001b701000041000006870001042e000001bc0520009c000002150000613d000001bd0220009c0000018b0000c13d000000040240008a000000400220008c0000021f0000413d0000000402100370000000000902043b000001a70290009c0000021f0000213d0000002402100370000000000602043b000001a80260009c0000021f0000213d0000002302600039000001a905000041000000000742004b00000000070000190000000007058019000001a902200197000000000802004b0000000005008019000001a90220009c000000000507c019000000000205004b0000021f0000c13d0000000405600039000000000251034f000000000202043b000001a80720009c0000021f0000213d00000000062600190000002406600039000000000646004b0000021f0000213d000001b406000041000000000606041a000001a7066001970000000007000411000000000667004b000004510000c13d000000bf03200039000000200600008a000000000363016f000001a80430009c000000240000213d000700000006001d000000400030043f0000002003500039000000000131034f0000001f0320018f000000800020043f0000000504200272000001400000613d00000000050000190000000506500210000000000761034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001380000413d000000000503004b0000014f0000613d0000000504400210000000000141034f0000000303300210000000a004400039000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000000a0012000390000000000010435000001aa010000410000000000100439000800000009001d0000000400900443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000003020000613d000001ac01000041000000000201041a000001ad0220019700000008022001af0000000805000029000000000021041b000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ae011001c70000800d020000390000000203000039000001af04000041068606770000040f000000080300002900000001012001900000021f0000613d000000400100043d000600000001001d000001b00110009c000000240000213d00000006040000290000006001400039000000400010043f0000004001400039000001b10200004100000000002104350000002001400039000001b202000041000000000021043500000027010000390000000000140435000000800200043d0000000001000414000000040330008c000005e60000c13d00000001020000390000000004000031000005f60000013d000001b402000041000000000202041a000001a7022001970000000005000411000000000225004b0000019f0000c13d000001b301000041000000800010043f0000002001000039000000840010043f0000004201000039000000a40010043f000001ca01000041000000c40010043f000001cb01000041000000e40010043f000001cc01000041000001040010043f000001cd0100004100000688000104300000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000001ad0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b000001a60000413d000000000705004b000001bb0000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000002210000c13d00000000040000310000001f0240018f0000000501400272000001ca0000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000001c30000413d000000000502004b000002480000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000002480000013d0000000002000416000000000202004b0000021f0000c13d000001ac02000041000000000202041a000001a702200197000001b405000041000000000505041a000001a7055001970000000006000411000000000556004b000002b10000c13d000000800020043f000001be01000041000006870001042e0000000002000416000000000202004b0000021f0000c13d000000040240008a000000200220008c0000021f0000413d0000000402100370000000000602043b000001a70260009c0000021f0000213d000001b402000041000000000702041a000001a7027001970000000005000411000000000525004b000003170000c13d000700000007001d000000800020043f000000a00060043f000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001bf011001c70000800d020000390000000103000039000001b604000041000800000006001d068606770000040f000000080300002900000001012001900000021f0000613d000000000103004b000004300000c13d000000400100043d0000006402100039000001c00300004100000000003204350000004402100039000001c1030000410000000000320435000000240210003900000026030000390000030b0000013d0000000002000416000000000202004b0000021f0000c13d000000040240008a000000200220008c0000021f0000413d0000000402100370000000000602043b000001a70260009c000002e80000a13d00000000010000190000068800010430000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000002380000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000002310000413d000000000603004b000002460000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000002730000613d0000026e0000013d000001a303000041000001a30410009c0000000001038019000000c001100210068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a30440019700000005054002720000025e0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000002570000413d000000000603004b0000026c0000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000002750000613d000001a301000041000001a30240009c00000000040180190000006001400210000006870001042e00000060014002100000068800010430000000600140021000000688000104300000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000002850000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b0000027e0000413d000000000705004b000002930000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000003510000c13d00000000040000310000001f0240018f0000000501400272000002a20000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b0000029b0000413d000000000502004b000003780000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000003780000013d0000001f0640018f0000000505400272000002bc0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000857004b000002b50000413d000000000706004b000002ca0000613d00000003066002100000000505500210000000000705043300000000076701cf000000000767022f000000000151034f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000000001000414000000040520008c000003790000c13d00000000040000310000001f0240018f0000000501400272000002d90000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000002d20000413d000000000502004b000003a00000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000003a00000013d000001b402000041000000000202041a000001a7022001970000000005000411000000000225004b000003a10000c13d000000a001000039000000400010043f000000800000043f000001aa010000410000000000100439000800000006001d0000000400600443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000004370000c13d000000400100043d0000006402100039000001c80300004100000000003204350000004402100039000001c903000041000000000032043500000024021000390000002d030000390000000000320435000001b3020000410000000000210435000000040210003900000020030000390000000000320435000001a302000041000001a30310009c00000000010280190000004001100210000001c2011001c700000688000104300000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000003250000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b0000031e0000413d000000000705004b000003330000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000003db0000c13d00000000040000310000001f0240018f0000000501400272000003420000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b0000033b0000413d000000000502004b000004020000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000004020000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000003680000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000003610000413d000000000603004b000003760000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000004030000613d0000026e0000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000003900000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000003890000413d000000000603004b0000039e0000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000004050000613d0000026e0000013d0000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000003af0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b000003a80000413d000000000705004b000003bd0000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000004070000c13d00000000040000310000001f0240018f0000000501400272000003cc0000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000003c50000413d000000000502004b0000026e0000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f00000000002104350000026e0000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000003f20000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000003eb0000413d000000000603004b000004000000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f000000000015043500000001012001900000044f0000613d0000026e0000013d0000006001400210000006880001043000000060014002100000068800010430000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a30440019700000005054002720000041e0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000004170000413d000000000603004b0000042c0000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f000000000015043500000001012001900000026e0000c13d000000600140021000000688000104300000000701000029000001ad01100197000000000131019f000001b402000041000000000012041b0000000001000019000006870001042e000001ac01000041000000000201041a000001ad0220019700000008022001af0000000805000029000000000021041b000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ae011001c70000800d020000390000000203000039000001af04000041068606770000040f000000080500002900000001012001900000021f0000613d000000800100043d000000000101004b0000048b0000c13d0000000001000019000006870001042e000000600140021000000688000104300000001f0540018f000001ac02000041000000000202041a000001a70220019700000005064002720000045f0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b000004580000413d000000000705004b0000046d0000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000004a00000c13d00000000040000310000001f0240018f00000005014002720000047c0000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000004750000413d000000000502004b000004c70000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000004c70000013d000000400300043d000001b00130009c000000240000213d0000006001300039000000400010043f0000004001300039000001b10200004100000000002104350000002001300039000001b20200004100000000002104350000002701000039000700000003001d0000000000130435000000800200043d0000000001000414000000040350008c000004df0000c13d00000001020000390000000004000031000004ef0000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000004b70000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000004b00000413d000000000603004b000004c50000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000004c80000613d0000026e0000013d00000060014002100000068800010430000000400400043d000001b00140009c000000240000213d0000006001400039000000400010043f0000004001400039000001b10200004100000000002104350000002701000039000200000004001d0000000002140436000001b201000041000100000002001d000000000012043500000000020504330000000001000414000000040330008c0000055d0000c13d00000001020000390000000003000031000005710000013d000001a303000041000001a30410009c0000000001038019000001a30420009c00000000020380190000006002200210000000c001100210000000000121019f000001c3011001c70000000002050019068606810000040f000000010220018f00010000000103550000006001100270000001a30010019d000001a30410019700000060030000390000008001000039000000000504004b0000051c0000c13d0000000003030433000000000202004b000005490000c13d000000000203004b000006600000c13d000000400100043d000001b302000041000000000021043500000004021000390000002003000039000000000032043500000007070000290000000002070433000000240310003900000000002304350000004403100039000000000402004b0000050d0000613d000000000400001900000000053400190000002004400039000000000674001900000000060604330000000000650435000000000524004b000005060000413d0000001f04200039000000200500008a000000000454016f000000000232001900000000000204350000004402400039000001a303000041000001a30420009c0000000002038019000001a30410009c000000000103801900000040011002100000006002200210000000000112019f0000068800010430000001a80140009c000000240000213d0000003f01400039000000200300008a000000000131016f000000400300043d0000000001130019000000000531004b00000000050000190000000105004039000001a80610009c000000240000213d0000000105500190000000240000c13d000000400010043f0000001f0540018f000000000143043600000001060003670000000504400272000005390000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000005310000413d000000000705004b000004f30000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000004f30000013d000000000103004b00000008020000290000044d0000c13d000001aa0100004100000000001004390000000400200443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000005d40000613d0000044d0000013d000001a3030000410000000405000029000001a30450009c00000000050380190000004004500210000001a30520009c00000000020380190000006002200210000000000242019f000001a30410009c0000000001038019000000c001100210000000000112019f0000000802000029068606810000040f000000010220018f00010000000103550000006001100270000001a30010019d000001a3031001970000006001000039000000000403004b000005910000c13d0000000001010433000000000202004b000005bf0000c13d000000000201004b000006440000c13d000000400400043d000800000004001d000001b301000041000000000014043500000004014000390000002002000039000000000021043500000002010000290000000003010433000700000003001d0000002401400039000000000031043500000044024000390000000101000029068606690000040f00000007010000290000001f01100039000000050110017f0000004401100039000001a302000041000001a30310009c00000000010280190000000804000029000006480000013d000001a80130009c0000000504000029000000240000213d0000003f01300039000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000001a80640009c000000240000213d0000000105500190000000240000c13d000000400040043f0000001f0430018f000000000931043600000001050003670000000503300272000005ae0000613d000000000600001900000005076002100000000008790019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005a60000413d000300000009001d000000000604004b000005740000613d0000000503300210000000000535034f00000003033000290000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f0000000000430435000005740000013d000000000101004b00000007020000290000000803000029000000da0000c13d000001aa0100004100000000001004390000000400300443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b0000000702000029000000da0000c13d000000400100043d0000004402100039000001c403000041000000000032043500000024021000390000001d030000390000000000320435000001b3020000410000000000210435000000040210003900000020030000390000000000320435000001a302000041000001a30310009c00000000010280190000004001100210000001c5011001c70000068800010430000001a303000041000001a30410009c0000000001038019000001a30420009c00000000020380190000006002200210000000c001100210000000000121019f000001c3011001c70000000802000029068606810000040f000000010220018f00010000000103550000006001100270000001a30010019d000001a30410019700000060030000390000008001000039000000000504004b000006170000c13d0000000003030433000000000202004b0000064e0000c13d000000000203004b000006600000c13d000000400100043d000001b302000041000000000021043500000004021000390000002003000039000000000032043500000006070000290000000002070433000000240310003900000000002304350000004403100039000000000402004b000006140000613d000000000400001900000000053400190000002004400039000000000674001900000000060604330000000000650435000000000524004b0000060d0000413d0000001f0420003900000007050000290000050f0000013d000001a80140009c0000000703000029000000240000213d0000003f01400039000000000131016f000000400300043d0000000001130019000000000531004b00000000050000190000000105004039000001a80610009c000000240000213d0000000105500190000000240000c13d000000400010043f0000001f0540018f000000000143043600000001060003670000000504400272000006340000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b0000062c0000413d000000000705004b000005fa0000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000005fa0000013d000001a302000041000001a30310009c00000000010280190000000304000029000001a30340009c000000000402801900000040024002100000006001100210000000000121019f0000068800010430000000000103004b0000044d0000c13d000001aa01000041000000000010043900000008010000290000000400100443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000005590000013d000000000001042f000001a302000041000001a30430009c0000000003028019000001a30410009c000000000102801900000040011002100000006002300210000000000112019f0000068800010430000000000403004b000006730000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b0000066c0000413d00000000012300190000000000010435000000000001042d000000000001042f0000067a002104210000000102000039000000000001042d0000000002000019000000000001042d0000067f002104230000000102000039000000000001042d0000000002000019000000000001042d00000684002104250000000102000039000000000001042d0000000002000019000000000001042d0000068600000432000006870001042e000006880001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009fffffffffffffffffffffffffffffffffffffffffffffffff000000000000007f00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b000000000000000000000000000000000000000000000000ffffffffffffff9f206661696c656400000000000000000000000000000000000000000000000000416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c08c379a000000000000000000000000000000000000000000000000000000000b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610302000000000000000000000000000000000000400000000000000000000000007e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000005c60da1a000000000000000000000000000000000000000000000000000000005c60da1b000000000000000000000000000000000000000000000000000000008f28397000000000000000000000000000000000000000000000000000000000f851a440000000000000000000000000000000000000000000000000000000003659cfe6000000000000000000000000000000000000000000000000000000004f1ef286000000000000000000000000000000000000002000000080000000000000000002000000000000000000000000000000000000400000008000000000000000006464726573730000000000000000000000000000000000000000000000000000455243313936373a206e65772061646d696e20697320746865207a65726f206100000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000000000000000000000000000000000000000000640000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000006f74206120636f6e747261637400000000000000000000000000000000000000455243313936373a206e657720696d706c656d656e746174696f6e206973206e5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000800000000000000000e0d31e021922ed1788ee674023ff2e07dfe2487b8edc14267fc9d81329885ab9"},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"TransparentUpgradeableProxy_1082\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := 64\n mstore(_1, memoryguard(0x80))\n let programSize := datasize(\"TransparentUpgradeableProxy_1082\")\n let argSize := sub(codesize(), programSize)\n let memoryDataOffset := allocate_memory(argSize)\n codecopy(memoryDataOffset, programSize, argSize)\n let _2 := add(memoryDataOffset, argSize)\n if slt(sub(_2, memoryDataOffset), 96)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address_fromMemory(memoryDataOffset)\n let _3 := 32\n let value1 := abi_decode_address_fromMemory(add(memoryDataOffset, _3))\n let offset := mload(add(memoryDataOffset, _1))\n let _4 := sub(shl(64, 1), 1)\n if gt(offset, _4)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _5 := add(memoryDataOffset, offset)\n if iszero(slt(add(_5, 0x1f), _2))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _6 := mload(_5)\n let array := allocate_memory(array_allocation_size_bytes(_6))\n mstore(array, _6)\n let dst := add(array, _3)\n if gt(add(add(_5, _6), _3), _2)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n copy_memory_to_memory_with_cleanup(add(_5, _3), dst, _6)\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(value0))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(_1)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), _3)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _7 := sub(shl(160, 1), 1)\n let _8 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7)\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _9 := not(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _10 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n sstore(_10, or(and(sload(_10), _9), _8))\n /// @src -1:-1:-1\n let _11 := 0\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ _11, _11, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _8)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _12 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ array))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_12)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _12\n {\n expr := /** @src -1:-1:-1 */ _11\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr_1 := mload(_1)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, _4), lt(newFreePtr, memPtr_1))\n {\n mstore(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0x24)\n }\n mstore(_1, newFreePtr)\n mstore(memPtr_1, 39)\n mstore(add(memPtr_1, _3), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, _1), \" failed\")\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), value0, dst, mload(array), /** @src -1:-1:-1 */ _11, _11)\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let data := /** @src -1:-1:-1 */ _11\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _13 := returndatasize()\n let memPtr_2 := allocate_memory(array_allocation_size_bytes(_13))\n mstore(memPtr_2, _13)\n data := memPtr_2\n returndatacopy(add(memPtr_2, _3), /** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\"\n pop(fun_verifyCallResultFromTarget(value0, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ memPtr_1))\n }\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _14 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n let _15 := sload(_14)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _16 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(_1)\n mstore(_16, and(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _15, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7))\n let _17 := and(value1, _7)\n mstore(add(_16, _3), _17)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_16, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _17)\n {\n let memPtr_3 := mload(_1)\n mstore(memPtr_3, shl(229, 4594637))\n mstore(add(memPtr_3, 4), _3)\n mstore(add(memPtr_3, 36), 38)\n mstore(add(memPtr_3, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr_3, 100), \"ddress\")\n revert(memPtr_3, 132)\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _14, /** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ or(and(_15, _9), _17))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _18 := mload(_1)\n let _19 := datasize(\"TransparentUpgradeableProxy_1082_deployed\")\n codecopy(_18, dataoffset(\"TransparentUpgradeableProxy_1082_deployed\"), _19)\n return(_18, _19)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 32)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n copy_memory_to_memory_with_cleanup(add(var_errorMessage_mpos, 32), add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68), length)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_target))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"TransparentUpgradeableProxy_1082_deployed\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n mstore(64, 128)\n if iszero(lt(calldatasize(), 4))\n {\n let _1 := 0\n switch shr(224, calldataload(_1))\n case 0x3659cfe6 {\n if callvalue() { revert(_1, _1) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_1, _1) }\n let value0 := abi_decode_address()\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr := allocate_memory_5122()\n mstore(memPtr, _1)\n /// @src 0:30541:30546 \"false\"\n fun_upgradeToAndCall(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ memPtr)\n }\n return(_1, _1)\n }\n case 0x4f1ef286 {\n external_fun_upgradeToAndCall()\n }\n case 0x5c60da1b { external_fun_implementation() }\n case 0x8f283970 { external_fun_changeAdmin() }\n case 0xf851a440 { external_fun_admin() }\n }\n if iszero(calldatasize())\n {\n /// @src 0:24748:24806 \"fallback() external payable virtual {...\"\n fun_fallback()\n }\n fun_fallback()\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function abi_decode_address() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function external_fun_upgradeToAndCall()\n {\n if slt(add(calldatasize(), not(3)), 64)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let offset := calldataload(36)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if iszero(slt(add(offset, 35), calldatasize()))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let length := calldataload(add(4, offset))\n if gt(length, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if gt(add(add(offset, length), 36), calldatasize())\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let array := allocate_memory(array_allocation_size_string(length))\n mstore(array, length)\n calldatacopy(add(array, 32), add(offset, 36), length)\n mstore(add(add(array, length), 32), /** @src -1:-1:-1 */ 0)\n /// @src 0:31029:31077 \"_upgradeToAndCall(newImplementation, data, true)\"\n fun_upgradeToAndCall_3349(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ array)\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_implementation()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29919:29942 \"address implementation_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n function external_fun_changeAdmin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 32)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let _1 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _2 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _3 := sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _4 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n mstore(_4, and(_3, _1))\n let _5 := and(value0, _1)\n mstore(add(_4, 32), _5)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_4, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 64, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _5)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 38)\n mstore(add(memPtr, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr, 100), \"ddress\")\n revert(memPtr, 132)\n }\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(_3, shl(160, 0xffffffffffffffffffffffff)), _5))\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_admin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29380:29394 \"address admin_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _3 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n /// @ast-id 880 @src 0:24461:24561 \"function _fallback() internal virtual {...\"\n function fun_fallback()\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := sub(shl(160, 1), 1)\n if /** @src 0:31409:31434 \"msg.sender != _getAdmin()\" */ eq(/** @src 0:31409:31419 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 66)\n mstore(add(memPtr, 68), \"TransparentUpgradeableProxy: adm\")\n mstore(add(memPtr, 100), \"in cannot fallback to proxy targ\")\n mstore(add(memPtr, 132), \"et\")\n revert(memPtr, 164)\n }\n let _2 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1)\n /// @src 0:23291:24000 \"assembly {...\"\n let _3 := 0\n calldatacopy(_3, _3, calldatasize())\n let usr$result := delegatecall(gas(), _2, _3, calldatasize(), _3, _3)\n returndatacopy(_3, _3, returndatasize())\n switch usr$result\n case 0 { revert(_3, returndatasize()) }\n default { return(_3, returndatasize()) }\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_5122() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 32)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_string(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall_3349(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:31072:31076 \"true\" */ 0x01\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n function copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398() -> memPtr\n {\n let memPtr_1 := mload(64)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr_1, 39)\n memPtr := memPtr_1\n mstore(add(memPtr_1, 32), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, 64), \" failed\")\n }\n /// @ast-id 395 @src 0:11503:11810 \"function functionDelegateCall(...\"\n function fun_functionDelegateCall(var_target, var_data_mpos, var_errorMessage_373_mpos) -> var_376_mpos\n {\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), var_target, add(var_data_mpos, 0x20), mload(var_data_mpos), 0, 0)\n let data := 0\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let memPtr := allocate_memory(array_allocation_size_string(_1))\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ 0x20), 0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11723:11805 \"return...\"\n var_376_mpos := /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ fun_verifyCallResultFromTarget(var_target, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ var_errorMessage_373_mpos)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function require_helper_stringliteral_cc2e(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n let _2 := 32\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n let i := /** @src 0:13281:13282 \"0\" */ 0x00\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n for { } lt(i, length) { i := add(i, _2) }\n {\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ i), 68), mload(add(add(var_errorMessage_mpos, i), _2)))\n }\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ length), 68), /** @src 0:13281:13282 \"0\" */ 0x00)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:12474:12534 \"require(isContract(target), \\\"Address: call to non-contract\\\")\"\n require_helper_stringliteral_cc2e(/** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(/** @src 0:12482:12500 \"isContract(target)\" */ var_target))))\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n data \".metadata\" hex\"a2646970667358221220d8a26ce07e9604f1b4fef919eed2c5ade04b5f04093830e7e2d20653d83fa26f64736f6c63430008150033\"\n }\n}\n","hash":"010001cfcb8d4a4136647d024e21a6ed4207383d3ffddf7dfb8aac303d71d949","factoryDependencies":{}},"Unlock":{"abi":[{"inputs":[],"name":"Unlock__ALREADY_DEPLOYED","type":"error"},{"inputs":[],"name":"Unlock__INVALID_AMOUNT","type":"error"},{"inputs":[],"name":"Unlock__MANAGER_ONLY","type":"error"},{"inputs":[{"internalType":"address","name":"lockAddress","type":"address"}],"name":"Unlock__MISSING_LOCK","type":"error"},{"inputs":[],"name":"Unlock__MISSING_LOCK_TEMPLATE","type":"error"},{"inputs":[],"name":"Unlock__MISSING_PROXY_ADMIN","type":"error"},{"inputs":[],"name":"Unlock__MISSING_TEMPLATE","type":"error"},{"inputs":[],"name":"Unlock__VERSION_TOO_HIGH","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"udt","type":"address"},{"indexed":false,"internalType":"address","name":"weth","type":"address"},{"indexed":false,"internalType":"uint256","name":"estimatedGasForPurchase","type":"uint256"},{"indexed":false,"internalType":"string","name":"globalTokenSymbol","type":"string"},{"indexed":false,"internalType":"string","name":"globalTokenURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"ConfigUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"grossNetworkProduct","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_valueInETH","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"lockAddress","type":"address"}],"name":"GNPChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lockAddress","type":"address"},{"indexed":false,"internalType":"uint16","name":"version","type":"uint16"}],"name":"LockUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lockOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newLockAddress","type":"address"}],"name":"NewLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"grossNetworkProduct","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalDiscountGranted","type":"uint256"}],"name":"ResetTrackedValue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"publicLockAddress","type":"address"}],"name":"SetLockTemplate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"impl","type":"address"},{"indexed":true,"internalType":"uint16","name":"version","type":"uint16"}],"name":"UnlockTemplateAdded","type":"event"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"__initializeOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"impl","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"addLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"computeAvailableDiscountFor","outputs":[{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_udt","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_estimatedGasForPurchase","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_URI","type":"string"},{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"configUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirationDuration","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"string","name":"_lockName","type":"string"},{"internalType":"bytes12","name":"","type":"bytes12"}],"name":"createLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createUpgradeableLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint16","name":"_lockVersion","type":"uint16"}],"name":"createUpgradeableLockAtVersion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"estimatedGasForPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grossNetworkProduct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_unlockOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"bool","name":"deployed","type":"bool"},{"internalType":"uint256","name":"totalSales","type":"uint256"},{"internalType":"uint256","name":"yieldedDiscountTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLockUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyAdminAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"publicLockImpls","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockLatestVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_impl","type":"address"}],"name":"publicLockVersions","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"recordConsumedDiscount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"recordKeyPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lock","type":"address"}],"name":"removeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_grossNetworkProduct","type":"uint256"},{"internalType":"uint256","name":"_totalDiscountGranted","type":"uint256"}],"name":"resetTrackedValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_publicLockAddress","type":"address"}],"name":"setLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_oracleAddress","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDiscountGranted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"udt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapOracles","outputs":[{"internalType":"contract IUniswapOracleV3","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"lockAddress","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"upgradeLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Unlock__ALREADY_DEPLOYED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MANAGER_ONLY\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lockAddress\",\"type\":\"address\"}],\"name\":\"Unlock__MISSING_LOCK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MISSING_LOCK_TEMPLATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MISSING_PROXY_ADMIN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MISSING_TEMPLATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__VERSION_TOO_HIGH\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"udt\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"estimatedGasForPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"globalTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"globalTokenURI\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"ConfigUnlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"grossNetworkProduct\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_valueInETH\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lockAddress\",\"type\":\"address\"}],\"name\":\"GNPChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lockAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"LockUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"lockOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newLockAddress\",\"type\":\"address\"}],\"name\":\"NewLock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"grossNetworkProduct\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDiscountGranted\",\"type\":\"uint256\"}],\"name\":\"ResetTrackedValue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publicLockAddress\",\"type\":\"address\"}],\"name\":\"SetLockTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"UnlockTemplateAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"__initializeOwnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"addLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"computeAvailableDiscountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"discount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_udt\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_estimatedGasForPurchase\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_URI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"name\":\"configUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"},{\"internalType\":\"bytes12\",\"name\":\"\",\"type\":\"bytes12\"}],\"name\":\"createLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createUpgradeableLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"_lockVersion\",\"type\":\"uint16\"}],\"name\":\"createUpgradeableLockAtVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimatedGasForPurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"grossNetworkProduct\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unlockOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"locks\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"deployed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalSales\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"yieldedDiscountTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postLockUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyAdminAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"publicLockImpls\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockLatestVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_impl\",\"type\":\"address\"}],\"name\":\"publicLockVersions\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"recordConsumedDiscount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"recordKeyPurchase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lock\",\"type\":\"address\"}],\"name\":\"removeLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_grossNetworkProduct\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalDiscountGranted\",\"type\":\"uint256\"}],\"name\":\"resetTrackedValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_publicLockAddress\",\"type\":\"address\"}],\"name\":\"setLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"}],\"name\":\"setProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDiscountGranted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"udt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"uniswapOracles\",\"outputs\":[{\"internalType\":\"contract IUniswapOracleV3\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"lockAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"upgradeLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Must list the direct base contracts in the order from \\u201cmost base-like\\u201d to \\u201cmost derived\\u201d. https://solidity.readthedocs.io/en/latest/contracts.html#multiple-inheritance-and-linearization\",\"kind\":\"dev\",\"methods\":{\"__initializeOwnable(address)\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"addLockTemplate(address,uint16)\":{\"details\":\"Registers a new PublicLock template immplementation The template is identified by a version number Once registered, the template can be used to upgrade an existing LockThis will initialize the template and revokeOwnership.\"},\"computeAvailableDiscountFor(address,uint256)\":{\"details\":\"[DEPRECATED] Kept for backwards compatibility\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"details\":\"internally call `createUpgradeableLock`\",\"params\":{\"_expirationDuration\":\"the duration of the lock (pass type(uint).max for unlimited duration)\",\"_keyPrice\":\"the price of each key\",\"_lockName\":\"the name of the lock param _salt [deprec] -- kept only for backwards copatibility This may be implemented as a sequence ID or with RNG. It's used with `create2` to know the lock's address before the transaction is mined.\",\"_maxNumberOfKeys\":\"the maximum nimbers of keys to be edited\",\"_tokenAddress\":\"set to the ERC20 token address, or 0 for ETH.\"}},\"createUpgradeableLock(bytes)\":{\"details\":\"this call is passed as encoded function - for instance: bytes memory data = abi.encodeWithSignature( 'initialize(address,uint256,address,uint256,uint256,string)', msg.sender, _expirationDuration, _tokenAddress, _keyPrice, _maxNumberOfKeys, _lockName );\",\"params\":{\"data\":\"bytes containing the call to initialize the lock template\"},\"returns\":{\"_0\":\"address of the create lock\"}},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"params\":{\"_lockVersion\":\"the version of the lock to use\",\"data\":\"bytes containing the call to initialize the lock template (refer to createUpgradeableLock for more details)\"}},\"getGlobalBaseTokenURI()\":{\"details\":\"Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\"},\"getGlobalTokenSymbol()\":{\"details\":\"Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"networkBaseFee()\":{\"details\":\"this helper can be wrapped in try/catch statement to avoid revert in networks where EIP-1559 is not implemented\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"publicLockImpls(uint16)\":{\"details\":\"Helper to get the address of a template based on its version number\"},\"publicLockVersions(address)\":{\"details\":\"Helper to get the version number of a template from his address\"},\"recordConsumedDiscount(uint256,uint256)\":{\"details\":\"[DEPRECATED] only Kept for backwards compatibility\"},\"removeLock(address)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"lock\":\"address of the lock to remove\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setOracle(address,address)\":{\"details\":\"This will also call update to ensure at least one datapoint has been recorded.\"},\"setProtocolFee(uint256)\":{\"params\":{\"_protocolFee\":\"fee in basic point\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferTokens(address,address,uint256)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"amount\":\"the amount of tokens to transfer\",\"to\":\"the address to transfer the tokens to\",\"token\":\"the address of the token to transfer (pass the 0x0 address for the base currency)\"}},\"upgradeLock(address,uint16)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade a Lock template implementation\",\"params\":{\"lockAddress\":\"the address of the lock to be upgraded\",\"version\":\"the version number of the template\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeAvailableDiscountFor(address,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"configUnlock(address,address,uint256,string,string,uint256)\":{\"notice\":\"Allows the owner to update configuration variables\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"notice\":\"Create lock (legacy) This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLock(bytes)\":{\"notice\":\"Create upgradeable lock This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"notice\":\"Create an upgradeable lock using a specific PublicLock version\"},\"networkBaseFee()\":{\"notice\":\"Helper to get the network mining basefee as introduced in EIP-1559\"},\"recordConsumedDiscount(uint256,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"recordKeyPurchase(uint256,address)\":{\"notice\":\"This function keeps track of the added GDP, as well as grants of discount tokens to the referrer, if applicable. The number of discount tokens granted is based on the value of the referal, the current growth rate and the lock's discount token distribution rate This function is invoked by a previously deployed lock only.\"},\"removeLock(address)\":{\"notice\":\"Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens. The lock will still be able to sell its memberships.\"},\"setLockTemplate(address)\":{\"notice\":\"Set the default PublicLock template to use when creating locks\"},\"setOracle(address,address)\":{\"notice\":\"allows the owner to set the oracle address to use for value conversions setting the _oracleAddress to address(0) removes support for the token\"},\"setProtocolFee(uint256)\":{\"notice\":\"Set the fee used by the protocol\"},\"transferTokens(address,address,uint256)\":{\"notice\":\"Functions which transfers tokens held by the contract It handles both ERC20 and the base currency.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Unlock\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2654,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":2663,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":2783,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"______gap","offset":0,"slot":"52","type":"t_array(t_uint256)50_storage"},{"astId":2813,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"grossNetworkProduct","offset":0,"slot":"102","type":"t_uint256"},{"astId":2815,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"totalDiscountGranted","offset":0,"slot":"103","type":"t_uint256"},{"astId":2820,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"locks","offset":0,"slot":"104","type":"t_mapping(t_address,t_struct(LockBalances)2798_storage)"},{"astId":2822,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"globalBaseTokenURI","offset":0,"slot":"105","type":"t_string_storage"},{"astId":2824,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"globalTokenSymbol","offset":0,"slot":"106","type":"t_string_storage"},{"astId":2826,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"publicLockAddress","offset":0,"slot":"107","type":"t_address"},{"astId":2831,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"uniswapOracles","offset":0,"slot":"108","type":"t_mapping(t_address,t_contract(IUniswapOracleV3)1948)"},{"astId":2833,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"weth","offset":0,"slot":"109","type":"t_address"},{"astId":2835,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"udt","offset":0,"slot":"110","type":"t_address"},{"astId":2837,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"estimatedGasForPurchase","offset":0,"slot":"111","type":"t_uint256"},{"astId":2839,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"chainId","offset":0,"slot":"112","type":"t_uint256"},{"astId":2841,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"proxyAdminAddress","offset":0,"slot":"113","type":"t_address"},{"astId":2844,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"proxyAdmin","offset":0,"slot":"114","type":"t_contract(ProxyAdmin)1215"},{"astId":2848,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"_publicLockVersions","offset":0,"slot":"115","type":"t_mapping(t_address,t_uint16)"},{"astId":2852,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"_publicLockImpls","offset":0,"slot":"116","type":"t_mapping(t_uint16,t_address)"},{"astId":2854,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"publicLockLatestVersion","offset":0,"slot":"117","type":"t_uint16"},{"astId":2856,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"protocolFee","offset":0,"slot":"118","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IUniswapOracleV3)1948":{"encoding":"inplace","label":"contract IUniswapOracleV3","numberOfBytes":"20"},"t_contract(ProxyAdmin)1215":{"encoding":"inplace","label":"contract ProxyAdmin","numberOfBytes":"20"},"t_mapping(t_address,t_contract(IUniswapOracleV3)1948)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract IUniswapOracleV3)","numberOfBytes":"32","value":"t_contract(IUniswapOracleV3)1948"},"t_mapping(t_address,t_struct(LockBalances)2798_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct Unlock.LockBalances)","numberOfBytes":"32","value":"t_struct(LockBalances)2798_storage"},"t_mapping(t_address,t_uint16)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint16)","numberOfBytes":"32","value":"t_uint16"},"t_mapping(t_uint16,t_address)":{"encoding":"mapping","key":"t_uint16","label":"mapping(uint16 => address)","numberOfBytes":"32","value":"t_address"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(LockBalances)2798_storage":{"encoding":"inplace","label":"struct Unlock.LockBalances","members":[{"astId":2793,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"deployed","offset":0,"slot":"0","type":"t_bool"},{"astId":2795,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"totalSales","offset":0,"slot":"1","type":"t_uint256"},{"astId":2797,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"yieldedDiscountTokens","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:Unlock\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[12]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r3, stack[@ptr_return_data]\n\tptr.add\tr1, r0, stack[@ptr_calldata]\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_1\n\tadd\t128, r0, r2\n\tst.1\t64, r2\n\tsub.s!\t4, r3, r2\n\tjump.lt\t@.BB0_64\n\tld\tr1, r2\n\tshr.s\t224, r2, r2\n\tsub.s!\t@CPI0_4[0], r2, r4\n\tjump.gt\t@.BB0_35\n\tsub.s!\t@CPI0_34[0], r2, r4\n\tjump.gt\t@.BB0_21\n\tsub.s!\t@CPI0_49[0], r2, r4\n\tjump.le\t@.BB0_8\n\tsub.s!\t@CPI0_50[0], r2, r4\n\tjump.gt\t@.BB0_18\n\tsub.s!\t@CPI0_54[0], r2, r4\n\tjump.eq\t@.BB0_81\n\tsub.s!\t@CPI0_55[0], r2, r4\n\tjump.eq\t@.BB0_83\n\tsub.s!\t@CPI0_56[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t192, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r5\n\tsub.s!\t@CPI0_63[0], r5, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t132, r1, r2\n\tld\tr2, r4\n\tsub.s!\t@CPI0_78[0], r4, r2\n\tjump.gt\t@.BB0_2\n\tadd\t35, r4, r2\n\tadd\t@CPI0_127[0], r0, r6\n\tsub!\tr2, r3, r7\n\tadd\tr0, r0, r7\n\tadd.ge\tr6, r0, r7\n\tand\t@CPI0_127[0], r2, r2\n\tsub!\tr2, r0, r8\n\tadd.ge\tr0, r0, r6\n\tsub.s!\t@CPI0_127[0], r2, r2\n\tadd.ne\tr7, r0, r6\n\tsub!\tr6, r0, r2\n\tjump.ne\t@.BB0_2\n\tadd\t4, r4, r2\n\tptr.add\tr1, r2, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_78[0], r2, r6\n\tjump.gt\t@.BB0_2\n\tadd\t36, r4, r4\n\tadd\tr2, r4, r6\n\tsub!\tr6, r3, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t164, r1, r3\n\tld\tr3, r3\n\tand\t@CPI0_65[0], r3, r6\n\tsub!\tr3, r6, r3\n\tjump.ne\t@.BB0_2\n\tadd\t@CPI0_102[0], r0, r3\n\tst.1\t160, r3\n\tcontext.caller\tr3\n\tst.1\t164, r3\n\tptr.add.s\t4, r1, r3\n\tld\tr3, r3\n\tst.1\t196, r3\n\tst.1\t228, r5\n\tptr.add.s\t68, r1, r3\n\tld\tr3, r3\n\tst.1\t260, r3\n\tptr.add.s\t100, r1, r1\n\tld\tr1, r1\n\tst.1\t292, r1\n\tadd\t192, r0, r1\n\tst.1\t324, r1\n\tadd\t356, r0, r3\n\tadd\tr4, r0, r1\n\tnear_call\tr0, @abi_encode_string_calldata, @DEFAULT_UNWIND\n\tsub.s\t160, r1, r2\n\tst.1\t128, r2\n\tsub.s\t128, r1, r2\n\tadd\t128, r0, r1\n\tadd\tr1, r0, stack-[9]\n\tnear_call\tr0, @finalize_allocation, @DEFAULT_UNWIND\n\tadd\t117, r0, r1\n\tsload\tr1, r1\n\tand\t65535, r1, r2\n\tadd\tstack-[9], r0, r1\n\tjump\t@.BB0_114\n.BB0_1:\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_1[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_64:\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_2[0], r0, r1\n.BB0_471:\n\tst.1\t128, r1\n\tadd\t@CPI0_3[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_35:\n\tsub.s!\t@CPI0_5[0], r2, r4\n\tjump.gt\t@.BB0_50\n\tsub.s!\t@CPI0_20[0], r2, r4\n\tjump.le\t@.BB0_37\n\tsub.s!\t@CPI0_21[0], r2, r4\n\tjump.gt\t@.BB0_47\n\tsub.s!\t@CPI0_25[0], r2, r4\n\tjump.eq\t@.BB0_390\n\tsub.s!\t@CPI0_26[0], r2, r4\n\tjump.eq\t@.BB0_392\n\tsub.s!\t@CPI0_27[0], r2, r1\n\tjump.eq\t@.BB0_223\n\tjump\t@.BB0_2\n.BB0_21:\n\tsub.s!\t@CPI0_35[0], r2, r4\n\tjump.le\t@.BB0_22\n\tsub.s!\t@CPI0_36[0], r2, r4\n\tjump.gt\t@.BB0_32\n\tsub.s!\t@CPI0_40[0], r2, r1\n\tjump.eq\t@.BB0_156\n\tsub.s!\t@CPI0_41[0], r2, r1\n\tjump.eq\t@.BB0_158\n\tsub.s!\t@CPI0_42[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t111, r0, r1\n\tjump\t@.BB0_164\n.BB0_50:\n\tsub.s!\t@CPI0_6[0], r2, r4\n\tjump.le\t@.BB0_51\n\tsub.s!\t@CPI0_7[0], r2, r4\n\tjump.gt\t@.BB0_61\n\tsub.s!\t@CPI0_11[0], r2, r1\n\tjump.eq\t@.BB0_76\n\tsub.s!\t@CPI0_12[0], r2, r1\n\tjump.eq\t@.BB0_570\n\tsub.s!\t@CPI0_13[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tcontext.caller\tr1\n\tadd\tr1, r0, stack-[9]\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tadd\tr1, r0, stack-[8]\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t255, r1, r1\n\tjump.ne\t@.BB0_133\n\tld.1\t64, r10\n\tadd\t@CPI0_77[0], r0, r1\n\tst.1\tr10, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_578\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_588\n.BB0_8:\n\tsub.s!\t@CPI0_57[0], r2, r4\n\tjump.le\t@.BB0_9\n\tsub.s!\t@CPI0_58[0], r2, r1\n\tjump.eq\t@.BB0_73\n\tsub.s!\t@CPI0_59[0], r2, r1\n\tjump.eq\t@.BB0_76\n\tsub.s!\t@CPI0_60[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\tr3, r0, r1\n\tnear_call\tr0, @abi_decode_uint256t_uint256, @DEFAULT_UNWIND\n\tcontext.caller\tr1\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tsload\tr1, r1\n\tand\t255, r1, r1\n\tnear_call\tr0, @require_helper_stringliteral_2f7a, @DEFAULT_UNWIND\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_37:\n\tsub.s!\t@CPI0_28[0], r2, r4\n\tjump.le\t@.BB0_38\n\tsub.s!\t@CPI0_29[0], r2, r4\n\tjump.eq\t@.BB0_229\n\tsub.s!\t@CPI0_30[0], r2, r4\n\tjump.eq\t@.BB0_384\n\tsub.s!\t@CPI0_31[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t112, r0, r1\n\tjump\t@.BB0_164\n.BB0_22:\n\tsub.s!\t@CPI0_43[0], r2, r4\n\tjump.le\t@.BB0_23\n\tsub.s!\t@CPI0_44[0], r2, r4\n\tjump.eq\t@.BB0_143\n\tsub.s!\t@CPI0_45[0], r2, r4\n\tjump.eq\t@.BB0_147\n\tsub.s!\t@CPI0_46[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tjump\t@.BB0_151\n.BB0_51:\n\tsub.s!\t@CPI0_14[0], r2, r4\n\tjump.le\t@.BB0_52\n\tsub.s!\t@CPI0_15[0], r2, r4\n\tjump.eq\t@.BB0_473\n\tsub.s!\t@CPI0_16[0], r2, r4\n\tjump.eq\t@.BB0_501\n\tsub.s!\t@CPI0_17[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t117, r0, r1\n\tjump\t@.BB0_569\n.BB0_18:\n\tsub.s!\t@CPI0_51[0], r2, r4\n\tjump.eq\t@.BB0_95\n\tsub.s!\t@CPI0_52[0], r2, r4\n\tjump.eq\t@.BB0_99\n\tsub.s!\t@CPI0_53[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.eq\t1, r0, r1\n\tnear_call\tr0, @require_helper_stringliteral_ed52, @DEFAULT_UNWIND\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tsstore\tr1, r0\n\tadd\t1, r1, r2\n\tsstore\tr2, r0\n\tadd\t2, r1, r1\n\tsstore\tr1, r0\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_47:\n\tsub.s!\t@CPI0_22[0], r2, r4\n\tjump.eq\t@.BB0_423\n\tsub.s!\t@CPI0_23[0], r2, r1\n\tjump.eq\t@.BB0_435\n\tsub.s!\t@CPI0_24[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32779, r0, r1\n\tadd\t4, r0, r3\n\tcontext.sp\tr4\n\tsub.s\t12, r4, r4\n\tmul\t32, r4, r4, r0\n\tadd\t@CPI0_112[0], r0, r2\n\tnear_call\tr0, @__system_request, @DEFAULT_UNWIND\n\tjump\t@.BB0_85\n.BB0_32:\n\tsub.s!\t@CPI0_37[0], r2, r4\n\tjump.eq\t@.BB0_165\n\tsub.s!\t@CPI0_38[0], r2, r4\n\tjump.eq\t@.BB0_168\n\tsub.s!\t@CPI0_39[0], r2, r1\n\tjump.ne\t@.BB0_2\n.BB0_223:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tnear_call\tr0, @copy_array_from_storage_to_memory_string_27022, @DEFAULT_UNWIND\n\tjump\t@.BB0_78\n.BB0_61:\n\tsub.s!\t@CPI0_8[0], r2, r4\n\tjump.eq\t@.BB0_629\n\tsub.s!\t@CPI0_9[0], r2, r4\n\tjump.eq\t@.BB0_638\n\tsub.s!\t@CPI0_10[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t107, r0, r1\n\tjump\t@.BB0_75\n.BB0_9:\n\tsub.s!\t@CPI0_61[0], r2, r4\n\tjump.eq\t@.BB0_65\n\tsub.s!\t@CPI0_62[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t115, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n.BB0_569:\n\tsload\tr1, r1\n\tand\t65535, r1, r1\n\tjump\t@.BB0_85\n.BB0_38:\n\tsub.s!\t@CPI0_32[0], r2, r1\n\tjump.eq\t@.BB0_225\n\tsub.s!\t@CPI0_33[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.eq\t1, r0, r1\n\tjump\t@.BB0_85\n.BB0_23:\n\tsub.s!\t@CPI0_47[0], r2, r4\n\tjump.eq\t@.BB0_119\n\tsub.s!\t@CPI0_48[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tadd\tr2, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r2, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tor\tstack-[8], r2, r2\n\tsstore\tr1, r2\n\tsub!\tstack-[8], r0, r1\n\tjump.eq\t@.BB0_133\n\tadd\t109, r0, r1\n\tsload\tr1, r1\n\tadd\tr1, r0, stack-[7]\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r3\n\tand\t@CPI0_63[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r2\n\tadd\t36, r2, r1\n\tst.1\tr1, r3\n\tadd\t@CPI0_137[0], r0, r1\n\tst.1\tr2, r1\n\tadd\tr2, r0, stack-[7]\n\tadd\t4, r2, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[8], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_141\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_93[0], r1, r1\n\tadd\tstack-[8], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_136\n.BB0_141:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r1\n\tst.1\t64, r1\n\tjump\t@.BB0_133\n.BB0_52:\n\tsub.s!\t@CPI0_18[0], r2, r4\n\tjump.eq\t@.BB0_439\n\tsub.s!\t@CPI0_19[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\t113, r0, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r1\n\tjump.ne\t@.BB0_470\n\tnear_call\tr0, @fun_deployProxyAdmin, @DEFAULT_UNWIND\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_76:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tnear_call\tr0, @copy_array_from_storage_to_memory_string, @DEFAULT_UNWIND\n.BB0_78:\n\tadd\t32, r0, r2\n\tld.1\t64, r3\n\tadd\tr3, r0, stack-[9]\n\tst.1.inc\tr3, r2, r2\n\tnear_call\tr0, @abi_encode_string, @DEFAULT_UNWIND\n\tadd\tstack-[9], r0, r4\n\tsub\tr1, r4, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.ge\tr2, r0, r4\n\tshl.s\t64, r4, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_83:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t12, r0, r1\n\tjump\t@.BB0_85\n.BB0_392:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t96, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_63[0], r2, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r3\n\tld\tr3, r4\n\tsub.s!\t@CPI0_63[0], r4, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t68, r1, r1\n\tld\tr1, r3\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr5\n\tsub!\tr5, r1, r1\n\tjump.ne\t@.BB0_126\n\tsub!\tr2, r0, r1\n\tjump.ne\t@.BB0_408\n\tsub.s!\t4, r4, r1\n\tjump.eq\t@.BB0_133\n\tadd\t@CPI0_116[0], r0, r1\n\tsub!\tr3, r0, r2\n\tadd.ne\tr0, r0, r1\n\tjump.ne\t@.BB0_402\n\tadd\tr4, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tjump\t@.BB0_400\n.BB0_158:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_63[0], r2, r5\n\tcontext.caller\tr3\n\tsub!\tr3, r5, r3\n\tjump.ne\t@.BB0_126\n\tand\t@CPI0_65[0], r2, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tadd\tr0, r0, r6\n\tjump\t@.BB0_161\n.BB0_570:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t102, r0, r1\n\tjump\t@.BB0_164\n.BB0_99:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r4\n\tsub.s!\t@CPI0_78[0], r4, r2\n\tjump.gt\t@.BB0_2\n\tadd\t35, r4, r2\n\tsub!\tr2, r3, r2\n\tjump.ge\t@.BB0_2\n\tadd\t4, r4, r5\n\tptr.add\tr1, r5, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_138[0], r2, r6\n\tjump.ge\t@.BB0_104\n\tadd\t191, r2, r6\n\tsub.s\t32, r0, r7\n\tand\tr6, r7, r6\n\tsub.s!\t@CPI0_78[0], r6, r7\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r6\n\tst.1\t128, r2\n\tadd\tr4, r2, r4\n\tadd\t36, r4, r4\n\tsub!\tr4, r3, r3\n\tjump.gt\t@.BB0_2\n\tadd\t32, r5, r3\n\tptr.add\tr1, r3, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB0_649\n\tadd\tr0, r0, r6\n.BB0_110:\n\tshl.s\t5, r6, r7\n\tptr.add\tr3, r7, r8\n\tld\tr8, r8\n\tadd\t160, r7, r7\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_110\n.BB0_649:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_112\n\tshl.s\t5, r5, r5\n\tptr.add\tr3, r5, r3\n\tshl.s\t3, r4, r4\n\tadd\t160, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr3, r3\n\tsub\t256, r4, r4\n\tshr\tr3, r4, r3\n\tshl\tr3, r4, r3\n\tor\tr3, r6, r3\n\tst.1\tr5, r3\n.BB0_112:\n\tadd\t160, r2, r2\n\tst.1\tr2, r0\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r2\n\tsub.s!\t65535, r2, r1\n\tjump.gt\t@.BB0_2\n\tadd\t128, r0, r1\n\tjump\t@.BB0_114\n.BB0_435:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t118, r0, r1\n\tjump\t@.BB0_164\n.BB0_168:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t192, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r5\n\tsub.s!\t@CPI0_63[0], r5, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_63[0], r6, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t68, r1, r2\n\tld\tr2, r7\n\tptr.add.s\t100, r1, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_78[0], r2, r4\n\tjump.gt\t@.BB0_2\n\tadd\t35, r2, r4\n\tadd\t@CPI0_127[0], r0, r8\n\tsub!\tr4, r3, r9\n\tadd\tr0, r0, r9\n\tadd.ge\tr8, r0, r9\n\tand\t@CPI0_127[0], r4, r4\n\tsub!\tr4, r0, r10\n\tadd.ge\tr0, r0, r8\n\tsub.s!\t@CPI0_127[0], r4, r4\n\tadd.ne\tr9, r0, r8\n\tsub!\tr8, r0, r4\n\tjump.ne\t@.BB0_2\n\tadd\t4, r2, r4\n\tptr.add\tr1, r4, r4\n\tld\tr4, r4\n\tsub.s!\t@CPI0_78[0], r4, r8\n\tjump.gt\t@.BB0_2\n\tadd\t36, r2, r8\n\tadd\tr4, r8, r2\n\tsub!\tr2, r3, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t132, r1, r2\n\tld\tr2, r9\n\tsub.s!\t@CPI0_78[0], r9, r2\n\tjump.gt\t@.BB0_2\n\tadd\t35, r9, r2\n\tadd\t@CPI0_127[0], r0, r10\n\tsub!\tr2, r3, r11\n\tadd\tr0, r0, r11\n\tadd.ge\tr10, r0, r11\n\tand\t@CPI0_127[0], r2, r2\n\tsub!\tr2, r0, r12\n\tadd.ge\tr0, r0, r10\n\tsub.s!\t@CPI0_127[0], r2, r2\n\tadd.ne\tr11, r0, r10\n\tsub!\tr10, r0, r2\n\tjump.ne\t@.BB0_2\n\tadd\t4, r9, r2\n\tptr.add\tr1, r2, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_78[0], r2, r10\n\tjump.gt\t@.BB0_2\n\tadd\t36, r9, r9\n\tadd\tr2, r9, r10\n\tsub!\tr10, r3, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t164, r1, r3\n\tld\tr3, r3\n\tadd\t51, r0, r10\n\tsload\tr10, r10\n\tand\t@CPI0_63[0], r10, r10\n\tcontext.caller\tr11\n\tsub!\tr11, r10, r10\n\tjump.ne\t@.BB0_126\n\tadd\t110, r0, r10\n\tsload\tr10, r11\n\tand\t@CPI0_65[0], r11, r11\n\tor\tr11, r5, r11\n\tsstore\tr10, r11\n\tadd\t109, r0, r10\n\tsload\tr10, r11\n\tand\t@CPI0_65[0], r11, r11\n\tor\tr11, r6, r11\n\tsstore\tr10, r11\n\tadd\t111, r0, r10\n\tsstore\tr10, r7\n\tadd\t106, r0, r10\n\tsload\tr10, r11\n\tand!\t1, r11, r12\n\tshr.s\t1, r11, r13\n\tand\t127, r13, r11\n\tadd.ne\tr13, r0, r11\n\tsub.s!\t31, r11, r13\n\tadd\t0, r0, r13\n\tadd.gt\t1, r0, r13\n\tand\t1, r13, r13\n\tsub!\tr12, r13, r12\n\tjump.ne\t@.BB0_182\n\tsub.s!\t32, r11, r12\n\tjump.lt\t@.BB0_186\n\tadd\t31, r4, r12\n\tshr.s\t5, r12, r12\n\tadd\t@CPI0_130[0], r12, r13\n\tadd\t@CPI0_130[0], r0, r12\n\tsub.s!\t32, r4, r14\n\tadd.ge\tr13, r0, r12\n\tst.1\t0, r10\n\tadd\t31, r11, r11\n\tshr.s\t5, r11, r11\n\tadd\t@CPI0_130[0], r11, r11\n\tsub!\tr12, r11, r13\n\tjump.ge\t@.BB0_186\n.BB0_187:\n\tsstore\tr12, r0\n\tadd\t1, r12, r12\n\tsub!\tr12, r11, r13\n\tjump.lt\t@.BB0_187\n.BB0_186:\n\tsub.s!\t31, r4, r11\n\tjump.le\t@.BB0_195\n\tst.1\t0, r10\n\tsub.s\t32, r0, r11\n\tand!\tr4, r11, r13\n\tadd\t@CPI0_130[0], r0, r11\n\tadd\tr0, r0, r12\n\tjump.eq\t@.BB0_192\n\tadd\t@CPI0_130[0], r0, r11\n\tadd\tr0, r0, r12\n.BB0_190:\n\tadd\tr12, r8, r14\n\tptr.add\tr1, r14, r14\n\tld\tr14, r14\n\tsstore\tr11, r14\n\tadd\t1, r11, r11\n\tadd\t32, r12, r12\n\tsub!\tr12, r13, r14\n\tjump.lt\t@.BB0_190\n.BB0_192:\n\tsub!\tr13, r4, r13\n\tjump.ge\t@.BB0_194\n\tshl.s\t3, r4, r13\n\tand\t248, r13, r13\n\tsub.s\t1, r0, r14\n\tshr\tr14, r13, r13\n\txor\tr13, r14, r13\n\tadd\tr12, r8, r12\n\tptr.add\tr1, r12, r12\n\tld\tr12, r12\n\tand\tr12, r13, r12\n\tsstore\tr11, r12\n.BB0_194:\n\tshl.s\t1, r4, r11\n\tor\t1, r11, r11\n\tjump\t@.BB0_198\n.BB0_638:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r6\n\tsub.s!\t@CPI0_63[0], r6, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_63[0], r2, r5\n\tcontext.caller\tr3\n\tsub!\tr3, r5, r3\n\tjump.ne\t@.BB0_126\n\tsub!\tr6, r0, r3\n\tjump.ne\t@.BB0_644\n\tadd\t@CPI0_68[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t13, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_69[0], r0, r1\n\tjump\t@.BB0_127\n.BB0_65:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tst.1\t128, r0\n\tst.1\t160, r0\n\tadd\t@CPI0_139[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_225:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tjump\t@.BB0_75\n.BB0_119:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t113, r0, r1\n\tjump\t@.BB0_75\n.BB0_439:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand!\t65280, r1, stack-[8]\n\tjump.ne\t@.BB0_446\n\tand!\t255, r1, r2\n\tjump.ne\t@.BB0_429\n\tand\t@CPI0_72[0], r1, r1\n\tor\t257, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_448\n.BB0_384:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tadd\t51, r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_63[0], r2, r2\n\tcontext.caller\tr3\n\tsub!\tr3, r2, r2\n\tjump.ne\t@.BB0_126\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\t102, r0, r3\n\tsstore\tr3, r1\n\tadd\t103, r0, r3\n\tsstore\tr3, r2\n\tst.1\t128, r1\n\tst.1\t160, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_117[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_118[0], r0, r4\n.BB0_161:\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n.BB0_133:\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_147:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t65535, r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t116, r0, r1\n.BB0_151:\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tjump\t@.BB0_75\n.BB0_501:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tand\t@CPI0_63[0], r2, stack-[9]\n\tsub.s!\t@CPI0_63[0], r2, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t65535, r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t113, r0, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r1\n\tjump.ne\t@.BB0_507\n\tadd\t@CPI0_101[0], r0, r1\n\tjump\t@.BB0_471\n.BB0_81:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t109, r0, r1\n\tjump\t@.BB0_75\n.BB0_390:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t103, r0, r1\n.BB0_164:\n\tsload\tr1, r1\n\tjump\t@.BB0_85\n.BB0_156:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t@CPI0_134[0], r0, r1\n\tjump\t@.BB0_75\n.BB0_95:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tadd\t4, r1, r1\n\tadd\tr3, r0, r2\n\tnear_call\tr0, @abi_decode_bytes, @DEFAULT_UNWIND\n\tadd\t117, r0, r2\n\tsload\tr2, r2\n\tand\t65535, r2, r2\n.BB0_114:\n\tnear_call\tr0, @fun_createUpgradeableLockAtVersion, @DEFAULT_UNWIND\n\tand\t@CPI0_63[0], r1, r1\n\tld.1\t64, r2\n\tst.1\tr2, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tor\t@CPI0_98[0], r1, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_423:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand!\t65280, r1, stack-[8]\n\tjump.ne\t@.BB0_430\n\tand!\t255, r1, r2\n\tjump.ne\t@.BB0_429\n\tand\t@CPI0_72[0], r1, r1\n\tor\t257, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_432\n.BB0_165:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r1\n\tsub.s!\t32, r1, r1\n\tjump.lt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.eq\t1, r0, r1\n\tnear_call\tr0, @require_helper_stringliteral_ed52, @DEFAULT_UNWIND\n\tadd\t4, r0, r1\n\tptr.add\tstack[@ptr_calldata], r1, r1\n\tld\tr1, r1\n\tadd\t118, r0, r2\n\tsstore\tr2, r1\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_629:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t115, r0, r1\n\tadd\tr1, r0, stack-[8]\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t65535, r1, r1\n\tjump.ne\t@.BB0_636\n\tld.1\t64, r1\n\tadd\t@CPI0_75[0], r0, r2\n.BB0_544:\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n.BB0_540:\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_76[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_73:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t110, r0, r1\n.BB0_75:\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n.BB0_85:\n\tst.1\t128, r1\n\tadd\t@CPI0_64[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_229:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tadd\tr2, r0, stack-[9]\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tcontext.caller\tr1\n\tadd\tr1, r0, stack-[7]\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tadd\tr1, r0, stack-[6]\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t255, r1, r1\n\tjump.ne\t@.BB0_236\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_129[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t10, r0, r3\n\tjump\t@.BB0_235\n.BB0_143:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tadd\t2, r1, r2\n\tsload\tr2, r2\n\tadd\t1, r1, r3\n\tsload\tr3, r3\n\tsload\tr1, r1\n\tand!\t255, r1, r1\n\tadd\t0, r0, r1\n\tadd.ne\t1, r0, r1\n\tst.1\t128, r1\n\tst.1\t160, r3\n\tst.1\t192, r2\n\tadd\t@CPI0_135[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_473:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tadd\tr2, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r2, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t65535, r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[9], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r4\n\tadd\t164, r4, r1\n\tadd\t192, r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_102[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tcontext.this\tr2\n\tst.1\tr1, r2\n\tadd\t196, r4, r1\n\tst.1\tr1, r0\n\tadd\t132, r4, r1\n\tst.1\tr1, r0\n\tadd\t100, r4, r1\n\tst.1\tr1, r0\n\tadd\t68, r4, r1\n\tst.1\tr1, r0\n\tadd\t36, r4, r1\n\tst.1\tr1, r0\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_487\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_103[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tadd\tr4, r0, stack-[7]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r4\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_482\n.BB0_487:\n\tadd\tr4, r0, r2\n\tsub.s!\t@CPI0_78[0], r4, r1\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r2\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[9], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r2\n\tadd\t@CPI0_104[0], r0, r1\n\tadd\tr2, r0, stack-[7]\n\tst.1\tr2, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_497\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_492\n.BB0_497:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r1\n\tst.1\t64, r1\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t115, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tand\t@CPI0_72[0], r2, r2\n\tadd\tstack-[8], r0, r3\n\tor\tr2, r3, r2\n\tsstore\tr1, r2\n\tst.1\t0, r3\n\tadd\t116, r0, r1\n\tst.1\t32, r1\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\t@CPI0_0[0], r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r5\n\tor\tr2, r5, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_105[0], r0, r4\n\tadd\tstack-[8], r0, r6\n\tjump\t@.BB0_161\n.BB0_126:\n\tadd\t@CPI0_68[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t10, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_136[0], r0, r1\n.BB0_127:\n\tst.1\t196, r1\n\tadd\t@CPI0_70[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_470:\n\tadd\t@CPI0_106[0], r0, r1\n\tjump\t@.BB0_471\n.BB0_446:\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tcontext.this\tr1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_429\n\tsload\tr0, r1\n.BB0_448:\n\tand!\t65280, r1, stack-[7]\n\tjump.ne\t@.BB0_451\n\tand!\t255, r1, r2\n\tjump.ne\t@.BB0_429\n\tand\t@CPI0_72[0], r1, r1\n\tor\t257, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_453\n.BB0_430:\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tcontext.this\tr1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_429\n.BB0_432:\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r6\n\tor\tr2, r6, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n.BB0_433:\n\tsub!\tstack-[8], r0, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_107[0], r0, r1\n\tsload\tr0, r2\n\tand\tr2, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_133\n.BB0_578:\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r10, r3\n\tadd.lt\tr10, r0, r4\n\tshl.s\t64, r4, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tr10, r0, stack-[7]\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_685\n\tadd\tr0, r0, r7\n.BB0_580:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_580\n.BB0_685:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_582\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tr10, r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_582:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_583\n.BB0_588:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tr2, r10, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r3\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tld.1\tr10, r1\n\tsub.s!\t65535, r1, r2\n\tjump.gt\t@.BB0_2\n\tsub.s!\t13, r1, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_79[0], r0, r1\n\tst.2\t0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_80[0], r1, r1\n\tadd\t32779, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub.s!\t1, r1, r1\n\tjump.ne\t@.BB0_133\n\tld.1\t64, r2\n\tadd\t@CPI0_81[0], r0, r1\n\tadd\tr2, r0, stack-[7]\n\tst.1\tr2, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_597\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_607\n.BB0_644:\n\tand\t@CPI0_65[0], r2, r2\n\tor\tr2, r6, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tjump\t@.BB0_161\n.BB0_507:\n\tadd\t@CPI0_87[0], r0, r1\n\tst.1\t128, r1\n\tcontext.caller\tr1\n\tst.1\t132, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_509\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_519\n.BB0_236:\n\tsub!\tstack-[9], r0, r1\n\tjump.eq\t@.BB0_133\n\tld.1\t64, r10\n\tadd\t@CPI0_119[0], r0, r1\n\tst.1\tr10, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[7], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_239\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_249\n.BB0_451:\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tcontext.this\tr1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_429\n.BB0_453:\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r6\n\tor\tr2, r6, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tsub!\tstack-[7], r0, r1\n\tjump.ne\t@.BB0_456\n\tadd\t@CPI0_107[0], r0, r1\n\tsload\tr0, r2\n\tand\tr2, r1, r1\n\tsstore\tr0, r1\n.BB0_456:\n\tld.1\t64, r1\n\tsub.s!\t@CPI0_108[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tadd\t36, r1, r2\n\tadd\t@CPI0_109[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tcontext.gas_left\tr3\n\tadd\t96, r0, r4\n\tst.1\tr2, r4\n\tadd\t@CPI0_110[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t100, r1, r2\n\tst.1\tr2, r0\n\tadd\t4, r1, r2\n\tst.1\tr2, r0\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r2\n\tor\tr1, r2, r1\n\tor\t@CPI0_111[0], r1, r1\n\tadd\t32774, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_458\n\tld\tr1, r1\n\tsub!\tr1, r0, r2\n\tjump.ne\t@.BB0_466\n\tptr.add\tstack[@ptr_return_data], r0, r1\n\tadd\tstack[@returndatasize], r0, r2\n\tjump\t@.BB0_461\n.BB0_429:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_113[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t19, r0, r3\n.BB0_235:\n\tst.1\tr2, r3\n\tadd\t@CPI0_68[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_96[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_583:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_684\n\tadd\tr0, r0, r6\n.BB0_585:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_585\n.BB0_684:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_587\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_587:\n\tjump\t@.BB0_140\n.BB0_408:\n\tadd\t@CPI0_114[0], r0, r1\n\tst.1\t128, r1\n\tst.1\t132, r4\n\tst.1\t164, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_410\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_420\n.BB0_509:\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_88[0], r1, r1\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_679\n\tadd\tr0, r0, r7\n.BB0_511:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tadd\t128, r8, r8\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_511\n.BB0_679:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_513\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tshl.s\t3, r5, r5\n\tadd\t128, r6, r6\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_513:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_514\n.BB0_519:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tor\t128, r1, r2\n\tadd\tr2, r0, stack-[7]\n\tst.1\t64, r2\n\tsub.s!\t32, r4, r2\n\tjump.lt\t@.BB0_2\n\tld.1\t128, r2\n\tsub!\tr2, r0, r3\n\tadd\t0, r0, r3\n\tadd.ne\t1, r0, r3\n\tsub!\tr2, r3, r3\n\tjump.ne\t@.BB0_2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_523\n\tadd\t@CPI0_100[0], r0, r1\n\tadd\tstack-[7], r0, r2\n\tst.1\tr2, r1\n\tshl.s\t64, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_636:\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tadd\t117, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI0_72[0], r3, r3\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand\t65535, r1, r1\n\tor\tr3, r1, r1\n\tsstore\tr2, r1\n\tadd\t107, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r3\n\tor\tr2, r3, r2\n\tsstore\tr1, r2\n\tld.1\t64, r1\n\tst.1\tr1, r3\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd\t@CPI0_0[0], r0, r4\n\tadd.ge\tr4, r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_73[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_74[0], r0, r4\n\tjump\t@.BB0_161\n.BB0_410:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_115[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_670\n\tadd\tr0, r0, r7\n.BB0_412:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tadd\t128, r8, r8\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_412\n.BB0_670:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_414\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tshl.s\t3, r5, r5\n\tadd\t128, r6, r6\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_414:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_415\n.BB0_420:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tor\t128, r1, r1\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r1\n\tjump.lt\t@.BB0_2\n\tld.1\t128, r1\n.BB0_422:\n\tsub!\tr1, r0, r2\n\tadd\t0, r0, r2\n\tadd.ne\t1, r0, r2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_2\n\tjump\t@.BB0_133\n.BB0_514:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_678\n\tadd\tr0, r0, r6\n.BB0_516:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_516\n.BB0_678:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_518\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_518:\n\tjump\t@.BB0_140\n.BB0_239:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tsub.s!\t@CPI0_0[0], r10, r3\n\tadd.lt\tr10, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tr10, r0, stack-[5]\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[5], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_667\n\tadd\tr0, r0, r7\n.BB0_241:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_241\n.BB0_667:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_243\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tr10, r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_243:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_244\n.BB0_249:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tr10, r0, r5\n\tadd\tr2, r10, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r4\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r1\n\tjump.lt\t@.BB0_2\n\tld.1\tr5, r1\n\tadd\tr1, r0, stack-[5]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tsub!\tstack-[5], r0, r1\n\tadd\tstack-[9], r0, stack-[4]\n\tjump.eq\t@.BB0_255\n\tadd\t109, r0, r1\n\tadd\tr1, r0, stack-[3]\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tsub!\tstack-[5], r1, r1\n\tadd\tstack-[9], r0, stack-[4]\n\tjump.ne\t@.BB0_258\n.BB0_255:\n\tadd\t102, r0, r1\n\tadd\tr1, r0, stack-[3]\n\tsload\tr1, r2\n\tadd\tstack-[4], r2, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_256\n\tadd\tstack-[3], r0, r2\n\tsstore\tr2, r1\n\tld.1\t64, r2\n\tadd\t128, r2, r3\n\tadd\tstack-[7], r0, r4\n\tst.1\tr3, r4\n\tadd\t96, r2, r3\n\tadd\tstack-[9], r0, r4\n\tst.1\tr3, r4\n\tadd\t64, r2, r3\n\tadd\tstack-[5], r0, r4\n\tst.1\tr3, r4\n\tadd\t32, r2, r3\n\tadd\tstack-[4], r0, r4\n\tst.1\tr3, r4\n\tst.1\tr2, r1\n\tadd\t@CPI0_0[0], r0, r4\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_121[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_122[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\tstack-[7], r0, r1\n\tst.1\t0, r1\n\tadd\tstack-[6], r0, r1\n\tst.1\t32, r1\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\t@CPI0_0[0], r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tadd\t1, r1, r1\n\tsload\tr1, r2\n\tadd!\tstack-[4], r2, r2\n\tjump.of\t@.BB0_256\n\tsstore\tr1, r2\n\tsub!\tstack-[8], r0, r1\n\tjump.eq\t@.BB0_133\n\tld.1\t64, r2\n\tadd\t@CPI0_77[0], r0, r1\n\tadd\tr2, r0, stack-[9]\n\tst.1\tr2, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[7], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_282\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_292\n.BB0_402:\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32777, r0, r2\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n.BB0_400:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_133\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_668\n\tadd\tr0, r0, r6\n.BB0_405:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_405\n.BB0_668:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_407\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_407:\n\tjump\t@.BB0_140\n.BB0_415:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_669\n\tadd\tr0, r0, r6\n.BB0_417:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_417\n.BB0_669:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_419\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_419:\n\tjump\t@.BB0_140\n.BB0_244:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_666\n\tadd\tr0, r0, r6\n.BB0_246:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_246\n.BB0_666:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_248\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_248:\n\tjump\t@.BB0_140\n.BB0_523:\n\tadd\t@CPI0_77[0], r0, r2\n\tadd\tstack-[7], r0, r3\n\tst.1\tr3, r2\n\tcontext.gas_left\tr2\n\tadd\tstack-[9], r0, r3\n\tsub.s!\t4, r3, r3\n\tjump.ne\t@.BB0_525\n\tadd\tstack-[7], r1, r1\n\tst.1\t64, r1\n.BB0_536:\n\tadd\tstack-[7], r0, r2\n\tld.1\tr2, r2\n\tsub.s!\t65535, r2, r3\n\tjump.gt\t@.BB0_2\n\tsub.s!\t65535, r2, r3\n\tjump.ne\t@.BB0_538\n.BB0_256:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t17, r0, r1\n\tjump\t@.BB0_105\n.BB0_458:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r2\n\tshr.s\t96, r2, r2\n\tand\t@CPI0_0[0], r2, stack[@returndatasize]\n\tand\t@CPI0_0[0], r2, r2\n.BB0_461:\n\tld.1\t64, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB0_671\n\tadd\tr0, r0, r6\n.BB0_463:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_463\n.BB0_671:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_465\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_465:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t96, r2, r1\n\tshl.s\t64, r3, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_482:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_673\n\tadd\tr0, r0, r6\n.BB0_484:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_484\n.BB0_673:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_486\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_486:\n\tjump\t@.BB0_140\n.BB0_525:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tadd\tstack-[7], r0, r2\n\tshl.s\t64, r2, r2\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_677\n\tadd\tr0, r0, r7\n.BB0_527:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_527\n.BB0_677:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_529\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[7], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_529:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_530\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[7], r1, r1\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r2\n\tjump.lt\t@.BB0_2\n\tjump\t@.BB0_536\n.BB0_466:\n\tand\t@CPI0_63[0], r1, r1\n\tadd\t114, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI0_65[0], r3, r3\n\tor\tr3, r1, r3\n\tsstore\tr2, r3\n\tadd\t113, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI0_65[0], r3, r3\n\tor\tr3, r1, r1\n\tsstore\tr2, r1\n\tjump\t@.BB0_433\n.BB0_530:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_676\n\tadd\tr0, r0, r6\n.BB0_532:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_532\n.BB0_676:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_534\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_534:\n\tjump\t@.BB0_140\n.BB0_136:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_650\n\tadd\tr0, r0, r6\n.BB0_138:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_138\n.BB0_650:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_140\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n\tjump\t@.BB0_140\n.BB0_538:\n\tadd\t1, r2, r2\n\tsub!\tstack-[8], r2, r2\n\tjump.ne\t@.BB0_539\n\tadd\tstack-[8], r0, r1\n\tst.1\t0, r1\n\tadd\t116, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, stack-[7]\n\tjump.ne\t@.BB0_545\n\tld.1\t64, r1\n\tadd\t@CPI0_99[0], r0, r2\n\tjump\t@.BB0_544\n.BB0_597:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_683\n\tadd\tr0, r0, r7\n.BB0_599:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_599\n.BB0_683:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_601\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[7], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_601:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_602\n.BB0_607:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[7], r1, r2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.lt\t1, r0, r1\n\tadd\tr2, r0, stack-[6]\n\tsub.s!\t@CPI0_78[0], r2, r2\n\tjump.gt\t@.BB0_104\n\tand!\t1, r1, r1\n\tjump.ne\t@.BB0_104\n\tadd\tstack-[6], r0, r1\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[7], r0, r1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tsub.s!\t@CPI0_82[0], r1, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_83[0], r0, r1\n\tadd\tstack-[6], r0, r4\n\tst.1.inc\tr4, r1, r1\n\tadd\tr1, r0, stack-[7]\n\tadd\t4, r4, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_84[0], r1, r1\n\tadd\t@CPI0_82[0], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[6], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t96, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t96, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_681\n\tadd\tr0, r0, r7\n.BB0_613:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_613\n.BB0_681:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_615\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[6], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_615:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_616\n\tadd\t31, r4, r1\n\tand\t224, r1, r1\n\tadd\tstack-[6], r1, r1\n\tadd\tr1, r0, stack-[5]\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[5], r0, r1\n\tst.1\t64, r1\n\tsub.s!\t96, r3, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[6], r0, r1\n\tld.1\tr1, r1\n\tsub!\tr1, r0, r2\n\tadd\t0, r0, r2\n\tadd.ne\t1, r0, r2\n\tsub!\tr1, r2, r2\n\tjump.ne\t@.BB0_2\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_626\n\tadd\t@CPI0_86[0], r0, r1\n\tadd\tstack-[5], r0, r3\n\tst.1\tr3, r1\n\tadd\t4, r3, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r2\n\tadd.ge\tr1, r0, r3\n\tshl.s\t64, r3, r1\n\tor\t@CPI0_84[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_258:\n\tadd\tstack-[5], r0, r1\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r2\n\tadd\tr0, r0, stack-[4]\n\tjump.eq\t@.BB0_255\n\tadd\tstack-[3], r0, r1\n\tsload\tr1, r1\n\tld.1\t64, r5\n\tadd\t36, r5, r3\n\tadd\tstack-[9], r0, r4\n\tst.1\tr3, r4\n\tand\t@CPI0_63[0], r1, r1\n\tadd\t68, r5, r3\n\tst.1\tr3, r1\n\tadd\t@CPI0_120[0], r0, r1\n\tst.1\tr5, r1\n\tadd\tr5, r0, stack-[4]\n\tadd\t4, r5, r1\n\tadd\tstack-[5], r0, r3\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_262\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_272\n.BB0_539:\n\tadd\t@CPI0_89[0], r0, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_540\n.BB0_602:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_682\n\tadd\tr0, r0, r6\n.BB0_604:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_604\n.BB0_682:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_606\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_606:\n\tjump\t@.BB0_140\n.BB0_492:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_672\n\tadd\tr0, r0, r6\n.BB0_494:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_494\n.BB0_672:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_496\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_496:\n.BB0_140:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tshl.s\t96, r3, r2\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_195:\n\tsub!\tr4, r0, r11\n\tadd\tr0, r0, r11\n\tjump.eq\t@.BB0_197\n\tptr.add\tr1, r8, r11\n\tld\tr11, r11\n.BB0_197:\n\tshl.s\t3, r4, r12\n\tsub.s\t1, r0, r13\n\tshr\tr13, r12, r12\n\txor\tr12, r13, r12\n\tand\tr11, r12, r11\n\tshl.s\t1, r4, r12\n\tor\tr11, r12, r11\n.BB0_198:\n\tsstore\tr10, r11\n\tadd\t105, r0, r12\n\tsload\tr12, r10\n\tand!\t1, r10, r11\n\tshr.s\t1, r10, r13\n\tand\t127, r13, r11\n\tadd.ne\tr13, r0, r11\n\tsub.s!\t31, r11, r13\n\tadd\t0, r0, r13\n\tadd.gt\t1, r0, r13\n\txor\tr10, r13, r10\n\tand!\t1, r10, r10\n\tjump.eq\t@.BB0_199\n.BB0_182:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t34, r0, r1\n\tjump\t@.BB0_105\n.BB0_199:\n\tsub.s!\t32, r11, r10\n\tadd\t31, r2, stack-[9]\n\tjump.lt\t@.BB0_202\n\tadd\tstack-[9], r0, r10\n\tshr.s\t5, r10, r13\n\tadd\t@CPI0_131[0], r13, r14\n\tadd\t@CPI0_131[0], r0, r13\n\tsub.s!\t32, r2, r15\n\tadd.ge\tr14, r0, r13\n\tst.1\t0, r12\n\tadd\t31, r11, r11\n\tshr.s\t5, r11, r11\n\tadd\t@CPI0_131[0], r11, r11\n\tsub!\tr13, r11, r14\n\tjump.ge\t@.BB0_202\n.BB0_203:\n\tsstore\tr13, r0\n\tadd\t1, r13, r13\n\tsub!\tr13, r11, r14\n\tjump.lt\t@.BB0_203\n.BB0_202:\n\tsub.s!\t31, r2, r11\n\tptr.add\tr1, r9, r11\n\tjump.le\t@.BB0_220\n\tst.1\t0, r12\n\tsub.s\t32, r0, r13\n\tand!\tr2, r13, r15\n\tadd\t@CPI0_131[0], r0, r13\n\tadd\tr0, r0, r14\n\tjump.eq\t@.BB0_217\n\tadd\t@CPI0_131[0], r0, r13\n\tadd\tr0, r0, r14\n.BB0_215:\n\tadd\tr14, r9, r10\n\tptr.add\tr1, r10, r10\n\tld\tr10, r10\n\tsstore\tr13, r10\n\tadd\t1, r13, r13\n\tadd\t32, r14, r14\n\tsub!\tr14, r15, r10\n\tjump.lt\t@.BB0_215\n.BB0_217:\n\tsub!\tr15, r2, r10\n\tjump.ge\t@.BB0_219\n\tshl.s\t3, r2, r10\n\tand\t248, r10, r10\n\tsub.s\t1, r0, r15\n\tshr\tr15, r10, r10\n\txor\tr10, r15, r10\n\tadd\tr14, r9, r9\n\tptr.add\tr1, r9, r9\n\tld\tr9, r9\n\tand\tr9, r10, r9\n\tsstore\tr13, r9\n.BB0_219:\n\tshl.s\t1, r2, r9\n\tor\t1, r9, r9\n\tjump\t@.BB0_204\n.BB0_220:\n\tsub!\tr2, r0, r9\n\tadd\tr0, r0, r9\n\tjump.eq\t@.BB0_222\n\tld\tr11, r9\n.BB0_222:\n\tshl.s\t3, r2, r10\n\tsub.s\t1, r0, r13\n\tshr\tr13, r10, r10\n\txor\tr10, r13, r10\n\tand\tr9, r10, r9\n\tshl.s\t1, r2, r10\n\tor\tr9, r10, r9\n.BB0_204:\n\tsstore\tr12, r9\n\tadd\t112, r0, r9\n\tsstore\tr9, r3\n\tst.1\t128, r5\n\tst.1\t160, r6\n\tst.1\t192, r7\n\tadd\t192, r0, r5\n\tst.1\t224, r5\n\tptr.add\tr1, r8, r1\n\tand\t31, r4, r5\n\tst.1\t320, r4\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_652\n\tadd\tr0, r0, r7\n.BB0_206:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tadd\t352, r8, r8\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_206\n.BB0_652:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_208\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r1\n\tshl.s\t3, r5, r5\n\tadd\t352, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_208:\n\tadd\t352, r4, r1\n\tst.1\tr1, r0\n\tadd\t383, r4, r1\n\tsub.s\t32, r0, r4\n\tand\tr1, r4, r1\n\tsub.s\t128, r1, r5\n\tst.1\t256, r5\n\tand\t31, r2, r6\n\tst.1.inc\tr1, r2, r5\n\tshr.s!\t5, r2, r7\n\tjump.eq\t@.BB0_651\n\tadd\tr0, r0, r8\n.BB0_210:\n\tshl.s\t5, r8, r9\n\tadd\tr5, r9, r12\n\tptr.add\tr11, r9, r9\n\tld\tr9, r9\n\tst.1\tr12, r9\n\tadd\t1, r8, r8\n\tsub!\tr8, r7, r9\n\tjump.lt\t@.BB0_210\n.BB0_651:\n\tsub!\tr6, r0, r8\n\tjump.eq\t@.BB0_212\n\tshl.s\t5, r7, r7\n\tptr.add\tr11, r7, r8\n\tadd\tr5, r7, r7\n\tshl.s\t3, r6, r6\n\tld.1\tr7, r9\n\tshl\tr9, r6, r9\n\tshr\tr9, r6, r9\n\tld\tr8, r8\n\tsub\t256, r6, r6\n\tshr\tr8, r6, r8\n\tshl\tr8, r6, r6\n\tor\tr6, r9, r6\n\tst.1\tr7, r6\n.BB0_212:\n\tadd\tr2, r5, r2\n\tst.1\tr2, r0\n\tst.1\t288, r3\n\tand\tstack-[9], r4, r2\n\tadd\tr1, r2, r1\n\tsub.s\t96, r1, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tcontext.gas_left\tr3\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tshl.s\t192, r3, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_132[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_133[0], r0, r4\n\tjump\t@.BB0_161\n.BB0_545:\n\tadd\t114, r0, r1\n\tsload\tr1, r1\n\tadd\t@CPI0_90[0], r0, r2\n\tst.2\t0, r2\n\tand\t@CPI0_63[0], r1, r1\n\tadd\tr1, r0, stack-[6]\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r2\n\tadd\t36, r2, r1\n\tadd\tstack-[7], r0, r3\n\tst.1\tr1, r3\n\tadd\t@CPI0_92[0], r0, r1\n\tst.1\tr2, r1\n\tadd\tr2, r0, stack-[7]\n\tadd\t4, r2, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[6], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_554\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_93[0], r1, r1\n\tadd\tstack-[6], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_549\n.BB0_554:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r1\n\tst.1\t64, r1\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[9], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r3\n\tadd\t68, r3, r1\n\tadd\t@CPI0_94[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t36, r3, r1\n\tadd\t2, r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_95[0], r0, r1\n\tst.1.inc\tr3, r1, r1\n\tadd\tr1, r0, stack-[6]\n\tadd\tr3, r0, stack-[7]\n\tadd\t4, r3, r1\n\tadd\t32, r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_564\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_96[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_559\n.BB0_564:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r3\n\tst.1\t64, r3\n\tadd\tstack-[8], r0, r1\n\tadd\tstack-[6], r0, r2\n\tst.1\tr2, r1\n\tadd\tstack-[9], r0, r1\n\tst.1\tr3, r1\n\tadd\t@CPI0_0[0], r0, r4\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r2\n\tadd.ge\tr4, r0, r3\n\tshl.s\t64, r3, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_97[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\t@CPI0_0[0], r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_98[0], r1, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_131:\n\trevert\n.BB0_262:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tadd\tstack-[4], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.lt\tr5, r0, r3\n\tshl.s\t64, r3, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_96[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[4], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_665\n\tadd\tr0, r0, r7\n.BB0_264:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_264\n.BB0_665:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_266\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[4], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_266:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_267\n.BB0_272:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tstack-[4], r2, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r4\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[4], r0, r1\n\tld.1\tr1, r1\n\tadd\tr1, r0, stack-[4]\n\tjump\t@.BB0_255\n.BB0_267:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_664\n\tadd\tr0, r0, r6\n.BB0_269:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_269\n.BB0_664:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_271\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_271:\n\tjump\t@.BB0_140\n.BB0_282:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[9], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[7], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[9], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_663\n\tadd\tr0, r0, r7\n.BB0_284:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_284\n.BB0_663:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_286\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[9], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_286:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_287\n.BB0_292:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tstack-[9], r2, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r3\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[9], r0, r1\n\tld.1\tr1, r1\n\tsub.s!\t65535, r1, r2\n\tjump.gt\t@.BB0_2\n\tsub.s!\t13, r1, r1\n\tjump.lt\t@.BB0_133\n\tadd\t110, r0, r1\n\tadd\tr1, r0, stack-[7]\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tadd\tr1, r0, stack-[9]\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r2\n\tjump.eq\t@.BB0_133\n\tadd\t109, r0, r1\n\tsload\tr1, r1\n\tld.1\t64, r5\n\tadd\t36, r5, r3\n\tadd\t@CPI0_123[0], r0, r4\n\tst.1\tr3, r4\n\tand\t@CPI0_63[0], r1, r1\n\tadd\t68, r5, r3\n\tst.1\tr3, r1\n\tadd\t@CPI0_120[0], r0, r1\n\tst.1\tr5, r1\n\tadd\tr5, r0, stack-[6]\n\tadd\t4, r5, r1\n\tadd\tstack-[9], r0, r3\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_300\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_310\n.BB0_616:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_680\n\tadd\tr0, r0, r6\n.BB0_618:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_618\n.BB0_680:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_620\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_620:\n\tjump\t@.BB0_140\n.BB0_287:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_662\n\tadd\tr0, r0, r6\n.BB0_289:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_289\n.BB0_662:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_291\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_291:\n\tjump\t@.BB0_140\n.BB0_549:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_675\n\tadd\tr0, r0, r6\n.BB0_551:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_551\n.BB0_675:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_553\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_553:\n\tjump\t@.BB0_140\n.BB0_626:\n\tadd\tstack-[6], r0, r1\n\tadd\t64, r1, r1\n\tld.1\tr1, r2\n\tadd\tstack-[7], r0, r1\n\tld.1\tr1, r1\n\tadd\tstack-[5], r0, r3\n\tsub.s!\t@CPI0_85[0], r3, r3\n\tjump.le\t@.BB0_627\n.BB0_104:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n.BB0_105:\n\tst.1\t4, r1\n\tadd\t@CPI0_84[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_627:\n\tadd\tstack-[5], r0, r4\n\tadd\t96, r4, r3\n\tst.1\t64, r3\n\tadd\t64, r4, r3\n\tadd\tr3, r0, stack-[7]\n\tst.1\tr3, r2\n\tadd\t1, r0, r2\n\tst.1.inc\tr4, r2, r2\n\tadd\tr2, r0, stack-[6]\n\tst.1\tr2, r1\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tsub.s\t256, r0, r3\n\tand\tr2, r3, r2\n\tadd\tstack-[5], r0, r3\n\tld.1\tr3, r3\n\tsub!\tr3, r0, r3\n\tor.ne\t1, r2, r2\n\tsstore\tr1, r2\n\tadd\tstack-[6], r0, r2\n\tld.1\tr2, r2\n\tadd\t1, r1, r3\n\tsstore\tr3, r2\n\tadd\t2, r1, r1\n\tadd\tstack-[7], r0, r2\n\tld.1\tr2, r2\n\tsstore\tr1, r2\n\tjump\t@.BB0_133\n.BB0_559:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_674\n\tadd\tr0, r0, r6\n.BB0_561:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_561\n.BB0_674:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_563\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_563:\n\tjump\t@.BB0_140\n.BB0_300:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tadd\tstack-[6], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.lt\tr5, r0, r3\n\tshl.s\t64, r3, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_96[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[6], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_661\n\tadd\tr0, r0, r7\n.BB0_302:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_302\n.BB0_661:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_304\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[6], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_304:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_305\n.BB0_310:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[6], r1, r5\n\tsub!\tr5, r1, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tadd\tr5, r0, stack-[5]\n\tsub.s!\t@CPI0_78[0], r5, r5\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tadd\tstack-[5], r0, r2\n\tst.1\t64, r2\n\tsub.s!\t32, r3, r2\n\tjump.ge\t@.BB0_313\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_305:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_660\n\tadd\tr0, r0, r6\n.BB0_307:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_307\n.BB0_660:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_309\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_309:\n\tjump\t@.BB0_140\n.BB0_313:\n\tadd\tstack-[6], r0, r2\n\tld.1\tr2, r2\n\tadd\tr2, r0, stack-[1]\n\tadd\tstack-[7], r0, r2\n\tsload\tr2, r5\n\tadd\t@CPI0_124[0], r0, r2\n\tadd\tstack-[5], r0, r6\n\tst.1\tr6, r2\n\tadd\t4, r6, r2\n\tcontext.this\tr6\n\tadd\tr6, r0, stack-[2]\n\tst.1\tr2, r6\n\tcontext.gas_left\tr2\n\tand\t@CPI0_63[0], r5, r5\n\tadd\tr5, r0, stack-[6]\n\tsub.s!\t4, r5, r5\n\tjump.eq\t@.BB0_325\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tadd\tstack-[5], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_84[0], r1, r1\n\tadd\tstack-[6], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[5], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_659\n\tadd\tr0, r0, r7\n.BB0_316:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_316\n.BB0_659:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_318\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[5], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_318:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_320\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n.BB0_325:\n\tadd\tstack-[5], r1, r2\n\tadd\tr2, r0, stack-[9]\n\tsub.s!\t@CPI0_78[0], r2, r2\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[9], r0, r2\n\tst.1\t64, r2\n\tsub.s!\t32, r4, r2\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[5], r0, r2\n\tld.1\tr2, r2\n\tadd\tr2, r0, stack-[5]\n\tadd\t@CPI0_125[0], r0, r2\n\tadd\tstack-[9], r0, r4\n\tst.1\tr4, r2\n\tcontext.gas_left\tr2\n\tadd\tstack-[2], r0, r4\n\tsub.s!\t4, r4, r4\n\tjump.ne\t@.BB0_328\n\tadd\tstack-[9], r1, r1\n\tadd\t0, r0, stack-[10]\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r1\n\tcontext.sp\tr1\n\tsub.s\t10, r1, r1\n\tmul\t32, r1, r1, r0\n\tjump\t@.BB0_341\n.BB0_320:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_658\n\tadd\tr0, r0, r6\n.BB0_322:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_322\n.BB0_658:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_324\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_324:\n\tjump\t@.BB0_140\n.BB0_328:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tadd\tstack-[9], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[2], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_657\n\tadd\tr0, r0, r7\n.BB0_330:\n\tshl.s\t5, r7, r8\n\tadd\tstack-[9], r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_330\n.BB0_657:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_332\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[9], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_332:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\t100, r0, r5\n\tadd\t0, r0, stack-[11]\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_337\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[9], r1, r1\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r1\n\tcontext.sp\tr1\n\tsub.s\t11, r1, r1\n\tmul\t32, r1, r1, r0\n\tsub.s!\t32, r3, r2\n\tjump.lt\t@.BB0_2\n.BB0_341:\n\tadd\tstack-[9], r0, r2\n\tld.1\tr2, r5\n\tshr.s\t5, r1, r1\n\tadd\tr5, r0, stack[r1]\n\tsub!\tr5, r0, r1\n\tjump.ne\t@.BB0_337\n\tadd\t100, r0, r5\n.BB0_337:\n\tadd\t111, r0, r1\n\tsload\tr1, r4\n\tsub!\tr4, r0, r1\n\tadd\tr0, r0, r1\n\tjump.eq\t@.BB0_343\n\tmul\tr4, r5, r2, r1\n\tdiv\tr2, r4, r1, r4\n\tsub!\tr1, r5, r1\n\tjump.ne\t@.BB0_256\n\tsub!\tr2, r0, r1\n\tadd\tr0, r0, r1\n\tjump.eq\t@.BB0_343\n\tmul\t@CPI0_126[0], r2, r1, r4\n\tdiv\tr1, r2, r2, r4\n\tsub.s!\t@CPI0_126[0], r2, r2\n\tjump.ne\t@.BB0_256\n.BB0_343:\n\tsub!\tstack-[1], r0, r2\n\tjump.ne\t@.BB0_345\n.BB0_344:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t18, r0, r1\n\tjump\t@.BB0_105\n.BB0_345:\n\tadd\tstack-[5], r0, r5\n\tmul\tstack-[4], r5, r2, r4\n\tsub!\tr5, r0, r4\n\tjump.ne\t@.BB0_346\n\tadd\t@CPI0_127[0], r0, r4\n\tadd\tstack-[4], r0, r6\n\tsub!\tr6, r0, r5\n\tadd\tr0, r0, r5\n\tadd.lt\tr4, r0, r5\n\tand\t@CPI0_127[0], r6, r6\n\tsub!\tr6, r0, r7\n\tadd.le\tr0, r0, r4\n\tsub.s!\t@CPI0_127[0], r6, r6\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r4\n\tjump.ne\t@.BB0_256\n\tjump\t@.BB0_349\n.BB0_346:\n\tadd\t@CPI0_127[0], r0, r4\n\tadd\tstack-[4], r0, r6\n\tsub!\tr6, r0, r5\n\tadd\tr0, r0, r5\n\tadd.lt\tr4, r0, r5\n\tand\t@CPI0_127[0], r6, r6\n\tsub!\tr6, r0, r7\n\tadd.le\tr0, r0, r4\n\tsub.s!\t@CPI0_127[0], r6, r6\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r4\n\tjump.ne\t@.BB0_256\n\tdiv.s\tstack-[5], r2, r4, r5\n\tsub.s!\tstack-[4], r4, r4\n\tjump.ne\t@.BB0_256\n.BB0_349:\n\tadd\tstack-[3], r0, r4\n\tsload\tr4, r4\n\tsub!\tr4, r0, r5\n\tjump.eq\t@.BB0_344\n\tadd\tstack-[4], r0, r5\n\tshl.s\t1, r5, r5\n\tdiv\tr5, r4, r5, r6\n\tsub.s\t3, r0, r6\n\tsub!\tr5, r6, r6\n\tjump.gt\t@.BB0_256\n\tdiv.s\t100, r1, r1, r6\n\tdiv.s\tstack-[1], r1, r1, r6\n\tadd\t2, r5, r5\n\tdiv\tr2, r5, r2, r5\n\tdiv\tr2, r4, r2, r4\n\tsub!\tr1, r2, r4\n\tadd.ge\tr2, r0, r1\n\tsub!\tr1, r0, r2\n\tjump.eq\t@.BB0_133\n\tsub!\tstack-[5], r1, r2\n\tjump.le\t@.BB0_133\n\tdiv.s\t5, r1, stack-[5], r2\n\tsub.s\tstack-[5], r1, r1\n\tld.1\t64, r4\n\tadd\t36, r4, r2\n\tst.1\tr2, r1\n\tadd\t@CPI0_114[0], r0, r1\n\tst.1\tr4, r1\n\tadd\tr4, r0, stack-[9]\n\tadd\t4, r4, r1\n\tadd\tstack-[8], r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[6], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_355\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_365\n.BB0_355:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[9], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_93[0], r1, r1\n\tadd\tstack-[6], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_656\n\tadd\tr0, r0, r7\n.BB0_357:\n\tshl.s\t5, r7, r8\n\tadd\tstack-[9], r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_357\n.BB0_656:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_359\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[9], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_359:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_360\n.BB0_365:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[9], r1, r5\n\tsub!\tr5, r1, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tadd\tr5, r0, stack-[8]\n\tsub.s!\t@CPI0_78[0], r5, r5\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tadd\tstack-[8], r0, r2\n\tst.1\t64, r2\n\tsub.s!\t32, r3, r2\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[9], r0, r2\n\tld.1\tr2, r2\n\tsub!\tr2, r0, r3\n\tadd\t0, r0, r3\n\tadd.ne\t1, r0, r3\n\tsub!\tr2, r3, r2\n\tjump.ne\t@.BB0_2\n\tadd\tstack-[7], r0, r2\n\tsload\tr2, r2\n\tadd\t51, r0, r3\n\tsload\tr3, r3\n\tadd\tstack-[8], r0, r6\n\tadd\t36, r6, r5\n\tadd\tstack-[5], r0, r7\n\tst.1\tr5, r7\n\tadd\t@CPI0_114[0], r0, r5\n\tst.1\tr6, r5\n\tadd\t4, r6, r5\n\tand\t@CPI0_63[0], r3, r3\n\tst.1\tr5, r3\n\tcontext.gas_left\tr3\n\tand\t@CPI0_63[0], r2, r2\n\tsub.s!\t4, r2, r5\n\tjump.eq\t@.BB0_381\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tadd\tstack-[8], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.lt\tr5, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r3\n\tor\tr3, r1, r1\n\tor\t@CPI0_93[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_654\n\tadd\tr0, r0, r7\n.BB0_372:\n\tshl.s\t5, r7, r8\n\tadd\tstack-[8], r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_372\n.BB0_654:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_374\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[8], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_374:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_376\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n.BB0_381:\n\tadd\tstack-[8], r1, r1\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[8], r0, r1\n\tld.1\tr1, r1\n\tjump\t@.BB0_422\n.BB0_360:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_655\n\tadd\tr0, r0, r6\n.BB0_362:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_362\n.BB0_655:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_364\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_364:\n\tjump\t@.BB0_140\n.BB0_376:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_653\n\tadd\tr0, r0, r6\n.BB0_378:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_378\n.BB0_653:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_380\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_380:\n\tjump\t@.BB0_140\n.func_end0:\n\nabi_encode_string:\n.func_begin1:\n\tld.1\tr1, r3\n\tst.1.inc\tr2, r3, r2\n\tsub!\tr3, r0, r4\n\tjump.eq\t@.BB1_3\n\tadd\tr0, r0, r4\n.BB1_2:\n\tadd\tr2, r4, r5\n\tadd\t32, r4, r4\n\tadd\tr4, r1, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tsub!\tr4, r3, r5\n\tjump.lt\t@.BB1_2\n.BB1_3:\n\tadd\tr2, r3, r1\n\tst.1\tr1, r0\n\tadd\t31, r3, r1\n\tsub.s\t32, r0, r3\n\tand\tr1, r3, r1\n\tadd\tr2, r1, r1\n\tret\n.func_end1:\n\nabi_decode_uint256t_uint256:\n.func_begin2:\n\tsub.s\t4, r1, r1\n\tadd\t@CPI2_0[0], r0, r2\n\tsub.s!\t63, r1, r3\n\tadd\tr0, r0, r3\n\tadd.gt\tr2, r0, r3\n\tand\t@CPI2_0[0], r1, r1\n\tsub!\tr1, r0, r4\n\tadd.ge\tr0, r0, r2\n\tsub.s!\t@CPI2_0[0], r1, r1\n\tadd.ne\tr3, r0, r2\n\tsub!\tr2, r0, r1\n\tjump.eq\t@.BB2_1\n\tret\n.BB2_1:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end2:\n\nfinalize_allocation:\n.func_begin3:\n\tadd\t31, r2, r2\n\tsub.s\t32, r0, r3\n\tand\tr2, r3, r2\n\tadd\tr2, r1, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI3_0[0], r1, r3\n\tjump.gt\t@.BB3_2\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB3_2\n\tst.1\t64, r1\n\tret\n.BB3_2:\n\tadd\t@CPI3_1[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI3_2[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end3:\n\nabi_decode_bytes:\n.func_begin4:\n\tadd\tr1, r0, r3\n\tadd\t31, r3, r1\n\tadd\t@CPI4_0[0], r0, r4\n\tsub!\tr1, r2, r5\n\tadd\tr0, r0, r5\n\tadd.lt\tr4, r0, r5\n\tand\t@CPI4_0[0], r2, r6\n\tand\t@CPI4_0[0], r1, r1\n\tsub!\tr1, r6, r7\n\tadd.le\tr0, r0, r4\n\txor\tr1, r6, r1\n\tsub.s!\t@CPI4_0[0], r1, r1\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r1\n\tjump.eq\t@.BB4_1\n\tptr.add\tstack[@ptr_calldata], r0, r6\n\tptr.add\tr6, r3, r1\n\tld\tr1, r4\n\tsub.s!\t@CPI4_1[0], r4, r1\n\tjump.ge\t@.BB4_3\n\tadd\t63, r4, r1\n\tsub.s\t32, r0, r5\n\tand\tr1, r5, r5\n\tld.1\t64, r1\n\tadd\tr1, r5, r5\n\tsub!\tr5, r1, r7\n\tadd\t0, r0, r7\n\tadd.lt\t1, r0, r7\n\tsub.s!\t@CPI4_2[0], r5, r8\n\tjump.gt\t@.BB4_3\n\tand!\t1, r7, r7\n\tjump.ne\t@.BB4_3\n\tst.1\t64, r5\n\tst.1.inc\tr1, r4, r5\n\tadd\t32, r3, r3\n\tadd\tr3, r4, r7\n\tsub!\tr7, r2, r2\n\tjump.gt\t@.BB4_1\n\tptr.add\tr6, r3, r3\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB4_12\n\tadd\tr0, r0, r7\n.BB4_9:\n\tshl.s\t5, r7, r8\n\tadd\tr5, r8, r9\n\tptr.add\tr3, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB4_9\n.BB4_12:\n\tsub!\tr2, r0, r7\n\tjump.eq\t@.BB4_11\n\tshl.s\t5, r6, r6\n\tptr.add\tr3, r6, r3\n\tadd\tr5, r6, r6\n\tshl.s\t3, r2, r2\n\tld.1\tr6, r7\n\tshl\tr7, r2, r7\n\tshr\tr7, r2, r7\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r7, r2\n\tst.1\tr6, r2\n.BB4_11:\n\tadd\tr5, r4, r2\n\tst.1\tr2, r0\n\tret\n.BB4_3:\n\tadd\t@CPI4_3[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI4_4[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB4_1:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end4:\n\ncopy_array_from_storage_to_memory_string:\n.func_begin5:\n\tadd\t106, r0, r5\n\tsload\tr5, r4\n\tand!\t1, r4, r6\n\tshr.s\t1, r4, r1\n\tand\t127, r1, r2\n\tadd.ne\tr1, r0, r2\n\tsub.s!\t31, r2, r1\n\tadd\t0, r0, r1\n\tadd.gt\t1, r0, r1\n\tand\t1, r1, r1\n\tsub!\tr6, r1, r1\n\tjump.ne\t@.BB5_1\n\tld.1\t64, r1\n\tst.1.inc\tr1, r2, r3\n\tsub!\tr6, r0, r6\n\tjump.eq\t@.BB5_8\n\tst.1\t0, r5\n\tsub!\tr2, r0, r4\n\tadd\tr0, r0, r4\n\tjump.eq\t@.BB5_4\n\tadd\t@CPI5_0[0], r0, r5\n\tadd\tr0, r0, r4\n.BB5_11:\n\tadd\tr3, r4, r6\n\tsload\tr5, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tadd\t32, r4, r4\n\tsub!\tr4, r2, r6\n\tjump.lt\t@.BB5_11\n\tjump\t@.BB5_4\n.BB5_8:\n\tsub.s\t256, r0, r5\n\tand\tr4, r5, r4\n\tst.1\tr3, r4\n\tsub!\tr2, r0, r2\n\tadd\t32, r0, r4\n\tadd.eq\t0, r0, r4\n.BB5_4:\n\tadd\t63, r4, r2\n\tsub.s\t32, r0, r3\n\tand\tr2, r3, r3\n\tadd\tr3, r1, r2\n\tsub!\tr2, r3, r3\n\tadd\t0, r0, r3\n\tadd.lt\t1, r0, r3\n\tsub.s!\t@CPI5_1[0], r2, r4\n\tjump.gt\t@.BB5_6\n\tand!\t1, r3, r3\n\tjump.ne\t@.BB5_6\n\tst.1\t64, r2\n\tret\n.BB5_1:\n\tadd\t@CPI5_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t34, r0, r1\n\tjump\t@.BB5_2\n.BB5_6:\n\tadd\t@CPI5_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n.BB5_2:\n\tst.1\t4, r1\n\tadd\t@CPI5_3[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end5:\n\ncopy_array_from_storage_to_memory_string_27022:\n.func_begin6:\n\tadd\t105, r0, r5\n\tsload\tr5, r4\n\tand!\t1, r4, r6\n\tshr.s\t1, r4, r1\n\tand\t127, r1, r2\n\tadd.ne\tr1, r0, r2\n\tsub.s!\t31, r2, r1\n\tadd\t0, r0, r1\n\tadd.gt\t1, r0, r1\n\tand\t1, r1, r1\n\tsub!\tr6, r1, r1\n\tjump.ne\t@.BB6_1\n\tld.1\t64, r1\n\tst.1.inc\tr1, r2, r3\n\tsub!\tr6, r0, r6\n\tjump.eq\t@.BB6_8\n\tst.1\t0, r5\n\tsub!\tr2, r0, r4\n\tadd\tr0, r0, r4\n\tjump.eq\t@.BB6_4\n\tadd\t@CPI6_0[0], r0, r5\n\tadd\tr0, r0, r4\n.BB6_11:\n\tadd\tr3, r4, r6\n\tsload\tr5, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tadd\t32, r4, r4\n\tsub!\tr4, r2, r6\n\tjump.lt\t@.BB6_11\n\tjump\t@.BB6_4\n.BB6_8:\n\tsub.s\t256, r0, r5\n\tand\tr4, r5, r4\n\tst.1\tr3, r4\n\tsub!\tr2, r0, r2\n\tadd\t32, r0, r4\n\tadd.eq\t0, r0, r4\n.BB6_4:\n\tadd\t63, r4, r2\n\tsub.s\t32, r0, r3\n\tand\tr2, r3, r3\n\tadd\tr3, r1, r2\n\tsub!\tr2, r3, r3\n\tadd\t0, r0, r3\n\tadd.lt\t1, r0, r3\n\tsub.s!\t@CPI6_1[0], r2, r4\n\tjump.gt\t@.BB6_6\n\tand!\t1, r3, r3\n\tjump.ne\t@.BB6_6\n\tst.1\t64, r2\n\tret\n.BB6_1:\n\tadd\t@CPI6_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t34, r0, r1\n\tjump\t@.BB6_2\n.BB6_6:\n\tadd\t@CPI6_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n.BB6_2:\n\tst.1\t4, r1\n\tadd\t@CPI6_3[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end6:\n\nrequire_helper_stringliteral_ed52:\n.func_begin7:\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB7_1\n\tret\n.BB7_1:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI7_0[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t10, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI7_1[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI7_2[0], r0, r2\n\tsub.s!\t@CPI7_2[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI7_3[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end7:\n\nfun_deployProxyAdmin:\n.func_begin8:\n\tld.1\t64, r1\n\tsub.s!\t@CPI8_0[0], r1, r2\n\tjump.ge\t@.BB8_1\n\tadd\t36, r1, r2\n\tadd\t@CPI8_1[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tcontext.gas_left\tr3\n\tadd\t96, r0, r4\n\tst.1\tr2, r4\n\tadd\t@CPI8_2[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t100, r1, r2\n\tst.1\tr2, r0\n\tadd\t4, r1, r2\n\tst.1\tr2, r0\n\tadd\t@CPI8_3[0], r0, r2\n\tsub.s!\t@CPI8_3[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI8_3[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r2\n\tor\tr1, r2, r1\n\tor\t@CPI8_4[0], r1, r1\n\tadd\t32774, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB8_3\n\tld\tr1, r1\n\tsub!\tr1, r0, r2\n\tjump.eq\t@.BB8_5\n\tand\t@CPI8_5[0], r1, r1\n\tadd\t114, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI8_6[0], r3, r3\n\tor\tr3, r1, r3\n\tsstore\tr2, r3\n\tadd\t113, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI8_6[0], r3, r3\n\tor\tr3, r1, r1\n\tsstore\tr2, r1\n\tret\n.BB8_1:\n\tadd\t@CPI8_7[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI8_8[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB8_3:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r2\n\tshr.s\t96, r2, r2\n\tand\t@CPI8_3[0], r2, stack[@returndatasize]\n\tand\t@CPI8_3[0], r2, r2\n\tjump\t@.BB8_6\n.BB8_5:\n\tptr.add\tstack[@ptr_return_data], r0, r1\n\tadd\tstack[@returndatasize], r0, r2\n.BB8_6:\n\tld.1\t64, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB8_12\n\tadd\tr0, r0, r6\n.BB8_8:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB8_8\n.BB8_12:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB8_10\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB8_10:\n\tadd\t@CPI8_3[0], r0, r1\n\tsub.s!\t@CPI8_3[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI8_3[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t64, r3, r1\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end8:\n\nabi_encode_string_calldata:\n.func_begin9:\n\tand\t31, r2, r4\n\tst.1.inc\tr3, r2, r3\n\tptr.add\tstack[@ptr_calldata], r1, r1\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB9_5\n\tadd\tr0, r0, r6\n.BB9_2:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB9_2\n.BB9_5:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB9_4\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB9_4:\n\tadd\tr3, r2, r1\n\tst.1\tr1, r0\n\tadd\t31, r2, r1\n\tsub.s\t32, r0, r2\n\tand\tr1, r2, r1\n\tadd\tr3, r1, r1\n\tret\n.func_end9:\n\nfun_createUpgradeableLockAtVersion:\n.func_begin10:\n\tnop\tstack+=[4]\n\tadd\tr1, r0, stack-[4]\n\tadd\t113, r0, r1\n\tsload\tr1, r1\n\tand!\t@CPI10_0[0], r1, stack-[3]\n\tjump.eq\t@.BB10_1\n\tand\t65535, r2, r1\n\tst.1\t0, r1\n\tadd\t116, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI10_1[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI10_1[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI10_2[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB10_3\n\tld.1\t64, r2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI10_0[0], r1, r3\n\tjump.eq\t@.BB10_5\n\tsub.s!\t@CPI10_3[0], r2, r1\n\tadd\tstack-[4], r0, r8\n\tjump.ge\t@.BB10_7\n\tadd\t196, r2, r4\n\tadd\t96, r0, r1\n\tst.1\tr4, r1\n\tadd\t164, r2, r4\n\tadd\tstack-[3], r0, r5\n\tst.1\tr4, r5\n\tadd\t132, r2, r4\n\tst.1\tr4, r3\n\tadd\t36, r2, r3\n\tadd\t@CPI10_4[0], r0, r4\n\tst.1\tr3, r4\n\tld.1\tr8, r3\n\tadd\t228, r2, r4\n\tst.1\tr4, r3\n\tadd\t260, r2, r4\n\tsub!\tr3, r0, r5\n\tjump.eq\t@.BB10_12\n\tadd\tr0, r0, r5\n.BB10_10:\n\tadd\tr5, r4, r6\n\tadd\t32, r5, r5\n\tadd\tr5, r8, r7\n\tld.1\tr7, r7\n\tst.1\tr6, r7\n\tsub!\tr5, r3, r6\n\tjump.lt\t@.BB10_10\n.BB10_12:\n\tadd\tr3, r4, r4\n\tst.1\tr4, r0\n\tadd\t31, r3, r3\n\tsub.s\t32, r0, r4\n\tand\tr3, r4, r3\n\tadd\t128, r3, r4\n\tadd\t100, r2, r5\n\tcontext.gas_left\tr6\n\tst.1\tr5, r4\n\tadd\t68, r2, r4\n\tst.1\tr4, r1\n\tadd\t@CPI10_5[0], r0, r1\n\tst.1\tr2, r1\n\tadd\t4, r2, r1\n\tst.1\tr1, r0\n\tadd\t@CPI10_1[0], r0, r1\n\tsub.s!\t@CPI10_1[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r2\n\tadd\t260, r3, r3\n\tsub.s!\t@CPI10_1[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t96, r3, r3\n\tor\tr3, r2, r2\n\tsub.s!\t@CPI10_1[0], r6, r3\n\tadd.ge\tr1, r0, r6\n\tshl.s\t192, r6, r1\n\tor\tr1, r2, r1\n\tor\t@CPI10_6[0], r1, r1\n\tadd\t32774, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB10_11\n\tld\tr1, r1\n\tsub!\tr1, r0, r2\n\tjump.eq\t@.BB10_14\n\tand\t@CPI10_0[0], r1, r2\n\tld.1\t64, r3\n\tsub.s!\t@CPI10_7[0], r3, r1\n\tjump.gt\t@.BB10_7\n\tadd\t96, r3, r1\n\tst.1\t64, r1\n\tadd\t1, r0, r1\n\tst.1.inc\tr3, r1, r4\n\tadd\tr3, r0, stack-[3]\n\tadd\t64, r3, r1\n\tadd\tr1, r0, stack-[2]\n\tst.1\tr1, r0\n\tadd\tr4, r0, stack-[1]\n\tst.1\tr4, r0\n\tadd\tr2, r0, stack-[4]\n\tst.1\t0, r2\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI10_1[0], r0, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI10_1[0], r1, r2\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI10_2[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB10_3\n\tld\tr1, r1\n\tsload\tr1, r2\n\tsub.s\t256, r0, r3\n\tand\tr2, r3, r2\n\tadd\tstack-[3], r0, r3\n\tld.1\tr3, r3\n\tsub!\tr3, r0, r3\n\tor.ne\t1, r2, r2\n\tsstore\tr1, r2\n\tadd\tstack-[1], r0, r2\n\tld.1\tr2, r2\n\tadd\t1, r1, r3\n\tsstore\tr3, r2\n\tadd\t2, r1, r1\n\tadd\tstack-[2], r0, r2\n\tld.1\tr2, r2\n\tsstore\tr1, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI10_1[0], r1, r2\n\tadd.ge\t@CPI10_1[0], r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI10_6[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tcontext.caller\tr5\n\tadd\t@CPI10_8[0], r0, r4\n\tadd\tstack-[4], r0, r6\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB10_3\n\tadd\tstack-[4], r0, r1\n\tret\n.BB10_3:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_7:\n\tadd\t@CPI10_9[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI10_10[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_1:\n\tld.1\t64, r1\n\tadd\t@CPI10_13[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI10_1[0], r0, r2\n\tsub.s!\t@CPI10_1[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI10_12[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_5:\n\tadd\t@CPI10_11[0], r0, r1\n\tst.1\tr2, r1\n\tadd\t@CPI10_1[0], r0, r1\n\tsub.s!\t@CPI10_1[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tor\t@CPI10_12[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_11:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r2\n\tshr.s\t96, r2, r2\n\tand\t@CPI10_1[0], r2, stack[@returndatasize]\n\tand\t@CPI10_1[0], r2, r2\n\tjump\t@.BB10_18\n.BB10_14:\n\tptr.add\tstack[@ptr_return_data], r0, r1\n\tadd\tstack[@returndatasize], r0, r2\n.BB10_18:\n\tld.1\t64, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB10_24\n\tadd\tr0, r0, r6\n.BB10_20:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB10_20\n.BB10_24:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB10_22\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB10_22:\n\tadd\t@CPI10_1[0], r0, r1\n\tsub.s!\t@CPI10_1[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI10_1[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t64, r3, r1\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end10:\n\nrequire_helper_stringliteral_2f7a:\n.func_begin11:\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB11_1\n\tret\n.BB11_1:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI11_0[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t10, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI11_1[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI11_2[0], r0, r2\n\tsub.s!\t@CPI11_2[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI11_3[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end11:\n\n__cxa_throw:\n\trevert\n\n__sha3:\n.func_begin12:\n\tadd\t@CPI13_0[0], r0, r3\n\tsub.s!\t@CPI13_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t64, r1, r1\n\tsub.s!\t@CPI13_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI13_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI13_1[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB13_2\n\tld\tr1, r1\n\tret\n.BB13_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end12:\n\n__system_request:\n.func_begin13:\n\tadd\tr1, r0, r5\n\tst.2\t0, r2\n\tsub.s!\t4, r3, r1\n\tjump.le\t@.BB14_3\n\tshr.s\t5, r4, r1\n\tadd\tstack[r1], r0, r1\n\tst.2\t4, r1\n.BB14_3:\n\tadd\t@CPI14_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI14_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI14_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t96, r3, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI14_1[0], r1, r1\n\tadd\tr5, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB14_4\n\tld\tr1, r1\n\tret\n.BB14_4:\n\trevert\n.func_end13:\n\n__farcall:\n.func_begin14:\n.tmp0:\n\tfar_call\tr1, r2, @.BB15_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB15_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end14:\n\n__staticcall:\n.func_begin15:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB16_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB16_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end15:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.p2align\t5\nptr_calldata:\n.cell\t0\n\n\t.p2align\t5\nptr_return_data:\n.cell\t0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\nCPI7_2:\nCPI8_3:\nCPI10_1:\nCPI11_2:\nCPI13_0:\nCPI14_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_2:\n\t.cell 1890269700620599958563283095811294385051394744042009698940098529013530624\nCPI0_3:\n\t.cell 316912652418240591808998408192\nCPI0_4:\n\t.cell 2376452954\nCPI0_5:\n\t.cell 3302387175\nCPI0_6:\n\t.cell 3468955729\nCPI0_7:\n\t.cell 4016569829\nCPI0_8:\n\t.cell 4016569830\nCPI0_9:\n\t.cell 4076725131\nCPI0_10:\n\t.cell 4164061585\nCPI0_11:\n\t.cell 3468955730\nCPI0_12:\n\t.cell 3605653507\nCPI0_13:\n\t.cell 3986060477\nCPI0_14:\n\t.cell 3404653474\nCPI0_15:\n\t.cell 3404653475\nCPI0_16:\n\t.cell 3438626376\nCPI0_17:\n\t.cell 3449009458\nCPI0_18:\n\t.cell 3302387176\nCPI0_19:\n\t.cell 3352809673\nCPI0_20:\n\t.cell 2692934413\nCPI0_21:\n\t.cell 2966031490\nCPI0_22:\n\t.cell 2966031491\nCPI0_23:\n\t.cell 2967608970\nCPI0_24:\n\t.cell 3126763733\nCPI0_25:\n\t.cell 2692934414\nCPI0_26:\n\t.cell 2789961311\nCPI0_27:\n\t.cell 2845370875\nCPI0_28:\n\t.cell 2476580638\nCPI0_29:\n\t.cell 2476580639\nCPI0_30:\n\t.cell 2520421496\nCPI0_31:\n\t.cell 2592736658\nCPI0_32:\n\t.cell 2376452955\nCPI0_33:\n\t.cell 2402473371\nCPI0_34:\n\t.cell 1501161300\nCPI0_35:\n\t.cell 1855545538\nCPI0_36:\n\t.cell 2021510716\nCPI0_37:\n\t.cell 2021510717\nCPI0_38:\n\t.cell 2106570305\nCPI0_39:\n\t.cell 2147044274\nCPI0_40:\n\t.cell 1855545539\nCPI0_41:\n\t.cell 1901074598\nCPI0_42:\n\t.cell 1950071855\nCPI0_43:\n\t.cell 1575592246\nCPI0_44:\n\t.cell 1575592247\nCPI0_45:\n\t.cell 1717573797\nCPI0_46:\n\t.cell 1808717218\nCPI0_47:\n\t.cell 1501161301\nCPI0_48:\n\t.cell 1547234106\nCPI0_49:\n\t.cell 1070124786\nCPI0_50:\n\t.cell 1146274481\nCPI0_51:\n\t.cell 1146274482\nCPI0_52:\n\t.cell 1215990390\nCPI0_53:\n\t.cell 1245215727\nCPI0_54:\n\t.cell 1070124787\nCPI0_55:\n\t.cell 1109441862\nCPI0_56:\n\t.cell 1121526022\nCPI0_57:\n\t.cell 640486020\nCPI0_58:\n\t.cell 640486021\nCPI0_59:\n\t.cell 900157662\nCPI0_60:\n\t.cell 911361635\nCPI0_61:\n\t.cell 212956643\nCPI0_62:\n\t.cell 628566745\nCPI0_63:\nCPI8_5:\nCPI10_0:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_64:\n\t.cell 2535301202817642044428229017600\nCPI0_65:\nCPI8_6:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_66:\nCPI10_6:\nCPI13_1:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_67:\n\t.cell -52524777015005588113349992707137368332388074750292320778649315033004770043936\nCPI0_68:\nCPI7_1:\nCPI11_1:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_69:\n\t.cell 33157247328247392177276036206420639287987967339789334254430219359175892271104\nCPI0_70:\n\t.cell 7922816253787617000789217640448\nCPI0_71:\nCPI10_2:\n\t.cell 904625697166532776746648320380374280103671760270919307471179981048634146816\nCPI0_72:\n\t.cell -65536\nCPI0_73:\n\t.cell 904625697166532776746648320380374280103671757735618107014721178055227736064\nCPI0_74:\n\t.cell 36025156505492517438805714562748948800260801740279915897280979504007541324833\nCPI0_75:\nCPI10_11:\n\t.cell -37114117605592496347325697673092623924536044454442039357710132896650628169728\nCPI0_76:\nCPI10_12:\n\t.cell 316912650057057350374175801344\nCPI0_77:\n\t.cell -20926836106322762708891414760002713515518242035995076520671423947012436918272\nCPI0_78:\nCPI3_0:\nCPI4_2:\nCPI5_1:\nCPI6_1:\n\t.cell 18446744073709551615\nCPI0_79:\n\t.cell -45892047197499416867505091379861151366373029554911521591129889233172042914037\nCPI0_80:\n\t.cell 904625751086426111047927909714404454142933102791518401696464687643217625088\nCPI0_81:\n\t.cell 6821811911238888839536434405234023077819029972646230067974408253352257257472\nCPI0_82:\n\t.cell 350122553345285754288357488426466034265801612563\nCPI0_83:\n\t.cell 42477882948296037641567020917740160426186072043374218044168402312374467428352\nCPI0_84:\nCPI3_2:\nCPI4_4:\nCPI5_3:\nCPI6_3:\nCPI8_8:\nCPI10_10:\n\t.cell 2852213850513516153367582212096\nCPI0_85:\nCPI10_7:\n\t.cell 18446744073709551519\nCPI0_86:\n\t.cell -56908243873390551813086563957040102425272639719699074826629612523392138739712\nCPI0_87:\n\t.cell -38494787266956801523015968668355323156317191752700434140906003176714689052672\nCPI0_88:\n\t.cell 2852213852874699394802404818944\nCPI0_89:\n\t.cell 25207609688308035943776965525799681906214888099527464661956486340892000518144\nCPI0_90:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_91:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_92:\n\t.cell -46290407765062878413499179029397064721218218007786861689943043099119249784832\nCPI0_93:\n\t.cell 5387515050969974956360988622848\nCPI0_94:\n\t.cell 21923038379770192761469555389218132944387420192432680032372889745638826180608\nCPI0_95:\n\t.cell -53735719882557866721708016383183202791820432244875900703955266285172982546432\nCPI0_96:\nCPI7_3:\nCPI11_3:\n\t.cell 7922816251426433759354395033600\nCPI0_97:\n\t.cell 42735507531937456931511469666945626389827086867131878990913717139551033032030\nCPI0_98:\n\t.cell 2535301200456458802993406410752\nCPI0_99:\n\t.cell -18700892153741470206840701859395200761893992252319677534854976532327455260672\nCPI0_100:\n\t.cell -42149906165508016613000565465756512467465000513030630428843995723983321300992\nCPI0_101:\nCPI10_13:\n\t.cell -56670185441443771625949750229794542298893231190750776613456814118809962020864\nCPI0_102:\n\t.cell 50061611880371377414337244847040546638905800530057410076493070815543366254592\nCPI0_103:\n\t.cell 18064021053252268971328020676608\nCPI0_104:\n\t.cell -6907707730197604136906152632653067233185663617545098726549545854097602641920\nCPI0_105:\n\t.cell -20161477289955489877637036844001228409087517651143040526947360274373148850360\nCPI0_106:\n\t.cell -584628842912415000354295947526363435904951430508645920363682606475561140224\nCPI0_107:\n\t.cell -65281\nCPI0_108:\n\t.cell 18446744073709551483\nCPI0_109:\nCPI8_1:\n\t.cell 452319252588209271575910507515635480975787381224214229762002700242646879225\nCPI0_110:\nCPI8_2:\nCPI10_5:\n\t.cell -45094662312588414058508742492242807367897819822786606328124609013070528553987\nCPI0_111:\nCPI8_4:\n\t.cell 904625697166532776746648320380374280103671765658434358441154937409622769664\nCPI0_112:\n\t.cell 50182626877236202919511659493747656258103580868824622380046315770105312814518\nCPI0_113:\n\t.cell 29535183345145645464477851197593903596241110250713156662292127721300527415296\nCPI0_114:\n\t.cell -39341301877480157781710804024396230103289065588583741745104145964028735258624\nCPI0_115:\n\t.cell 5387515053331158197795811229696\nCPI0_116:\n\t.cell 14437333991389365756822315673377632757035417522267279379660800\nCPI0_117:\n\t.cell 904625697166532776746648320380374280103671760270919309832363222483456753664\nCPI0_118:\n\t.cell 55713793741244277608309276122367187087222996717614018578921075799306736261563\nCPI0_119:\n\t.cell -44568866674979067396885701090171761998580735943016166783551351666021555503104\nCPI0_120:\n\t.cell -28090522410217068727452697311494607388493927424200414066219095369906818908160\nCPI0_121:\n\t.cell 904625697166532776746648320380374280103671767876822908840556390028853379072\nCPI0_122:\n\t.cell 26829431991052184924179753388315071223040590805488744152318084421056796552119\nCPI0_123:\n\t.cell 1000000000000000000\nCPI0_124:\n\t.cell 50942633119752846454219349998365661925608737367104304655302372697894809501696\nCPI0_125:\n\t.cell -31494705754855352465859595423231087603887002283557474284484987665297449156608\nCPI0_126:\n\t.cell 125000000000000000000\nCPI0_127:\nCPI2_0:\nCPI4_0:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_128:\nCPI3_1:\nCPI4_3:\nCPI5_2:\nCPI6_2:\nCPI8_7:\nCPI10_9:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\nCPI0_129:\nCPI11_0:\n\t.cell 35871056051324427784075185478792451971914311706789223069900028630809205276672\nCPI0_130:\nCPI5_0:\n\t.cell 7887053984229333715756243741084912719879447020693965939365260134600710199889\nCPI0_131:\nCPI6_0:\n\t.cell 57762096780731528330405058414938765910932439953606620384872163540286326260488\nCPI0_132:\n\t.cell 904625697166532776746648320380374280103671755200316908919445616496643932160\nCPI0_133:\n\t.cell -42852773073754312208884282459163052021579535870294477440851470759412745519513\nCPI0_134:\n\t.cell -33836616157800148473937241991990060311975165975819281289460902511640494382845\nCPI0_135:\n\t.cell 7605903603730559650415041839104\nCPI0_136:\nCPI7_0:\n\t.cell 35871056051325674836898434191605331488235603392957484300597738840229016502272\nCPI0_137:\n\t.cell -26120258288163459410817549624531742010132204837987907727317110414913445036032\nCPI0_138:\nCPI4_1:\n\t.cell 18446744073709551616\nCPI0_139:\n\t.cell 5070602403274100847421635428352\nCPI8_0:\nCPI10_3:\n\t.cell 18446744073709551484\nCPI10_4:\n\t.cell 452325352475091846242819484956123856763730907249538198437149772942287165769\nCPI10_8:\n\t.cell 454954966949675225254850943970014343149630866565406483258717838262022863847\nCPI14_1:\n\t.cell 904625751086426111047927909714404454142933102474605751639407337269041823744\n","bytecode":{"object":"0003000000000002000c000000000002000000000301001900000060033002700000048a03300197000200000031035500010000000103550000000102200190000000630000c13d0000008002000039000000400020043f000000040230008c0000006d0000413d000000000201043b000000e0022002700000048e0420009c000000760000213d000004ac0420009c000000830000213d000004bb0420009c000000be0000a13d000004bc0420009c000001060000213d000004c00420009c000003bb0000613d000004c10420009c0000020d0000613d000004c20220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000c00220008c00000d5f0000413d0000002402100370000000000502043b000004c90250009c00000d5f0000213d0000008402100370000000000402043b000004d80240009c00000d5f0000213d00000023024000390000050906000041000000000732004b000000000700001900000000070680190000050902200197000000000802004b0000000006008019000005090220009c000000000607c019000000000206004b00000d5f0000c13d0000000402400039000000000221034f000000000202043b000004d80620009c00000d5f0000213d00000024044000390000000006420019000000000336004b00000d5f0000213d000000a403100370000000000303043b000004cb06300197000000000363004b00000d5f0000c13d000004f003000041000000a00030043f0000000003000411000000a40030043f0000000403100370000000000303043b000000c40030043f000000e40050043f0000004403100370000000000303043b000001040030043f0000006401100370000000000101043b000001240010043f000000c001000039000001440010043f00000164030000390000000001040019122410d70000040f000000a00210008a000000800020043f000000800210008a0000008001000039000900000001001d12240f8d0000040f0000007501000039000000000101041a0000ffff0210018f0000000901000029000003db0000013d0000008001000039000000400010043f0000000001000416000000000101004b00000d5f0000c13d0000002001000039000001000010044300000120000004430000048b01000041000012250001042e000000000103004b00000d5f0000c13d0000000001000416000000000101004b000003920000c13d0000048c01000041000000800010043f0000048d0100004100001226000104300000048f0420009c000000920000213d0000049e0420009c000000d70000a13d0000049f0420009c0000012d0000213d000004a30420009c000003c00000613d000004a40420009c000002120000613d000004a50120009c000001440000613d00000d5f0000013d000004ad0420009c000000e40000a13d000004ae0420009c0000013e0000213d000004b20120009c000003c60000613d000004b30120009c000002330000613d000004b40120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000006f01000039000003c40000013d000004900420009c000000f90000a13d000004910420009c000001490000213d000004950120009c000001f90000613d000004960120009c000002490000613d000004970120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000000001000411000900000001001d00000000001004350000006801000039000800000001001d000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000000ff01100190000003920000c13d000000400a00043d000004d70100004100000000001a043500000000010004140000000902000029000000040320008c000005930000c13d0000000004000031000000200140008c0000002004008039000005c40000013d000004c30420009c000001540000a13d000004c40120009c0000043b0000613d000004c50120009c000001f90000613d000004c60120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d000000000103001912240f7e0000040f000000000100041100000000001004350000006801000039000000200010043f00000040020000390000000001000019122411ec0000040f000000000101041a000000ff0110018f122411d60000040f0000000001000019000012250001042e000004a60420009c0000016b0000a13d000004a70420009c000004440000613d000004a80420009c000003700000613d000004a90120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000007001000039000003c40000013d000004b50420009c0000017a0000a13d000004b60420009c0000046d0000613d000004b70420009c000003940000613d000004b80220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004c90210009c00000d5f0000213d00000000001004350000006c01000039000003a00000013d000004980420009c000001e50000a13d000004990420009c0000048a0000613d0000049a0420009c000003a50000613d0000049b0120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000007501000039000001680000013d000004bd0420009c000003cb0000613d000004be0420009c0000024e0000613d000004bf0220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b00000000010000190000000101006039122410630000040f000000090100002900000000001004350000006801000039000000200010043f00000040020000390000000001000019122411ec0000040f000000000001041b0000000102100039000000000002041b0000000201100039000000000001041b0000000001000019000012250001042e000004a00420009c000003e50000613d000004a10120009c000002900000613d000004a20120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000800b01000039000000040300003900000000040004150000000c0440008a00000020044000c9000004fa02000041122412020000040f000004410000013d000004af0420009c000003f90000613d000004b00420009c000002950000613d000004b10120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d122410280000040f000001fd0000013d000004920420009c0000040e0000613d000004930420009c0000032a0000613d000004940120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000006b010000390000043f0000013d000004c70420009c000003440000613d000004c80220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004c90210009c00000d5f0000213d00000000001004350000007301000039000000200010043f00000040020000390000000001000019122411ec0000040f000000000101041a0000ffff0110018f000004410000013d000004aa0120009c000003520000613d000004ab0120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b00000000010000190000000101006039000004410000013d000004b90420009c000003570000613d000004ba0220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000900000002001d000004c90220009c00000d5f0000213d0000002401100370000000000101043b000800000001001d000004c90110009c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d000000090100002900000000001004350000006c01000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000004cb0220019700000008022001af000000000021041b000000080100006b000003920000613d0000006d01000039000000000101041a000700000001001d000004e4010000410000000000100439000000080100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f0000000703000029000004c903300197000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400200043d0000002401200039000000000031043500000513010000410000000000120435000700000002001d00000004012000390000000902000029000000000021043500000000010004140000000802000029000000040220008c000001df0000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004e7011001c700000008020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a0330019700020000000103550000000102200190000009150000613d0000000701000029000004d80110009c00000cd20000213d0000000701000029000000400010043f000003920000013d0000049c0420009c0000035c0000613d0000049d0120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d0000007101000039000000000101041a000004c9011001980000054c0000c13d122410780000040f0000000001000019000012250001042e0000000001000416000000000101004b00000d5f0000c13d12240fed0000040f0000002002000039000000400300043d000900000003001d000000000223043612240f6b0000040f000000090400002900000000014100490000048a020000410000048a0310009c00000000010280190000048a0340009c000000000402801900000040024002100000006001100210000000000121019f000012250001042e0000000001000416000000000101004b00000d5f0000c13d0000000c01000039000004410000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000600220008c00000d5f0000413d0000000402100370000000000202043b000004c90320009c00000d5f0000213d0000002403100370000000000403043b000004c90340009c00000d5f0000213d0000004401100370000000000301043b0000003301000039000000000101041a000004c9011001970000000005000411000000000115004b000005420000c13d000000000102004b000006940000c13d000000040140008c000003920000613d000004fe01000041000000000203004b000000000100c019000007f90000c13d00000000020400191224121a0000040f000007fd0000013d0000000001000416000000000101004b00000d5f0000c13d0000003301000039000000000201041a000004c9052001970000000003000411000000000353004b000005420000c13d000004cb02200197000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd0400004100000000060000190000038f0000013d0000000001000416000000000101004b00000d5f0000c13d0000006601000039000003c40000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000402043b000004d80240009c00000d5f0000213d0000002302400039000000000232004b00000d5f0000813d0000000405400039000000000251034f000000000202043b000005140620009c00000cd20000813d000000bf06200039000000200700008a000000000676016f000004d80760009c00000cd20000213d000000400060043f000000800020043f00000000042400190000002404400039000000000334004b00000d5f0000213d0000002003500039000000000331034f0000001f0420018f0000000505200272000002790000613d00000000060000190000000507600210000000000873034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000002710000413d000000000604004b000002880000613d0000000505500210000000000353034f0000000304400210000000a005500039000000000605043300000000064601cf000000000646022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000363019f0000000000350435000000a00220003900000000000204350000002401100370000000000201043b0000ffff0120008c00000d5f0000213d0000008001000039000003db0000013d0000000001000416000000000101004b00000d5f0000c13d0000007601000039000003c40000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000c00220008c00000d5f0000413d0000000402100370000000000502043b000004c90250009c00000d5f0000213d0000002402100370000000000602043b000004c90260009c00000d5f0000213d0000004402100370000000000702043b0000006402100370000000000202043b000004d80420009c00000d5f0000213d00000023042000390000050908000041000000000934004b000000000900001900000000090880190000050904400197000000000a04004b0000000008008019000005090440009c000000000809c019000000000408004b00000d5f0000c13d0000000404200039000000000441034f000000000404043b000004d80840009c00000d5f0000213d00000024082000390000000002840019000000000232004b00000d5f0000213d0000008402100370000000000902043b000004d80290009c00000d5f0000213d0000002302900039000005090a000041000000000b32004b000000000b000019000000000b0a80190000050902200197000000000c02004b000000000a008019000005090220009c000000000a0bc01900000000020a004b00000d5f0000c13d0000000402900039000000000221034f000000000202043b000004d80a20009c00000d5f0000213d0000002409900039000000000a92001900000000033a004b00000d5f0000213d000000a403100370000000000303043b000000330a000039000000000a0a041a000004c90aa00197000000000b000411000000000aab004b000005420000c13d0000006e0a000039000000000b0a041a000004cb0bb00197000000000b5b019f0000000000ba041b0000006d0a000039000000000b0a041a000004cb0bb00197000000000b6b019f0000000000ba041b0000006f0a00003900000000007a041b0000006a0a000039000000000b0a041a000000010cb00190000000010db002700000007f0bd0018f000000000b0dc0190000001f0db0008c000000000d000019000000010d002039000000010dd0018f000000000cdc004b00000a6f0000c13d000000200cb0008c000003090000413d0000001f0c400039000000050cc002700000050c0dc000410000050c0c000041000000200e40008c000000000c0d80190000000000a004350000001f0bb00039000000050bb002700000050c0bb00041000000000dbc004b000003090000813d00000000000c041b000000010cc00039000000000dbc004b000003050000413d0000001f0b40008c00000a560000a13d0000000000a00435000000200b00008a000000000db401700000050c0b000041000000000c0000190000031b0000613d0000050c0b000041000000000c000019000000000e8c0019000000000ee1034f000000000e0e043b0000000000eb041b000000010bb00039000000200cc00039000000000edc004b000003130000413d000000000d4d004b000003270000813d000000030d400210000000f80dd0018f000000010e00008a000000000dde022f000000000ded013f000000000c8c0019000000000cc1034f000000000c0c043b000000000cdc016f0000000000cb041b000000010b400210000000010bb001bf00000a620000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000601043b000004c90160009c00000d5f0000213d0000003301000039000000000201041a000004c9052001970000000003000411000000000353004b000005420000c13d000000000306004b000005f10000c13d000004ce01000041000000800010043f0000002001000039000000840010043f0000000d01000039000000a40010043f000004cf01000041000005490000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000401100370000000000101043b000004c90110009c00000d5f0000213d000000800000043f000000a00000043f0000051501000041000012250001042e0000000001000416000000000101004b00000d5f0000c13d00000033010000390000043f0000013d0000000001000416000000000101004b00000d5f0000c13d00000071010000390000043f0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d000000000100041a0008ff00001001940000054e0000c13d000000ff02100190000006650000c13d000004d20110019700000101011001bf000000000010041b000005600000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000003302000039000000000202041a000004c9022001970000000003000411000000000223004b000005420000c13d0000002402100370000000000202043b0000000401100370000000000101043b0000006603000039000000000013041b0000006703000039000000000023041b000000800010043f000000a00020043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004ff011001c70000800d02000039000000010300003900000500040000411224121a0000040f000000010120019000000d5f0000613d0000000001000019000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b0000ffff0210008c00000d5f0000213d00000000001004350000007401000039000000200010043f00000040020000390000000001000019122411ec0000040f0000043f0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000904c90020019b000004c90220009c00000d5f0000213d0000002401100370000000000101043b000800000001001d0000ffff0110008c00000d5f0000213d0000007101000039000000000101041a000004c901100198000005fe0000c13d000004ef01000041000000730000013d0000000001000416000000000101004b00000d5f0000c13d0000006d010000390000043f0000013d0000000001000416000000000101004b00000d5f0000c13d0000006701000039000000000101041a000004410000013d0000000001000416000000000101004b00000d5f0000c13d00000510010000410000043f0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004d80210009c00000d5f0000213d0000000401100039000000000203001912240fa00000040f0000007502000039000000000202041a0000ffff0220018f122410fb0000040f000004c901100197000000400200043d00000000001204350000048a010000410000048a0320009c00000000020180190000004001200210000004ec011001c7000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d000000000100041a0008ff0000100194000005680000c13d000000ff02100190000006650000c13d000004d20110019700000101011001bf000000000010041b000005790000013d0000000001000416000000000101004b00000d5f0000c13d000000040130008a000000200110008c00000d5f0000413d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b00000000010000190000000101006039122410630000040f00000004010000390000000101100367000000000101043b0000007602000039000000000012041b0000000001000019000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d000000090100002900000000001004350000007301000039000800000001001d000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a0000ffff01100190000006e00000c13d000000400100043d000004d50200004100000000002104350000048a020000410000048a0310009c00000000010280190000004001100210000004d6011001c700001226000104300000000001000416000000000101004b00000d5f0000c13d0000006e01000039000000000101041a000004c901100197000000800010043f000004ca01000041000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000900000002001d0000002401100370000000000101043b000800000001001d000004c90110009c00000d5f0000213d0000000001000411000700000001001d00000000001004350000006801000039000600000001001d000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000000ff011001900000060a0000c13d000000400100043d00000044021000390000050b03000041000000000032043500000024021000390000000a030000390000066b0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004c90210009c00000d5f0000213d00000000001004350000006801000039000000200010043f00000040020000390000000001000019122411ec0000040f0000000202100039000000000202041a0000000103100039000000000303041a000000000101041a000000ff011001900000000001000019000000010100c039000000800010043f000000a00030043f000000c00020043f0000051101000041000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000900000002001d000004c90220009c00000d5f0000213d0000002401100370000000000101043b000800000001001d0000ffff0110008c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d000004e4010000410000000000100439000000090100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400400043d000000a401400039000000c0020000390000000000210435000004f0010000410000000000140435000000040140003900000000020004100000000000210435000000c40140003900000000000104350000008401400039000000000001043500000064014000390000000000010435000000440140003900000000000104350000002401400039000000000001043500000000010004140000000902000029000000040220008c000004dc0000613d0000048a020000410000048a0310009c00000000010280190000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004f1011001c70000000902000029000700000004001d1224121a0000040f0000000704000029000000000301001900000060033002700000048a0030019d0000048a0330019700020000000103550000000102200190000008980000613d0000000002040019000004d80140009c00000cd20000213d000000400020043f000004e4010000410000000000100439000000090100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400200043d000004f201000041000700000002001d000000000012043500000000010004140000000902000029000000040220008c0000050c0000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004d6011001c700000009020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a033001970002000000010355000000010220019000000a330000613d0000000701000029000004d80110009c00000cd20000213d0000000701000029000000400010043f000000090100002900000000001004350000007301000039000000200010043f0000048a0300004100000000010004140000048a0210009c0000000001038019000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000004d2022001970000000803000029000000000232019f000000000021041b00000000003004350000007401000039000000200010043f00000000010004140000048a0210009c0000048a01008041000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000004cb022001970000000905000029000000000252019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004f30400004100000008060000290000038f0000013d000004ce01000041000000800010043f0000002001000039000000840010043f0000000a01000039000000a40010043f0000051201000041000000c40010043f000004d0010000410000122600010430000004f401000041000000730000013d000004e4010000410000000000100439000000000100041000000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b000006650000c13d000000000100041a0007ff0000100194000006180000c13d000000ff02100190000006650000c13d000004d20110019700000101011001bf000000000010041b000006290000013d000004e4010000410000000000100439000000000100041000000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b000006650000c13d0000003301000039000000000201041a000004cb022001970000000906000029000000000262019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd0400004100000000050000191224121a0000040f000000010120019000000d5f0000613d000000080100006b000003920000c13d000004f501000041000000000200041a000000000112016f000000000010041b000003920000013d0000048a040000410000048a0310009c00000000010480190000048a03a0009c00000000040a40190000004003400210000000c001100210000000000131019f000004d6011001c700070000000a001d1224121f0000040f000000070a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000005b10000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000005a90000413d000000000705004b000005c00000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000006770000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000004d80310009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200140008c00000d5f0000413d00000000010a04330000ffff0210008c00000d5f0000213d0000000d0110008c000003920000c13d000004d90100004100000000001004390000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004da011001c70000800b020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000010110008c000003920000c13d000000400200043d000004db01000041000700000002001d000000000012043500000000010004140000000902000029000000040220008c0000094a0000c13d0000000004000031000000200140008c00000020040080390000097c0000013d000004cb02200197000000000262019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd040000410000038f0000013d000004e101000041000000800010043f0000000001000411000000840010043f00000000010004140000000902000029000000040320008c000006a00000c13d0000000004000031000000200140008c0000002004008039000006cb0000013d000000090100006b000003920000613d000000400a00043d000005010100004100000000001a043500000000010004140000000702000029000000040220008c000007610000c13d0000000003000031000000200130008c00000000040300190000002004008039000007930000013d000004e4010000410000000000100439000000000100041000000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b000006650000c13d0000003301000039000000000201041a000004cb022001970000000906000029000000000262019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd0400004100000000050000191224121a0000040f000000010120019000000d5f0000613d000000070100006b000006420000c13d000004f501000041000000000200041a000000000112016f000000000010041b000000400100043d000004f60210009c00000cd20000213d0000002402100039000004f70300004100000000003204350000004402100039000000000300041400000060040000390000000000420435000004f802000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000048a020000410000048a0430009c00000000030280190000048a0410009c00000000010280190000004001100210000000c002300210000000000121019f000004f9011001c700008006020000391224121a0000040f00000001022001900000086e0000613d000000000101043b000000000201004b000008ec0000c13d00000002010003670000000002000031000008730000013d000000400100043d0000004402100039000004fb030000410000000000320435000000240210003900000013030000390000000000320435000004ce0200004100000000002104350000000402100039000000200300003900000000003204350000048a020000410000048a0310009c00000000010280190000004001100210000004ea011001c70000122600010430000000400200043d0000001f0430018f0000000505300272000006840000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000067c0000413d000000000604004b000006930000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000004fc01000041000000800010043f000000840040043f000000a40030043f0000000001000414000000040320008c0000070c0000c13d0000000003000031000000200130008c00000000040300190000002004008039000007370000013d0000048a040000410000048a0310009c0000000001048019000000c001100210000004e2011001c71224121f0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000006b80000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000006b00000413d000000000705004b000006c70000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000007440000613d0000001f01400039000000600110018f00000080021001bf000700000002001d000000400020043f000000200240008c00000d5f0000413d000000800200043d000000000302004b0000000003000019000000010300c039000000000332004b00000d5f0000c13d000000000202004b0000085b0000c13d000004ee01000041000000070200002900000000001204350000004001200210000004d6011001c70000122600010430000000090100002900000000001004350000000801000029000000200010043f0000048a0300004100000000010004140000048a0210009c0000000001038019000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d0000007502000039000000000302041a000004d203300197000000000101043b000000000101041a0000ffff0110018f000000000113019f000000000012041b0000006b01000039000000000201041a000004cb022001970000000903000029000000000232019f000000000021041b000000400100043d000000000031043500000000020004140000048a0320009c0000048a0400004100000000020480190000048a0310009c00000000010480190000004001100210000000c002200210000000000112019f000004d3011001c70000800d020000390000000103000039000004d4040000410000038f0000013d0000048a030000410000048a0410009c0000000001038019000000c001100210000004fd011001c71224121a0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000007240000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000071c0000413d000000000705004b000007330000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000008210000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c00000d5f0000413d000000800100043d000000000201004b0000000002000019000000010200c039000000000121004b00000d5f0000c13d000003920000013d000000400200043d0000001f0430018f0000000505300272000007510000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000007490000413d000000000604004b000007600000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a020000410000048a0310009c00000000010280190000048a03a0009c00000000020a40190000004002200210000000c001100210000000000121019f000004d6011001c7000000070200002900050000000a001d1224121f0000040f000000050a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000007800000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000007780000413d000000000705004b0000078f0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f000200000001035500000001022001900000083e0000613d0000001f01400039000000600210018f00000000050a00190000000001a20019000000000221004b00000000020000190000000102004039000004d80410009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200130008c00000d5f0000413d0000000001050433000500000001001d000004c90110009c00000d5f0000213d000000050100006b000400090000002d000007af0000613d0000006d01000039000300000001001d000000000101041a000004c901100197000000050110006b000400090000002d000009e90000c13d0000006601000039000300000001001d000000000201041a0000000401200029000000000221004b0000000002000019000000010200403900000001022001900000086a0000c13d0000000302000029000000000012041b000000400200043d00000080032000390000000704000029000000000043043500000060032000390000000904000029000000000043043500000040032000390000000504000029000000000043043500000020032000390000000404000029000000000043043500000000001204350000048a0400004100000000010004140000048a0310009c00000000010480190000048a0320009c00000000020480190000004002200210000000c001100210000000000121019f00000503011001c70000800d02000039000000010300003900000504040000411224121a0000040f000000010120019000000d5f0000613d000000070100002900000000001004350000000601000029000000200010043f00000000010004140000048a0210009c0000048a01008041000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b0000000101100039000000000201041a000000040220002a0000086a0000413d000000000021041b000000080100006b000003920000613d000000400200043d000004d701000041000900000002001d000000000012043500000000010004140000000702000029000000040220008c00000c010000c13d0000000004000031000000200140008c000000200400803900000c330000013d000004cc011001c7000080090200003900000000050000191224121a0000040f0002000000010355000000000301001900000060033002700000048a0030019d0000048a033001970000000102200190000003920000c13d000000400200043d0000001f0430018f0000000505300272000008110000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008090000413d000000000604004b000008200000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f00000005053002720000082e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008260000413d000000000604004b0000083d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f00000005053002720000084b0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008430000413d000000000604004b0000085a0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000004d7020000410000000703000029000000000023043500000000020004140000000903000029000000040330008c000008b50000c13d0000000701100029000000400010043f000000070200002900000000020204330000ffff0320008c00000d5f0000213d0000ffff0320008c000009320000c13d0000050a010000410000000000100435000000110100003900000cd50000013d0002000000010355000000000201001900000060022002700000048a0020019d0000048a02200197000000400300043d0000001f0420018f0000000505200272000008800000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008780000413d000000000604004b0000088f0000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0430009c00000000030180190000048a0420009c000000000201801900000060012002100000004002300210000000000112019f0000122600010430000000400200043d0000001f0430018f0000000505300272000008a50000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000089d0000413d000000000604004b000008b40000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a010000410000048a0320009c0000000002018019000000c00120021000000007020000290000004002200210000000000121019f000004d6011001c700000009020000291224121f0000040f000000070a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000008d20000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000008ca0000413d000000000705004b000008e10000613d0000000506600210000000000761034f00000007066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000008f80000613d0000001f01400039000000600110018f0000000701100029000000400010043f000000200230008c00000d5f0000413d000008640000013d000004c9011001970000007202000039000000000302041a000004cb03300197000000000313019f000000000032041b0000007102000039000000000302041a000004cb03300197000000000113019f000000000012041b0000058c0000013d000000400200043d0000001f0430018f0000000505300272000009050000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008fd0000413d000000000604004b000009140000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f0000000505300272000009220000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000091a0000413d000000000604004b00000a4f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000000102200039000000080220006b00000a130000c13d000000080100002900000000001004350000007401000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000704c90010019c00000b0f0000c13d000000400100043d000004ed02000041000004340000013d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004d6011001c700000009020000291224121f0000040f000000070a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000009690000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000009610000413d000000000705004b000009780000613d0000000506600210000000000761034f00000007066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000a160000613d0000001f01400039000000600110018f0000000702100029000000000112004b00000000010000190000000101004039000600000002001d000004d80220009c00000cd20000213d000000010110019000000cd20000c13d0000000601000029000000400010043f000000200140008c00000d5f0000413d00000007010000290000000001010433000004c90210009c00000d5f0000213d000004dc0110009c000003920000c13d000004dd0100004100000006040000290000000001140436000700000001001d0000000401400039000000090200002900000000002104350000048a0100004100000000020004140000048a0320009c00000000020180190000048a0340009c00000000010440190000004001100210000000c002200210000000000112019f000004de011001c7000004dc020000411224121f0000040f000000060a000029000000000301001900000060033002700000048a03300197000000600430008c000000000403001900000060040080390000001f0540018f0000000506400272000009b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000009af0000413d000000000705004b000009c60000613d0000000506600210000000000761034f00000006066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000c730000613d0000001f01400039000000e00110018f0000000601100029000500000001001d000004d80110009c00000cd20000213d0000000501000029000000400010043f000000600130008c00000d5f0000413d00000006010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b00000d5f0000c13d000000000101004b00000cca0000c13d000004e001000041000000050300002900000000001304350000000401300039000000090200002900000000002104350000048a010000410000048a0230009c00000000030180190000004001300210000004de011001c70000122600010430000000050100002900000000001004350000006c01000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000004c902100198000400000000001d000007af0000613d0000000301000029000000000101041a000000400500043d000000240350003900000009040000290000000000430435000004c9011001970000004403500039000000000013043500000502010000410000000000150435000400000005001d0000000401500039000000050300002900000000003104350000000001000414000000040320008c00000ba20000c13d0000000003000031000000200130008c0000000004030019000000200400803900000bd30000013d000004e3020000410000000000210435000004380000013d000000400200043d0000001f0430018f000000050530027200000a230000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000a1b0000413d000000000604004b00000a320000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000a400000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000a380000413d000000000604004b00000a4f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0420009c000000000201801900000040012002100000006002300210000000000121019f0000122600010430000000000b04004b000000000b00001900000a5b0000613d000000000b81034f000000000b0b043b000000030c400210000000010d00008a000000000ccd022f000000000cdc013f000000000bcb016f000000010c400210000000000bcb019f0000000000ba041b000000690c000039000000000a0c041a000000010ba00190000000010da002700000007f0bd0018f000000000b0dc0190000001f0db0008c000000000d000019000000010d002039000000000ada013f000000010aa0019000000a730000613d0000050a010000410000000000100435000000220100003900000cd50000013d000000200ab0008c0009001f0020003d00000a860000413d000000090a000029000000050da002700000050d0ed000410000050d0d000041000000200f20008c000000000d0e80190000000000c004350000001f0bb00039000000050bb002700000050d0bb00041000000000ebd004b00000a860000813d00000000000d041b000000010dd00039000000000ebd004b00000a820000413d0000001f0b20008c000000000b91034f00000aa80000a13d0000000000c00435000000200d00008a000000000fd201700000050d0d000041000000000e00001900000a990000613d0000050d0d000041000000000e000019000000000a9e0019000000000aa1034f000000000a0a043b0000000000ad041b000000010dd00039000000200ee00039000000000afe004b00000a910000413d000000000a2f004b00000aa50000813d000000030a200210000000f80aa0018f000000010f00008a000000000aaf022f000000000afa013f00000000099e0019000000000991034f000000000909043b0000000009a9016f00000000009d041b000000010920021000000001099001bf00000ab30000013d000000000902004b000000000900001900000aac0000613d00000000090b043b000000030a200210000000010d00008a000000000aad022f000000000ada013f0000000009a9016f000000010a2002100000000009a9019f00000000009c041b0000007009000039000000000039041b000000800050043f000000a00060043f000000c00070043f000000c005000039000000e00050043f000000000181034f0000001f0540018f000001400040043f000000050640027200000ac90000613d00000000070000190000000508700210000000000981034f000000000909043b000001600880003900000000009804350000000107700039000000000867004b00000ac10000413d000000000705004b00000ad80000613d0000000506600210000000000161034f00000003055002100000016006600039000000000706043300000000075701cf000000000757022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f0000000000160435000001600140003900000000000104350000017f01400039000000200400008a000000000141016f000000800510008a000001000050043f0000001f0620018f0000000005210436000000050720027200000aec0000613d00000000080000190000000509800210000000000c95001900000000099b034f000000000909043b00000000009c04350000000108800039000000000978004b00000ae40000413d000000000806004b00000afb0000613d000000050770021000000000087b034f00000000077500190000000306600210000000000907043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f000000000067043500000000025200190000000000020435000001200030043f000000090240017f0000000001210019000000600110008a0000048a020000410000048a0310009c000000000102801900000000030004140000048a0430009c0000000003028019000000c0023002100000006001100210000000000121019f0000050e011001c70000800d0200003900000001030000390000050f040000410000038f0000013d0000007201000039000000000101041a000004e4020000410000000000200439000004c901100197000600000001001d00000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400200043d000000240120003900000007030000290000000000310435000004e6010000410000000000120435000700000002001d00000004012000390000000902000029000000000021043500000000010004140000000602000029000000040220008c00000b440000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004e7011001c700000006020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a033001970002000000010355000000010220019000000cad0000613d0000000701000029000004d80110009c00000cd20000213d0000000701000029000000400010043f000004e4010000410000000000100439000000090100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400300043d0000004401300039000004e8020000410000000000210435000000240130003900000002020000390000000000210435000004e9010000410000000001130436000600000001001d000700000003001d00000004013000390000002002000039000000000021043500000000010004140000000902000029000000040220008c00000b7f0000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004ea011001c700000009020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a033001970002000000010355000000010220019000000d020000613d0000000701000029000004d80110009c00000cd20000213d0000000703000029000000400030043f000000080100002900000006020000290000000000120435000000090100002900000000001304350000048a0400004100000000010004140000048a0210009c00000000010480190000048a0230009c00000000030480190000004002300210000000c001100210000000000121019f000004d1011001c70000800d020000390000000103000039000004eb040000411224121a0000040f000000010120019000000d5f0000613d000000400100043d000000090200002900000000002104350000048a0210009c0000048a010080410000004001100210000004ec011001c7000012250001042e000000000001042f0000048a030000410000048a0410009c000000000103801900000004050000290000048a0450009c00000000030540190000004003300210000000c001100210000000000131019f000004ea011001c71224121a0000040f000000040a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000bc00000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000bb80000413d000000000705004b00000bcf0000613d0000000506600210000000000761034f00000004066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000be40000613d0000001f01400039000000600210018f0000000401200029000000000221004b00000000020000190000000102004039000004d80410009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200130008c00000d5f0000413d00000004010000290000000001010433000400000001001d000007af0000013d000000400200043d0000001f0430018f000000050530027200000bf10000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000be90000413d000000000604004b00000c000000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a020000410000048a0310009c000000000102801900000009040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004d6011001c700000007020000291224121f0000040f000000090a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000c200000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c180000413d000000000705004b00000c2f0000613d0000000506600210000000000761034f00000009066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000c900000613d0000001f01400039000000600210018f0000000901200029000000000221004b00000000020000190000000102004039000004d80310009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200140008c00000d5f0000413d000000090100002900000000010104330000ffff0210008c00000d5f0000213d0000000d0110008c000003920000413d0000006e01000039000700000001001d000000000101041a000004c901100197000900000001001d00000000001004350000006c01000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000004c902100198000003920000613d0000006d01000039000000000101041a000000400500043d000000240350003900000505040000410000000000430435000004c9011001970000004403500039000000000013043500000502010000410000000000150435000600000005001d0000000401500039000000090300002900000000003104350000000001000414000000040320008c00000d1f0000c13d0000000003000031000000200130008c0000000004030019000000200400803900000d500000013d000000400200043d0000001f0430018f000000050530027200000c800000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000c780000413d000000000604004b00000c8f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000c9d0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000c950000413d000000000604004b00000cac0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000cba0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000cb20000413d000000000604004b00000cc90000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000060100002900000040011000390000000002010433000000070100002900000000010104330000000503000029000004df0330009c00000cd80000a13d0000050a0100004100000000001004350000004101000039000000040010043f000004de01000041000012260001043000000005040000290000006003400039000000400030043f0000004003400039000700000003001d000000000023043500000001020000390000000002240436000600000002001d0000000000120435000000090100002900000000001004350000000801000029000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000005030000290000000003030433000000000303004b000000010220c1bf000000000021041b000000060200002900000000020204330000000103100039000000000023041b000000020110003900000007020000290000000002020433000000000021041b000003920000013d000000400200043d0000001f0430018f000000050530027200000d0f0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000d070000413d000000000604004b00000d1e0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a030000410000048a0410009c000000000103801900000006050000290000048a0450009c00000000030540190000004003300210000000c001100210000000000131019f000004ea011001c71224121a0000040f000000060a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000d3d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000d350000413d000000000705004b00000d4c0000613d0000000506600210000000000761034f00000006066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000d610000613d0000001f01400039000000600110018f0000000605100029000000000215004b00000000020000190000000102004039000500000005001d000004d80550009c00000cd20000213d000000010220019000000cd20000c13d0000000502000029000000400020043f000000200230008c00000d7e0000813d00000000010000190000122600010430000000400200043d0000001f0430018f000000050530027200000d6e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000d660000413d000000000604004b00000d7d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d00000006020000290000000002020433000100000002001d0000000702000029000000000502041a00000506020000410000000506000029000000000026043500000004026000390000000006000410000200000006001d00000000006204350000000002000414000004c905500197000600000005001d000000040550008c00000dc30000613d0000048a010000410000048a0320009c000000000201801900000005040000290000048a0340009c00000000010440190000004001100210000000c002200210000000000112019f000004de011001c700000006020000291224121f0000040f000000050a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000dae0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000da60000413d000000000705004b00000dbd0000613d0000000506600210000000000761034f00000005066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000dde0000613d0000001f01400039000000600110018f0000000502100029000900000002001d000004d80220009c00000cd20000213d0000000902000029000000400020043f000000200240008c00000d5f0000413d00000005020000290000000002020433000500000002001d00000507020000410000000904000029000000000024043500000000020004140000000204000029000000040440008c00000dfb0000c13d0000000901100029000a00000000001d000004d80210009c00000cd20000213d000000400010043f00000000010004150000000a0110008a00000020011000c900000e390000013d000000400200043d0000001f0430018f000000050530027200000deb0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000de30000413d000000000604004b00000dfa0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a010000410000048a0320009c000000000201801900000009040000290000048a0340009c00000000010440190000004001100210000000c002200210000000000112019f000004d6011001c700000002020000291224121f0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000e190000613d000000000700001900000005087002100000000909800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000e110000413d000000000705004b00000e280000613d0000000506600210000000000761034f00000009066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000006405000039000b00000000001d000000010120019000000e400000613d0000001f01400039000000600110018f0000000901100029000004d80210009c00000cd20000213d000000400010043f00000000010004150000000b0110008a00000020011000c9000000200230008c00000d5f0000413d000000090200002900000000050204330000000501100270000000000105001f000000000105004b00000e400000c13d00000064050000390000006f01000039000000000401041a000000000104004b000000000100001900000e500000613d00000000125400a900000000414200d9000000000151004b0000086a0000c13d000000000102004b000000000100001900000e500000613d00000508412000d100000000422100d9000005080220009c0000086a0000c13d000000010200006b00000e560000c13d0000050a010000410000000000100435000000120100003900000cd50000013d000000050500002900000004425000b9000000000405004b00000e670000c13d00000509040000410000000406000029000000000506004b000000000500001900000000050440190000050906600197000000000706004b000000000400a019000005090660009c000000000405c019000000000404004b0000086a0000c13d00000e760000013d00000509040000410000000406000029000000000506004b000000000500001900000000050440190000050906600197000000000706004b000000000400a019000005090660009c000000000405c019000000000404004b0000086a0000c13d00000005542000fa000000040440006c0000086a0000c13d0000000304000029000000000404041a000000000504004b00000e520000613d0000000405000029000000010550021000000000654500d9000000030600008a000000000665004b0000086a0000213d000000646110011a00000001611000fa000000020550003900000000525200d900000000424200d9000000000421004b0000000001028019000000000201004b000003920000613d000000050210006b000003920000a13d0005000520100122000000050110006a000000400400043d00000024024000390000000000120435000004fc010000410000000000140435000900000004001d00000004014000390000000802000029000000000021043500000000010004140000000602000029000000040220008c00000e9e0000c13d000000200130008c0000000004030019000000200400803900000ecf0000013d0000048a020000410000048a0310009c000000000102801900000009040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004e7011001c700000006020000291224121a0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000ebc0000613d000000000700001900000005087002100000000909800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000eb40000413d000000000705004b00000ecb0000613d0000000506600210000000000761034f00000009066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000f310000613d0000001f01400039000000600110018f0000000905100029000000000215004b00000000020000190000000102004039000800000005001d000004d80550009c00000cd20000213d000000010220019000000cd20000c13d0000000802000029000000400020043f000000200230008c00000d5f0000413d00000009020000290000000002020433000000000302004b0000000003000019000000010300c039000000000232004b00000d5f0000c13d0000000702000029000000000202041a0000003303000039000000000303041a0000000806000029000000240560003900000005070000290000000000750435000004fc0500004100000000005604350000000405600039000004c90330019700000000003504350000000003000414000004c902200197000000040520008c00000f280000613d0000048a010000410000048a0430009c000000000301801900000008050000290000048a0450009c00000000010540190000004001100210000000c003300210000000000113019f000004e7011001c71224121a0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000f130000613d000000000700001900000005087002100000000809800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f0b0000413d000000000705004b00000f220000613d0000000506600210000000000761034f00000008066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000f4e0000613d0000001f01400039000000600110018f0000000801100029000004d80210009c00000cd20000213d000000400010043f000000200140008c00000d5f0000413d000000080100002900000000010104330000073e0000013d000000400200043d0000001f0430018f000000050530027200000f3e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000f360000413d000000000604004b00000f4d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000f5b0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000f530000413d000000000604004b00000f6a0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d00000000030104330000000002320436000000000403004b00000f770000613d000000000400001900000000054200190000002004400039000000000614001900000000060604330000000000650435000000000534004b00000f700000413d000000000132001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000000040110008a00000509020000410000003f0310008c000000000300001900000000030220190000050901100197000000000401004b0000000002008019000005090110009c000000000203c019000000000102004b00000f8b0000613d000000000001042d000000000100001900001226000104300000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000004d80310009c00000f9a0000213d000000010220019000000f9a0000c13d000000400010043f000000000001042d0000050a0100004100000000001004350000004101000039000000040010043f000004de01000041000012260001043000000000030100190000001f013000390000050904000041000000000521004b0000000005000019000000000504401900000509062001970000050901100197000000000761004b000000000400a019000000000161013f000005090110009c000000000405c019000000000104004b00000feb0000613d0000000106000367000000000136034f000000000401043b000005140140009c00000fe50000813d0000003f01400039000000200500008a000000000551016f000000400100043d0000000005510019000000000715004b00000000070000190000000107004039000004d80850009c00000fe50000213d000000010770019000000fe50000c13d000000400050043f000000000541043600000020033000390000000007430019000000000227004b00000feb0000213d000000000336034f0000001f0240018f000000050640027200000fd30000613d000000000700001900000005087002100000000009850019000000000883034f000000000808043b00000000008904350000000107700039000000000867004b00000fcb0000413d000000000702004b00000fe20000613d0000000506600210000000000363034f00000000066500190000000302200210000000000706043300000000072701cf000000000727022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000272019f000000000026043500000000024500190000000000020435000000000001042d0000050a0100004100000000001004350000004101000039000000040010043f000004de010000410000122600010430000000000100001900001226000104300000006a05000039000000000405041a000000010640019000000001014002700000007f0210018f000000000201c0190000001f0120008c00000000010000190000000101002039000000010110018f000000000116004b0000101e0000c13d000000400100043d0000000003210436000000000606004b0000100b0000613d0000000000500435000000000402004b0000000004000019000010110000613d0000050c0500004100000000040000190000000006430019000000000705041a000000000076043500000001055000390000002004400039000000000624004b000010030000413d000010110000013d000001000500008a000000000454016f0000000000430435000000000202004b000000200400003900000000040060190000003f02400039000000200300008a000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000004d80420009c000010220000213d0000000103300190000010220000c13d000000400020043f000000000001042d0000050a0100004100000000001004350000002201000039000010250000013d0000050a0100004100000000001004350000004101000039000000040010043f000004de0100004100001226000104300000006905000039000000000405041a000000010640019000000001014002700000007f0210018f000000000201c0190000001f0120008c00000000010000190000000101002039000000010110018f000000000116004b000010590000c13d000000400100043d0000000003210436000000000606004b000010460000613d0000000000500435000000000402004b00000000040000190000104c0000613d0000050d0500004100000000040000190000000006430019000000000705041a000000000076043500000001055000390000002004400039000000000624004b0000103e0000413d0000104c0000013d000001000500008a000000000454016f0000000000430435000000000202004b000000200400003900000000040060190000003f02400039000000200300008a000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000004d80420009c0000105d0000213d00000001033001900000105d0000c13d000000400020043f000000000001042d0000050a0100004100000000001004350000002201000039000010600000013d0000050a0100004100000000001004350000004101000039000000040010043f000004de010000410000122600010430000000000101004b000010660000613d000000000001042d000000400100043d00000044021000390000051203000041000000000032043500000024021000390000000a030000390000000000320435000004ce0200004100000000002104350000000402100039000000200300003900000000003204350000048a020000410000048a0310009c00000000010280190000004001100210000004ea011001c70000122600010430000000400100043d000005160210009c000010a40000813d0000002402100039000004f70300004100000000003204350000004402100039000000000300041400000060040000390000000000420435000004f802000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000048a020000410000048a0430009c00000000030280190000048a0410009c00000000010280190000004001100210000000c002300210000000000121019f000004f9011001c700008006020000391224121a0000040f0000000102200190000010aa0000613d000000000101043b000000000201004b000010b00000613d000004c9011001970000007202000039000000000302041a000004cb03300197000000000313019f000000000032041b0000007102000039000000000302041a000004cb03300197000000000113019f000000000012041b000000000001042d0000050a0100004100000000001004350000004101000039000000040010043f000004de0100004100001226000104300002000000010355000000000201001900000060022002700000048a0020019d0000048a02200197000010b20000013d00000002010003670000000002000031000000400300043d0000001f0420018f0000000505200272000010bf0000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010b70000413d000000000604004b000010ce0000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0420009c00000000020180190000048a0430009c000000000301801900000040013002100000006002200210000000000112019f00001226000104300000001f0420018f000000000323043600000001011003670000000505200272000010e50000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010dd0000413d000000000604004b000010f40000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000000000123001900000000000104350000001f01200039000000200200008a000000000121016f0000000001130019000000000001042d0004000000000002000400000001001d0000007101000039000000000101041a000304c90010019c000011980000613d0000ffff0120018f00000000001004350000007401000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f0000000102200190000011900000613d000000400200043d000000000101043b000000000101041a000004c903100198000011a10000613d000005160120009c0000000408000029000011920000813d000000c40420003900000060010000390000000000140435000000a40420003900000003050000290000000000540435000000840420003900000000003404350000002403200039000005170400004100000000004304350000000003080433000000e40420003900000000003404350000010404200039000000000503004b000011300000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000635004b000011290000413d000000000443001900000000000404350000001f03300039000000200400008a000000000343016f000000800430003900000064052000390000000006000414000000000045043500000044042000390000000000140435000004f8010000410000000000120435000000040120003900000000000104350000048a010000410000048a0420009c0000000002018019000000400220021000000104033000390000048a0430009c00000000030180190000006003300210000000000223019f0000048a0360009c0000000006018019000000c001600210000000000121019f000004cc011001c700008006020000391224121a0000040f0000000102200190000011a90000613d000000000101043b000000000201004b000011af0000613d000004c902100197000000400300043d000004df0130009c000011920000213d0000006001300039000000400010043f00000001010000390000000004130436000300000003001d0000004001300039000200000001001d0000000000010435000100000004001d0000000000040435000400000002001d00000000002004350000006801000039000000200010043f0000048a0300004100000000010004140000048a0210009c0000000001038019000000c001100210000004d1011001c700008010020000391224121f0000040f0000000102200190000011900000613d000000000101043b000000000201041a000001000300008a000000000232016f00000003030000290000000003030433000000000303004b000000010220c1bf000000000021041b000000010200002900000000020204330000000103100039000000000023041b000000020110003900000002020000290000000002020433000000000021041b00000000010004140000048a0210009c0000048a01008041000000c001100210000004cc011001c70000800d0200003900000003030000390000000005000411000005180400004100000004060000291224121a0000040f0000000101200190000011900000613d0000000401000029000000000001042d000000000100001900001226000104300000050a0100004100000000001004350000004101000039000000040010043f000004de010000410000122600010430000000400100043d000004ef0200004100000000002104350000048a020000410000048a0310009c00000000010280190000004001100210000004d6011001c70000122600010430000004d50100004100000000001204350000048a010000410000048a0320009c00000000020180190000004001200210000004d6011001c700001226000104300002000000010355000000000201001900000060022002700000048a0020019d0000048a02200197000011b10000013d00000002010003670000000002000031000000400300043d0000001f0420018f0000000505200272000011be0000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000011b60000413d000000000604004b000011cd0000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0420009c00000000020180190000048a0430009c000000000301801900000040013002100000006002200210000000000112019f0000122600010430000000000101004b000011d90000613d000000000001042d000000400100043d00000044021000390000050b03000041000000000032043500000024021000390000000a030000390000000000320435000004ce0200004100000000002104350000000402100039000000200300003900000000003204350000048a020000410000048a0310009c00000000010280190000004001100210000004ea011001c70000122600010430000000000001042f0000048a030000410000048a0410009c000000000103801900000040011002100000048a0420009c00000000020380190000006002200210000000000112019f00000000020004140000048a0420009c0000000002038019000000c002200210000000000112019f000004cc011001c700008010020000391224121f0000040f0000000102200190000012000000613d000000000101043b000000000001042d0000000001000019000012260001043000000000050100190000000000200439000000040130008c000012090000a13d0000000501400270000000000101003100000004001004430000048a0100004100000000020004140000048a0420009c00000000020180190000048a0430009c00000000030180190000006001300210000000c002200210000000000112019f00000519011001c700000000020500191224121f0000040f0000000102200190000012190000613d000000000101043b000000000001042d000000000001042f0000121d002104210000000102000039000000000001042d0000000002000019000000000001042d00001222002104230000000102000039000000000001042d0000000002000019000000000001042d0000122400000432000012250001042e0000122600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000111e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000c4d66de700000000000000000000000000000000000000000000000000000000cec4105100000000000000000000000000000000000000000000000000000000ef67fde500000000000000000000000000000000000000000000000000000000ef67fde600000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f832899100000000000000000000000000000000000000000000000000000000cec4105200000000000000000000000000000000000000000000000000000000d6e9e80300000000000000000000000000000000000000000000000000000000ed9674bd00000000000000000000000000000000000000000000000000000000caeee3a200000000000000000000000000000000000000000000000000000000caeee3a300000000000000000000000000000000000000000000000000000000ccf5464800000000000000000000000000000000000000000000000000000000cd93b53200000000000000000000000000000000000000000000000000000000c4d66de800000000000000000000000000000000000000000000000000000000c7d7d0c900000000000000000000000000000000000000000000000000000000a082eb0d00000000000000000000000000000000000000000000000000000000b0ca0c8200000000000000000000000000000000000000000000000000000000b0ca0c8300000000000000000000000000000000000000000000000000000000b0e21e8a00000000000000000000000000000000000000000000000000000000ba5ea0d500000000000000000000000000000000000000000000000000000000a082eb0e00000000000000000000000000000000000000000000000000000000a64b6e5f00000000000000000000000000000000000000000000000000000000a998e9fb00000000000000000000000000000000000000000000000000000000939d9f1e00000000000000000000000000000000000000000000000000000000939d9f1f00000000000000000000000000000000000000000000000000000000963a9478000000000000000000000000000000000000000000000000000000009a8a0592000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000008f32d59b000000000000000000000000000000000000000000000000000000005979e754000000000000000000000000000000000000000000000000000000006e9960c200000000000000000000000000000000000000000000000000000000787dce3c00000000000000000000000000000000000000000000000000000000787dce3d000000000000000000000000000000000000000000000000000000007d8fb641000000000000000000000000000000000000000000000000000000007ff94bb2000000000000000000000000000000000000000000000000000000006e9960c300000000000000000000000000000000000000000000000000000000715018a600000000000000000000000000000000000000000000000000000000743bbc2f000000000000000000000000000000000000000000000000000000005de9a136000000000000000000000000000000000000000000000000000000005de9a13700000000000000000000000000000000000000000000000000000000666018a5000000000000000000000000000000000000000000000000000000006bced5a2000000000000000000000000000000000000000000000000000000005979e755000000000000000000000000000000000000000000000000000000005c38eb3a000000000000000000000000000000000000000000000000000000003fc8cef2000000000000000000000000000000000000000000000000000000004452c2b1000000000000000000000000000000000000000000000000000000004452c2b200000000000000000000000000000000000000000000000000000000487a8a76000000000000000000000000000000000000000000000000000000004a387bef000000000000000000000000000000000000000000000000000000003fc8cef3000000000000000000000000000000000000000000000000000000004220bd460000000000000000000000000000000000000000000000000000000042d9210600000000000000000000000000000000000000000000000000000000262d0a8400000000000000000000000000000000000000000000000000000000262d0a850000000000000000000000000000000000000000000000000000000035a750de0000000000000000000000000000000000000000000000000000000036524663000000000000000000000000000000000000000000000000000000000cb175e30000000000000000000000000000000000000000000000000000000025772ad9000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000800000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e008c379a000000000000000000000000000000000000000000000000000000000494e56414c49445f4f574e45520000000000000000000000000000000000000000000000000000000000000000000000000000640000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000002000000000000000000000000000000000000200000000000000000000000004fa58418e580e78539e8d3d8d17d94dbaca0927533953c8248f313e6f8927c21adf22763000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000d1bbd49c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff9a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000000f15023b000000000000000000000000000000000000000000000000000000000000000000000000000000003d5409cce1d45233de1d4ebdee74b8e004abdd135de9a137000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f822f134e00000000000000000000000000000000000000000000000000000000aae4b8f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000037bb0061000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000099a88ec400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000030780000000000000000000000000000000000000000000000000000000000008932a90d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000005e7b70a9e6f0b4c7cf2657cf563ce85eed3aebb7731396118d01a195d218fd5e0000000000000000000000000000000000000020000000000000000000000000d6a7ab8e00000000000000000000000000000000000000000000000000000000a2cfffa00000000000000000000000000000000000000000000000000000000082b5cfcc000000000000000000000000000000000000000000000000000000006eadde430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4000000000000000000000000f0ba604000000000000000000000000000000000000000000000000000000000d36d021c4aa145e30eadc73e34284101030d688b9eb9413a4dc3af40ab1d4748feb51c9f00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff000000000000000000000000000000000000000000000000ffffffffffffff7b010000ed89a9abe7f27c522a89d1c165b742f032da6ae4b42f62bfda768e4bf99c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd02000000000000000000000000000000000000840000000000000000000000006ef25c3ab4fb9cba75ff1971e3f261040c39b067df172dd5185087fc5553a5b6414c52454144595f494e495449414c495a454400000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000080000000000000000000000000000008fc00000000000000000000000000000000000000000000000002000000000000000000000000000000000000400000008000000000000000007b2ce3c83b45f79993ff2cbf5651caff2dfe04010b4846e03066b84e3e4059bb9d76ea5800000000000000000000000000000000000000000000000000000000c1e553e70000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000a00000000000000000000000003b50eb9d9b4a8db204f2928c9e572c2865b0d02803493ccb6aa256848323ebb70000000000000000000000000000000000000000000000000de0b6b3a764000070a0823100000000000000000000000000000000000000000000000000000000ba5ea0d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c6b935b8bbd4000080000000000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000004f4e4c595f4c4f434b5300000000000000000000000000000000000000000000116fea137db6e131133e7f2bab296045d8f41cc5607279db17b218cab0929a517fb4302e8e91f9110a6554c2c0a24601252c2a42c2220ca988efcfe3999143080200000000000000000000000000000000000000000000800000000000000000a14230a1687e9bb8cdc0f3931d27c3a806e88c1c2235ba7756d6911feb35be67b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000000000000000000600000008000000000000000004f4e4c595f4f574e455200000000000000000000000000000000000000000000c640752d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7c010001cfcb8d4a4136647d024e21a6ed4207383d3ffddf7dfb8aac303d71d94901017ed19df0c7f8acc436147b234b09664a9fb4797b4fa3fb9e599c2eb67be7020000020000000000000000000000000000000000000000000000000000000089f31d61167d6a7c673447a52c2d21e390b78f5d0de875ce7fd82f55a99efe05"},"methodIdentifiers":{"__initializeOwnable(address)":"b0ca0c83","addLockTemplate(address,uint16)":"caeee3a3","chainId()":"9a8a0592","computeAvailableDiscountFor(address,uint256)":"0cb175e3","configUnlock(address,address,uint256,string,string,uint256)":"7d8fb641","createLock(uint256,address,uint256,uint256,string,bytes12)":"42d92106","createUpgradeableLock(bytes)":"4452c2b2","createUpgradeableLockAtVersion(bytes,uint16)":"487a8a76","estimatedGasForPurchase()":"743bbc2f","getAdmin()":"6e9960c3","getGlobalBaseTokenURI()":"7ff94bb2","getGlobalTokenSymbol()":"35a750de","globalBaseTokenURI()":"a998e9fb","globalTokenSymbol()":"cec41052","grossNetworkProduct()":"d6e9e803","initialize(address)":"c4d66de8","initializeProxyAdmin()":"c7d7d0c9","isOwner()":"8f32d59b","locks(address)":"5de9a137","networkBaseFee()":"ba5ea0d5","owner()":"8da5cb5b","postLockUpgrade()":"ed9674bd","protocolFee()":"b0e21e8a","proxyAdminAddress()":"5979e755","publicLockAddress()":"f8328991","publicLockImpls(uint16)":"666018a5","publicLockLatestVersion()":"cd93b532","publicLockVersions(address)":"25772ad9","recordConsumedDiscount(uint256,uint256)":"36524663","recordKeyPurchase(uint256,address)":"939d9f1f","removeLock(address)":"4a387bef","renounceOwnership()":"715018a6","resetTrackedValue(uint256,uint256)":"963a9478","setLockTemplate(address)":"ef67fde6","setOracle(address,address)":"5c38eb3a","setProtocolFee(uint256)":"787dce3d","totalDiscountGranted()":"a082eb0e","transferOwnership(address)":"f2fde38b","transferTokens(address,address,uint256)":"a64b6e5f","udt()":"262d0a85","uniswapOracles(address)":"6bced5a2","unlockVersion()":"4220bd46","upgradeLock(address,uint16)":"ccf54648","weth()":"3fc8cef3"}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"Unlock_3993\" {\n code {\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"Unlock_3993_deployed\")\n codecopy(_1, dataoffset(\"Unlock_3993_deployed\"), _2)\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"Unlock_3993_deployed\" {\n code {\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _1 := memoryguard(0x80)\n let _2 := 64\n mstore(_2, _1)\n let _3 := 4\n if iszero(lt(calldatasize(), _3))\n {\n let _4 := 0\n switch shr(224, calldataload(_4))\n case 0x0cb175e3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n pop(abi_decode_address_27006())\n mstore(_1, _4)\n mstore(add(_1, 32), _4)\n return(_1, _2)\n }\n case 0x25772ad9 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n mstore(_4, and(abi_decode_address_27006(), sub(shl(160, 1), 1)))\n mstore(32, /** @src 0:90800:90819 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned := and(sload(keccak256(_4, _2)), 0xffff)\n let memPos := mload(_2)\n mstore(memPos, cleaned)\n return(memPos, 32)\n }\n case 0x262d0a85 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value := and(sload(/** @src 0:88242:88260 \"address public udt\" */ 110), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_1 := mload(_2)\n mstore(memPos_1, value)\n return(memPos_1, 32)\n }\n case 0x35a750de {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let converted := copy_array_from_storage_to_memory_string()\n let memPos_2 := mload(_2)\n mstore(memPos_2, 32)\n return(memPos_2, sub(abi_encode_string(converted, add(memPos_2, 32)), memPos_2))\n }\n case 0x36524663 {\n if callvalue() { revert(_4, _4) }\n let param, param_1 := abi_decode_uint256t_uint256(calldatasize())\n mstore(_4, /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(0x20, /** @src 0:87274:87279 \"locks\" */ 0x68)\n /// @src 0:87266:87315 \"require(locks[msg.sender].deployed, \\\"ONLY_LOCKS\\\")\"\n require_helper_stringliteral_2f7a(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(keccak256(_4, _2)), 0xff))\n return(_4, _4)\n }\n case 0x3fc8cef3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_1 := and(sload(/** @src 0:88158:88177 \"address public weth\" */ 109), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_3 := mload(_2)\n mstore(memPos_3, value_1)\n return(memPos_3, 32)\n }\n case 0x4220bd46 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let memPos_4 := mload(_2)\n mstore(memPos_4, /** @src 0:101468:101470 \"12\" */ 0x0c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(memPos_4, 32)\n }\n case 0x42d92106 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 192) { revert(_4, _4) }\n let value1 := abi_decode_address()\n let offset := calldataload(132)\n if gt(offset, 0xffffffffffffffff) { revert(_4, _4) }\n let value4, value5 := abi_decode_string_calldata(add(_3, offset), calldatasize())\n let value_2 := calldataload(164)\n if iszero(eq(value_2, and(value_2, shl(160, 0xffffffffffffffffffffffff)))) { revert(_4, _4) }\n /// @src 0:92718:92939 \"abi.encodeWithSignature(...\"\n let expr_mpos := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:92718:92939 \"abi.encodeWithSignature(...\"\n mstore(add(expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ shl(224, 0x6eadde43))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ add(expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), /** @src 0:92817:92827 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), calldataload(_3))\n let _5 := sub(shl(160, 1), 1)\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100), and(value1, _5))\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 132), calldataload(68))\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 164), calldataload(100))\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 196), 192)\n /// @src 0:92718:92939 \"abi.encodeWithSignature(...\"\n let _6 := sub(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ abi_encode_string_calldata(value4, value5, add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 228)), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos)\n mstore(expr_mpos, add(_6, not(31)))\n finalize_allocation(expr_mpos, _6)\n /// @src 0:92946:92980 \"return createUpgradeableLock(data)\"\n let var := /** @src 0:93665:93744 \"createUpgradeableLockAtVersion(...\" */ fun_createUpgradeableLockAtVersion(/** @src 0:92953:92980 \"createUpgradeableLock(data)\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:93715:93738 \"publicLockLatestVersion\" */ 0x75), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff))\n let memPos_5 := mload(_2)\n mstore(memPos_5, and(var, _5))\n return(memPos_5, 32)\n }\n case 0x4452c2b2 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let offset_1 := calldataload(_3)\n if gt(offset_1, 0xffffffffffffffff) { revert(_4, _4) }\n let value0 := abi_decode_bytes(add(_3, offset_1), calldatasize())\n /// @src 0:93750:93764 \"return newLock\"\n let var_1 := /** @src 0:93665:93744 \"createUpgradeableLockAtVersion(...\" */ fun_createUpgradeableLockAtVersion(value0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:93715:93738 \"publicLockLatestVersion\" */ 0x75), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff))\n let memPos_6 := mload(_2)\n mstore(memPos_6, and(var_1, sub(shl(160, 1), 1)))\n return(memPos_6, 32)\n }\n case 0x487a8a76 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let offset_2 := calldataload(_3)\n if gt(offset_2, 0xffffffffffffffff) { revert(_4, _4) }\n let value0_1 := abi_decode_bytes(add(_3, offset_2), calldatasize())\n let ret := fun_createUpgradeableLockAtVersion(value0_1, abi_decode_uint16())\n let memPos_7 := mload(_2)\n mstore(memPos_7, and(ret, sub(shl(160, 1), 1)))\n return(memPos_7, 32)\n }\n case 0x4a387bef {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_2 := abi_decode_address_27006()\n let _7 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _7)))\n mstore(_4, and(value0_2, _7))\n mstore(32, /** @src 0:106247:106252 \"locks\" */ 0x68)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot := keccak256(_4, _2)\n sstore(dataSlot, _4)\n sstore(add(dataSlot, 1), _4)\n sstore(add(dataSlot, 2), _4)\n return(_4, _4)\n }\n case 0x5979e755 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_3 := and(sload(/** @src 0:88488:88520 \"address public proxyAdminAddress\" */ 113), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_8 := mload(_2)\n mstore(memPos_8, value_3)\n return(memPos_8, 32)\n }\n case 0x5c38eb3a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_3 := abi_decode_address_27006()\n let value1_1 := abi_decode_address()\n let _8 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _8)))\n let _9 := and(/** @src 0:103157:103189 \"IUniswapOracleV3(_oracleAddress)\" */ value1_1, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _8)\n let _10 := and(value0_3, _8)\n mstore(_4, _10)\n mstore(32, /** @src 0:103125:103139 \"uniswapOracles\" */ 0x6c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _11 := keccak256(_4, _2)\n sstore(_11, or(and(sload(_11), shl(160, 0xffffffffffffffffffffffff)), _9))\n /// @src 0:103195:103304 \"if (_oracleAddress != address(0)) {...\"\n if /** @src 0:103199:103227 \"_oracleAddress != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _9))\n /// @src 0:103195:103304 \"if (_oracleAddress != address(0)) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_1 := and(sload(/** @src 0:103292:103296 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _8)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n if iszero(extcodesize(_9))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n let _12 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n mstore(_12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xc640752d))\n mstore(/** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ add(_12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _10)\n mstore(add(/** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ _12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), cleaned_1)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n let _13 := call(gas(), _9, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ _12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68, /** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ _12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n if iszero(_13)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos := mload(_2)\n returndatacopy(pos, _4, returndatasize())\n revert(pos, returndatasize())\n }\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n if _13\n {\n finalize_allocation_27015(_12)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n _4 := _4\n }\n }\n return(_4, _4)\n }\n case 0x5de9a137 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n mstore(_4, and(abi_decode_address_27006(), sub(shl(160, 1), 1)))\n mstore(32, /** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ 104)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot_1 := keccak256(_4, _2)\n let value_4 := and(sload(/** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ dataSlot_1), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xff)\n let _14 := sload(/** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ add(dataSlot_1, 1))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _15 := sload(/** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ add(dataSlot_1, 2))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_9 := mload(_2)\n mstore(memPos_9, iszero(iszero(value_4)))\n mstore(add(memPos_9, 32), _14)\n mstore(add(memPos_9, _2), _15)\n return(memPos_9, 96)\n }\n case 0x666018a5 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value_5 := calldataload(_3)\n let _16 := and(value_5, 0xffff)\n if iszero(eq(value_5, _16)) { revert(0, 0) }\n mstore(_4, _16)\n mstore(32, /** @src 0:91012:91028 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_2 := and(sload(keccak256(_4, _2)), sub(shl(160, 1), 1))\n let memPos_10 := mload(_2)\n mstore(memPos_10, cleaned_2)\n return(memPos_10, 32)\n }\n case 0x6bced5a2 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _17 := sub(shl(160, 1), 1)\n mstore(_4, and(abi_decode_address_27006(), _17))\n mstore(32, /** @src 0:88038:88096 \"mapping(address => IUniswapOracleV3) public uniswapOracles\" */ 108)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let value_6 := and(sload(keccak256(_4, _2)), _17)\n let memPos_11 := mload(_2)\n mstore(memPos_11, value_6)\n return(memPos_11, 32)\n }\n case 0x6e9960c3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let cleaned_3 := and(sload(/** @src 0:104217:104283 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_12 := mload(_2)\n mstore(memPos_12, cleaned_3)\n return(memPos_12, 32)\n }\n case 0x715018a6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _18 := sload(/** @src 0:84232:84238 \"_owner\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _19 := and(_18, sub(shl(160, 1), 1))\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _19))\n sstore(/** @src 0:84232:84238 \"_owner\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_18, shl(160, 0xffffffffffffffffffffffff)))\n /// @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0, 0, /** @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, _19, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0)\n return(_4, _4)\n }\n case 0x743bbc2f {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _20 := sload(/** @src 0:88322:88357 \"uint public estimatedGasForPurchase\" */ 111)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_13 := mload(_2)\n mstore(memPos_13, _20)\n return(memPos_13, 32)\n }\n case 0x787dce3d {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))))\n sstore(/** @src 0:101641:101667 \"protocolFee = _protocolFee\" */ 0x76, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ calldataload(_3))\n return(_4, _4)\n }\n case 0x7d8fb641 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 192) { revert(_4, _4) }\n let value0_4 := abi_decode_address_27006()\n let value1_2 := abi_decode_address()\n let value_7 := calldataload(68)\n let offset_3 := calldataload(100)\n let _21 := 0xffffffffffffffff\n if gt(offset_3, _21) { revert(_4, _4) }\n let value3, value4_1 := abi_decode_string_calldata(add(_3, offset_3), calldatasize())\n let offset_4 := calldataload(132)\n if gt(offset_4, _21) { revert(_4, _4) }\n let value5_1, value6 := abi_decode_string_calldata(add(_3, offset_4), calldatasize())\n let value_8 := calldataload(164)\n let _22 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _22)))\n let _23 := and(value0_4, _22)\n let _24 := shl(160, 0xffffffffffffffffffffffff)\n sstore(/** @src 0:101949:101959 \"udt = _udt\" */ 0x6e, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:101949:101959 \"udt = _udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _24), _23))\n let _25 := and(value1_2, _22)\n sstore(/** @src 0:101965:101977 \"weth = _weth\" */ 0x6d, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:101965:101977 \"weth = _weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _24), _25))\n sstore(/** @src 0:101983:102033 \"estimatedGasForPurchase = _estimatedGasForPurchase\" */ 0x6f, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_7)\n if gt(value4_1, _21)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x41)\n revert(_4, 36)\n }\n let _26 := extract_byte_array_length(sload(/** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _27 := 31\n if gt(_26, _27)\n {\n mstore(_4, /** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _28 := 7887053984229333715756243741084912719879447020693965939365260134600710199889\n let deleteStart := add(_28, shr(5, add(value4_1, _27)))\n if lt(value4_1, 32) { deleteStart := _28 }\n let _29 := add(_28, shr(5, add(_26, _27)))\n let start := deleteStart\n for { } lt(start, _29) { start := add(start, 1) }\n { sstore(start, _4) }\n }\n let srcOffset := _4\n switch gt(value4_1, _27)\n case 1 {\n let loopEnd := and(value4_1, /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, /** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dstPtr := 7887053984229333715756243741084912719879447020693965939365260134600710199889\n let i := _4\n for { } lt(i, loopEnd) { i := add(i, 32) }\n {\n sstore(dstPtr, calldataload(add(value3, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 32)\n }\n if lt(loopEnd, value4_1)\n {\n sstore(dstPtr, and(calldataload(add(value3, srcOffset)), not(shr(and(shl(3, value4_1), 248), not(0)))))\n }\n sstore(/** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ add(shl(1, value4_1), 1))\n }\n default {\n let value_9 := _4\n if value4_1\n {\n value_9 := calldataload(add(value3, srcOffset))\n }\n sstore(/** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(value_9, not(shr(shl(3, value4_1), not(0)))), shl(1, value4_1)))\n }\n if gt(value6, _21)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x41)\n revert(_4, 36)\n }\n let _30 := extract_byte_array_length(sload(/** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if gt(_30, _27)\n {\n mstore(_4, /** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _31 := 57762096780731528330405058414938765910932439953606620384872163540286326260488\n let deleteStart_1 := add(_31, shr(5, add(value6, _27)))\n if lt(value6, 32) { deleteStart_1 := _31 }\n let _32 := add(_31, shr(5, add(_30, _27)))\n let start_1 := deleteStart_1\n for { } lt(start_1, _32) { start_1 := add(start_1, 1) }\n { sstore(start_1, _4) }\n }\n let srcOffset_1 := _4\n switch gt(value6, _27)\n case 1 {\n let loopEnd_1 := and(value6, /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, /** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dstPtr_1 := 57762096780731528330405058414938765910932439953606620384872163540286326260488\n let i_1 := _4\n for { } lt(i_1, loopEnd_1) { i_1 := add(i_1, 32) }\n {\n sstore(dstPtr_1, calldataload(add(value5_1, srcOffset_1)))\n dstPtr_1 := add(dstPtr_1, 1)\n srcOffset_1 := add(srcOffset_1, 32)\n }\n if lt(loopEnd_1, value6)\n {\n sstore(dstPtr_1, and(calldataload(add(value5_1, srcOffset_1)), not(shr(and(shl(3, value6), 248), not(0)))))\n }\n sstore(/** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ add(shl(1, value6), 1))\n }\n default {\n let value_10 := _4\n if value6\n {\n value_10 := calldataload(add(value5_1, srcOffset_1))\n }\n sstore(/** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(value_10, not(shr(shl(3, value6), not(0)))), shl(1, value6)))\n }\n sstore(/** @src 0:102105:102123 \"chainId = _chainId\" */ 0x70, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_8)\n /// @src 0:102135:102253 \"ConfigUnlock(...\"\n let _33 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_33, _23)\n mstore(add(_33, 32), _25)\n mstore(add(_33, _2), value_7)\n mstore(add(_33, 96), 192)\n let tail := abi_encode_string_calldata(value3, value4_1, add(_33, 192))\n mstore(add(_33, 128), sub(tail, _33))\n let tail_1 := abi_encode_string_calldata(value5_1, value6, tail)\n mstore(add(_33, 160), value_8)\n /// @src 0:102135:102253 \"ConfigUnlock(...\"\n log1(_33, sub(tail_1, _33), 0xa14230a1687e9bb8cdc0f3931d27c3a806e88c1c2235ba7756d6911feb35be67)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0x7ff94bb2 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let converted_1 := copy_array_from_storage_to_memory_string_27022()\n let memPos_14 := mload(_2)\n mstore(memPos_14, 32)\n return(memPos_14, sub(abi_encode_string(converted_1, add(memPos_14, 32)), memPos_14))\n }\n case 0x8da5cb5b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let cleaned_4 := and(sload(/** @src 0:83920:83926 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_15 := mload(_2)\n mstore(memPos_15, cleaned_4)\n return(memPos_15, 32)\n }\n case 0x8f32d59b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n /// @src 0:84209:84238 \"return _msgSender() == _owner\"\n let var_2 := /** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1)))\n let memPos_16 := mload(_2)\n mstore(memPos_16, var_2)\n return(memPos_16, 32)\n }\n case 0x939d9f1f {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value_11 := calldataload(_3)\n let value1_3 := abi_decode_address()\n mstore(_4, /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _34 := 32\n mstore(_34, /** @src 0:87274:87279 \"locks\" */ 0x68)\n /// @src 0:87266:87315 \"require(locks[msg.sender].deployed, \\\"ONLY_LOCKS\\\")\"\n require_helper_stringliteral_2f7a(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(keccak256(_4, _2)), 0xff))\n /// @src 0:97516:100582 \"if (_value > 0) {...\"\n if /** @src 0:97520:97530 \"_value > 0\" */ iszero(iszero(value_11))\n /// @src 0:97516:100582 \"if (_value > 0) {...\"\n {\n /// @src 0:97540:97555 \"uint valueInETH\"\n let var_valueInETH := _4\n var_valueInETH := _4\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n let _35 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n mstore(_35, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(227, 0x13aedd4b))\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n let _36 := staticcall(gas(), /** @src 0:87280:87290 \"msg.sender\" */ caller(), /** @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\" */ _35, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\" */ _35, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n if iszero(_36)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_1 := mload(_2)\n returndatacopy(pos_1, _4, returndatasize())\n revert(pos_1, returndatasize())\n }\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n let expr := _4\n if _36\n {\n let _37 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\" */ returndatasize()) { _37 := returndatasize() }\n finalize_allocation(_35, _37)\n expr := abi_decode_address_fromMemory(_35, add(_35, _37))\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _38 := sub(shl(160, 1), 1)\n /// @src 0:97636:97662 \"tokenAddress != address(0)\"\n let _39 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:97636:97662 \"tokenAddress != address(0)\" */ expr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:97636:97686 \"tokenAddress != address(0) && tokenAddress != weth\"\n let expr_1 := /** @src 0:97636:97662 \"tokenAddress != address(0)\" */ iszero(iszero(_39))\n /// @src 0:97636:97686 \"tokenAddress != address(0) && tokenAddress != weth\"\n if expr_1\n {\n expr_1 := /** @src 0:97666:97686 \"tokenAddress != weth\" */ iszero(eq(_39, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:97682:97686 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)))\n }\n /// @src 0:97632:98082 \"if (tokenAddress != address(0) && tokenAddress != weth) {...\"\n switch expr_1\n case 0 {\n /// @src 0:98054:98073 \"valueInETH = _value\"\n var_valueInETH := value_11\n }\n default /// @src 0:97632:98082 \"if (tokenAddress != address(0) && tokenAddress != weth) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, _39)\n mstore(_34, /** @src 0:97799:97813 \"uniswapOracles\" */ 0x6c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_5 := and(sload(keccak256(_4, _2)), _38)\n /// @src 0:97837:97959 \"if (address(oracle) != address(0)) {...\"\n if /** @src 0:97841:97870 \"address(oracle) != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_5))\n /// @src 0:97837:97959 \"if (address(oracle) != address(0)) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_6 := and(sload(/** @src 0:97943:97947 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n let _40 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n mstore(_40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xc1e553e7))\n mstore(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ add(_40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _39)\n mstore(add(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), value_11)\n mstore(add(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), cleaned_6)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n let _41 := call(gas(), cleaned_5, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100, /** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n if iszero(_41)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_2 := mload(_2)\n returndatacopy(pos_2, _4, returndatasize())\n revert(pos_2, returndatasize())\n }\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n let expr_2 := _4\n if _41\n {\n let _42 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ returndatasize()) { _42 := returndatasize() }\n finalize_allocation(_40, _42)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ add(_40, _42), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _40), _34) { revert(0, 0) }\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n expr_2 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_40)\n }\n /// @src 0:97884:97948 \"valueInETH = oracle.updateAndConsult(tokenAddress, _value, weth)\"\n var_valueInETH := expr_2\n }\n }\n /// @src 0:100858:100891 \"grossNetworkProduct + _valueInETH\"\n let _43 := checked_add_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sload(/** @src 0:100858:100877 \"grossNetworkProduct\" */ 0x66), /** @src 0:100858:100891 \"grossNetworkProduct + _valueInETH\" */ var_valueInETH)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:100858:100877 \"grossNetworkProduct\" */ 0x66, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _43)\n /// @src 0:100903:101013 \"GNPChanged(...\"\n let _44 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_44, _43)\n mstore(add(_44, _34), var_valueInETH)\n mstore(add(_44, _2), _39)\n mstore(add(_44, 96), value_11)\n mstore(add(_44, 128), /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:100903:101013 \"GNPChanged(...\"\n log1(_44, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 160, /** @src 0:100903:101013 \"GNPChanged(...\" */ 0x3b50eb9d9b4a8db204f2928c9e572c2865b0d02803493ccb6aa256848323ebb7)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_34, /** @src 0:87274:87279 \"locks\" */ 0x68)\n /// @src 0:98295:98323 \"locks[msg.sender].totalSales\"\n let _45 := add(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ keccak256(_4, _2), 1)\n sstore(_45, /** @src 0:98295:98337 \"locks[msg.sender].totalSales += valueInETH\" */ checked_add_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sload(/** @src 0:98295:98337 \"locks[msg.sender].totalSales += valueInETH\" */ _45), var_valueInETH))\n /// @src 0:98533:98617 \"_referrer != address(0) &&...\"\n let expr_3 := /** @src 0:98533:98556 \"_referrer != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:98533:98556 \"_referrer != address(0)\" */ value1_3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)))\n /// @src 0:98533:98617 \"_referrer != address(0) &&...\"\n if expr_3\n {\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _46 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n mstore(_46, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x346ef527))\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _47 := staticcall(gas(), /** @src 0:87280:87290 \"msg.sender\" */ caller(), /** @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\" */ _46, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\" */ _46, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n if iszero(_47)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_3 := mload(_2)\n returndatacopy(pos_3, _4, returndatasize())\n revert(pos_3, returndatasize())\n }\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n let expr_4 := _4\n if _47\n {\n let _48 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\" */ returndatasize()) { _48 := returndatasize() }\n finalize_allocation(_46, _48)\n expr_4 := abi_decode_uint16_fromMemory(_46, add(_46, _48))\n }\n /// @src 0:98533:98617 \"_referrer != address(0) &&...\"\n expr_3 := /** @src 0:98568:98617 \"IPublicLock(msg.sender).publicLockVersion() >= 13\" */ iszero(lt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:98568:98617 \"IPublicLock(msg.sender).publicLockVersion() >= 13\" */ expr_4, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff), /** @src 0:98615:98617 \"13\" */ 0x0d))\n }\n /// @src 0:98520:100576 \"if (...\"\n if expr_3\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_7 := and(sload(/** @src 0:98680:98683 \"udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n mstore(_4, cleaned_7)\n mstore(_34, /** @src 0:98665:98679 \"uniswapOracles\" */ 0x6c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_8 := and(sload(keccak256(_4, _2)), _38)\n /// @src 0:98694:100568 \"if (address(udtOracle) != address(0)) {...\"\n if /** @src 0:98698:98730 \"address(udtOracle) != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_8))\n /// @src 0:98694:100568 \"if (address(udtOracle) != address(0)) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_9 := and(sload(/** @src 0:98862:98866 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n let _49 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n mstore(_49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xc1e553e7))\n mstore(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ add(_49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), cleaned_7)\n let _50 := 36\n mstore(add(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _50), /** @src 0:98852:98860 \"10 ** 18\" */ 0x0de0b6b3a7640000)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(add(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), cleaned_9)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n let _51 := call(gas(), cleaned_8, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100, /** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n if iszero(_51)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_4 := mload(_2)\n returndatacopy(pos_4, _4, returndatasize())\n revert(pos_4, returndatasize())\n }\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n let expr_5 := _4\n if _51\n {\n let _52 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ returndatasize()) { _52 := returndatasize() }\n finalize_allocation(_49, _52)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ add(_49, _52), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _49), _34) { revert(0, 0) }\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n expr_5 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_49)\n }\n let cleaned_10 := and(sload(/** @src 0:98680:98683 \"udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n let _53 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n mstore(_53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x70a08231))\n mstore(/** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ add(_53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:98933:98937 \"this\" */ address())\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n let _54 := staticcall(gas(), cleaned_10, _53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _50, /** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ _53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n if iszero(_54)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_5 := mload(_2)\n returndatacopy(pos_5, _4, returndatasize())\n revert(pos_5, returndatasize())\n }\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n let expr_6 := _4\n if _54\n {\n let _55 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ returndatasize()) { _55 := returndatasize() }\n finalize_allocation(_53, _55)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ add(_53, _55), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _53), _34) { revert(0, 0) }\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n expr_6 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_53)\n }\n /// @src 0:99015:99027 \"uint baseFee\"\n let var_baseFee := _4\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n let _56 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n mstore(_56, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xba5ea0d5))\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n let trySuccessCondition := staticcall(gas(), /** @src 0:98933:98937 \"this\" */ address(), /** @src 0:99043:99064 \"this.networkBaseFee()\" */ _56, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:99043:99064 \"this.networkBaseFee()\" */ _56, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n let expr_7 := _4\n if trySuccessCondition\n {\n let _57 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:99043:99064 \"this.networkBaseFee()\" */ returndatasize()) { _57 := returndatasize() }\n finalize_allocation(_56, _57)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:99043:99064 \"this.networkBaseFee()\" */ add(_56, _57), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _56), _34) { revert(0, 0) }\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n expr_7 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_56)\n }\n /// @src 0:99039:99356 \"try this.networkBaseFee() returns (uint _basefee) {...\"\n switch iszero(trySuccessCondition)\n case 0 {\n /// @src 0:99136:99254 \"if (_basefee == 0) {...\"\n switch /** @src 0:99140:99153 \"_basefee == 0\" */ iszero(expr_7)\n case /** @src 0:99136:99254 \"if (_basefee == 0) {...\" */ 0 {\n /// @src 0:99221:99239 \"baseFee = _basefee\"\n var_baseFee := expr_7\n }\n default /// @src 0:99136:99254 \"if (_basefee == 0) {...\"\n {\n /// @src 0:99171:99184 \"baseFee = 100\"\n var_baseFee := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100\n }\n }\n default /// @src 0:99039:99356 \"try this.networkBaseFee() returns (uint _basefee) {...\"\n {\n /// @src 0:99330:99343 \"baseFee = 100\"\n var_baseFee := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100\n }\n /// @src 0:99493:99526 \"estimatedGasForPurchase * baseFee\"\n let expr_8 := checked_mul_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sload(/** @src 0:99493:99516 \"estimatedGasForPurchase\" */ 0x6f), /** @src 0:99493:99526 \"estimatedGasForPurchase * baseFee\" */ var_baseFee)\n /// @src 0:99543:99557 \"125 * 10 ** 18\"\n let _58 := 0x06c6b935b8bbd40000\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let product := mul(expr_8, /** @src 0:99543:99557 \"125 * 10 ** 18\" */ _58)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if iszero(or(iszero(expr_8), eq(/** @src 0:99543:99557 \"125 * 10 ** 18\" */ _58, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ div(product, expr_8))))\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n /// @src 0:99465:99600 \"uint tokensToDistribute = ((estimatedGasForPurchase * baseFee) *...\"\n let var_tokensToDistribute := /** @src 0:99491:99600 \"((estimatedGasForPurchase * baseFee) *...\" */ checked_div_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ div(product, 100), /** @src 0:99491:99600 \"((estimatedGasForPurchase * baseFee) *...\" */ expr_5)\n /// @src 0:99773:99793 \"balance * valueInETH\"\n let expr_9 := checked_mul_uint256(expr_6, var_valueInETH)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if iszero(eq(var_valueInETH, and(var_valueInETH, sub(shl(255, 1), 1))))\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n let _59 := sload(/** @src 0:100858:100877 \"grossNetworkProduct\" */ 0x66)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let sum := add(/** @src 0:99810:99811 \"2\" */ 0x02, /** @src 0:99814:99852 \"(2 * valueInETH) / grossNetworkProduct\" */ checked_div_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(1, var_valueInETH), _59))\n if gt(/** @src 0:99810:99811 \"2\" */ 0x02, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sum)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n /// @src 0:99772:99887 \"(balance * valueInETH) /...\"\n let expr_10 := checked_div_uint256(/** @src 0:99772:99853 \"(balance * valueInETH) /...\" */ checked_div_uint256(expr_9, /** @src 0:99810:99852 \"2 + (2 * valueInETH) / grossNetworkProduct\" */ sum), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _59)\n /// @src 0:99932:100025 \"if (tokensToDistribute > maxTokens) {...\"\n if /** @src 0:99936:99966 \"tokensToDistribute > maxTokens\" */ gt(var_tokensToDistribute, expr_10)\n /// @src 0:99932:100025 \"if (tokensToDistribute > maxTokens) {...\"\n {\n /// @src 0:99982:100012 \"tokensToDistribute = maxTokens\"\n var_tokensToDistribute := expr_10\n }\n /// @src 0:100041:100063 \"tokensToDistribute > 0\"\n let _60 := iszero(var_tokensToDistribute)\n /// @src 0:100037:100558 \"if (tokensToDistribute > 0) {...\"\n if /** @src 0:100041:100063 \"tokensToDistribute > 0\" */ iszero(_60)\n /// @src 0:100037:100558 \"if (tokensToDistribute > 0) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let product_1 := mul(var_tokensToDistribute, /** @src 0:100214:100216 \"20\" */ 0x14)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if iszero(or(_60, eq(/** @src 0:100214:100216 \"20\" */ 0x14, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ div(product_1, var_tokensToDistribute))))\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n let r := div(product_1, 100)\n /// @src 0:100238:100546 \"if (balance > tokensToDistribute) {...\"\n if /** @src 0:100242:100270 \"balance > tokensToDistribute\" */ gt(expr_6, var_tokensToDistribute)\n /// @src 0:100238:100546 \"if (balance > tokensToDistribute) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let diff := sub(var_tokensToDistribute, r)\n if gt(diff, var_tokensToDistribute)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n let _61 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n let _62 := shl(224, 0xa9059cbb)\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n mstore(_61, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _62)\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n let _63 := call(gas(), cleaned_10, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ _61, sub(abi_encode_address_uint256(add(_61, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ value1_3, diff), _61), _61, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n if iszero(_63)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_6 := mload(_2)\n returndatacopy(pos_6, _4, returndatasize())\n revert(pos_6, returndatasize())\n }\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n if _63\n {\n let _64 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ returndatasize()) { _64 := returndatasize() }\n finalize_allocation(_61, _64)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ add(_61, _64), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _61), _34) { revert(_4, _4) }\n pop(abi_decode_bool_fromMemory(_61))\n }\n let cleaned_11 := and(sload(/** @src 0:98680:98683 \"udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n let cleaned_12 := and(sload(/** @src 0:83920:83926 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n let _65 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n mstore(_65, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _62)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n let _66 := call(gas(), cleaned_11, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ _65, sub(abi_encode_address_uint256(add(_65, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ cleaned_12, r), _65), _65, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n if iszero(_66)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_7 := mload(_2)\n returndatacopy(pos_7, _4, returndatasize())\n revert(pos_7, returndatasize())\n }\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n if _66\n {\n let _67 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ returndatasize()) { _67 := returndatasize() }\n finalize_allocation(_65, _67)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ add(_65, _67), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _65), _34) { revert(_4, _4) }\n pop(abi_decode_bool_fromMemory(_65))\n }\n }\n }\n }\n }\n }\n return(_4, _4)\n }\n case 0x963a9478 {\n if callvalue() { revert(_4, _4) }\n let param_2, param_3 := abi_decode_uint256t_uint256(calldatasize())\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))))\n sstore(/** @src 0:103503:103545 \"grossNetworkProduct = _grossNetworkProduct\" */ 0x66, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ param_2)\n sstore(/** @src 0:103551:103595 \"totalDiscountGranted = _totalDiscountGranted\" */ 0x67, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ param_3)\n /// @src 0:103607:103669 \"ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted)\"\n let _68 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_68, param_2)\n mstore(add(_68, 32), param_3)\n /// @src 0:103607:103669 \"ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted)\"\n log1(_68, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _2, /** @src 0:103607:103669 \"ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted)\" */ 0x7b2ce3c83b45f79993ff2cbf5651caff2dfe04010b4846e03066b84e3e4059bb)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0x9a8a0592 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _69 := sload(/** @src 0:88441:88460 \"uint public chainId\" */ 112)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_17 := mload(_2)\n mstore(memPos_17, _69)\n return(memPos_17, 32)\n }\n case 0xa082eb0e {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _70 := sload(/** @src 0:87367:87399 \"uint public totalDiscountGranted\" */ 103)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_18 := mload(_2)\n mstore(memPos_18, _70)\n return(memPos_18, 32)\n }\n case 0xa64b6e5f {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 96) { revert(_4, _4) }\n let value0_5 := abi_decode_address_27006()\n let value1_4 := abi_decode_address()\n let value_12 := calldataload(68)\n let _71 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _71)))\n let _72 := and(/** @src 0:105775:105794 \"token != address(0)\" */ value0_5, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _71)\n /// @src 0:105771:105902 \"if (token != address(0)) {...\"\n switch /** @src 0:105775:105794 \"token != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _72))\n case /** @src 0:105771:105902 \"if (token != address(0)) {...\" */ 0 {\n /// @src 0:105867:105895 \"payable(to).transfer(amount)\"\n let _73 := _4\n if iszero(value_12) { _73 := 2300 }\n if iszero(call(_73, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:105867:105878 \"payable(to)\" */ value1_4, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _71), /** @src 0:105867:105895 \"payable(to).transfer(amount)\" */ value_12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, _4, _4, _4))\n /// @src 0:105867:105895 \"payable(to).transfer(amount)\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_8 := mload(_2)\n returndatacopy(pos_8, _4, returndatasize())\n revert(pos_8, returndatasize())\n }\n }\n default /// @src 0:105771:105902 \"if (token != address(0)) {...\"\n {\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n let _74 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n mstore(_74, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xa9059cbb))\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n let _75 := call(gas(), _72, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ _74, sub(abi_encode_address_uint256(add(_74, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ value1_4, value_12), _74), _74, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32)\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n if iszero(_75)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_9 := mload(_2)\n returndatacopy(pos_9, _4, returndatasize())\n revert(pos_9, returndatasize())\n }\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n if _75\n {\n let _76 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _76, /** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ returndatasize()) { _76 := returndatasize() }\n finalize_allocation(_74, _76)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ add(_74, _76), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _74), 32) { revert(_4, _4) }\n pop(abi_decode_bool_fromMemory(_74))\n }\n }\n return(_4, _4)\n }\n case 0xa998e9fb {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_13 := copy_array_from_storage_to_memory_string_27022()\n let memPos_19 := mload(_2)\n mstore(memPos_19, 32)\n return(memPos_19, sub(abi_encode_string(value_13, add(memPos_19, 32)), memPos_19))\n }\n case 0xb0ca0c83 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_6 := abi_decode_address_27006()\n let _77 := sload(_4)\n let value_14 := and(shr(8, _77), 0xff)\n /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n let expr_11 := _4\n switch value_14\n case 0 {\n expr_11 := /** @src 0:80903:80915 \"!initialized\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_77, 0xff))\n }\n default /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n {\n expr_11 := /** @src 0:72115:72138 \"account.code.length > 0\" */ iszero(/** @src 0:72115:72134 \"account.code.length\" */ extcodesize(/** @src 0:81527:81531 \"this\" */ address()))\n }\n /// @src 0:80854:80950 \"require(...\"\n require_helper_stringliteral(expr_11)\n /// @src 0:80979:80992 \"!initializing\"\n let _78 := iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_14)\n /// @src 0:80998:81078 \"if (isTopLevelCall) {...\"\n if _78\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, or(and(_77, not(65535)), 257))\n }\n let _79 := and(value0_6, sub(shl(160, 1), 1))\n let _80 := sload(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(_80, shl(160, 0xffffffffffffffffffffffff)), _79))\n /// @src 0:83747:83787 \"OwnershipTransferred(address(0), _owner)\"\n log3(_4, _4, 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, or(and(_80, _4), _79))\n /// @src 0:81092:81147 \"if (isTopLevelCall) {...\"\n if _78\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, and(sload(_4), not(65280)))\n }\n return(_4, _4)\n }\n case 0xb0e21e8a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _81 := sload(/** @src 0:88757:88780 \"uint public protocolFee\" */ 118)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_20 := mload(_2)\n mstore(memPos_20, _81)\n return(memPos_20, 32)\n }\n case 0xba5ea0d5 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let memPos_21 := mload(_2)\n mstore(memPos_21, /** @src 0:97030:97043 \"block.basefee\" */ basefee())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(memPos_21, 32)\n }\n case 0xc4d66de8 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_7 := abi_decode_address_27006()\n let _82 := sload(_4)\n let value_15 := and(shr(8, _82), 0xff)\n /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n let expr_12 := _4\n switch value_15\n case 0 {\n expr_12 := /** @src 0:80903:80915 \"!initialized\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_82, 0xff))\n }\n default /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n {\n expr_12 := /** @src 0:72115:72138 \"account.code.length > 0\" */ iszero(/** @src 0:72115:72134 \"account.code.length\" */ extcodesize(/** @src 0:81527:81531 \"this\" */ address()))\n }\n /// @src 0:80854:80950 \"require(...\"\n require_helper_stringliteral(expr_12)\n /// @src 0:80979:80992 \"!initializing\"\n let _83 := iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_15)\n /// @src 0:80998:81078 \"if (isTopLevelCall) {...\"\n if _83\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, or(and(_82, not(65535)), 257))\n }\n let _84 := sload(_4)\n let value_16 := and(shr(8, _84), 0xff)\n /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n let expr_13 := _4\n switch value_16\n case 0 {\n expr_13 := /** @src 0:80903:80915 \"!initialized\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_84, 0xff))\n }\n default /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n {\n expr_13 := /** @src 0:72115:72138 \"account.code.length > 0\" */ iszero(/** @src 0:72115:72134 \"account.code.length\" */ extcodesize(/** @src 0:81527:81531 \"this\" */ address()))\n }\n /// @src 0:80854:80950 \"require(...\"\n require_helper_stringliteral(expr_13)\n /// @src 0:80979:80992 \"!initializing\"\n let _85 := iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_16)\n /// @src 0:80998:81078 \"if (isTopLevelCall) {...\"\n if _85\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, or(and(_84, not(65535)), 257))\n }\n let _86 := and(value0_7, sub(shl(160, 1), 1))\n let _87 := sload(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(_87, shl(160, 0xffffffffffffffffffffffff)), _86))\n /// @src 0:83747:83787 \"OwnershipTransferred(address(0), _owner)\"\n log3(_4, _4, 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, or(and(_87, _4), _86))\n /// @src 0:81092:81147 \"if (isTopLevelCall) {...\"\n if _85\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, and(sload(_4), not(65280)))\n }\n /// @src 0:90072:90091 \"_deployProxyAdmin()\"\n pop(fun_deployProxyAdmin())\n /// @src 0:81092:81147 \"if (isTopLevelCall) {...\"\n if _83\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, and(sload(_4), not(65280)))\n }\n return(_4, _4)\n }\n case 0xc7d7d0c9 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _88 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _88)))\n /// @src 0:90155:90240 \"if (proxyAdminAddress != address(0)) {...\"\n if /** @src 0:90159:90190 \"proxyAdminAddress != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:90159:90176 \"proxyAdminAddress\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _88)))\n /// @src 0:90155:90240 \"if (proxyAdminAddress != address(0)) {...\"\n {\n /// @src 0:90207:90233 \"Unlock__ALREADY_DEPLOYED()\"\n let _89 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:90207:90233 \"Unlock__ALREADY_DEPLOYED()\"\n mstore(_89, shl(224, 0xfeb51c9f))\n revert(_89, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n /// @src 0:90245:90264 \"_deployProxyAdmin()\"\n pop(fun_deployProxyAdmin())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xcaeee3a3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_8 := abi_decode_address_27006()\n let value1_5 := abi_decode_uint16()\n let _90 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _90)))\n let _91 := and(/** @src 0:91514:91531 \"IPublicLock(impl)\" */ value0_8, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _90)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n if iszero(extcodesize(_91))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n let _92 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n mstore(_92, /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ shl(224, 0x6eadde43))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ add(_92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:91551:91555 \"this\" */ address())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 132), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 164), 192)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 196), _4)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n let _93 := call(gas(), _91, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 228, /** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n if iszero(_93)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_10 := mload(_2)\n returndatacopy(pos_10, _4, returndatasize())\n revert(pos_10, returndatasize())\n }\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n if _93\n {\n finalize_allocation_27015(_92)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n if iszero(extcodesize(_91))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n let _94 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n mstore(_94, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(230, 0x03c2e981))\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n let _95 := call(gas(), _91, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\" */ _94, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\" */ _94, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n if iszero(_95)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_11 := mload(_2)\n returndatacopy(pos_11, _4, returndatasize())\n revert(pos_11, returndatasize())\n }\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n if _95\n {\n finalize_allocation_27015(_94)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n mstore(_4, _91)\n mstore(32, /** @src 0:91634:91653 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _96 := keccak256(_4, _2)\n let _97 := and(value1_5, 0xffff)\n sstore(_96, or(and(sload(_96), not(65535)), _97))\n mstore(_4, _97)\n mstore(32, /** @src 0:91675:91691 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _98 := keccak256(_4, _2)\n sstore(_98, or(and(sload(_98), shl(160, 0xffffffffffffffffffffffff)), _91))\n /// @src 0:91719:91753 \"UnlockTemplateAdded(impl, version)\"\n log3(_4, _4, 0xd36d021c4aa145e30eadc73e34284101030d688b9eb9413a4dc3af40ab1d4748, _91, _97)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xccf54648 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value_17 := calldataload(_3)\n let _99 := sub(shl(160, 1), 1)\n let _100 := and(value_17, _99)\n if iszero(eq(value_17, _100)) { revert(_4, _4) }\n let value1_6 := abi_decode_uint16()\n /// @src 0:95248:95336 \"if (proxyAdminAddress == address(0)) {...\"\n if /** @src 0:95252:95283 \"proxyAdminAddress == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:95252:95269 \"proxyAdminAddress\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _99))\n /// @src 0:95248:95336 \"if (proxyAdminAddress == address(0)) {...\"\n {\n /// @src 0:95300:95329 \"Unlock__MISSING_PROXY_ADMIN()\"\n let _101 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95300:95329 \"Unlock__MISSING_PROXY_ADMIN()\"\n mstore(_101, shl(226, 0x20ad73f3))\n revert(_101, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n let _102 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n mstore(_102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xaae4b8f7))\n mstore(/** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ add(_102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:95393:95403 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _103 := 32\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n let _104 := staticcall(gas(), _100, _102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36, /** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ _102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103)\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n if iszero(_104)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_12 := mload(_2)\n returndatacopy(pos_12, _4, returndatasize())\n revert(pos_12, returndatasize())\n }\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n let expr_14 := _4\n if _104\n {\n let _105 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103, /** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ returndatasize()) { _105 := returndatasize() }\n finalize_allocation(_102, _105)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ add(_102, _105), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _102), _103) { revert(_4, _4) }\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n expr_14 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ abi_decode_bool_fromMemory(_102)\n }\n /// @src 0:95361:95458 \"if (_isLockManager(lockAddress, msg.sender) != true) {...\"\n if /** @src 0:95365:95412 \"_isLockManager(lockAddress, msg.sender) != true\" */ iszero(eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ iszero(iszero(/** @src 0:95365:95412 \"_isLockManager(lockAddress, msg.sender) != true\" */ expr_14)), /** @src 0:95408:95412 \"true\" */ 0x01))\n /// @src 0:95361:95458 \"if (_isLockManager(lockAddress, msg.sender) != true) {...\"\n {\n /// @src 0:95429:95451 \"Unlock__MANAGER_ONLY()\"\n let _106 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95429:95451 \"Unlock__MANAGER_ONLY()\"\n mstore(_106, shl(229, 0x05167ffd))\n revert(_106, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n let _107 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n mstore(_107, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x346ef527))\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n let _108 := staticcall(gas(), _100, _107, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:95558:95582 \"lock.publicLockVersion()\" */ _107, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103)\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n if iszero(_108)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_13 := mload(_2)\n returndatacopy(pos_13, _4, returndatasize())\n revert(pos_13, returndatasize())\n }\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n let expr_15 := _4\n if _108\n {\n let _109 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103, /** @src 0:95558:95582 \"lock.publicLockVersion()\" */ returndatasize()) { _109 := returndatasize() }\n finalize_allocation(_107, _109)\n expr_15 := abi_decode_uint16_fromMemory(_107, add(_107, _109))\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _110 := 0xffff\n let sum_1 := add(and(expr_15, _110), /** @src 0:95408:95412 \"true\" */ 0x01)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if gt(sum_1, _110)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, 36)\n }\n let _111 := and(/** @src 0:95593:95622 \"version != currentVersion + 1\" */ value1_6, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _110)\n /// @src 0:95589:95672 \"if (version != currentVersion + 1) {...\"\n if /** @src 0:95593:95622 \"version != currentVersion + 1\" */ iszero(eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _111, and(sum_1, _110)))\n /// @src 0:95589:95672 \"if (version != currentVersion + 1) {...\"\n {\n /// @src 0:95639:95665 \"Unlock__VERSION_TOO_HIGH()\"\n let _112 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95639:95665 \"Unlock__VERSION_TOO_HIGH()\"\n mstore(_112, shl(224, 0x37bb0061))\n revert(_112, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n mstore(_4, _111)\n mstore(_103, /** @src 0:95717:95733 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_13 := and(sload(keccak256(_4, _2)), _99)\n /// @src 0:95748:95820 \"if (impl == address(0)) {...\"\n if /** @src 0:95752:95770 \"impl == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_13)\n /// @src 0:95748:95820 \"if (impl == address(0)) {...\"\n {\n /// @src 0:95787:95813 \"Unlock__MISSING_TEMPLATE()\"\n let _113 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95787:95813 \"Unlock__MISSING_TEMPLATE()\"\n mstore(_113, shl(225, 0x6b53d5c7))\n revert(_113, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n let cleaned_14 := and(sload(/** @src 0:95921:95931 \"proxyAdmin\" */ 0x72), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _99)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n if iszero(extcodesize(cleaned_14))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n let _114 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n mstore(_114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x266a23b1))\n mstore(/** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ add(_114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _100)\n mstore(add(/** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ _114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), cleaned_13)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n let _115 := call(gas(), cleaned_14, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ _114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68, /** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ _114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n if iszero(_115)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_14 := mload(_2)\n returndatacopy(pos_14, _4, returndatasize())\n revert(pos_14, returndatasize())\n }\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n if _115\n {\n finalize_allocation_27015(_114)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n if iszero(extcodesize(_100))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n let _116 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n mstore(_116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x8932a90d))\n mstore(/** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ add(_116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _103)\n mstore(add(/** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), 2)\n mstore(add(/** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), \"0x\")\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n let _117 := call(gas(), _100, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100, /** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n if iszero(_117)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_15 := mload(_2)\n returndatacopy(pos_15, _4, returndatasize())\n revert(pos_15, returndatasize())\n }\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n if _117\n {\n finalize_allocation_27015(_116)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n /// @src 0:96145:96179 \"LockUpgraded(lockAddress, version)\"\n let _118 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_118, _100)\n mstore(add(_118, _103), _111)\n /// @src 0:96145:96179 \"LockUpgraded(lockAddress, version)\"\n log1(_118, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _2, /** @src 0:96145:96179 \"LockUpgraded(lockAddress, version)\" */ 0x5e7b70a9e6f0b4c7cf2657cf563ce85eed3aebb7731396118d01a195d218fd5e)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_22 := mload(_2)\n mstore(memPos_22, _100)\n return(memPos_22, _103)\n }\n case 0xcd93b532 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_18 := and(sload(/** @src 0:88697:88734 \"uint16 public publicLockLatestVersion\" */ 117), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff)\n let memPos_23 := mload(_2)\n mstore(memPos_23, value_18)\n return(memPos_23, 32)\n }\n case 0xcec41052 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_19 := copy_array_from_storage_to_memory_string()\n let memPos_24 := mload(_2)\n mstore(memPos_24, 32)\n return(memPos_24, sub(abi_encode_string(value_19, add(memPos_24, 32)), memPos_24))\n }\n case 0xd6e9e803 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _119 := sload(/** @src 0:87331:87362 \"uint public grossNetworkProduct\" */ 102)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_25 := mload(_2)\n mstore(memPos_25, _119)\n return(memPos_25, 32)\n }\n case 0xed9674bd {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n mstore(_4, /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _120 := 0x20\n mstore(_120, /** @src 0:104509:104514 \"locks\" */ 0x68)\n /// @src 0:104509:104603 \"locks[msg.sender].deployed == false &&...\"\n let expr_16 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ iszero(and(sload(keccak256(_4, _2)), 0xff))\n /// @src 0:104509:104603 \"locks[msg.sender].deployed == false &&...\"\n if expr_16\n {\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _121 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n mstore(_121, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x346ef527))\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _122 := staticcall(gas(), /** @src 0:104515:104525 \"msg.sender\" */ caller(), /** @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\" */ _121, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\" */ _121, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120)\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n if iszero(_122)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_16 := mload(_2)\n returndatacopy(pos_16, _4, returndatasize())\n revert(pos_16, returndatasize())\n }\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n let expr_17 := _4\n if _122\n {\n let _123 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120, /** @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\" */ returndatasize()) { _123 := returndatasize() }\n finalize_allocation(_121, _123)\n expr_17 := abi_decode_uint16_fromMemory(_121, add(_121, _123))\n }\n /// @src 0:104509:104603 \"locks[msg.sender].deployed == false &&...\"\n expr_16 := /** @src 0:104554:104603 \"IPublicLock(msg.sender).publicLockVersion() == 13\" */ eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:104554:104603 \"IPublicLock(msg.sender).publicLockVersion() == 13\" */ expr_17, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff), /** @src 0:104601:104603 \"13\" */ 0x0d)\n }\n /// @src 0:104509:104631 \"locks[msg.sender].deployed == false &&...\"\n let expr_18 := expr_16\n if expr_16\n {\n expr_18 := /** @src 0:104613:104631 \"block.chainid == 1\" */ eq(/** @src 0:104613:104626 \"block.chainid\" */ chainid(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 1)\n }\n /// @src 0:104509:104733 \"locks[msg.sender].deployed == false &&...\"\n let expr_19 := expr_18\n if expr_18\n {\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n let _124 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n mstore(_124, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x0f15023b))\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n let _125 := staticcall(gas(), /** @src 0:104515:104525 \"msg.sender\" */ caller(), /** @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\" */ _124, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\" */ _124, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120)\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n if iszero(_125)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_17 := mload(_2)\n returndatacopy(pos_17, _4, returndatasize())\n revert(pos_17, returndatasize())\n }\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n let expr_20 := _4\n if _125\n {\n let _126 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120, /** @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\" */ returndatasize()) { _126 := returndatasize() }\n finalize_allocation(_124, _126)\n expr_20 := abi_decode_address_fromMemory(_124, add(_124, _126))\n }\n /// @src 0:104509:104733 \"locks[msg.sender].deployed == false &&...\"\n expr_19 := /** @src 0:104641:104733 \"IPublicLock(msg.sender).unlockProtocol() ==...\" */ eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:104641:104733 \"IPublicLock(msg.sender).unlockProtocol() ==...\" */ expr_20, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1)), /** @src 0:104691:104733 \"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13\" */ 0x3d5409cce1d45233de1d4ebdee74b8e004abdd13)\n }\n /// @src 0:104498:105294 \"if (...\"\n if expr_19\n {\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n let _127 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n mstore(_127, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x5de9a137))\n mstore(/** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ add(_127, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n let _128 := staticcall(gas(), /** @src 0:104830:104872 \"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13\" */ 0x3d5409cce1d45233de1d4ebdee74b8e004abdd13, /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ _127, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36, /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ _127, 96)\n if iszero(_128)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_18 := mload(_2)\n returndatacopy(pos_18, _4, returndatasize())\n revert(pos_18, returndatasize())\n }\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n let expr_component := _4\n let expr_component_1 := _4\n let expr_component_2 := _4\n if _128\n {\n let _129 := 96\n if gt(_129, returndatasize()) { _129 := returndatasize() }\n finalize_allocation(_127, _129)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ add(_127, _129), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _127), /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ 96)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n { revert(_4, _4) }\n let value0_9 := abi_decode_bool_fromMemory(_127)\n let value_20 := mload(add(_127, _120))\n let value_21 := mload(add(_127, _2))\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n expr_component := value0_9\n expr_component_1 := value_20\n expr_component_2 := value_21\n }\n /// @src 0:105074:105288 \"if (deployed) {...\"\n switch expr_component\n case 0 {\n /// @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\"\n let _130 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\"\n mstore(_130, shl(225, 0x411789a7))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\" */ add(_130, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\"\n revert(_130, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36)\n }\n default /// @src 0:105074:105288 \"if (deployed) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPtr := mload(_2)\n finalize_allocation_27038(memPtr)\n mstore(memPtr, iszero(iszero(expr_component)))\n /// @src 0:105118:105215 \"LockBalances(...\"\n let _131 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120)\n mstore(_131, expr_component_1)\n /// @src 0:105118:105215 \"LockBalances(...\"\n let _132 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _2)\n mstore(_132, expr_component_2)\n mstore(_4, /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_120, /** @src 0:104509:104514 \"locks\" */ 0x68)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot_2 := keccak256(_4, _2)\n update_storage_value_offsett_bool_to_bool(dataSlot_2, iszero(iszero(mload(memPtr))))\n sstore(add(dataSlot_2, 1), mload(_131))\n sstore(add(dataSlot_2, 2), mload(_132))\n }\n }\n return(_4, _4)\n }\n case 0xef67fde6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_10 := abi_decode_address_27006()\n let _133 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _133)))\n let _134 := and(value0_10, _133)\n mstore(_4, _134)\n mstore(32, /** @src 0:102432:102451 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _135 := 0xffff\n /// @src 0:102428:102531 \"if (_publicLockVersions[_publicLockAddress] == 0) {...\"\n if /** @src 0:102432:102476 \"_publicLockVersions[_publicLockAddress] == 0\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(keccak256(_4, _2)), _135))\n /// @src 0:102428:102531 \"if (_publicLockVersions[_publicLockAddress] == 0) {...\"\n {\n /// @src 0:102493:102524 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n let _136 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:102493:102524 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n mstore(_136, shl(224, 0xadf22763))\n revert(_136, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n mstore(_4, _134)\n mstore(32, /** @src 0:102432:102451 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:102562:102627 \"publicLockLatestVersion = _publicLockVersions[_publicLockAddress]\" */ 0x75, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:102562:102627 \"publicLockLatestVersion = _publicLockVersions[_publicLockAddress]\" */ 0x75), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ not(65535)), and(sload(keccak256(_4, _2)), _135)))\n sstore(/** @src 0:102667:102705 \"publicLockAddress = _publicLockAddress\" */ 0x6b, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:102667:102705 \"publicLockAddress = _publicLockAddress\" */ 0x6b), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(160, 0xffffffffffffffffffffffff)), _134))\n /// @src 0:102716:102751 \"SetLockTemplate(_publicLockAddress)\"\n let _137 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_137, _134)\n /// @src 0:102716:102751 \"SetLockTemplate(_publicLockAddress)\"\n log1(_137, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32, /** @src 0:102716:102751 \"SetLockTemplate(_publicLockAddress)\" */ 0x4fa58418e580e78539e8d3d8d17d94dbaca0927533953c8248f313e6f8927c21)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xf2fde38b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_11 := abi_decode_address_27006()\n let _138 := sload(/** @src 0:84232:84238 \"_owner\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _139 := sub(shl(160, 1), 1)\n let _140 := and(_138, _139)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _140))\n let _141 := and(/** @src 0:84873:84895 \"newOwner != address(0)\" */ value0_11, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _139)\n if /** @src 0:84873:84895 \"newOwner != address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _141)\n {\n let memPtr_1 := mload(_2)\n mstore(memPtr_1, shl(229, 4594637))\n mstore(add(memPtr_1, _3), 32)\n mstore(add(memPtr_1, 36), 13)\n mstore(add(memPtr_1, 68), \"INVALID_OWNER\")\n revert(memPtr_1, 100)\n }\n sstore(/** @src 0:84232:84238 \"_owner\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(_138, shl(160, 0xffffffffffffffffffffffff)), _141))\n /// @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0, 0, /** @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, _140, _141)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xf8328991 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_22 := and(sload(/** @src 0:87894:87926 \"address public publicLockAddress\" */ 107), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_26 := mload(_2)\n mstore(memPos_26, value_22)\n return(memPos_26, 32)\n }\n }\n if iszero(calldatasize())\n {\n /// @src 0:106344:106410 \"if (msg.value <= 0) {...\"\n if /** @src 0:106348:106362 \"msg.value <= 0\" */ iszero(/** @src 0:106348:106357 \"msg.value\" */ callvalue())\n /// @src 0:106344:106410 \"if (msg.value <= 0) {...\"\n {\n /// @src 0:106379:106403 \"Unlock__INVALID_AMOUNT()\"\n let _142 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:106379:106403 \"Unlock__INVALID_AMOUNT()\"\n mstore(_142, shl(225, 35057))\n revert(_142, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n stop()\n }\n revert(0, 0)\n }\n function abi_decode_address_27006() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_address() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n let _1 := 0x20\n mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n }\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20)\n }\n function abi_decode_uint256t_uint256(dataEnd) -> value0, value1\n {\n if slt(add(dataEnd, not(3)), 64) { revert(0, 0) }\n value0 := calldataload(4)\n value1 := calldataload(36)\n }\n function abi_decode_string_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function finalize_allocation_27015(memPtr)\n {\n if gt(memPtr, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, memPtr)\n }\n function finalize_allocation_27038(memPtr)\n {\n let newFreePtr := add(memPtr, /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ 96)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function finalize_allocation(memPtr, size)\n {\n let newFreePtr := add(memPtr, and(add(size, 31), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31)))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n if gt(_1, 0xffffffffffffffff)\n {\n mstore(/** @src -1:-1:-1 */ 0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ 0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x24)\n }\n let memPtr := mload(64)\n finalize_allocation(memPtr, add(and(add(_1, 0x1f), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31)), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20))\n mstore(memPtr, _1)\n if gt(add(add(offset, _1), 0x20), end)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n mstore(add(add(memPtr, _1), 0x20), /** @src -1:-1:-1 */ 0)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n array := memPtr\n }\n function abi_decode_uint16() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function copy_array_from_storage_to_memory_string() -> memPtr\n {\n memPtr := mload(64)\n let ret := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let slotValue := sload(/** @src 0:104083:104100 \"globalTokenSymbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let length := extract_byte_array_length(slotValue)\n mstore(memPtr, length)\n let _1 := 0x20\n let _2 := 1\n switch and(slotValue, _2)\n case 0 {\n mstore(add(memPtr, _1), and(slotValue, not(255)))\n ret := add(add(memPtr, shl(5, iszero(iszero(length)))), _1)\n }\n case 1 {\n mstore(/** @src -1:-1:-1 */ 0, /** @src 0:104083:104100 \"globalTokenSymbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataPos := 7887053984229333715756243741084912719879447020693965939365260134600710199889\n let i := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(memPtr, i), _1), sload(dataPos))\n dataPos := add(dataPos, _2)\n }\n ret := add(add(memPtr, i), _1)\n }\n finalize_allocation(memPtr, sub(ret, memPtr))\n }\n function copy_array_from_storage_to_memory_string_27022() -> memPtr\n {\n memPtr := mload(64)\n let ret := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let slotValue := sload(/** @src 0:103868:103886 \"globalBaseTokenURI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let length := extract_byte_array_length(slotValue)\n mstore(memPtr, length)\n let _1 := 0x20\n let _2 := 1\n switch and(slotValue, _2)\n case 0 {\n mstore(add(memPtr, _1), and(slotValue, not(255)))\n ret := add(add(memPtr, shl(5, iszero(iszero(length)))), _1)\n }\n case 1 {\n mstore(/** @src -1:-1:-1 */ 0, /** @src 0:103868:103886 \"globalBaseTokenURI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataPos := 57762096780731528330405058414938765910932439953606620384872163540286326260488\n let i := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(memPtr, i), _1), sload(dataPos))\n dataPos := add(dataPos, _2)\n }\n ret := add(add(memPtr, i), _1)\n }\n finalize_allocation(memPtr, sub(ret, memPtr))\n }\n function require_helper_stringliteral(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 19)\n mstore(add(memPtr, 68), \"ALREADY_INITIALIZED\")\n revert(memPtr, 100)\n }\n }\n function update_storage_value_offsett_bool_to_bool(slot, value)\n {\n let value_1 := and(sload(slot), not(255))\n sstore(slot, or(value_1, and(iszero(iszero(value)), 255)))\n }\n function require_helper_stringliteral_ed52(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 10)\n mstore(add(memPtr, 68), \"ONLY_OWNER\")\n revert(memPtr, 100)\n }\n }\n /// @ast-id 2991 @src 0:90451:90623 \"function _deployProxyAdmin() private returns (address) {...\"\n function fun_deployProxyAdmin() -> var\n {\n /// @src 0:90525:90541 \"new ProxyAdmin()\"\n let _1 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(64)\n /// @src 0:90525:90541 \"new ProxyAdmin()\"\n let _2 := datasize(\"ProxyAdmin_1215\")\n let _3 := add(_1, _2)\n if or(gt(_3, 0xffffffffffffffff), lt(_3, _1))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n /// @src 0:90525:90541 \"new ProxyAdmin()\"\n datacopy(_1, dataoffset(\"ProxyAdmin_1215\"), _2)\n let expr_address := create(0, _1, sub(_3, _1))\n if iszero(expr_address)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos := mload(64)\n returndatacopy(pos, /** @src 0:90525:90541 \"new ProxyAdmin()\" */ 0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ returndatasize())\n revert(pos, returndatasize())\n }\n let _4 := and(expr_address, sub(shl(160, 1), 1))\n let _5 := shl(160, 0xffffffffffffffffffffffff)\n sstore(/** @src 0:90512:90541 \"proxyAdmin = new ProxyAdmin()\" */ 0x72, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:90512:90541 \"proxyAdmin = new ProxyAdmin()\" */ 0x72), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _5), _4))\n sstore(/** @src 0:90547:90586 \"proxyAdminAddress = address(proxyAdmin)\" */ 0x71, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:90547:90586 \"proxyAdminAddress = address(proxyAdmin)\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _5), _4))\n /// @src 0:90592:90618 \"return address(proxyAdmin)\"\n var := _4\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n function abi_encode_string_calldata(start, length, pos) -> end\n {\n mstore(pos, length)\n calldatacopy(add(pos, 0x20), start, length)\n mstore(add(add(pos, length), 0x20), /** @src -1:-1:-1 */ 0)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n end := add(add(pos, and(add(length, 31), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20)\n }\n /// @ast-id 3202 @src 0:94039:94892 \"function createUpgradeableLockAtVersion(...\"\n function fun_createUpgradeableLockAtVersion(var_data_mpos, var_lockVersion) -> var\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _1 := sub(shl(160, 1), 1)\n let cleaned := and(sload(/** @src 0:94166:94183 \"proxyAdminAddress\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _1)\n /// @src 0:94162:94250 \"if (proxyAdminAddress == address(0)) {...\"\n if /** @src 0:94166:94197 \"proxyAdminAddress == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned)\n /// @src 0:94162:94250 \"if (proxyAdminAddress == address(0)) {...\"\n {\n /// @src 0:94214:94243 \"Unlock__MISSING_PROXY_ADMIN()\"\n let _2 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(64)\n /// @src 0:94214:94243 \"Unlock__MISSING_PROXY_ADMIN()\"\n mstore(_2, /** @src 0:95300:95329 \"Unlock__MISSING_PROXY_ADMIN()\" */ shl(226, 0x20ad73f3))\n /// @src 0:94214:94243 \"Unlock__MISSING_PROXY_ADMIN()\"\n revert(_2, 4)\n }\n /// @src -1:-1:-1\n let _3 := 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(var_lockVersion, 0xffff))\n mstore(0x20, /** @src 0:94305:94321 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _4 := 0x40\n let cleaned_1 := and(sload(keccak256(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)), _1)\n /// @src 0:94341:94428 \"if (publicLockImpl == address(0)) {...\"\n if /** @src 0:94345:94373 \"publicLockImpl == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_1)\n /// @src 0:94341:94428 \"if (publicLockImpl == address(0)) {...\"\n {\n /// @src 0:94390:94421 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n let _5 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_4)\n /// @src 0:94390:94421 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n mstore(_5, /** @src 0:102493:102524 \"Unlock__MISSING_LOCK_TEMPLATE()\" */ shl(224, 0xadf22763))\n /// @src 0:94390:94421 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n revert(_5, 4)\n }\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n let _6 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_4)\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n let _7 := datasize(\"TransparentUpgradeableProxy_1082\")\n let _8 := add(_6, _7)\n if or(gt(_8, 0xffffffffffffffff), lt(_8, _6))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x24)\n }\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n datacopy(_6, dataoffset(\"TransparentUpgradeableProxy_1082\"), _7)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_8, cleaned_1)\n mstore(add(_8, 0x20), cleaned)\n mstore(add(_8, _4), 96)\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n let expr_3171_address := create(/** @src -1:-1:-1 */ _3, /** @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\" */ _6, sub(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ abi_encode_string(var_data_mpos, add(_8, 96)), /** @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\" */ _6))\n if iszero(expr_3171_address)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos := mload(_4)\n returndatacopy(pos, /** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ returndatasize())\n revert(pos, returndatasize())\n }\n let _9 := and(/** @src 0:94645:94659 \"address(proxy)\" */ expr_3171_address, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _1)\n let memPtr := mload(_4)\n finalize_allocation_27038(memPtr)\n mstore(memPtr, /** @src 0:94742:94746 \"true\" */ 0x01)\n /// @src 0:94711:94806 \"LockBalances({...\"\n let _10 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20)\n mstore(_10, /** @src -1:-1:-1 */ _3)\n /// @src 0:94711:94806 \"LockBalances({...\"\n let _11 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n mstore(_11, /** @src -1:-1:-1 */ _3)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _9)\n mstore(0x20, /** @src 0:94694:94699 \"locks\" */ 0x68)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot := keccak256(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n update_storage_value_offsett_bool_to_bool(dataSlot, iszero(iszero(mload(memPtr))))\n sstore(add(dataSlot, /** @src 0:94742:94746 \"true\" */ 0x01), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_10))\n sstore(add(dataSlot, 2), mload(_11))\n /// @src 0:94839:94867 \"NewLock(msg.sender, newLock)\"\n log3(/** @src -1:-1:-1 */ _3, _3, /** @src 0:94839:94867 \"NewLock(msg.sender, newLock)\" */ 0x01017ed19df0c7f8acc436147b234b09664a9fb4797b4fa3fb9e599c2eb67be7, /** @src 0:94847:94857 \"msg.sender\" */ caller(), /** @src 0:94839:94867 \"NewLock(msg.sender, newLock)\" */ _9)\n /// @src 0:94873:94887 \"return newLock\"\n var := _9\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n function abi_decode_uint16_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xffff)))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n value0 := value\n }\n function abi_decode_bool_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function require_helper_stringliteral_2f7a(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 10)\n mstore(add(memPtr, 68), \"ONLY_LOCKS\")\n revert(memPtr, 100)\n }\n }\n function abi_decode_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1))))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n value0 := value\n }\n function checked_add_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function checked_mul_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x))))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function checked_div_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_address_uint256(headStart, value0, value1) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"TransparentUpgradeableProxy_1082\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := 64\n mstore(_1, memoryguard(0x80))\n let programSize := datasize(\"TransparentUpgradeableProxy_1082\")\n let argSize := sub(codesize(), programSize)\n let memoryDataOffset := allocate_memory(argSize)\n codecopy(memoryDataOffset, programSize, argSize)\n let _2 := add(memoryDataOffset, argSize)\n if slt(sub(_2, memoryDataOffset), 96)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address_fromMemory(memoryDataOffset)\n let _3 := 32\n let value1 := abi_decode_address_fromMemory(add(memoryDataOffset, _3))\n let offset := mload(add(memoryDataOffset, _1))\n let _4 := sub(shl(64, 1), 1)\n if gt(offset, _4)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _5 := add(memoryDataOffset, offset)\n if iszero(slt(add(_5, 0x1f), _2))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _6 := mload(_5)\n let array := allocate_memory(array_allocation_size_bytes(_6))\n mstore(array, _6)\n let dst := add(array, _3)\n if gt(add(add(_5, _6), _3), _2)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n copy_memory_to_memory_with_cleanup(add(_5, _3), dst, _6)\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(value0))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(_1)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), _3)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _7 := sub(shl(160, 1), 1)\n let _8 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7)\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _9 := not(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _10 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n sstore(_10, or(and(sload(_10), _9), _8))\n /// @src -1:-1:-1\n let _11 := 0\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ _11, _11, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _8)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _12 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ array))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_12)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _12\n {\n expr := /** @src -1:-1:-1 */ _11\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr_1 := mload(_1)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, _4), lt(newFreePtr, memPtr_1))\n {\n mstore(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0x24)\n }\n mstore(_1, newFreePtr)\n mstore(memPtr_1, 39)\n mstore(add(memPtr_1, _3), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, _1), \" failed\")\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), value0, dst, mload(array), /** @src -1:-1:-1 */ _11, _11)\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let data := /** @src -1:-1:-1 */ _11\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _13 := returndatasize()\n let memPtr_2 := allocate_memory(array_allocation_size_bytes(_13))\n mstore(memPtr_2, _13)\n data := memPtr_2\n returndatacopy(add(memPtr_2, _3), /** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\"\n pop(fun_verifyCallResultFromTarget(value0, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ memPtr_1))\n }\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _14 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n let _15 := sload(_14)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _16 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(_1)\n mstore(_16, and(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _15, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7))\n let _17 := and(value1, _7)\n mstore(add(_16, _3), _17)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_16, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _17)\n {\n let memPtr_3 := mload(_1)\n mstore(memPtr_3, shl(229, 4594637))\n mstore(add(memPtr_3, 4), _3)\n mstore(add(memPtr_3, 36), 38)\n mstore(add(memPtr_3, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr_3, 100), \"ddress\")\n revert(memPtr_3, 132)\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _14, /** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ or(and(_15, _9), _17))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _18 := mload(_1)\n let _19 := datasize(\"TransparentUpgradeableProxy_1082_deployed\")\n codecopy(_18, dataoffset(\"TransparentUpgradeableProxy_1082_deployed\"), _19)\n return(_18, _19)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 32)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n copy_memory_to_memory_with_cleanup(add(var_errorMessage_mpos, 32), add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68), length)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_target))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"TransparentUpgradeableProxy_1082_deployed\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n mstore(64, 128)\n if iszero(lt(calldatasize(), 4))\n {\n let _1 := 0\n switch shr(224, calldataload(_1))\n case 0x3659cfe6 {\n if callvalue() { revert(_1, _1) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_1, _1) }\n let value0 := abi_decode_address()\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr := allocate_memory_5122()\n mstore(memPtr, _1)\n /// @src 0:30541:30546 \"false\"\n fun_upgradeToAndCall(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ memPtr)\n }\n return(_1, _1)\n }\n case 0x4f1ef286 {\n external_fun_upgradeToAndCall()\n }\n case 0x5c60da1b { external_fun_implementation() }\n case 0x8f283970 { external_fun_changeAdmin() }\n case 0xf851a440 { external_fun_admin() }\n }\n if iszero(calldatasize())\n {\n /// @src 0:24748:24806 \"fallback() external payable virtual {...\"\n fun_fallback()\n }\n fun_fallback()\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function abi_decode_address() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function external_fun_upgradeToAndCall()\n {\n if slt(add(calldatasize(), not(3)), 64)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let offset := calldataload(36)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if iszero(slt(add(offset, 35), calldatasize()))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let length := calldataload(add(4, offset))\n if gt(length, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if gt(add(add(offset, length), 36), calldatasize())\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let array := allocate_memory(array_allocation_size_string(length))\n mstore(array, length)\n calldatacopy(add(array, 32), add(offset, 36), length)\n mstore(add(add(array, length), 32), /** @src -1:-1:-1 */ 0)\n /// @src 0:31029:31077 \"_upgradeToAndCall(newImplementation, data, true)\"\n fun_upgradeToAndCall_3349(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ array)\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_implementation()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29919:29942 \"address implementation_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n function external_fun_changeAdmin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 32)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let _1 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _2 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _3 := sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _4 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n mstore(_4, and(_3, _1))\n let _5 := and(value0, _1)\n mstore(add(_4, 32), _5)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_4, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 64, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _5)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 38)\n mstore(add(memPtr, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr, 100), \"ddress\")\n revert(memPtr, 132)\n }\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(_3, shl(160, 0xffffffffffffffffffffffff)), _5))\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_admin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29380:29394 \"address admin_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _3 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n /// @ast-id 880 @src 0:24461:24561 \"function _fallback() internal virtual {...\"\n function fun_fallback()\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := sub(shl(160, 1), 1)\n if /** @src 0:31409:31434 \"msg.sender != _getAdmin()\" */ eq(/** @src 0:31409:31419 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 66)\n mstore(add(memPtr, 68), \"TransparentUpgradeableProxy: adm\")\n mstore(add(memPtr, 100), \"in cannot fallback to proxy targ\")\n mstore(add(memPtr, 132), \"et\")\n revert(memPtr, 164)\n }\n let _2 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1)\n /// @src 0:23291:24000 \"assembly {...\"\n let _3 := 0\n calldatacopy(_3, _3, calldatasize())\n let usr$result := delegatecall(gas(), _2, _3, calldatasize(), _3, _3)\n returndatacopy(_3, _3, returndatasize())\n switch usr$result\n case 0 { revert(_3, returndatasize()) }\n default { return(_3, returndatasize()) }\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_5122() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 32)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_string(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall_3349(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:31072:31076 \"true\" */ 0x01\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n function copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398() -> memPtr\n {\n let memPtr_1 := mload(64)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr_1, 39)\n memPtr := memPtr_1\n mstore(add(memPtr_1, 32), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, 64), \" failed\")\n }\n /// @ast-id 395 @src 0:11503:11810 \"function functionDelegateCall(...\"\n function fun_functionDelegateCall(var_target, var_data_mpos, var_errorMessage_373_mpos) -> var_376_mpos\n {\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), var_target, add(var_data_mpos, 0x20), mload(var_data_mpos), 0, 0)\n let data := 0\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let memPtr := allocate_memory(array_allocation_size_string(_1))\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ 0x20), 0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11723:11805 \"return...\"\n var_376_mpos := /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ fun_verifyCallResultFromTarget(var_target, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ var_errorMessage_373_mpos)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function require_helper_stringliteral_cc2e(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n let _2 := 32\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n let i := /** @src 0:13281:13282 \"0\" */ 0x00\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n for { } lt(i, length) { i := add(i, _2) }\n {\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ i), 68), mload(add(add(var_errorMessage_mpos, i), _2)))\n }\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ length), 68), /** @src 0:13281:13282 \"0\" */ 0x00)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:12474:12534 \"require(isContract(target), \\\"Address: call to non-contract\\\")\"\n require_helper_stringliteral_cc2e(/** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(/** @src 0:12482:12500 \"isContract(target)\" */ var_target))))\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n data \".metadata\" hex\"a2646970667358221220d8a26ce07e9604f1b4fef919eed2c5ade04b5f04093830e7e2d20653d83fa26f64736f6c63430008150033\"\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ProxyAdmin_1215\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := sload(/** @src 0:3363:3369 \"_owner\" */ 0x00)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n sstore(/** @src 0:3363:3369 \"_owner\" */ 0x00, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ or(and(_2, not(sub(shl(160, 1), 1))), /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:3363:3369 \"_owner\" */ 0x00, 0x00, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_2, sub(shl(160, 1), 1)), /** @src 0:835:845 \"msg.sender\" */ caller())\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _3 := datasize(\"ProxyAdmin_1215_deployed\")\n codecopy(_1, dataoffset(\"ProxyAdmin_1215_deployed\"), _3)\n return(_1, _3)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ProxyAdmin_1215_deployed\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n let _2 := 64\n mstore(_2, _1)\n let _3 := 4\n if iszero(lt(calldatasize(), _3))\n {\n let _4 := 0\n switch shr(224, calldataload(_4))\n case 0x204e1c7a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _5 := sub(shl(160, 1), 1)\n let _6 := and(abi_decode_contract_TransparentUpgradeableProxy(), _5)\n mstore(_1, shl(224, 0x5c60da1b))\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component := staticcall(gas(), _6, _1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component_mpos := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component) { revert(_4, _4) }\n let _7 := and(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ expr_component_mpos)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _5)\n let memPos := mload(_2)\n mstore(memPos, _7)\n return(memPos, 32)\n }\n case 0x715018a6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _8 := sload(_4)\n sstore(_4, and(_8, shl(160, 0xffffffffffffffffffffffff)))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, _4, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_8, sub(shl(160, 1), 1)), _4)\n return(_4, _4)\n }\n case 0x7eff275e {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _9 := sub(shl(160, 1), 1)\n let _10 := and(/** @src 0:33410:33427 \"proxy.changeAdmin\" */ value0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _9)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(extcodesize(_10))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _11 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n mstore(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(228, 0x08f28397))\n mstore(/** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ add(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1, _9))\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _12 := call(gas(), _10, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(_12)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos := mload(_2)\n returndatacopy(pos, _4, returndatasize())\n revert(pos, returndatasize())\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if _12\n {\n finalize_allocation_3427(_11)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n _4 := _4\n }\n return(_4, _4)\n }\n case 0x8da5cb5b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value := and(sload(_4), sub(shl(160, 1), 1))\n let memPos_1 := mload(_2)\n mstore(memPos_1, value)\n return(memPos_1, 32)\n }\n case 0x9623609d {\n if slt(add(calldatasize(), not(3)), 96) { revert(_4, _4) }\n let value0_1 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_1 := abi_decode_address()\n let offset := calldataload(68)\n if gt(offset, 0xffffffffffffffff) { revert(_4, _4) }\n if iszero(slt(add(offset, 35), calldatasize())) { revert(_4, _4) }\n let _13 := calldataload(add(_3, offset))\n let _14 := array_allocation_size_bytes(_13)\n let memPtr := mload(_2)\n finalize_allocation(memPtr, _14)\n mstore(memPtr, _13)\n let _15 := 32\n if gt(add(add(offset, _13), 36), calldatasize()) { revert(_4, _4) }\n calldatacopy(add(memPtr, _15), add(offset, 36), _13)\n mstore(add(add(memPtr, _13), _15), _4)\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _16 := sub(shl(160, 1), 1)\n let _17 := and(/** @src 0:34191:34213 \"proxy.upgradeToAndCall\" */ value0_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _16)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(extcodesize(_17))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _18 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n mstore(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x278f7943))\n mstore(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ add(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_1, _16))\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36), _2)\n let length := mload(memPtr)\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 68), length)\n let i := _4\n for { } lt(i, length) { i := add(i, _15) }\n {\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ i), 100), mload(add(add(memPtr, i), _15)))\n }\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ length), 100), _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _19 := call(gas(), _17, /** @src 0:34221:34230 \"msg.value\" */ callvalue(), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, add(sub(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(add(length, 0x1f), not(31))), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 100), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(_19)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_1 := mload(_2)\n returndatacopy(pos_1, _4, returndatasize())\n revert(pos_1, returndatasize())\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if _19\n {\n finalize_allocation_3427(_18)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0x99a88ec4 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_2 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_2 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _20 := sub(shl(160, 1), 1)\n let _21 := and(/** @src 0:33750:33765 \"proxy.upgradeTo\" */ value0_2, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _20)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(extcodesize(_21))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _22 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n mstore(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x1b2ce7f3))\n mstore(/** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ add(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_2, _20))\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _23 := call(gas(), _21, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(_23)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_2 := mload(_2)\n returndatacopy(pos_2, _4, returndatasize())\n revert(pos_2, returndatasize())\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if _23\n {\n finalize_allocation_3427(_22)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0xf2fde38b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_3 := abi_decode_contract_TransparentUpgradeableProxy()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _24 := sub(shl(160, 1), 1)\n let _25 := and(/** @src 0:3027:3049 \"newOwner != address(0)\" */ value0_3, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _24)\n if /** @src 0:3027:3049 \"newOwner != address(0)\" */ iszero(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _25)\n {\n let memPtr_1 := mload(_2)\n mstore(memPtr_1, shl(229, 4594637))\n mstore(add(memPtr_1, _3), 32)\n mstore(add(memPtr_1, 36), 38)\n mstore(add(memPtr_1, 68), \"Ownable: new owner is the zero a\")\n mstore(add(memPtr_1, 100), \"ddress\")\n revert(memPtr_1, 132)\n }\n let _26 := sload(0)\n sstore(0, or(and(_26, shl(160, 0xffffffffffffffffffffffff)), _25))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 0, 0, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_26, _24), /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ _25)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n return(_4, _4)\n }\n case 0xf3b7dead {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _27 := sub(shl(160, 1), 1)\n let _28 := and(abi_decode_contract_TransparentUpgradeableProxy(), _27)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let _29 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n mstore(_29, shl(230, 0x03e14691))\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_1 := staticcall(gas(), _28, _29, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_mpos_1 := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component_1) { revert(_4, _4) }\n let _30 := and(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ expr_component_mpos_1)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _27)\n let memPos_2 := mload(_2)\n mstore(memPos_2, _30)\n return(memPos_2, 32)\n }\n }\n revert(0, 0)\n }\n function abi_decode_contract_TransparentUpgradeableProxy() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_address() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function finalize_allocation_3427(memPtr)\n {\n if gt(memPtr, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, memPtr)\n }\n function finalize_allocation(memPtr, size)\n {\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 74 @src 0:2259:2383 \"function _checkOwner() internal view virtual {...\"\n function fun_checkOwner()\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let value := and(sload(/** @src 0:2183:2189 \"_owner\" */ 0x00), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ sub(shl(160, 1), 1))\n if iszero(/** @src 0:2318:2341 \"owner() == _msgSender()\" */ eq(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ value, /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 32)\n mstore(add(memPtr, 68), \"Ownable: caller is not the owner\")\n revert(memPtr, 100)\n }\n }\n function extract_returndata() -> data\n {\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let _2 := array_allocation_size_bytes(_1)\n let memPtr := mload(64)\n finalize_allocation(memPtr, _2)\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, 0x20), /** @src -1:-1:-1 */ 0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ returndatasize())\n }\n }\n function abi_decode_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1))))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n value0 := value\n }\n }\n data \".metadata\" hex\"a26469706673582212200c357892ee89f46df6d61d0354d7a1306c19bb275746744c0a9d77ef5644b92664736f6c63430008150033\"\n }\n }\n data \".metadata\" hex\"a264697066735822122050a1b4afc3e492cd053cbbb1de14f48d88590a00e5d1871b0518c4efbc80ffe864736f6c63430008150033\"\n }\n}\n","hash":"0100051b7bb4ca1d360ea287eb09e6bd359a657d042285d7558210db93ffe6bc","factoryDependencies":{"010000ed89a9abe7f27c522a89d1c165b742f032da6ae4b42f62bfda768e4bf9":"contracts/past-versions/UnlockV12.sol:ProxyAdmin","010001cfcb8d4a4136647d024e21a6ed4207383d3ffddf7dfb8aac303d71d949":"contracts/past-versions/UnlockV12.sol:TransparentUpgradeableProxy"}},"UnlockContextUpgradeable":{"abi":[],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"UnlockContextUpgradeable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:UnlockContextUpgradeable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:UnlockContextUpgradeable","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2654,"contract":"contracts/past-versions/UnlockV12.sol:UnlockContextUpgradeable","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"UnlockInitializable":{"abi":[],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() initializer {} ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.hljs-theme-light.nopadding] ```\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"UnlockInitializable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:UnlockInitializable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:UnlockInitializable","label":"initializing","offset":1,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"UnlockOwnable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"__initializeOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"__initializeOwnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be aplied to your functions to restrict their use to the owner. This contract was originally part of openzeppelin/contracts-ethereum-package but had to be included (instead of using the one in openzeppelin/contracts-upgradeable ) because the ______gap array length was 49 instead of 50\",\"kind\":\"dev\",\"methods\":{\"__initializeOwnable(address)\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"UnlockOwnable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2654,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":2663,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":2783,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"______gap","offset":0,"slot":"52","type":"t_array(t_uint256)50_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"__initializeOwnable(address)":"b0ca0c83","isOwner()":"8f32d59b","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"irOptimized":""}}}}} \ No newline at end of file diff --git a/governance/cache-zk/solidity-files-cache.json b/governance/cache-zk/solidity-files-cache.json new file mode 100644 index 00000000000..58a2966c66d --- /dev/null +++ b/governance/cache-zk/solidity-files-cache.json @@ -0,0 +1,94 @@ +{ + "_format": "hh-sol-cache-2", + "files": { + "/Users/julien/repos/unlock/governance/contracts/past-versions/UnlockV12.sol": { + "lastModificationDate": 1702049079745, + "contentHash": "1cf88791237780dd7b4a24f829a72d3b", + "sourceName": "contracts/past-versions/UnlockV12.sol", + "solcConfig": { + "version": "0.8.21", + "settings": { + "optimizer": { + "enabled": true, + "mode": "3" + }, + "outputSelection": { + "*": { + "*": [ + "storageLayout", + "abi", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + }, + "evmVersion": "paris", + "libraries": {} + }, + "zksolc": { + "version": "1.3.18", + "compilerSource": "binary", + "settings": { + "optimizer": { + "enabled": true, + "mode": "3" + }, + "compilerPath": "/Users/julien/Library/Caches/hardhat-nodejs/compilers-v2/zksolc/zksolc-v1.3.18", + "missingLibrariesPath": "./.zksolc-libraries-cache/missingLibraryDependencies.json", + "areLibrariesMissing": false, + "experimental": {}, + "libraries": {} + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0", + "^0.8.0", + "^0.8.0", + "^0.8.0", + "^0.8.1", + "^0.8.0", + "^0.8.2", + "^0.8.0", + "^0.8.0", + "^0.8.0", + "^0.8.0", + ">=0.5.17 <0.9.0", + ">=0.5.17 <0.9.0", + ">=0.5.0", + ">=0.5.17 <0.9.0", + "^0.8.1", + "^0.8.0", + "^0.8.0", + "^0.8.0", + "^0.8.7" + ], + "artifacts": [ + "Address", + "AddressUpgradeable", + "Context", + "ERC1967Proxy", + "ERC1967Upgrade", + "IBeacon", + "IERC1822Proxiable", + "IMintableERC20", + "IPublicLock", + "IUniswapOracleV3", + "IUnlock", + "Ownable", + "Proxy", + "ProxyAdmin", + "StorageSlot", + "TransparentUpgradeableProxy", + "Unlock", + "UnlockContextUpgradeable", + "UnlockInitializable", + "UnlockOwnable" + ] + } + } +} diff --git a/governance/package.json b/governance/package.json index 978655de5a3..aa46129b6fd 100644 --- a/governance/package.json +++ b/governance/package.json @@ -7,7 +7,6 @@ "@nomicfoundation/hardhat-network-helpers": "1.0.10", "@nomicfoundation/hardhat-verify": "2.0.4", "@nomiclabs/hardhat-ethers": "2.2.3", - "@nomiclabs/hardhat-etherscan": "3.1.8", "@openzeppelin/hardhat-upgrades": "3.0.2", "@openzeppelin/upgrades-core": "1.32.2", "@safe-global/api-kit": "2.0.0", @@ -23,7 +22,7 @@ "fs-extra": "11.2.0", "hardhat": "2.19.5", "solhint": "4.0.0", - "zksync2-js": "0.4.0" + "zksync-web3": "0.14.3" }, "scripts": { "test": "hardhat test", @@ -33,7 +32,7 @@ "lint": "yarn lint:contracts && yarn lint:code" }, "devDependencies": { - "@matterlabs/hardhat-zksync-deploy": "1.0.1", - "@matterlabs/hardhat-zksync-solc": "1.0.3" + "@matterlabs/hardhat-zksync-deploy": "0.6.5", + "@matterlabs/hardhat-zksync-solc": "0.4.2" } } diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 7ba741c5166..5bb398316c9 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -55,7 +55,7 @@ Object.keys(networks).forEach((key) => { name: networks[key].name, url: networks[key].provider, accounts: getAccounts(networks[key].name), - zksync: key === 'zkync', + zksync: key === 'zksync', } } diff --git a/packages/hardhat-helpers/src/upgrades.js b/packages/hardhat-helpers/src/upgrades.js index 90bd5d4a624..7e928c92c93 100644 --- a/packages/hardhat-helpers/src/upgrades.js +++ b/packages/hardhat-helpers/src/upgrades.js @@ -30,7 +30,7 @@ async function copyAndBuildContractsAtVersion(dirname, contracts) { ) // re-compile contract - await run('compile') + await run('compile', { network: 'zksync' }) // get factory using fully qualified path const qualifiedPaths = await Promise.all( diff --git a/yarn.lock b/yarn.lock index 55d19c1fb55..1d5283bfbf6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9240,24 +9240,24 @@ __metadata: languageName: node linkType: hard -"@matterlabs/hardhat-zksync-deploy@npm:1.0.1": - version: 1.0.1 - resolution: "@matterlabs/hardhat-zksync-deploy@npm:1.0.1" +"@matterlabs/hardhat-zksync-deploy@npm:0.6.5": + version: 0.6.5 + resolution: "@matterlabs/hardhat-zksync-deploy@npm:0.6.5" dependencies: - "@matterlabs/hardhat-zksync-solc": "npm:1.0.0" + "@matterlabs/hardhat-zksync-solc": "npm:0.4.2" chalk: "npm:4.1.2" - ts-morph: "npm:^20.0.0" + ts-morph: "npm:^19.0.0" peerDependencies: - ethers: ^6.7.1 - hardhat: ^2.18.1 - zksync2-js: ^0.4.0 - checksum: a682234c68d6918ed53f02ff673a4ca8f135eb6e830ada1215bb4a93ccc6dc0f6683e81ffe28161b63792e448078d6540c440c008cdc2b58b82bd29b18bf0b3e + ethers: ~5.7.2 + hardhat: ^2.14.0 + zksync-web3: ^0.14.3 + checksum: 8df3ac554d31c37289f40ea479edb786e12be69a93c0190ee04dd7ffdf54e5a0f3f88a8eedd5569d3c5e7c22158f6c739cafc3864a1a20bae951daacef03cc70 languageName: node linkType: hard -"@matterlabs/hardhat-zksync-solc@npm:1.0.0": - version: 1.0.0 - resolution: "@matterlabs/hardhat-zksync-solc@npm:1.0.0" +"@matterlabs/hardhat-zksync-solc@npm:0.4.2": + version: 0.4.2 + resolution: "@matterlabs/hardhat-zksync-solc@npm:0.4.2" dependencies: "@nomiclabs/hardhat-docker": "npm:^2.0.0" chalk: "npm:4.1.2" @@ -9266,24 +9266,8 @@ __metadata: proper-lockfile: "npm:^4.1.2" semver: "npm:^7.5.1" peerDependencies: - hardhat: ^2.18.1 - checksum: c572c58ef18075fe7de71698dacdb089691013e47096794c7e5800c46b7bd93e9ba08f9bd9c8355121d075bef04675ea75437e3aa7adfc6421a838cad108cfbe - languageName: node - linkType: hard - -"@matterlabs/hardhat-zksync-solc@npm:1.0.3": - version: 1.0.3 - resolution: "@matterlabs/hardhat-zksync-solc@npm:1.0.3" - dependencies: - "@nomiclabs/hardhat-docker": "npm:^2.0.0" - chalk: "npm:4.1.2" - dockerode: "npm:^4.0.0" - fs-extra: "npm:^11.1.1" - proper-lockfile: "npm:^4.1.2" - semver: "npm:^7.5.1" - peerDependencies: - hardhat: ^2.18.1 - checksum: 3fc46977c60cb0f844e1450168c2c9060fc355f7eb1ae8351f8d863fa01f317cb1939fcb948ca209a55e793eefccf5ddf6c2c42b087b588e95add07414e2c9c0 + hardhat: ^2.14.0 + checksum: e282d67147b254f4243cacdfb2fec3721d82aa57354cfafa0cc5beb2254460d75933143d291cbfdad2a15d9daab5c9b468061abd1ca61d77635aa13570b2b0be languageName: node linkType: hard @@ -17079,15 +17063,15 @@ __metadata: languageName: node linkType: hard -"@ts-morph/common@npm:~0.21.0": - version: 0.21.0 - resolution: "@ts-morph/common@npm:0.21.0" +"@ts-morph/common@npm:~0.20.0": + version: 0.20.0 + resolution: "@ts-morph/common@npm:0.20.0" dependencies: fast-glob: "npm:^3.2.12" minimatch: "npm:^7.4.3" mkdirp: "npm:^2.1.6" path-browserify: "npm:^1.0.1" - checksum: dbfffae478bb9da71182faf87c14f578de21afe098a388bbcbdeebc5864e9f17e136526dbad6a8e760fe20e5bb943b2dfa62dc47d14b8e6e9077ce08f6de6242 + checksum: 853cf73885ebb227134ca6e9c8660f4126c97227b837fe2609aec5b9212d5af7c0c2d48c2c13c48687c003d1a00270dd63d3ab3b5693a1d7b2413a017c1f4c82 languageName: node linkType: hard @@ -19559,13 +19543,12 @@ __metadata: version: 0.0.0-use.local resolution: "@unlock-protocol/governance@workspace:governance" dependencies: - "@matterlabs/hardhat-zksync-deploy": "npm:1.0.1" - "@matterlabs/hardhat-zksync-solc": "npm:1.0.3" + "@matterlabs/hardhat-zksync-deploy": "npm:0.6.5" + "@matterlabs/hardhat-zksync-solc": "npm:0.4.2" "@nomicfoundation/hardhat-ethers": "npm:3.0.5" "@nomicfoundation/hardhat-network-helpers": "npm:1.0.10" "@nomicfoundation/hardhat-verify": "npm:2.0.4" "@nomiclabs/hardhat-ethers": "npm:2.2.3" - "@nomiclabs/hardhat-etherscan": "npm:3.1.8" "@openzeppelin/hardhat-upgrades": "npm:3.0.2" "@openzeppelin/upgrades-core": "npm:1.32.2" "@safe-global/api-kit": "npm:2.0.0" @@ -19581,7 +19564,7 @@ __metadata: fs-extra: "npm:11.2.0" hardhat: "npm:2.19.5" solhint: "npm:4.0.0" - zksync2-js: "npm:0.4.0" + zksync-web3: "npm:0.14.3" languageName: unknown linkType: soft @@ -28835,18 +28818,6 @@ __metadata: languageName: node linkType: hard -"docker-modem@npm:^5.0.0": - version: 5.0.1 - resolution: "docker-modem@npm:5.0.1" - dependencies: - debug: "npm:^4.1.1" - readable-stream: "npm:^3.5.0" - split-ca: "npm:^1.0.1" - ssh2: "npm:^1.11.0" - checksum: 91a054bfddfe50e40ede58f859c28698e973b2aec68428d78e109f3a107ce55ea6155d5ed97e7e39d8fbcf7b6a3ec6c1cf8d52b54518ce8dc6cd9d34e02d9ba4 - languageName: node - linkType: hard - "dockerode@npm:2.5.8, dockerode@npm:^2.5.8": version: 2.5.8 resolution: "dockerode@npm:2.5.8" @@ -28869,17 +28840,6 @@ __metadata: languageName: node linkType: hard -"dockerode@npm:^4.0.0": - version: 4.0.0 - resolution: "dockerode@npm:4.0.0" - dependencies: - "@balena/dockerignore": "npm:^1.0.2" - docker-modem: "npm:^5.0.0" - tar-fs: "npm:~2.0.1" - checksum: e92b7f03252945dc6f04661d78a72ac9e9f3e5128dc04ab3687a648662f572d73e561cce878699870f64c6cd941c90970481791901d7a087d263de0807474eab - languageName: node - linkType: hard - "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -29366,14 +29326,7 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.47": - version: 1.4.623 - resolution: "electron-to-chromium@npm:1.4.623" - checksum: 483640dbbedf46d627f264aae7bd2ef723326488fa5b7730fbe9c53f5bdde25ce421e54134b88ef85649e4473f42e73709692da5bbfb6aec7c08cdfe8c0037e2 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.284": +"electron-to-chromium@npm:^1.3.47, electron-to-chromium@npm:^1.4.284": version: 1.4.397 resolution: "electron-to-chromium@npm:1.4.397" checksum: 4a1c8753dfc47eb7a1a9e425b76ebc7a38f437e3c6f0212c1882ae0dab4f741063a77ceab8bb74d0b596791d0bd6483bdd99cfe22d48c96da782860da40eac5b @@ -53981,13 +53934,13 @@ __metadata: languageName: node linkType: hard -"ts-morph@npm:^20.0.0": - version: 20.0.0 - resolution: "ts-morph@npm:20.0.0" +"ts-morph@npm:^19.0.0": + version: 19.0.0 + resolution: "ts-morph@npm:19.0.0" dependencies: - "@ts-morph/common": "npm:~0.21.0" + "@ts-morph/common": "npm:~0.20.0" code-block-writer: "npm:^12.0.0" - checksum: e93cf96fd347d45c1031de90f50146707959e1564d6e0bdd4abefc32004717f4f2adf5e155956c80f04fca55f6f1bce79193077c0041616ce9fe619bc15159d0 + checksum: edb3542e4540c91ce7752f723386e11804c0ee81e7a6e52907488abb7edf516a3956d404622a008ebaff4d0739e59c7f188cd51c23d3c41158b5f996ada82b09 languageName: node linkType: hard @@ -60055,21 +60008,21 @@ __metadata: languageName: node linkType: hard -"zksync-web3@npm:^0.14.3": - version: 0.14.4 - resolution: "zksync-web3@npm:0.14.4" +"zksync-web3@npm:0.14.3": + version: 0.14.3 + resolution: "zksync-web3@npm:0.14.3" peerDependencies: ethers: ^5.7.0 - checksum: a1566a2a2ba34a3026680f3b4000ffa02593e02d9c73a4dd143bde929b5e39b09544d429bccad0479070670cfdad5f6836cb686c4b8d7954b4d930826be91c92 + checksum: 169952c1200211348261f0ad7ea5ca73094d54e8b83769e746fe28cc9534d01d273404d8a44e7e702197ca2d4425a780ad7cb7dcc24e2c4a4c4f262c327c1b8d languageName: node linkType: hard -"zksync2-js@npm:0.4.0": - version: 0.4.0 - resolution: "zksync2-js@npm:0.4.0" +"zksync-web3@npm:^0.14.3": + version: 0.14.4 + resolution: "zksync-web3@npm:0.14.4" peerDependencies: - ethers: ^6.7.1 - checksum: 0bdd60a70a6fd6eca827f112a69b27f3462ab04aa4ffa54b65651d995d0fbfd6e4d11bef363eddac73682888e368b71f2fe1036edb8417727ac5f85bfb49edd9 + ethers: ^5.7.0 + checksum: a1566a2a2ba34a3026680f3b4000ffa02593e02d9c73a4dd143bde929b5e39b09544d429bccad0479070670cfdad5f6836cb686c4b8d7954b4d930826be91c92 languageName: node linkType: hard From 57728d0ee7c49b2df3c0866583eb6b6a1ae0edd8 Mon Sep 17 00:00:00 2001 From: Julien Genestoux Date: Fri, 5 Jan 2024 14:50:24 -0500 Subject: [PATCH 09/51] wip --- governance/.openzeppelin/goerli.json | 264 ------------------ .../48c222324acb914e3948af93623d7ce8.json | 1 - governance/cache-zk/solidity-files-cache.json | 8 +- governance/package.json | 2 +- yarn.lock | 12 +- 5 files changed, 11 insertions(+), 276 deletions(-) delete mode 100644 governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json diff --git a/governance/.openzeppelin/goerli.json b/governance/.openzeppelin/goerli.json index 2cceedd5814..ebeec7c699d 100644 --- a/governance/.openzeppelin/goerli.json +++ b/governance/.openzeppelin/goerli.json @@ -39,11 +39,6 @@ "address": "0x627118a4fB747016911e5cDA82e2E77C531e8206", "txHash": "0x3971c2eb3bcbf6a9529e96f67e7d33661e15d2e856ec9d6a3fce60d8f4303eb2", "kind": "transparent" - }, - { - "address": "0x6869eD4de72532310E8d995773b05DD79F185Ad7", - "txHash": "0x66436fbaddd795128d946b14ec3cdddfe2419f71e5d6a8781ce0dd64e9965a49", - "kind": "transparent" } ], "impls": { @@ -805,265 +800,6 @@ } } } - }, - "f8c45c6464f6e26e04e38fc842d56ec0a80ff43662fc93d4e83ef71c0c9ca4de": { - "address": "0xD15EBd9F260f668CBD6733339e7741c246fe4494", - "txHash": "0x8b4ef63c00010083b724913bdd9b3b288d8da3479e06665dc696cba1062c9535", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "initialized", - "offset": 0, - "slot": "0", - "type": "t_bool", - "contract": "UnlockInitializable", - "src": "contracts/past-versions/UnlockV12.sol:2346" - }, - { - "label": "initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "UnlockInitializable", - "src": "contracts/past-versions/UnlockV12.sol:2351" - }, - { - "label": "______gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "UnlockContextUpgradeable", - "src": "contracts/past-versions/UnlockV12.sol:2423" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "UnlockOwnable", - "src": "contracts/past-versions/UnlockV12.sol:2449" - }, - { - "label": "______gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)50_storage", - "contract": "UnlockOwnable", - "src": "contracts/past-versions/UnlockV12.sol:2515" - }, - { - "label": "grossNetworkProduct", - "offset": 0, - "slot": "102", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2568" - }, - { - "label": "totalDiscountGranted", - "offset": 0, - "slot": "103", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2570" - }, - { - "label": "locks", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_struct(LockBalances)2798_storage)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2573" - }, - { - "label": "globalBaseTokenURI", - "offset": 0, - "slot": "105", - "type": "t_string_storage", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2577" - }, - { - "label": "globalTokenSymbol", - "offset": 0, - "slot": "106", - "type": "t_string_storage", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2581" - }, - { - "label": "publicLockAddress", - "offset": 0, - "slot": "107", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2584" - }, - { - "label": "uniswapOracles", - "offset": 0, - "slot": "108", - "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)1948)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2588" - }, - { - "label": "weth", - "offset": 0, - "slot": "109", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2591" - }, - { - "label": "udt", - "offset": 0, - "slot": "110", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2594" - }, - { - "label": "estimatedGasForPurchase", - "offset": 0, - "slot": "111", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2597" - }, - { - "label": "chainId", - "offset": 0, - "slot": "112", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2600" - }, - { - "label": "proxyAdminAddress", - "offset": 0, - "slot": "113", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2603" - }, - { - "label": "proxyAdmin", - "offset": 0, - "slot": "114", - "type": "t_contract(ProxyAdmin)1215", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2604" - }, - { - "label": "_publicLockVersions", - "offset": 0, - "slot": "115", - "type": "t_mapping(t_address,t_uint16)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2607" - }, - { - "label": "_publicLockImpls", - "offset": 0, - "slot": "116", - "type": "t_mapping(t_uint16,t_address)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2608" - }, - { - "label": "publicLockLatestVersion", - "offset": 0, - "slot": "117", - "type": "t_uint16", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2609" - }, - { - "label": "protocolFee", - "offset": 0, - "slot": "118", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV12.sol:2612" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IUniswapOracleV3)1948": { - "label": "contract IUniswapOracleV3", - "numberOfBytes": "20" - }, - "t_contract(ProxyAdmin)1215": { - "label": "contract ProxyAdmin", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_contract(IUniswapOracleV3)1948)": { - "label": "mapping(address => contract IUniswapOracleV3)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(LockBalances)2798_storage)": { - "label": "mapping(address => struct Unlock.LockBalances)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint16)": { - "label": "mapping(address => uint16)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint16,t_address)": { - "label": "mapping(uint16 => address)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(LockBalances)2798_storage": { - "label": "struct Unlock.LockBalances", - "members": [ - { - "label": "deployed", - "type": "t_bool", - "offset": 0, - "slot": "0" - }, - { - "label": "totalSales", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "yieldedDiscountTokens", - "type": "t_uint256", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_uint16": { - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - } - } } } } diff --git a/governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json b/governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json deleted file mode 100644 index b10f0aa660e..00000000000 --- a/governance/artifacts-zk/build-info/48c222324acb914e3948af93623d7ce8.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"48c222324acb914e3948af93623d7ce8","_format":"hh-sol-build-info-1","solcVersion":"0.8.21","solcLongVersion":"0.8.21+commit.d9974bed","input":{"language":"Solidity","sources":{"contracts/past-versions/UnlockV12.sol":{"content":"// Sources flattened with hardhat v2.12.6 https://hardhat.org\n\n// File @openzeppelin/contracts/utils/Context.sol@v4.8.2\n\n// SPDX-License-Identifier: MIT\n\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n\n// File @openzeppelin/contracts/access/Ownable.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n\n// File @openzeppelin/contracts/interfaces/draft-IERC1822.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n\n// File @openzeppelin/contracts/proxy/beacon/IBeacon.sol@v4.8.2\n\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n\n// File @openzeppelin/contracts/utils/Address.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(\n success,\n \"Address: unable to send value, recipient may have reverted\"\n );\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(\n target,\n data,\n value,\n \"Address: low-level call with value failed\"\n );\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(\n address(this).balance >= value,\n \"Address: insufficient balance for call\"\n );\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data\n ) internal view returns (bytes memory) {\n return\n functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return\n functionDelegateCall(\n target,\n data,\n \"Address: low-level delegate call failed\"\n );\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(\n bytes memory returndata,\n string memory errorMessage\n ) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n}\n\n// File @openzeppelin/contracts/utils/StorageSlot.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(\n bytes32 slot\n ) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(\n bytes32 slot\n ) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(\n bytes32 slot\n ) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(\n bytes32 slot\n ) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n}\n\n// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT =\n 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT =\n 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(\n Address.isContract(newImplementation),\n \"ERC1967: new implementation is not a contract\"\n );\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (\n bytes32 slot\n ) {\n require(\n slot == _IMPLEMENTATION_SLOT,\n \"ERC1967Upgrade: unsupported proxiableUUID\"\n );\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT =\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT =\n 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(\n Address.isContract(newBeacon),\n \"ERC1967: new beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(newBeacon).implementation()),\n \"ERC1967: beacon implementation is not a contract\"\n );\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n\n// File @openzeppelin/contracts/proxy/Proxy.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overridden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n\n// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation()\n internal\n view\n virtual\n override\n returns (address impl)\n {\n return ERC1967Upgrade._getImplementation();\n }\n}\n\n// File @openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(\n address newImplementation,\n bytes calldata data\n ) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(\n msg.sender != _getAdmin(),\n \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\"\n );\n super._beforeFallback();\n }\n}\n\n// File @openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol@v4.8.2\n\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(\n TransparentUpgradeableProxy proxy\n ) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(\n hex\"5c60da1b\"\n );\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(\n TransparentUpgradeableProxy proxy\n ) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(\n hex\"f851a440\"\n );\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(\n TransparentUpgradeableProxy proxy,\n address newAdmin\n ) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(\n TransparentUpgradeableProxy proxy,\n address implementation\n ) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n\n// File contracts/interfaces/IMintableERC20.sol\n\npragma solidity >=0.5.17 <0.9.0;\n\ninterface IMintableERC20 {\n function mint(address account, uint256 amount) external returns (bool);\n\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address account) external view returns (uint256);\n\n function approve(address spender, uint256 amount) external returns (bool);\n}\n\n// File contracts/interfaces/IPublicLock.sol\n\npragma solidity >=0.5.17 <0.9.0;\npragma experimental ABIEncoderV2;\n\n/**\n * @title The PublicLock Interface\n */\n\ninterface IPublicLock {\n /// Functions\n function initialize(\n address _lockCreator,\n uint _expirationDuration,\n address _tokenAddress,\n uint _keyPrice,\n uint _maxNumberOfKeys,\n string calldata _lockName\n ) external;\n\n // default role from OpenZeppelin\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32 role);\n\n /**\n * @notice The version number of the current implementation on this network.\n * @return The current version number.\n */\n function publicLockVersion() external pure returns (uint16);\n\n /**\n * @dev Called by lock manager to withdraw all funds from the lock\n * @param _tokenAddress specifies the token address to withdraw or 0 for ETH. This is usually\n * the same as `tokenAddress` in MixinFunds.\n * @param _recipient specifies the address that will receive the tokens\n * @param _amount specifies the max amount to withdraw, which may be reduced when\n * considering the available balance. Set to 0 or MAX_UINT to withdraw everything.\n * -- however be wary of draining funds as it breaks the `cancelAndRefund` and `expireAndRefundFor` use cases.\n */\n function withdraw(\n address _tokenAddress,\n address payable _recipient,\n uint _amount\n ) external;\n\n /**\n * A function which lets a Lock manager of the lock to change the price for future purchases.\n * @dev Throws if called by other than a Lock manager\n * @dev Throws if lock has been disabled\n * @dev Throws if _tokenAddress is not a valid token\n * @param _keyPrice The new price to set for keys\n * @param _tokenAddress The address of the erc20 token to use for pricing the keys,\n * or 0 to use ETH\n */\n function updateKeyPricing(uint _keyPrice, address _tokenAddress) external;\n\n /**\n * Update the main key properties for the entire lock:\n *\n * - default duration of each key\n * - the maximum number of keys the lock can edit\n * - the maximum number of keys a single address can hold\n *\n * @notice keys previously bought are unaffected by this changes in expiration duration (i.e.\n * existing keys timestamps are not recalculated/updated)\n * @param _newExpirationDuration the new amount of time for each key purchased or type(uint).max for a non-expiring key\n * @param _maxKeysPerAcccount the maximum amount of key a single user can own\n * @param _maxNumberOfKeys uint the maximum number of keys\n * @dev _maxNumberOfKeys Can't be smaller than the existing supply\n */\n function updateLockConfig(\n uint _newExpirationDuration,\n uint _maxNumberOfKeys,\n uint _maxKeysPerAcccount\n ) external;\n\n /**\n * Checks if the user has a non-expired key.\n * @param _user The address of the key owner\n */\n function getHasValidKey(address _user) external view returns (bool);\n\n /**\n * @dev Returns the key's ExpirationTimestamp field for a given owner.\n * @param _tokenId the id of the key\n * @dev Returns 0 if the owner has never owned a key for this lock\n */\n function keyExpirationTimestampFor(\n uint _tokenId\n ) external view returns (uint timestamp);\n\n /**\n * Public function which returns the total number of unique owners (both expired\n * and valid). This may be larger than totalSupply.\n */\n function numberOfOwners() external view returns (uint);\n\n /**\n * Allows the Lock owner to assign\n * @param _lockName a descriptive name for this Lock.\n * @param _lockSymbol a Symbol for this Lock (default to KEY).\n * @param _baseTokenURI the baseTokenURI for this Lock\n */\n function setLockMetadata(\n string calldata _lockName,\n string calldata _lockSymbol,\n string calldata _baseTokenURI\n ) external;\n\n /**\n * @dev Gets the token symbol\n * @return string representing the token symbol\n */\n function symbol() external view returns (string memory);\n\n /** @notice A distinct Uniform Resource Identifier (URI) for a given asset.\n * @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC\n * 3986. The URI may point to a JSON file that conforms to the \"ERC721\n * Metadata JSON Schema\".\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n * @param _tokenId The tokenID we're inquiring about\n * @return String representing the URI for the requested token\n */\n function tokenURI(uint256 _tokenId) external view returns (string memory);\n\n /**\n * Allows a Lock manager to add or remove an event hook\n * @param _onKeyPurchaseHook Hook called when the `purchase` function is called\n * @param _onKeyCancelHook Hook called when the internal `_cancelAndRefund` function is called\n * @param _onValidKeyHook Hook called to determine if the contract should overide the status for a given address\n * @param _onTokenURIHook Hook called to generate a data URI used for NFT metadata\n * @param _onKeyTransferHook Hook called when a key is transfered\n * @param _onKeyExtendHook Hook called when a key is extended or renewed\n * @param _onKeyGrantHook Hook called when a key is granted\n */\n function setEventHooks(\n address _onKeyPurchaseHook,\n address _onKeyCancelHook,\n address _onValidKeyHook,\n address _onTokenURIHook,\n address _onKeyTransferHook,\n address _onKeyExtendHook,\n address _onKeyGrantHook\n ) external;\n\n /**\n * Allows a Lock manager to give a collection of users a key with no charge.\n * Each key may be assigned a different expiration date.\n * @dev Throws if called by other than a Lock manager\n * @param _recipients An array of receiving addresses\n * @param _expirationTimestamps An array of expiration Timestamps for the keys being granted\n * @return the ids of the granted tokens\n */\n function grantKeys(\n address[] calldata _recipients,\n uint[] calldata _expirationTimestamps,\n address[] calldata _keyManagers\n ) external returns (uint256[] memory);\n\n /**\n * Allows the Lock owner to extend an existing keys with no charge.\n * @param _tokenId The id of the token to extend\n * @param _duration The duration in secondes to add ot the key\n * @dev set `_duration` to 0 to use the default duration of the lock\n */\n function grantKeyExtension(uint _tokenId, uint _duration) external;\n\n /**\n * @dev Purchase function\n * @param _values array of tokens amount to pay for this purchase >= the current keyPrice - any applicable discount\n * (_values is ignored when using ETH)\n * @param _recipients array of addresses of the recipients of the purchased key\n * @param _referrers array of addresses of the users making the referral\n * @param _keyManagers optional array of addresses to grant managing rights to a specific address on creation\n * @param _data array of arbitrary data populated by the front-end which initiated the sale\n * @notice when called for an existing and non-expired key, the `_keyManager` param will be ignored\n * @dev Setting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the\n * price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more\n * than keyPrice is approved for spending).\n * @return tokenIds the ids of the created tokens\n */\n function purchase(\n uint256[] calldata _values,\n address[] calldata _recipients,\n address[] calldata _referrers,\n address[] calldata _keyManagers,\n bytes[] calldata _data\n ) external payable returns (uint256[] memory tokenIds);\n\n /**\n * @dev Extend function\n * @param _value the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount\n * (_value is ignored when using ETH)\n * @param _tokenId the id of the key to extend\n * @param _referrer address of the user making the referral\n * @param _data arbitrary data populated by the front-end which initiated the sale\n * @dev Throws if lock is disabled or key does not exist for _recipient. Throws if _recipient == address(0).\n */\n function extend(\n uint _value,\n uint _tokenId,\n address _referrer,\n bytes calldata _data\n ) external payable;\n\n /**\n * Returns the percentage of the keyPrice to be sent to the referrer (in basis points)\n * @param _referrer the address of the referrer\n * @return referrerFee the percentage of the keyPrice to be sent to the referrer (in basis points)\n */\n function referrerFees(\n address _referrer\n ) external view returns (uint referrerFee);\n\n /**\n * Set a specific percentage of the keyPrice to be sent to the referrer while purchasing,\n * extending or renewing a key.\n * @param _referrer the address of the referrer\n * @param _feeBasisPoint the percentage of the price to be used for this\n * specific referrer (in basis points)\n * @dev To send a fixed percentage of the key price to all referrers, sett a percentage to `address(0)`\n */\n function setReferrerFee(address _referrer, uint _feeBasisPoint) external;\n\n /**\n * Merge existing keys\n * @param _tokenIdFrom the id of the token to substract time from\n * @param _tokenIdTo the id of the destination token to add time\n * @param _amount the amount of time to transfer (in seconds)\n */\n function mergeKeys(uint _tokenIdFrom, uint _tokenIdTo, uint _amount) external;\n\n /**\n * Deactivate an existing key\n * @param _tokenId the id of token to burn\n * @notice the key will be expired and ownership records will be destroyed\n */\n function burn(uint _tokenId) external;\n\n /**\n * @param _gasRefundValue price in wei or token in smallest price unit\n * @dev Set the value to be refunded to the sender on purchase\n */\n function setGasRefundValue(uint256 _gasRefundValue) external;\n\n /**\n * _gasRefundValue price in wei or token in smallest price unit\n * @dev Returns the value/price to be refunded to the sender on purchase\n */\n function gasRefundValue() external view returns (uint256 _gasRefundValue);\n\n /**\n * @notice returns the minimum price paid for a purchase with these params.\n * @dev this considers any discount from Unlock or the OnKeyPurchase hook.\n */\n function purchasePriceFor(\n address _recipient,\n address _referrer,\n bytes calldata _data\n ) external view returns (uint);\n\n /**\n * Allow a Lock manager to change the transfer fee.\n * @dev Throws if called by other than a Lock manager\n * @param _transferFeeBasisPoints The new transfer fee in basis-points(bps).\n * Ex: 200 bps = 2%\n */\n function updateTransferFee(uint _transferFeeBasisPoints) external;\n\n /**\n * Determines how much of a fee would need to be paid in order to\n * transfer to another account. This is pro-rated so the fee goes\n * down overtime.\n * @dev Throws if _tokenId does not have a valid key\n * @param _tokenId The id of the key check the transfer fee for.\n * @param _time The amount of time to calculate the fee for.\n * @return The transfer fee in seconds.\n */\n function getTransferFee(\n uint _tokenId,\n uint _time\n ) external view returns (uint);\n\n /**\n * @dev Invoked by a Lock manager to expire the user's key\n * and perform a refund and cancellation of the key\n * @param _tokenId The key id we wish to refund to\n * @param _amount The amount to refund to the key-owner\n * @dev Throws if called by other than a Lock manager\n * @dev Throws if _keyOwner does not have a valid key\n */\n function expireAndRefundFor(uint _tokenId, uint _amount) external;\n\n /**\n * @dev allows the key manager to expire a given tokenId\n * and send a refund to the keyOwner based on the amount of time remaining.\n * @param _tokenId The id of the key to cancel.\n * @notice cancel is enabled with a 10% penalty by default on all Locks.\n */\n function cancelAndRefund(uint _tokenId) external;\n\n /**\n * Allow a Lock manager to change the refund penalty.\n * @dev Throws if called by other than a Lock manager\n * @param _freeTrialLength The new duration of free trials for this lock\n * @param _refundPenaltyBasisPoints The new refund penaly in basis-points(bps)\n */\n function updateRefundPenalty(\n uint _freeTrialLength,\n uint _refundPenaltyBasisPoints\n ) external;\n\n /**\n * @dev Determines how much of a refund a key owner would receive if they issued\n * @param _tokenId the id of the token to get the refund value for.\n * @notice Due to the time required to mine a tx, the actual refund amount will be lower\n * than what the user reads from this call.\n * @return refund the amount of tokens refunded\n */\n function getCancelAndRefundValue(\n uint _tokenId\n ) external view returns (uint refund);\n\n function addLockManager(address account) external;\n\n function isLockManager(address account) external view returns (bool);\n\n /**\n * Returns the address of the `onKeyPurchaseHook` hook.\n * @return hookAddress address of the hook\n */\n function onKeyPurchaseHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyCancelHook` hook.\n * @return hookAddress address of the hook\n */\n function onKeyCancelHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onValidKeyHook` hook.\n * @return hookAddress address of the hook\n */\n function onValidKeyHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onTokenURIHook` hook.\n * @return hookAddress address of the hook\n */\n function onTokenURIHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyTransferHook` hook.\n * @return hookAddress address of the hook\n */\n function onKeyTransferHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyExtendHook` hook.\n * @return hookAddress the address ok the hook\n */\n function onKeyExtendHook() external view returns (address hookAddress);\n\n /**\n * Returns the address of the `onKeyGrantHook` hook.\n * @return hookAddress the address ok the hook\n */\n function onKeyGrantHook() external view returns (address hookAddress);\n\n function renounceLockManager() external;\n\n /**\n * @return the maximum number of key allowed for a single address\n */\n function maxKeysPerAddress() external view returns (uint);\n\n function expirationDuration() external view returns (uint256);\n\n function freeTrialLength() external view returns (uint256);\n\n function keyPrice() external view returns (uint256);\n\n function maxNumberOfKeys() external view returns (uint256);\n\n function refundPenaltyBasisPoints() external view returns (uint256);\n\n function tokenAddress() external view returns (address);\n\n function transferFeeBasisPoints() external view returns (uint256);\n\n function unlockProtocol() external view returns (address);\n\n function keyManagerOf(uint) external view returns (address);\n\n ///===================================================================\n\n /**\n * @notice Allows the key owner to safely share their key (parent key) by\n * transferring a portion of the remaining time to a new key (child key).\n * @dev Throws if key is not valid.\n * @dev Throws if `_to` is the zero address\n * @param _to The recipient of the shared key\n * @param _tokenId the key to share\n * @param _timeShared The amount of time shared\n * checks if `_to` is a smart contract (code size > 0). If so, it calls\n * `onERC721Received` on `_to` and throws if the return value is not\n * `bytes4(keccak256('onERC721Received(address,address,uint,bytes)'))`.\n * @dev Emit Transfer event\n */\n function shareKey(address _to, uint _tokenId, uint _timeShared) external;\n\n /**\n * @notice Update transfer and cancel rights for a given key\n * @param _tokenId The id of the key to assign rights for\n * @param _keyManager The address to assign the rights to for the given key\n */\n function setKeyManagerOf(uint _tokenId, address _keyManager) external;\n\n /**\n * Check if a certain key is valid\n * @param _tokenId the id of the key to check validity\n * @notice this makes use of the onValidKeyHook if it is set\n */\n function isValidKey(uint _tokenId) external view returns (bool);\n\n /**\n * Returns the number of keys owned by `_keyOwner` (expired or not)\n * @param _keyOwner address for which we are retrieving the total number of keys\n * @return numberOfKeys total number of keys owned by the address\n */\n function totalKeys(\n address _keyOwner\n ) external view returns (uint numberOfKeys);\n\n /// @notice A descriptive name for a collection of NFTs in this contract\n function name() external view returns (string memory _name);\n\n ///===================================================================\n\n /// From ERC165.sol\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n\n ///===================================================================\n\n /// From ERC-721\n /**\n * In the specific case of a Lock, `balanceOf` returns only the tokens with a valid expiration timerange\n * @return balance The number of valid keys owned by `_keyOwner`\n */\n function balanceOf(address _owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the NFT specified by `tokenId`.\n */\n function ownerOf(uint256 tokenId) external view returns (address _owner);\n\n /**\n * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to\n * another (`to`).\n *\n * Requirements:\n * - `from`, `to` cannot be zero.\n * - `tokenId` must be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this\n * NFT by either {approve} or {setApprovalForAll}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * an ERC721-like function to transfer a token from one account to another.\n * @param from the owner of token to transfer\n * @param to the address that will receive the token\n * @param tokenId the id of the token\n * @dev Requirements: if the caller is not `from`, it must be approved to move this token by\n * either {approve} or {setApprovalForAll}.\n * The key manager will be reset to address zero after the transfer\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * Lending a key allows you to transfer the token while retaining the\n * ownerships right by setting yourself as a key manager first.\n * @param from the owner of token to transfer\n * @param to the address that will receive the token\n * @param tokenId the id of the token\n * @notice This function can only be called by 1) the key owner when no key manager is set or 2) the key manager.\n * After calling the function, the `_recipent` will be the new owner, and the sender of the tx\n * will become the key manager.\n */\n function lendKey(address from, address to, uint tokenId) external;\n\n /**\n * Unlend is called when you have lent a key and want to claim its full ownership back.\n * @param _recipient the address that will receive the token ownership\n * @param _tokenId the id of the token\n * @dev Only the key manager of the token can call this function\n */\n function unlendKey(address _recipient, uint _tokenId) external;\n\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @notice Get the approved address for a single NFT\n * @dev Throws if `_tokenId` is not a valid NFT.\n * @param _tokenId The NFT to find the approved address for\n * @return operator The approved address for this NFT, or the zero address if there is none\n */\n function getApproved(\n uint256 _tokenId\n ) external view returns (address operator);\n\n /**\n * @dev Sets or unsets the approval of a given operator\n * An operator is allowed to transfer all tokens of the sender on their behalf\n * @param _operator operator address to set the approval\n * @param _approved representing the status of the approval to be set\n * @notice disabled when transfers are disabled\n */\n function setApprovalForAll(address _operator, bool _approved) external;\n\n /**\n * @dev Tells whether an operator is approved by a given keyManager\n * @param _owner owner address which you want to query the approval of\n * @param _operator operator address which you want to query the approval of\n * @return bool whether the given operator is approved by the given owner\n */\n function isApprovedForAll(\n address _owner,\n address _operator\n ) external view returns (bool);\n\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes calldata data\n ) external;\n\n /**\n * Returns the total number of keys, including non-valid ones\n * @return _totalKeysCreated the total number of keys, valid or not\n */\n function totalSupply() external view returns (uint256 _totalKeysCreated);\n\n function tokenOfOwnerByIndex(\n address _owner,\n uint256 index\n ) external view returns (uint256 tokenId);\n\n function tokenByIndex(uint256 index) external view returns (uint256);\n\n /**\n * Innherited from Open Zeppelin AccessControl.sol\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /** `owner()` is provided as an helper to mimick the `Ownable` contract ABI.\n * The `Ownable` logic is used by many 3rd party services to determine\n * contract ownership - e.g. who is allowed to edit metadata on Opensea.\n *\n * @notice This logic is NOT used internally by the Unlock Protocol and is made\n * available only as a convenience helper.\n */\n function owner() external view returns (address owner);\n\n function setOwner(address account) external;\n\n function isOwner(address account) external view returns (bool isOwner);\n\n /**\n * Migrate data from the previous single owner => key mapping to\n * the new data structure w multiple tokens.\n * @param _calldata an ABI-encoded representation of the params (v10: the number of records to migrate as `uint`)\n * @dev when all record schemas are sucessfully upgraded, this function will update the `schemaVersion`\n * variable to the latest/current lock version\n */\n function migrate(bytes calldata _calldata) external;\n\n /**\n * Returns the version number of the data schema currently used by the lock\n * @notice if this is different from `publicLockVersion`, then the ability to purchase, grant\n * or extend keys is disabled.\n * @dev will return 0 if no ;igration has ever been run\n */\n function schemaVersion() external view returns (uint);\n\n /**\n * Set the schema version to the latest\n * @notice only lock manager call call this\n */\n function updateSchemaVersion() external;\n\n /**\n * Renew a given token\n * @notice only works for non-free, expiring, ERC20 locks\n * @param _tokenId the ID fo the token to renew\n * @param _referrer the address of the person to be granted UDT\n */\n function renewMembershipFor(uint _tokenId, address _referrer) external;\n\n /**\n * @dev helper to check if a key is currently renewable\n * it will revert if the pricing or duration of the lock have been modified\n * unfavorably since the key was bought(price increase or duration decrease).\n * It will also revert if a lock is not renewable or if the key is not ready for renewal yet\n * (at least 90% expired).\n * @param tokenId the id of the token to check\n * @param referrer the address where to send the referrer fee\n * @return true if the terms has changed\n */\n function isRenewable(\n uint256 tokenId,\n address referrer\n ) external view returns (bool);\n}\n\n// File contracts/interfaces/IUniswapOracleV3.sol\n\npragma solidity >=0.5.0;\n\ninterface IUniswapOracleV3 {\n function PERIOD() external returns (uint256);\n\n function factory() external returns (address);\n\n function update(address _tokenIn, address _tokenOut) external;\n\n function consult(\n address _tokenIn,\n uint256 _amountIn,\n address _tokenOut\n ) external view returns (uint256 _amountOut);\n\n function updateAndConsult(\n address _tokenIn,\n uint256 _amountIn,\n address _tokenOut\n ) external returns (uint256 _amountOut);\n}\n\n// File contracts/interfaces/IUnlock.sol\n\npragma solidity >=0.5.17 <0.9.0;\n\n/**\n * @title The Unlock Interface\n **/\n\ninterface IUnlock {\n // Use initialize instead of a constructor to support proxies(for upgradeability via zos).\n function initialize(address _unlockOwner) external;\n\n /**\n * @dev deploy a ProxyAdmin contract used to upgrade locks\n */\n function initializeProxyAdmin() external;\n\n /**\n * Retrieve the contract address of the proxy admin that manages the locks\n * @return _proxyAdminAddress the address of the ProxyAdmin instance\n */\n function proxyAdminAddress()\n external\n view\n returns (address _proxyAdminAddress);\n\n /**\n * @notice Create lock (legacy)\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param _expirationDuration the duration of the lock (pass 0 for unlimited duration)\n * @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n * @param _keyPrice the price of each key\n * @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n * @param _lockName the name of the lock\n * param _salt [deprec] -- kept only for backwards copatibility\n * This may be implemented as a sequence ID or with RNG. It's used with `create2`\n * to know the lock's address before the transaction is mined.\n * @dev internally call `createUpgradeableLock`\n */\n function createLock(\n uint _expirationDuration,\n address _tokenAddress,\n uint _keyPrice,\n uint _maxNumberOfKeys,\n string calldata _lockName,\n bytes12 // _salt\n ) external returns (address);\n\n /**\n * @notice Create lock (default)\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param data bytes containing the call to initialize the lock template\n * @dev this call is passed as encoded function - for instance:\n * bytes memory data = abi.encodeWithSignature(\n * 'initialize(address,uint256,address,uint256,uint256,string)',\n * msg.sender,\n * _expirationDuration,\n * _tokenAddress,\n * _keyPrice,\n * _maxNumberOfKeys,\n * _lockName\n * );\n * @return address of the create lock\n */\n function createUpgradeableLock(bytes memory data) external returns (address);\n\n /**\n * Create an upgradeable lock using a specific PublicLock version\n * @param data bytes containing the call to initialize the lock template\n * (refer to createUpgradeableLock for more details)\n * @param _lockVersion the version of the lock to use\n */\n function createUpgradeableLockAtVersion(\n bytes memory data,\n uint16 _lockVersion\n ) external returns (address);\n\n /**\n * @notice Upgrade a lock to a specific version\n * @dev only available for publicLockVersion > 10 (proxyAdmin /required)\n * @param lockAddress the existing lock address\n * @param version the version number you are targeting\n * Likely implemented with OpenZeppelin TransparentProxy contract\n */\n function upgradeLock(\n address payable lockAddress,\n uint16 version\n ) external returns (address);\n\n /**\n * This function keeps track of the added GDP, as well as grants of discount tokens\n * to the referrer, if applicable.\n * The number of discount tokens granted is based on the value of the referal,\n * the current growth rate and the lock's discount token distribution rate\n * This function is invoked by a previously deployed lock only.\n */\n function recordKeyPurchase(\n uint _value,\n address _referrer // solhint-disable-line no-unused-vars\n ) external;\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] Kept for backwards compatibility\n * This function will keep track of consumed discounts by a given user.\n * It will also grant discount tokens to the creator who is granting the discount based on the\n * amount of discount and compensation rate.\n * This function is invoked by a previously deployed lock only.\n */\n function recordConsumedDiscount(\n uint _discount,\n uint _tokens // solhint-disable-line no-unused-vars\n ) external view;\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] Kept for backwards compatibility\n * This function returns the discount available for a user, when purchasing a\n * a key from a lock.\n * This does not modify the state. It returns both the discount and the number of tokens\n * consumed to grant that discount.\n */\n function computeAvailableDiscountFor(\n address _purchaser, // solhint-disable-line no-unused-vars\n uint _keyPrice // solhint-disable-line no-unused-vars\n ) external pure returns (uint discount, uint tokens);\n\n // Function to read the globalTokenURI field.\n function globalBaseTokenURI() external view returns (string memory);\n\n /**\n * @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalBaseTokenURI() external view returns (string memory);\n\n // Function to read the globalTokenSymbol field.\n function globalTokenSymbol() external view returns (string memory);\n\n // Function to read the chainId field.\n function chainId() external view returns (uint);\n\n /**\n * @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalTokenSymbol() external view returns (string memory);\n\n /**\n * @notice Allows the owner to update configuration variables\n */\n function configUnlock(\n address _udt,\n address _weth,\n uint _estimatedGasForPurchase,\n string calldata _symbol,\n string calldata _URI,\n uint _chainId\n ) external;\n\n /**\n * @notice Add a PublicLock template to be used for future calls to `createLock`.\n * @dev This is used to upgrade conytract per version number\n */\n function addLockTemplate(address impl, uint16 version) external;\n\n /**\n * Match lock templates addresses with version numbers\n * @param _version the number of the version of the template\n * @return _implAddress address of the lock templates\n */\n function publicLockImpls(\n uint16 _version\n ) external view returns (address _implAddress);\n\n /**\n * Match version numbers with lock templates addresses\n * @param _impl the address of the deployed template contract (PublicLock)\n * @return number of the version corresponding to this address\n */\n function publicLockVersions(address _impl) external view returns (uint16);\n\n /**\n * Retrive the latest existing lock template version\n * @return _version the version number of the latest template (used to deploy contracts)\n */\n function publicLockLatestVersion() external view returns (uint16 _version);\n\n /**\n * @notice Upgrade the PublicLock template used for future calls to `createLock`.\n * @dev This will initialize the template and revokeOwnership.\n */\n function setLockTemplate(address payable _publicLockAddress) external;\n\n // Allows the owner to change the value tracking variables as needed.\n function resetTrackedValue(\n uint _grossNetworkProduct,\n uint _totalDiscountGranted\n ) external;\n\n function grossNetworkProduct() external view returns (uint);\n\n function totalDiscountGranted() external view returns (uint);\n\n function locks(\n address\n )\n external\n view\n returns (bool deployed, uint totalSales, uint yieldedDiscountTokens);\n\n // The address of the public lock template, used when `createLock` is called\n function publicLockAddress() external view returns (address);\n\n // Map token address to exchange contract address if the token is supported\n // Used for GDP calculations\n function uniswapOracles(address) external view returns (address);\n\n // The WETH token address, used for value calculations\n function weth() external view returns (address);\n\n // The UDT token address, used to mint tokens on referral\n function udt() external view returns (address);\n\n // The approx amount of gas required to purchase a key\n function estimatedGasForPurchase() external view returns (uint);\n\n /**\n * Helper to get the network mining basefee as introduced in EIP-1559\n * @dev this helper can be wrapped in try/catch statement to avoid\n * revert in networks where EIP-1559 is not implemented\n */\n function networkBaseFee() external view returns (uint);\n\n // The version number of the current Unlock implementation on this network\n function unlockVersion() external pure returns (uint16);\n\n /**\n * @notice allows the owner to set the oracle address to use for value conversions\n * setting the _oracleAddress to address(0) removes support for the token\n * @dev This will also call update to ensure at least one datapoint has been recorded.\n */\n function setOracle(address _tokenAddress, address _oracleAddress) external;\n\n // Initialize the Ownable contract, granting contract ownership to the specified sender\n function __initializeOwnable(address sender) external;\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() external view returns (bool);\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() external view returns (address);\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() external;\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) external;\n\n /**\n * Set the fee collected by the protocol\n * @param _protocolFee fee (in basis points)\n */\n function setProtocolFee(uint _protocolFee) external;\n\n /**\n * The fee (in basis points) collected by the protocol on each purchase / \n extension / renewal of a key\n * @return the protocol fee in basic point\n */\n function protocolFee() external view returns (uint);\n\n /**\n * Returns the ProxyAdmin contract address that manage upgrades for\n * the current Unlock contract.\n * @dev this reads the address directly from storage, at the slot `_ADMIN_SLOT`\n * defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds\n * to the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1\n */\n function getAdmin() external view returns (address);\n\n /**\n * Call executed by a lock after its version upgrade triggred by `upgradeLock`\n * - PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance\n * of the Unlock contract\n * @dev The `msg.sender` will be the upgraded lock\n */\n function postLockUpgrade() external;\n\n /**\n * Functions which transfers tokens held by the contract\n * It handles both ERC20 and the base currency.\n * @dev This function is onlyOwner\n * @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n * @param to the address to transfer the tokens to\n * @param amount the amount of tokens to transfer\n */\n function transferTokens(address token, address to, uint256 amount) external;\n\n /**\n * Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n * The lock will still be able to sell its memberships.\n * @dev This function is onlyOwner\n * @param lock address of the lock to remove\n */\n function removeLock(address lock) external;\n}\n\n// File @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol@v4.8.2\n\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(\n success,\n \"Address: unable to send value, recipient may have reverted\"\n );\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return\n functionCallWithValue(\n target,\n data,\n value,\n \"Address: low-level call with value failed\"\n );\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(\n address(this).balance >= value,\n \"Address: insufficient balance for call\"\n );\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data\n ) internal view returns (bytes memory) {\n return\n functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return\n verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(\n bytes memory returndata,\n string memory errorMessage\n ) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n}\n\n// File contracts/utils/UnlockInitializable.sol\n\n// OpenZeppelin Contracts v4.4.1 (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract UnlockInitializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(\n initializing ? _isConstructor() : !initialized,\n \"ALREADY_INITIALIZED\"\n );\n\n bool isTopLevelCall = !initializing;\n if (isTopLevelCall) {\n initializing = true;\n initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(initializing, \"NOT_INITIALIZING\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n\n// File contracts/utils/UnlockContextUpgradeable.sol\n\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract UnlockContextUpgradeable is UnlockInitializable {\n function __Context_init() internal onlyInitializing {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal onlyInitializing {}\n\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n uint256[50] private ______gap;\n}\n\n// File contracts/utils/UnlockOwnable.sol\n\n// OpenZeppelin Contracts v4.3.2 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be aplied to your functions to restrict their use to\n * the owner.\n *\n * This contract was originally part of openzeppelin/contracts-ethereum-package\n * but had to be included (instead of using the one in openzeppelin/contracts-upgradeable )\n * because the ______gap array length was 49 instead of 50\n */\nabstract contract UnlockOwnable is\n UnlockInitializable,\n UnlockContextUpgradeable\n{\n address private _owner;\n\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __initializeOwnable(address sender) public initializer {\n _owner = sender;\n emit OwnershipTransferred(address(0), _owner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(isOwner(), \"ONLY_OWNER\");\n _;\n }\n\n /**\n * @dev Returns true if the caller is the current owner.\n */\n function isOwner() public view returns (bool) {\n return _msgSender() == _owner;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * > Note: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public onlyOwner {\n require(newOwner != address(0), \"INVALID_OWNER\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n */\n function _transferOwnership(address newOwner) internal {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n uint256[50] private ______gap;\n}\n\n// File contracts/Unlock.sol\n\npragma solidity ^0.8.7;\n\n/**\n * @title The Unlock contract\n * @author Julien Genestoux (unlock-protocol.com)\n * This smart contract has 3 main roles:\n * 1. Distribute discounts to discount token holders\n * 2. Grant dicount tokens to users making referrals and/or publishers granting discounts.\n * 3. Create & deploy Public Lock contracts.\n * In order to achieve these 3 elements, it keeps track of several things such as\n * a. Deployed locks addresses and balances of discount tokens granted by each lock.\n * b. The total network product (sum of all key sales, net of discounts)\n * c. Total of discounts granted\n * d. Balances of discount tokens, including 'frozen' tokens (which have been used to claim\n * discounts and cannot be used/transferred for a given period)\n * e. Growth rate of Network Product\n * f. Growth rate of Discount tokens supply\n * The smart contract has an owner who only can perform the following\n * - Upgrades\n * - Change in golden rules (20% of GDP available in discounts, and supply growth rate is at most\n * 50% of GNP growth rate)\n * NOTE: This smart contract is partially implemented for now until enough Locks are deployed and\n * in the wild.\n * The partial implementation includes the following features:\n * a. Keeping track of deployed locks\n * b. Keeping track of GNP\n */\n\n/// @dev Must list the direct base contracts in the order from “most base-like” to “most derived”.\n/// https://solidity.readthedocs.io/en/latest/contracts.html#multiple-inheritance-and-linearization\ncontract Unlock is UnlockInitializable, UnlockOwnable {\n /**\n * The struct for a lock\n * We use deployed to keep track of deployments.\n * This is required because both totalSales and yieldedDiscountTokens are 0 when initialized,\n * which would be the same values when the lock is not set.\n */\n struct LockBalances {\n bool deployed;\n uint totalSales; // This is in wei\n uint yieldedDiscountTokens;\n }\n\n modifier onlyFromDeployedLock() {\n require(locks[msg.sender].deployed, \"ONLY_LOCKS\");\n _;\n }\n\n uint public grossNetworkProduct;\n\n uint public totalDiscountGranted;\n\n // We keep track of deployed locks to ensure that callers are all deployed locks.\n mapping(address => LockBalances) public locks;\n\n // global base token URI\n // Used by locks where the owner has not set a custom base URI.\n string public globalBaseTokenURI;\n\n // global base token symbol\n // Used by locks where the owner has not set a custom symbol\n string public globalTokenSymbol;\n\n // The address of the latest public lock template, used by default when `createLock` is called\n address public publicLockAddress;\n\n // Map token address to oracle contract address if the token is supported\n // Used for GDP calculations\n mapping(address => IUniswapOracleV3) public uniswapOracles;\n\n // The WETH token address, used for value calculations\n address public weth;\n\n // The UDT token address, used to mint tokens on referral\n address public udt;\n\n // The approx amount of gas required to purchase a key\n uint public estimatedGasForPurchase;\n\n // Blockchain ID the network id on which this version of Unlock is operating\n uint public chainId;\n\n // store proxy admin\n address public proxyAdminAddress;\n ProxyAdmin private proxyAdmin;\n\n // publicLock templates\n mapping(address => uint16) private _publicLockVersions;\n mapping(uint16 => address) private _publicLockImpls;\n uint16 public publicLockLatestVersion;\n\n // protocol fee\n uint public protocolFee;\n\n // errors\n error Unlock__MANAGER_ONLY();\n error Unlock__VERSION_TOO_HIGH();\n error Unlock__MISSING_TEMPLATE();\n error Unlock__ALREADY_DEPLOYED();\n error Unlock__MISSING_PROXY_ADMIN();\n error Unlock__MISSING_LOCK_TEMPLATE();\n error Unlock__MISSING_LOCK(address lockAddress);\n error Unlock__INVALID_AMOUNT();\n\n // Events\n event NewLock(address indexed lockOwner, address indexed newLockAddress);\n\n event LockUpgraded(address lockAddress, uint16 version);\n\n event ConfigUnlock(\n address udt,\n address weth,\n uint estimatedGasForPurchase,\n string globalTokenSymbol,\n string globalTokenURI,\n uint chainId\n );\n\n event SetLockTemplate(address publicLockAddress);\n\n event GNPChanged(\n uint grossNetworkProduct,\n uint _valueInETH,\n address tokenAddress,\n uint value,\n address lockAddress\n );\n\n event ResetTrackedValue(uint grossNetworkProduct, uint totalDiscountGranted);\n\n event UnlockTemplateAdded(address indexed impl, uint16 indexed version);\n\n // Use initialize instead of a constructor to support proxies (for upgradeability via OZ).\n function initialize(address _unlockOwner) public initializer {\n // We must manually initialize Ownable\n UnlockOwnable.__initializeOwnable(_unlockOwner);\n // add a proxy admin on deployment\n _deployProxyAdmin();\n }\n\n function initializeProxyAdmin() public onlyOwner {\n if (proxyAdminAddress != address(0)) {\n revert Unlock__ALREADY_DEPLOYED();\n }\n _deployProxyAdmin();\n }\n\n /**\n * @dev Deploy the ProxyAdmin contract that will manage lock templates upgrades\n * This deploys an instance of ProxyAdmin used by PublicLock transparent proxies.\n */\n function _deployProxyAdmin() private returns (address) {\n proxyAdmin = new ProxyAdmin();\n proxyAdminAddress = address(proxyAdmin);\n return address(proxyAdmin);\n }\n\n /**\n * @dev Helper to get the version number of a template from his address\n */\n function publicLockVersions(address _impl) external view returns (uint16) {\n return _publicLockVersions[_impl];\n }\n\n /**\n * @dev Helper to get the address of a template based on its version number\n */\n function publicLockImpls(uint16 _version) external view returns (address) {\n return _publicLockImpls[_version];\n }\n\n /**\n * @dev Registers a new PublicLock template immplementation\n * The template is identified by a version number\n * Once registered, the template can be used to upgrade an existing Lock\n * @dev This will initialize the template and revokeOwnership.\n */\n function addLockTemplate(address impl, uint16 version) public onlyOwner {\n // First claim the template so that no-one else could\n // this will revert if the template was already initialized.\n IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \"\");\n IPublicLock(impl).renounceLockManager();\n\n _publicLockVersions[impl] = version;\n _publicLockImpls[version] = impl;\n\n emit UnlockTemplateAdded(impl, version);\n }\n\n /**\n * @notice Create lock (legacy)\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param _expirationDuration the duration of the lock (pass type(uint).max for unlimited duration)\n * @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n * @param _keyPrice the price of each key\n * @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n * @param _lockName the name of the lock\n * param _salt [deprec] -- kept only for backwards copatibility\n * This may be implemented as a sequence ID or with RNG. It's used with `create2`\n * to know the lock's address before the transaction is mined.\n * @dev internally call `createUpgradeableLock`\n */\n function createLock(\n uint _expirationDuration,\n address _tokenAddress,\n uint _keyPrice,\n uint _maxNumberOfKeys,\n string calldata _lockName,\n bytes12 // _salt\n ) public returns (address) {\n bytes memory data = abi.encodeWithSignature(\n \"initialize(address,uint256,address,uint256,uint256,string)\",\n msg.sender,\n _expirationDuration,\n _tokenAddress,\n _keyPrice,\n _maxNumberOfKeys,\n _lockName\n );\n\n return createUpgradeableLock(data);\n }\n\n /**\n * @notice Create upgradeable lock\n * This deploys a lock for a creator. It also keeps track of the deployed lock.\n * @param data bytes containing the call to initialize the lock template\n * @dev this call is passed as encoded function - for instance:\n * bytes memory data = abi.encodeWithSignature(\n * 'initialize(address,uint256,address,uint256,uint256,string)',\n * msg.sender,\n * _expirationDuration,\n * _tokenAddress,\n * _keyPrice,\n * _maxNumberOfKeys,\n * _lockName\n * );\n * @return address of the create lock\n */\n function createUpgradeableLock(bytes memory data) public returns (address) {\n address newLock = createUpgradeableLockAtVersion(\n data,\n publicLockLatestVersion\n );\n return newLock;\n }\n\n /**\n * Create an upgradeable lock using a specific PublicLock version\n * @param data bytes containing the call to initialize the lock template\n * (refer to createUpgradeableLock for more details)\n * @param _lockVersion the version of the lock to use\n */\n function createUpgradeableLockAtVersion(\n bytes memory data,\n uint16 _lockVersion\n ) public returns (address) {\n if (proxyAdminAddress == address(0)) {\n revert Unlock__MISSING_PROXY_ADMIN();\n }\n\n // get lock version\n address publicLockImpl = _publicLockImpls[_lockVersion];\n if (publicLockImpl == address(0)) {\n revert Unlock__MISSING_LOCK_TEMPLATE();\n }\n\n // deploy a proxy pointing to impl\n TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(\n publicLockImpl,\n proxyAdminAddress,\n data\n );\n address payable newLock = payable(address(proxy));\n\n // assign the new Lock\n locks[newLock] = LockBalances({\n deployed: true,\n totalSales: 0,\n yieldedDiscountTokens: 0\n });\n\n // trigger event\n emit NewLock(msg.sender, newLock);\n return newLock;\n }\n\n /**\n * @dev Upgrade a Lock template implementation\n * @param lockAddress the address of the lock to be upgraded\n * @param version the version number of the template\n * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n */\n\n function upgradeLock(\n address payable lockAddress,\n uint16 version\n ) external returns (address) {\n if (proxyAdminAddress == address(0)) {\n revert Unlock__MISSING_PROXY_ADMIN();\n }\n\n // check perms\n if (_isLockManager(lockAddress, msg.sender) != true) {\n revert Unlock__MANAGER_ONLY();\n }\n\n // check version\n IPublicLock lock = IPublicLock(lockAddress);\n uint16 currentVersion = lock.publicLockVersion();\n\n if (version != currentVersion + 1) {\n revert Unlock__VERSION_TOO_HIGH();\n }\n\n // make our upgrade\n address impl = _publicLockImpls[version];\n if (impl == address(0)) {\n revert Unlock__MISSING_TEMPLATE();\n }\n\n TransparentUpgradeableProxy proxy = TransparentUpgradeableProxy(\n lockAddress\n );\n\n proxyAdmin.upgrade(proxy, impl);\n\n // let's upgrade the data schema\n // the function is called with empty bytes as migration behaviour is set by the lock in accordance to data version\n lock.migrate(\"0x\");\n\n emit LockUpgraded(lockAddress, version);\n return lockAddress;\n }\n\n function _isLockManager(\n address lockAddress,\n address _sender\n ) private view returns (bool isManager) {\n IPublicLock lock = IPublicLock(lockAddress);\n return lock.isLockManager(_sender);\n }\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] Kept for backwards compatibility\n */\n function computeAvailableDiscountFor(\n address /* _purchaser */,\n uint /* _keyPrice */\n ) public pure returns (uint discount, uint tokens) {\n return (0, 0);\n }\n\n /**\n * Helper to get the network mining basefee as introduced in EIP-1559\n * @dev this helper can be wrapped in try/catch statement to avoid\n * revert in networks where EIP-1559 is not implemented\n */\n function networkBaseFee() external view returns (uint) {\n return block.basefee;\n }\n\n /**\n * This function keeps track of the added GDP, as well as grants of discount tokens\n * to the referrer, if applicable.\n * The number of discount tokens granted is based on the value of the referal,\n * the current growth rate and the lock's discount token distribution rate\n * This function is invoked by a previously deployed lock only.\n */\n function recordKeyPurchase(\n uint _value,\n address _referrer\n ) public onlyFromDeployedLock {\n if (_value > 0) {\n uint valueInETH;\n address tokenAddress = IPublicLock(msg.sender).tokenAddress();\n if (tokenAddress != address(0) && tokenAddress != weth) {\n // If priced in an ERC-20 token, find the supported uniswap oracle\n IUniswapOracleV3 oracle = uniswapOracles[tokenAddress];\n if (address(oracle) != address(0)) {\n valueInETH = oracle.updateAndConsult(tokenAddress, _value, weth);\n }\n } else {\n // If priced in ETH (or value is 0), no conversion is required\n valueInETH = _value;\n }\n\n updateGrossNetworkProduct(\n valueInETH,\n tokenAddress,\n _value,\n msg.sender // lockAddress\n );\n\n // If GNP does not overflow, the lock totalSales should be safe\n locks[msg.sender].totalSales += valueInETH;\n\n // Distribute UDT\n // version 13 is the first version for which locks can be paying the fee. Prior versions should not distribute UDT if they don't \"pay\" the fee.\n if (\n _referrer != address(0) &&\n IPublicLock(msg.sender).publicLockVersion() >= 13\n ) {\n IUniswapOracleV3 udtOracle = uniswapOracles[udt];\n if (address(udtOracle) != address(0)) {\n // Get the value of 1 UDT (w/ 18 decimals) in ETH\n uint udtPrice = udtOracle.updateAndConsult(udt, 10 ** 18, weth);\n\n uint balance = IMintableERC20(udt).balanceOf(address(this));\n\n // base fee default to 100 GWEI for chains that does\n uint baseFee;\n try this.networkBaseFee() returns (uint _basefee) {\n // no assigned value\n if (_basefee == 0) {\n baseFee = 100;\n } else {\n baseFee = _basefee;\n }\n } catch {\n // block.basefee not supported\n baseFee = 100;\n }\n\n // tokensToDistribute is either == to the gas cost times 1.25 to cover the 20% dev cut\n uint tokensToDistribute = ((estimatedGasForPurchase * baseFee) *\n (125 * 10 ** 18)) /\n 100 /\n udtPrice;\n\n // or tokensToDistribute is capped by network GDP growth\n // we distribute tokens using asymptotic curve between 0 and 0.5\n uint maxTokens = (balance * valueInETH) /\n (2 + (2 * valueInETH) / grossNetworkProduct) /\n grossNetworkProduct;\n\n // cap to GDP growth!\n if (tokensToDistribute > maxTokens) {\n tokensToDistribute = maxTokens;\n }\n\n if (tokensToDistribute > 0) {\n // 80% goes to the referrer, 20% to the Unlock dev - round in favor of the referrer\n uint devReward = (tokensToDistribute * 20) / 100;\n\n if (balance > tokensToDistribute) {\n // Only distribute if there are enough tokens\n IMintableERC20(udt).transfer(\n _referrer,\n tokensToDistribute - devReward\n );\n IMintableERC20(udt).transfer(owner(), devReward);\n }\n }\n }\n }\n }\n }\n\n /**\n * Update the GNP by a new value.\n * Emits an event to simply tracking\n */\n function updateGrossNetworkProduct(\n uint _valueInETH,\n address _tokenAddress,\n uint _value,\n address _lock\n ) internal {\n // increase GNP\n grossNetworkProduct = grossNetworkProduct + _valueInETH;\n\n emit GNPChanged(\n grossNetworkProduct,\n _valueInETH,\n _tokenAddress,\n _value,\n _lock\n );\n }\n\n /**\n * @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n * @dev [DEPRECATED] only Kept for backwards compatibility\n */\n function recordConsumedDiscount(\n uint /* _discount */,\n uint /* _tokens */\n ) public view onlyFromDeployedLock {\n return;\n }\n\n // The version number of the current Unlock implementation on this network\n function unlockVersion() external pure returns (uint16) {\n return 12;\n }\n\n /**\n * Set the fee used by the protocol\n * @param _protocolFee fee in basic point\n */\n function setProtocolFee(uint _protocolFee) external onlyOwner {\n protocolFee = _protocolFee;\n }\n\n /**\n * @notice Allows the owner to update configuration variables\n */\n function configUnlock(\n address _udt,\n address _weth,\n uint _estimatedGasForPurchase,\n string calldata _symbol,\n string calldata _URI,\n uint _chainId\n ) external onlyOwner {\n udt = _udt;\n weth = _weth;\n estimatedGasForPurchase = _estimatedGasForPurchase;\n\n globalTokenSymbol = _symbol;\n globalBaseTokenURI = _URI;\n\n chainId = _chainId;\n\n emit ConfigUnlock(\n _udt,\n _weth,\n _estimatedGasForPurchase,\n _symbol,\n _URI,\n _chainId\n );\n }\n\n /**\n * @notice Set the default PublicLock template to use when creating locks\n */\n function setLockTemplate(address _publicLockAddress) external onlyOwner {\n if (_publicLockVersions[_publicLockAddress] == 0) {\n revert Unlock__MISSING_LOCK_TEMPLATE();\n }\n // set latest version\n publicLockLatestVersion = _publicLockVersions[_publicLockAddress];\n // set corresponding template\n publicLockAddress = _publicLockAddress;\n emit SetLockTemplate(_publicLockAddress);\n }\n\n /**\n * @notice allows the owner to set the oracle address to use for value conversions\n * setting the _oracleAddress to address(0) removes support for the token\n * @dev This will also call update to ensure at least one datapoint has been recorded.\n */\n function setOracle(\n address _tokenAddress,\n address _oracleAddress\n ) external onlyOwner {\n uniswapOracles[_tokenAddress] = IUniswapOracleV3(_oracleAddress);\n if (_oracleAddress != address(0)) {\n IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth);\n }\n }\n\n // Allows the owner to change the value tracking variables as needed.\n function resetTrackedValue(\n uint _grossNetworkProduct,\n uint _totalDiscountGranted\n ) external onlyOwner {\n grossNetworkProduct = _grossNetworkProduct;\n totalDiscountGranted = _totalDiscountGranted;\n\n emit ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted);\n }\n\n /**\n * @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalBaseTokenURI() external view returns (string memory) {\n return globalBaseTokenURI;\n }\n\n /**\n * @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\n */\n function getGlobalTokenSymbol() external view returns (string memory) {\n return globalTokenSymbol;\n }\n\n // for doc, see IUnlock.sol\n function getAdmin() public view returns (address) {\n bytes32 _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n // for doc, see IUnlock.sol\n function postLockUpgrade() public {\n // check if lock hasnot already been deployed here and version is correct\n if (\n locks[msg.sender].deployed == false &&\n IPublicLock(msg.sender).publicLockVersion() == 13 &&\n block.chainid == 1 &&\n IPublicLock(msg.sender).unlockProtocol() ==\n 0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13 // hardcoded address of previous Unlock\n ) {\n IUnlock previousUnlock = IUnlock(\n 0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13\n );\n\n (\n bool deployed,\n uint totalSales,\n uint yieldedDiscountTokens\n ) = previousUnlock.locks(msg.sender);\n\n // record lock from old Unlock in this one\n if (deployed) {\n locks[msg.sender] = LockBalances(\n deployed,\n totalSales,\n yieldedDiscountTokens\n );\n } else {\n revert Unlock__MISSING_LOCK(msg.sender);\n }\n }\n }\n\n /**\n * Functions which transfers tokens held by the contract\n * It handles both ERC20 and the base currency.\n * @dev This function is onlyOwner\n * @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n * @param to the address to transfer the tokens to\n * @param amount the amount of tokens to transfer\n */\n function transferTokens(\n address token,\n address to,\n uint256 amount\n ) public onlyOwner {\n if (token != address(0)) {\n IMintableERC20(token).transfer(to, amount);\n } else {\n payable(to).transfer(amount);\n }\n }\n\n /**\n * Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n * The lock will still be able to sell its memberships.\n * @dev This function is onlyOwner\n * @param lock address of the lock to remove\n */\n function removeLock(address lock) external onlyOwner {\n delete locks[lock];\n }\n\n // required to receive ETH / withdraw ETH\n receive() external payable {\n if (msg.value <= 0) {\n revert Unlock__INVALID_AMOUNT();\n }\n }\n}\n"}},"settings":{"optimizer":{"enabled":true,"mode":"3"},"outputSelection":{"*":{"*":["storageLayout","abi","evm.methodIdentifiers","metadata"],"":["ast"]}},"evmVersion":"paris","libraries":{}}},"output":{"errors":[{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":100348,"end":100467},"type":"Warning"},{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":100483,"end":100531},"type":"Warning"},{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":105867,"end":105895},"type":"Warning"},{"component":"general","errorCode":null,"formattedMessage":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘\n--> contracts/past-versions/UnlockV12.sol\n","message":"\n┌──────────────────────────────────────────────────────────────────────────────────────────────────┐\n│ Warning: It looks like you are using '
.send/transfer()' without providing │\n│ the gas amount. Such calls will fail depending on the pubdata costs. │\n│ This might be a false positive if you are using an interface (like IERC20) instead of the │\n│ native Solidity `send/transfer`. │\n│ Please use 'payable(
).call{value: }(\"\")' instead, but be careful with the reentrancy │\n│ attack. `send` and `transfer` send limited amount of gas that prevents reentrancy, whereas │\n│ `
.call{value: }` sends all gas to the callee. Learn more on │\n│ https://docs.soliditylang.org/en/latest/security-considerations.html#reentrancy │\n└──────────────────────────────────────────────────────────────────────────────────────────────────┘","severity":"warning","sourceLocation":{"file":"0","start":105804,"end":105846},"type":"Warning"}],"version":"0.8.21","long_version":"0.8.21+commit.d9974bed.Darwin.appleclang","zk_version":"1.3.18","sources":{"contracts/past-versions/UnlockV12.sol":{"id":0,"ast":{"absolutePath":"contracts/past-versions/UnlockV12.sol","exportedSymbols":{"Address":[479],"AddressUpgradeable":[2541],"Context":[21],"ERC1967Proxy":[936],"ERC1967Upgrade":[851],"IBeacon":[150],"IERC1822Proxiable":[141],"IMintableERC20":[1256],"IPublicLock":[1907],"IUniswapOracleV3":[1948],"IUnlock":[2258],"Ownable":[132],"Proxy":[902],"ProxyAdmin":[1215],"StorageSlot":[538],"TransparentUpgradeableProxy":[1082],"Unlock":[3993],"UnlockContextUpgradeable":[2655],"UnlockInitializable":[2613],"UnlockOwnable":[2784]},"id":3994,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"208:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"233:496:0","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":21,"linearizedBaseContracts":[21],"name":"Context","nameLocation":"748:7:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":10,"nodeType":"Block","src":"822:28:0","statements":[{"expression":{"expression":{"id":7,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"835:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"839:6:0","memberName":"sender","nodeType":"MemberAccess","src":"835:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6,"id":9,"nodeType":"Return","src":"828:17:0"}]},"id":11,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"769:10:0","nodeType":"FunctionDefinition","parameters":{"id":3,"nodeType":"ParameterList","parameters":[],"src":"779:2:0"},"returnParameters":{"id":6,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11,"src":"813:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4,"name":"address","nodeType":"ElementaryTypeName","src":"813:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"812:9:0"},"scope":21,"src":"760:90:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":19,"nodeType":"Block","src":"921:26:0","statements":[{"expression":{"expression":{"id":16,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"934:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"938:4:0","memberName":"data","nodeType":"MemberAccess","src":"934:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":15,"id":18,"nodeType":"Return","src":"927:15:0"}]},"id":20,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"863:8:0","nodeType":"FunctionDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[],"src":"871:2:0"},"returnParameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20,"src":"905:14:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13,"name":"bytes","nodeType":"ElementaryTypeName","src":"905:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"904:16:0"},"scope":21,"src":"854:93:0","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":3994,"src":"730:219:0","usedErrors":[],"usedEvents":[]},{"id":22,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"1080:23:0"},{"abstract":true,"baseContracts":[{"baseName":{"id":24,"name":"Context","nameLocations":["1629:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":21,"src":"1629:7:0"},"id":25,"nodeType":"InheritanceSpecifier","src":"1629:7:0"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":23,"nodeType":"StructuredDocumentation","src":"1105:494:0","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":132,"linearizedBaseContracts":[132,21],"name":"Ownable","nameLocation":"1618:7:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":27,"mutability":"mutable","name":"_owner","nameLocation":"1657:6:0","nodeType":"VariableDeclaration","scope":132,"src":"1641:22:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26,"name":"address","nodeType":"ElementaryTypeName","src":"1641:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":33,"name":"OwnershipTransferred","nameLocation":"1674:20:0","nodeType":"EventDefinition","parameters":{"id":32,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1716:13:0","nodeType":"VariableDeclaration","scope":33,"src":"1700:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28,"name":"address","nodeType":"ElementaryTypeName","src":"1700:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1751:8:0","nodeType":"VariableDeclaration","scope":33,"src":"1735:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1694:69:0"},"src":"1668:96:0"},{"body":{"id":42,"nodeType":"Block","src":"1872:43:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":38,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"1897:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1897:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"1878:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":40,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1878:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41,"nodeType":"ExpressionStatement","src":"1878:32:0"}]},"documentation":{"id":34,"nodeType":"StructuredDocumentation","src":"1768:87:0","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":43,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35,"nodeType":"ParameterList","parameters":[],"src":"1869:2:0"},"returnParameters":{"id":36,"nodeType":"ParameterList","parameters":[],"src":"1872:0:0"},"scope":132,"src":"1858:57:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":50,"nodeType":"Block","src":"2016:31:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":46,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":74,"src":"2022:11:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":47,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2022:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48,"nodeType":"ExpressionStatement","src":"2022:13:0"},{"id":49,"nodeType":"PlaceholderStatement","src":"2041:1:0"}]},"documentation":{"id":44,"nodeType":"StructuredDocumentation","src":"1919:73:0","text":" @dev Throws if called by any account other than the owner."},"id":51,"name":"onlyOwner","nameLocation":"2004:9:0","nodeType":"ModifierDefinition","parameters":{"id":45,"nodeType":"ParameterList","parameters":[],"src":"2013:2:0"},"src":"1995:52:0","virtual":false,"visibility":"internal"},{"body":{"id":59,"nodeType":"Block","src":"2170:24:0","statements":[{"expression":{"id":57,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"2183:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":56,"id":58,"nodeType":"Return","src":"2176:13:0"}]},"documentation":{"id":52,"nodeType":"StructuredDocumentation","src":"2051:61:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":60,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"2124:5:0","nodeType":"FunctionDefinition","parameters":{"id":53,"nodeType":"ParameterList","parameters":[],"src":"2129:2:0"},"returnParameters":{"id":56,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60,"src":"2161:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54,"name":"address","nodeType":"ElementaryTypeName","src":"2161:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2160:9:0"},"scope":132,"src":"2115:79:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":73,"nodeType":"Block","src":"2304:79:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":69,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":65,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60,"src":"2318:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":66,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2318:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":67,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11,"src":"2329:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":68,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2318:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":70,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2343:34:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":64,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2310:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":71,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2310:68:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":72,"nodeType":"ExpressionStatement","src":"2310:68:0"}]},"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"2198:58:0","text":" @dev Throws if the sender is not the owner."},"id":74,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"2268:11:0","nodeType":"FunctionDefinition","parameters":{"id":62,"nodeType":"ParameterList","parameters":[],"src":"2279:2:0"},"returnParameters":{"id":63,"nodeType":"ParameterList","parameters":[],"src":"2304:0:0"},"scope":132,"src":"2259:124:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":87,"nodeType":"Block","src":"2763:41:0","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":83,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2796:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":82,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2788:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":81,"name":"address","nodeType":"ElementaryTypeName","src":"2788:7:0","typeDescriptions":{}}},"id":84,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":80,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"2769:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2769:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":86,"nodeType":"ExpressionStatement","src":"2769:30:0"}]},"documentation":{"id":75,"nodeType":"StructuredDocumentation","src":"2387:319:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":88,"implemented":true,"kind":"function","modifiers":[{"id":78,"kind":"modifierInvocation","modifierName":{"id":77,"name":"onlyOwner","nameLocations":["2753:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"2753:9:0"},"nodeType":"ModifierInvocation","src":"2753:9:0"}],"name":"renounceOwnership","nameLocation":"2718:17:0","nodeType":"FunctionDefinition","parameters":{"id":76,"nodeType":"ParameterList","parameters":[],"src":"2735:2:0"},"returnParameters":{"id":79,"nodeType":"ParameterList","parameters":[],"src":"2763:0:0"},"scope":132,"src":"2709:95:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":110,"nodeType":"Block","src":"3013:118:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":97,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"3027:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3047:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":99,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3039:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":98,"name":"address","nodeType":"ElementaryTypeName","src":"3039:7:0","typeDescriptions":{}}},"id":101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3027:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3051:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":96,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3019:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3019:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":105,"nodeType":"ExpressionStatement","src":"3019:73:0"},{"expression":{"arguments":[{"id":107,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"3117:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":106,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":131,"src":"3098:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":109,"nodeType":"ExpressionStatement","src":"3098:28:0"}]},"documentation":{"id":89,"nodeType":"StructuredDocumentation","src":"2808:132:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":111,"implemented":true,"kind":"function","modifiers":[{"id":94,"kind":"modifierInvocation","modifierName":{"id":93,"name":"onlyOwner","nameLocations":["3003:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"3003:9:0"},"nodeType":"ModifierInvocation","src":"3003:9:0"}],"name":"transferOwnership","nameLocation":"2952:17:0","nodeType":"FunctionDefinition","parameters":{"id":92,"nodeType":"ParameterList","parameters":[{"constant":false,"id":91,"mutability":"mutable","name":"newOwner","nameLocation":"2978:8:0","nodeType":"VariableDeclaration","scope":111,"src":"2970:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":90,"name":"address","nodeType":"ElementaryTypeName","src":"2970:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2969:18:0"},"returnParameters":{"id":95,"nodeType":"ParameterList","parameters":[],"src":"3013:0:0"},"scope":132,"src":"2943:188:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":130,"nodeType":"Block","src":"3338:110:0","statements":[{"assignments":[118],"declarations":[{"constant":false,"id":118,"mutability":"mutable","name":"oldOwner","nameLocation":"3352:8:0","nodeType":"VariableDeclaration","scope":130,"src":"3344:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"3344:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":120,"initialValue":{"id":119,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"3363:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3344:25:0"},{"expression":{"id":123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":121,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27,"src":"3375:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":122,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"3384:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3375:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":124,"nodeType":"ExpressionStatement","src":"3375:17:0"},{"eventCall":{"arguments":[{"id":126,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":118,"src":"3424:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":127,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":114,"src":"3434:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":125,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"3403:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3403:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":129,"nodeType":"EmitStatement","src":"3398:45:0"}]},"documentation":{"id":112,"nodeType":"StructuredDocumentation","src":"3135:137:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":131,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"3284:18:0","nodeType":"FunctionDefinition","parameters":{"id":115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":114,"mutability":"mutable","name":"newOwner","nameLocation":"3311:8:0","nodeType":"VariableDeclaration","scope":131,"src":"3303:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":113,"name":"address","nodeType":"ElementaryTypeName","src":"3303:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3302:18:0"},"returnParameters":{"id":116,"nodeType":"ParameterList","parameters":[],"src":"3338:0:0"},"scope":132,"src":"3275:173:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3994,"src":"1600:1850:0","usedErrors":[],"usedEvents":[33]},{"id":133,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"3603:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1822Proxiable","contractDependencies":[],"contractKind":"interface","documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"3628:203:0","text":" @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."},"fullyImplemented":false,"id":141,"linearizedBaseContracts":[141],"name":"IERC1822Proxiable","nameLocation":"3842:17:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":135,"nodeType":"StructuredDocumentation","src":"3864:424:0","text":" @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."},"functionSelector":"52d1902d","id":140,"implemented":false,"kind":"function","modifiers":[],"name":"proxiableUUID","nameLocation":"4300:13:0","nodeType":"FunctionDefinition","parameters":{"id":136,"nodeType":"ParameterList","parameters":[],"src":"4313:2:0"},"returnParameters":{"id":139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":140,"src":"4339:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":137,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4339:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4338:9:0"},"scope":141,"src":"4291:57:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3994,"src":"3832:518:0","usedErrors":[],"usedEvents":[]},{"id":142,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"4478:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IBeacon","contractDependencies":[],"contractKind":"interface","documentation":{"id":143,"nodeType":"StructuredDocumentation","src":"4503:79:0","text":" @dev This is the interface that {BeaconProxy} expects of its beacon."},"fullyImplemented":false,"id":150,"linearizedBaseContracts":[150],"name":"IBeacon","nameLocation":"4593:7:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":144,"nodeType":"StructuredDocumentation","src":"4605:154:0","text":" @dev Must return an address that can be used as a delegate call target.\n {BeaconProxy} will check that this address is a contract."},"functionSelector":"5c60da1b","id":149,"implemented":false,"kind":"function","modifiers":[],"name":"implementation","nameLocation":"4771:14:0","nodeType":"FunctionDefinition","parameters":{"id":145,"nodeType":"ParameterList","parameters":[],"src":"4785:2:0"},"returnParameters":{"id":148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":147,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":149,"src":"4811:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":146,"name":"address","nodeType":"ElementaryTypeName","src":"4811:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4810:9:0"},"scope":150,"src":"4762:58:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3994,"src":"4583:239:0","usedErrors":[],"usedEvents":[]},{"id":151,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"4951:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":152,"nodeType":"StructuredDocumentation","src":"4976:67:0","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":479,"linearizedBaseContracts":[479],"name":"Address","nameLocation":"5052:7:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":166,"nodeType":"Block","src":"6037:236:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":160,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":155,"src":"6245:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6253:4:0","memberName":"code","nodeType":"MemberAccess","src":"6245:12:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6258:6:0","memberName":"length","nodeType":"MemberAccess","src":"6245:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6267:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6245:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":159,"id":165,"nodeType":"Return","src":"6238:30:0"}]},"documentation":{"id":153,"nodeType":"StructuredDocumentation","src":"5064:904:0","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":167,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"5980:10:0","nodeType":"FunctionDefinition","parameters":{"id":156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"account","nameLocation":"5999:7:0","nodeType":"VariableDeclaration","scope":167,"src":"5991:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":154,"name":"address","nodeType":"ElementaryTypeName","src":"5991:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5990:17:0"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":167,"src":"6031:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":157,"name":"bool","nodeType":"ElementaryTypeName","src":"6031:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6030:6:0"},"scope":479,"src":"5971:302:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":200,"nodeType":"Block","src":"7227:245:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":178,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7249:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}],"id":177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7241:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":176,"name":"address","nodeType":"ElementaryTypeName","src":"7241:7:0","typeDescriptions":{}}},"id":179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7241:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7255:7:0","memberName":"balance","nodeType":"MemberAccess","src":"7241:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":181,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"7266:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7241:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7274:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":175,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7233:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7233:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":185,"nodeType":"ExpressionStatement","src":"7233:73:0"},{"assignments":[187,null],"declarations":[{"constant":false,"id":187,"mutability":"mutable","name":"success","nameLocation":"7319:7:0","nodeType":"VariableDeclaration","scope":200,"src":"7314:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":186,"name":"bool","nodeType":"ElementaryTypeName","src":"7314:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":194,"initialValue":{"arguments":[{"hexValue":"","id":192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7362:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":188,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":170,"src":"7332:9:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7342:4:0","memberName":"call","nodeType":"MemberAccess","src":"7332:14:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":190,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":172,"src":"7354:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"7332:29:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7332:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"7313:52:0"},{"expression":{"arguments":[{"id":196,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":187,"src":"7386:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7401:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":195,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7371:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7371:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":199,"nodeType":"ExpressionStatement","src":"7371:96:0"}]},"documentation":{"id":168,"nodeType":"StructuredDocumentation","src":"6277:876:0","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":201,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"7165:9:0","nodeType":"FunctionDefinition","parameters":{"id":173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":170,"mutability":"mutable","name":"recipient","nameLocation":"7191:9:0","nodeType":"VariableDeclaration","scope":201,"src":"7175:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":169,"name":"address","nodeType":"ElementaryTypeName","src":"7175:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"amount","nameLocation":"7210:6:0","nodeType":"VariableDeclaration","scope":201,"src":"7202:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint256","nodeType":"ElementaryTypeName","src":"7202:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7174:43:0"},"returnParameters":{"id":174,"nodeType":"ParameterList","parameters":[],"src":"7227:0:0"},"scope":479,"src":"7156:316:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":218,"nodeType":"Block","src":"8277:96:0","statements":[{"expression":{"arguments":[{"id":212,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":204,"src":"8318:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":213,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"8326:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8332:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8335:32:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":211,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[259,303],"referencedDeclaration":303,"src":"8296:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8296:72:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":210,"id":217,"nodeType":"Return","src":"8283:85:0"}]},"documentation":{"id":202,"nodeType":"StructuredDocumentation","src":"7476:697:0","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":219,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"8185:12:0","nodeType":"FunctionDefinition","parameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":204,"mutability":"mutable","name":"target","nameLocation":"8211:6:0","nodeType":"VariableDeclaration","scope":219,"src":"8203:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":203,"name":"address","nodeType":"ElementaryTypeName","src":"8203:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":206,"mutability":"mutable","name":"data","nameLocation":"8236:4:0","nodeType":"VariableDeclaration","scope":219,"src":"8223:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":205,"name":"bytes","nodeType":"ElementaryTypeName","src":"8223:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8197:47:0"},"returnParameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":219,"src":"8263:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":208,"name":"bytes","nodeType":"ElementaryTypeName","src":"8263:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8262:14:0"},"scope":479,"src":"8176:197:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":238,"nodeType":"Block","src":"8714:70:0","statements":[{"expression":{"arguments":[{"id":232,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":222,"src":"8749:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":233,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":224,"src":"8757:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8763:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":235,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"8766:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":231,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[259,303],"referencedDeclaration":303,"src":"8727:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8727:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":230,"id":237,"nodeType":"Return","src":"8720:59:0"}]},"documentation":{"id":220,"nodeType":"StructuredDocumentation","src":"8377:201:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":239,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"8590:12:0","nodeType":"FunctionDefinition","parameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":222,"mutability":"mutable","name":"target","nameLocation":"8616:6:0","nodeType":"VariableDeclaration","scope":239,"src":"8608:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":221,"name":"address","nodeType":"ElementaryTypeName","src":"8608:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":224,"mutability":"mutable","name":"data","nameLocation":"8641:4:0","nodeType":"VariableDeclaration","scope":239,"src":"8628:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":223,"name":"bytes","nodeType":"ElementaryTypeName","src":"8628:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":226,"mutability":"mutable","name":"errorMessage","nameLocation":"8665:12:0","nodeType":"VariableDeclaration","scope":239,"src":"8651:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":225,"name":"string","nodeType":"ElementaryTypeName","src":"8651:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8602:79:0"},"returnParameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":239,"src":"8700:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":228,"name":"bytes","nodeType":"ElementaryTypeName","src":"8700:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8699:14:0"},"scope":479,"src":"8581:203:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":258,"nodeType":"Block","src":"9251:151:0","statements":[{"expression":{"arguments":[{"id":252,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":242,"src":"9301:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":253,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"9317:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":246,"src":"9331:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9346:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":251,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[259,303],"referencedDeclaration":303,"src":"9270:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9270:127:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":250,"id":257,"nodeType":"Return","src":"9257:140:0"}]},"documentation":{"id":240,"nodeType":"StructuredDocumentation","src":"8788:331:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":259,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"9131:21:0","nodeType":"FunctionDefinition","parameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":242,"mutability":"mutable","name":"target","nameLocation":"9166:6:0","nodeType":"VariableDeclaration","scope":259,"src":"9158:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":241,"name":"address","nodeType":"ElementaryTypeName","src":"9158:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":244,"mutability":"mutable","name":"data","nameLocation":"9191:4:0","nodeType":"VariableDeclaration","scope":259,"src":"9178:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":243,"name":"bytes","nodeType":"ElementaryTypeName","src":"9178:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":246,"mutability":"mutable","name":"value","nameLocation":"9209:5:0","nodeType":"VariableDeclaration","scope":259,"src":"9201:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":245,"name":"uint256","nodeType":"ElementaryTypeName","src":"9201:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9152:66:0"},"returnParameters":{"id":250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":259,"src":"9237:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":248,"name":"bytes","nodeType":"ElementaryTypeName","src":"9237:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9236:14:0"},"scope":479,"src":"9122:280:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":302,"nodeType":"Block","src":"9797:277:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":276,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9826:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$479","typeString":"library Address"}],"id":275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9818:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":274,"name":"address","nodeType":"ElementaryTypeName","src":"9818:7:0","typeDescriptions":{}}},"id":277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9818:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9832:7:0","memberName":"balance","nodeType":"MemberAccess","src":"9818:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":279,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"9843:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9818:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9856:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":273,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9803:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9803:99:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":283,"nodeType":"ExpressionStatement","src":"9803:99:0"},{"assignments":[285,287],"declarations":[{"constant":false,"id":285,"mutability":"mutable","name":"success","nameLocation":"9914:7:0","nodeType":"VariableDeclaration","scope":302,"src":"9909:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":284,"name":"bool","nodeType":"ElementaryTypeName","src":"9909:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":287,"mutability":"mutable","name":"returndata","nameLocation":"9936:10:0","nodeType":"VariableDeclaration","scope":302,"src":"9923:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":286,"name":"bytes","nodeType":"ElementaryTypeName","src":"9923:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":294,"initialValue":{"arguments":[{"id":292,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":264,"src":"9976:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":288,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"9950:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9957:4:0","memberName":"call","nodeType":"MemberAccess","src":"9950:11:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":290,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":266,"src":"9969:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"9950:25:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9950:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"9908:73:0"},{"expression":{"arguments":[{"id":296,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":262,"src":"10027:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":297,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":285,"src":"10035:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":298,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"10044:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":299,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":268,"src":"10056:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":295,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":434,"src":"10000:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10000:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":272,"id":301,"nodeType":"Return","src":"9987:82:0"}]},"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"9406:227:0","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":303,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"9645:21:0","nodeType":"FunctionDefinition","parameters":{"id":269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":262,"mutability":"mutable","name":"target","nameLocation":"9680:6:0","nodeType":"VariableDeclaration","scope":303,"src":"9672:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":261,"name":"address","nodeType":"ElementaryTypeName","src":"9672:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":264,"mutability":"mutable","name":"data","nameLocation":"9705:4:0","nodeType":"VariableDeclaration","scope":303,"src":"9692:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":263,"name":"bytes","nodeType":"ElementaryTypeName","src":"9692:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":266,"mutability":"mutable","name":"value","nameLocation":"9723:5:0","nodeType":"VariableDeclaration","scope":303,"src":"9715:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":265,"name":"uint256","nodeType":"ElementaryTypeName","src":"9715:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":268,"mutability":"mutable","name":"errorMessage","nameLocation":"9748:12:0","nodeType":"VariableDeclaration","scope":303,"src":"9734:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":267,"name":"string","nodeType":"ElementaryTypeName","src":"9734:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9666:98:0"},"returnParameters":{"id":272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":271,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":303,"src":"9783:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":270,"name":"bytes","nodeType":"ElementaryTypeName","src":"9783:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9782:14:0"},"scope":479,"src":"9636:438:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":319,"nodeType":"Block","src":"10349:97:0","statements":[{"expression":{"arguments":[{"id":314,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"10387:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":315,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":308,"src":"10395:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"10401:39:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":313,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[320,349],"referencedDeclaration":349,"src":"10368:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10368:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":312,"id":318,"nodeType":"Return","src":"10355:86:0"}]},"documentation":{"id":304,"nodeType":"StructuredDocumentation","src":"10078:156:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":320,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"10246:18:0","nodeType":"FunctionDefinition","parameters":{"id":309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":306,"mutability":"mutable","name":"target","nameLocation":"10278:6:0","nodeType":"VariableDeclaration","scope":320,"src":"10270:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":305,"name":"address","nodeType":"ElementaryTypeName","src":"10270:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":308,"mutability":"mutable","name":"data","nameLocation":"10303:4:0","nodeType":"VariableDeclaration","scope":320,"src":"10290:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":307,"name":"bytes","nodeType":"ElementaryTypeName","src":"10290:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10264:47:0"},"returnParameters":{"id":312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":311,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":320,"src":"10335:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":310,"name":"bytes","nodeType":"ElementaryTypeName","src":"10335:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10334:14:0"},"scope":479,"src":"10237:209:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":348,"nodeType":"Block","src":"10760:164:0","statements":[{"assignments":[333,335],"declarations":[{"constant":false,"id":333,"mutability":"mutable","name":"success","nameLocation":"10772:7:0","nodeType":"VariableDeclaration","scope":348,"src":"10767:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":332,"name":"bool","nodeType":"ElementaryTypeName","src":"10767:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":335,"mutability":"mutable","name":"returndata","nameLocation":"10794:10:0","nodeType":"VariableDeclaration","scope":348,"src":"10781:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":334,"name":"bytes","nodeType":"ElementaryTypeName","src":"10781:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":340,"initialValue":{"arguments":[{"id":338,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":325,"src":"10826:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":336,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"10808:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10815:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"10808:17:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10808:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"10766:65:0"},{"expression":{"arguments":[{"id":342,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":323,"src":"10877:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":343,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":333,"src":"10885:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":344,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":335,"src":"10894:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":345,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":327,"src":"10906:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":341,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":434,"src":"10850:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10850:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":331,"id":347,"nodeType":"Return","src":"10837:82:0"}]},"documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"10450:163:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":349,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"10625:18:0","nodeType":"FunctionDefinition","parameters":{"id":328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"mutability":"mutable","name":"target","nameLocation":"10657:6:0","nodeType":"VariableDeclaration","scope":349,"src":"10649:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":322,"name":"address","nodeType":"ElementaryTypeName","src":"10649:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":325,"mutability":"mutable","name":"data","nameLocation":"10682:4:0","nodeType":"VariableDeclaration","scope":349,"src":"10669:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":324,"name":"bytes","nodeType":"ElementaryTypeName","src":"10669:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"errorMessage","nameLocation":"10706:12:0","nodeType":"VariableDeclaration","scope":349,"src":"10692:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":326,"name":"string","nodeType":"ElementaryTypeName","src":"10692:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10643:79:0"},"returnParameters":{"id":331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":349,"src":"10746:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":329,"name":"bytes","nodeType":"ElementaryTypeName","src":"10746:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10745:14:0"},"scope":479,"src":"10616:308:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":365,"nodeType":"Block","src":"11198:133:0","statements":[{"expression":{"arguments":[{"id":360,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":352,"src":"11247:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":361,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":354,"src":"11263:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11277:41:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":359,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[366,395],"referencedDeclaration":395,"src":"11217:20:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11217:109:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":358,"id":364,"nodeType":"Return","src":"11204:122:0"}]},"documentation":{"id":350,"nodeType":"StructuredDocumentation","src":"10928:158:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":366,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"11098:20:0","nodeType":"FunctionDefinition","parameters":{"id":355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":352,"mutability":"mutable","name":"target","nameLocation":"11132:6:0","nodeType":"VariableDeclaration","scope":366,"src":"11124:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":351,"name":"address","nodeType":"ElementaryTypeName","src":"11124:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":354,"mutability":"mutable","name":"data","nameLocation":"11157:4:0","nodeType":"VariableDeclaration","scope":366,"src":"11144:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":353,"name":"bytes","nodeType":"ElementaryTypeName","src":"11144:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11118:47:0"},"returnParameters":{"id":358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":366,"src":"11184:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":356,"name":"bytes","nodeType":"ElementaryTypeName","src":"11184:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11183:14:0"},"scope":479,"src":"11089:242:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":394,"nodeType":"Block","src":"11644:166:0","statements":[{"assignments":[379,381],"declarations":[{"constant":false,"id":379,"mutability":"mutable","name":"success","nameLocation":"11656:7:0","nodeType":"VariableDeclaration","scope":394,"src":"11651:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":378,"name":"bool","nodeType":"ElementaryTypeName","src":"11651:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":381,"mutability":"mutable","name":"returndata","nameLocation":"11678:10:0","nodeType":"VariableDeclaration","scope":394,"src":"11665:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":380,"name":"bytes","nodeType":"ElementaryTypeName","src":"11665:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":386,"initialValue":{"arguments":[{"id":384,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":371,"src":"11712:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":382,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":369,"src":"11692:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11699:12:0","memberName":"delegatecall","nodeType":"MemberAccess","src":"11692:19:0","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11692:25:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"11650:67:0"},{"expression":{"arguments":[{"id":388,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":369,"src":"11763:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":389,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":379,"src":"11771:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":390,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":381,"src":"11780:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":391,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":373,"src":"11792:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":387,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":434,"src":"11736:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11736:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":377,"id":393,"nodeType":"Return","src":"11723:82:0"}]},"documentation":{"id":367,"nodeType":"StructuredDocumentation","src":"11335:165:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":395,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"11512:20:0","nodeType":"FunctionDefinition","parameters":{"id":374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":369,"mutability":"mutable","name":"target","nameLocation":"11546:6:0","nodeType":"VariableDeclaration","scope":395,"src":"11538:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":368,"name":"address","nodeType":"ElementaryTypeName","src":"11538:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":371,"mutability":"mutable","name":"data","nameLocation":"11571:4:0","nodeType":"VariableDeclaration","scope":395,"src":"11558:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":370,"name":"bytes","nodeType":"ElementaryTypeName","src":"11558:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":373,"mutability":"mutable","name":"errorMessage","nameLocation":"11595:12:0","nodeType":"VariableDeclaration","scope":395,"src":"11581:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":372,"name":"string","nodeType":"ElementaryTypeName","src":"11581:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11532:79:0"},"returnParameters":{"id":377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":395,"src":"11630:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":375,"name":"bytes","nodeType":"ElementaryTypeName","src":"11630:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11629:14:0"},"scope":479,"src":"11503:307:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":433,"nodeType":"Block","src":"12260:372:0","statements":[{"condition":{"id":409,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":400,"src":"12270:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":431,"nodeType":"Block","src":"12580:48:0","statements":[{"expression":{"arguments":[{"id":427,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"12596:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":428,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":404,"src":"12608:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":426,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":478,"src":"12588:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12588:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":430,"nodeType":"ExpressionStatement","src":"12588:33:0"}]},"id":432,"nodeType":"IfStatement","src":"12266:362:0","trueBody":{"id":425,"nodeType":"Block","src":"12279:295:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":410,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"12291:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12302:6:0","memberName":"length","nodeType":"MemberAccess","src":"12291:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12312:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12291:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":422,"nodeType":"IfStatement","src":"12287:256:0","trueBody":{"id":421,"nodeType":"Block","src":"12315:228:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":416,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"12493:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":415,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":167,"src":"12482:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12482:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12502:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":414,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12474:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12474:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":420,"nodeType":"ExpressionStatement","src":"12474:60:0"}]}},{"expression":{"id":423,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"12557:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":408,"id":424,"nodeType":"Return","src":"12550:17:0"}]}}]},"documentation":{"id":396,"nodeType":"StructuredDocumentation","src":"11814:267:0","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":434,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"12093:26:0","nodeType":"FunctionDefinition","parameters":{"id":405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":398,"mutability":"mutable","name":"target","nameLocation":"12133:6:0","nodeType":"VariableDeclaration","scope":434,"src":"12125:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":397,"name":"address","nodeType":"ElementaryTypeName","src":"12125:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":400,"mutability":"mutable","name":"success","nameLocation":"12150:7:0","nodeType":"VariableDeclaration","scope":434,"src":"12145:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":399,"name":"bool","nodeType":"ElementaryTypeName","src":"12145:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":402,"mutability":"mutable","name":"returndata","nameLocation":"12176:10:0","nodeType":"VariableDeclaration","scope":434,"src":"12163:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":401,"name":"bytes","nodeType":"ElementaryTypeName","src":"12163:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":404,"mutability":"mutable","name":"errorMessage","nameLocation":"12206:12:0","nodeType":"VariableDeclaration","scope":434,"src":"12192:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":403,"name":"string","nodeType":"ElementaryTypeName","src":"12192:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12119:103:0"},"returnParameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":407,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":434,"src":"12246:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":406,"name":"bytes","nodeType":"ElementaryTypeName","src":"12246:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12245:14:0"},"scope":479,"src":"12084:548:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":457,"nodeType":"Block","src":"12985:109:0","statements":[{"condition":{"id":446,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":437,"src":"12995:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":455,"nodeType":"Block","src":"13042:48:0","statements":[{"expression":{"arguments":[{"id":451,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":439,"src":"13058:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":452,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"13070:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":450,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":478,"src":"13050:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13050:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":454,"nodeType":"ExpressionStatement","src":"13050:33:0"}]},"id":456,"nodeType":"IfStatement","src":"12991:99:0","trueBody":{"id":449,"nodeType":"Block","src":"13004:32:0","statements":[{"expression":{"id":447,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":439,"src":"13019:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":445,"id":448,"nodeType":"Return","src":"13012:17:0"}]}}]},"documentation":{"id":435,"nodeType":"StructuredDocumentation","src":"12636:200:0","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":458,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"12848:16:0","nodeType":"FunctionDefinition","parameters":{"id":442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":437,"mutability":"mutable","name":"success","nameLocation":"12875:7:0","nodeType":"VariableDeclaration","scope":458,"src":"12870:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":436,"name":"bool","nodeType":"ElementaryTypeName","src":"12870:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":439,"mutability":"mutable","name":"returndata","nameLocation":"12901:10:0","nodeType":"VariableDeclaration","scope":458,"src":"12888:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":438,"name":"bytes","nodeType":"ElementaryTypeName","src":"12888:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"errorMessage","nameLocation":"12931:12:0","nodeType":"VariableDeclaration","scope":458,"src":"12917:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":440,"name":"string","nodeType":"ElementaryTypeName","src":"12917:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12864:83:0"},"returnParameters":{"id":445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":458,"src":"12971:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":443,"name":"bytes","nodeType":"ElementaryTypeName","src":"12971:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12970:14:0"},"scope":479,"src":"12839:255:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":477,"nodeType":"Block","src":"13193:393:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":465,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":460,"src":"13261:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13272:6:0","memberName":"length","nodeType":"MemberAccess","src":"13261:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13281:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13261:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":475,"nodeType":"Block","src":"13547:35:0","statements":[{"expression":{"arguments":[{"id":472,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":462,"src":"13562:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":471,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"13555:6:0","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13555:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":474,"nodeType":"ExpressionStatement","src":"13555:20:0"}]},"id":476,"nodeType":"IfStatement","src":"13257:325:0","trueBody":{"id":470,"nodeType":"Block","src":"13284:257:0","statements":[{"AST":{"nativeSrc":"13424:111:0","nodeType":"YulBlock","src":"13424:111:0","statements":[{"nativeSrc":"13434:40:0","nodeType":"YulVariableDeclaration","src":"13434:40:0","value":{"arguments":[{"name":"returndata","nativeSrc":"13463:10:0","nodeType":"YulIdentifier","src":"13463:10:0"}],"functionName":{"name":"mload","nativeSrc":"13457:5:0","nodeType":"YulIdentifier","src":"13457:5:0"},"nativeSrc":"13457:17:0","nodeType":"YulFunctionCall","src":"13457:17:0"},"variables":[{"name":"returndata_size","nativeSrc":"13438:15:0","nodeType":"YulTypedName","src":"13438:15:0","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"13494:2:0","nodeType":"YulLiteral","src":"13494:2:0","type":"","value":"32"},{"name":"returndata","nativeSrc":"13498:10:0","nodeType":"YulIdentifier","src":"13498:10:0"}],"functionName":{"name":"add","nativeSrc":"13490:3:0","nodeType":"YulIdentifier","src":"13490:3:0"},"nativeSrc":"13490:19:0","nodeType":"YulFunctionCall","src":"13490:19:0"},{"name":"returndata_size","nativeSrc":"13511:15:0","nodeType":"YulIdentifier","src":"13511:15:0"}],"functionName":{"name":"revert","nativeSrc":"13483:6:0","nodeType":"YulIdentifier","src":"13483:6:0"},"nativeSrc":"13483:44:0","nodeType":"YulFunctionCall","src":"13483:44:0"},"nativeSrc":"13483:44:0","nodeType":"YulExpressionStatement","src":"13483:44:0"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":460,"isOffset":false,"isSlot":false,"src":"13463:10:0","valueSize":1},{"declaration":460,"isOffset":false,"isSlot":false,"src":"13498:10:0","valueSize":1}],"id":469,"nodeType":"InlineAssembly","src":"13415:120:0"}]}}]},"id":478,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"13107:7:0","nodeType":"FunctionDefinition","parameters":{"id":463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":460,"mutability":"mutable","name":"returndata","nameLocation":"13133:10:0","nodeType":"VariableDeclaration","scope":478,"src":"13120:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":459,"name":"bytes","nodeType":"ElementaryTypeName","src":"13120:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":462,"mutability":"mutable","name":"errorMessage","nameLocation":"13163:12:0","nodeType":"VariableDeclaration","scope":478,"src":"13149:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":461,"name":"string","nodeType":"ElementaryTypeName","src":"13149:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13114:65:0"},"returnParameters":{"id":464,"nodeType":"ParameterList","parameters":[],"src":"13193:0:0"},"scope":479,"src":"13098:488:0","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":3994,"src":"5044:8544:0","usedErrors":[],"usedEvents":[]},{"id":480,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"13725:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":481,"nodeType":"StructuredDocumentation","src":"13750:1148:0","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```\n contract ERC1967 {\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._"},"fullyImplemented":true,"id":538,"linearizedBaseContracts":[538],"name":"StorageSlot","nameLocation":"14907:11:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":484,"members":[{"constant":false,"id":483,"mutability":"mutable","name":"value","nameLocation":"14956:5:0","nodeType":"VariableDeclaration","scope":484,"src":"14948:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":482,"name":"address","nodeType":"ElementaryTypeName","src":"14948:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"14930:11:0","nodeType":"StructDefinition","scope":538,"src":"14923:43:0","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":487,"members":[{"constant":false,"id":486,"mutability":"mutable","name":"value","nameLocation":"15000:5:0","nodeType":"VariableDeclaration","scope":487,"src":"14995:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":485,"name":"bool","nodeType":"ElementaryTypeName","src":"14995:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"14977:11:0","nodeType":"StructDefinition","scope":538,"src":"14970:40:0","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":490,"members":[{"constant":false,"id":489,"mutability":"mutable","name":"value","nameLocation":"15047:5:0","nodeType":"VariableDeclaration","scope":490,"src":"15039:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":488,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15039:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"15021:11:0","nodeType":"StructDefinition","scope":538,"src":"15014:43:0","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":493,"members":[{"constant":false,"id":492,"mutability":"mutable","name":"value","nameLocation":"15094:5:0","nodeType":"VariableDeclaration","scope":493,"src":"15086:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":491,"name":"uint256","nodeType":"ElementaryTypeName","src":"15086:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"15068:11:0","nodeType":"StructDefinition","scope":538,"src":"15061:43:0","visibility":"public"},{"body":{"id":503,"nodeType":"Block","src":"15286:86:0","statements":[{"AST":{"nativeSrc":"15340:28:0","nodeType":"YulBlock","src":"15340:28:0","statements":[{"nativeSrc":"15348:14:0","nodeType":"YulAssignment","src":"15348:14:0","value":{"name":"slot","nativeSrc":"15358:4:0","nodeType":"YulIdentifier","src":"15358:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"15348:6:0","nodeType":"YulIdentifier","src":"15348:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":500,"isOffset":false,"isSlot":true,"src":"15348:6:0","suffix":"slot","valueSize":1},{"declaration":496,"isOffset":false,"isSlot":false,"src":"15358:4:0","valueSize":1}],"id":502,"nodeType":"InlineAssembly","src":"15331:37:0"}]},"documentation":{"id":494,"nodeType":"StructuredDocumentation","src":"15108:83:0","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":504,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"15203:14:0","nodeType":"FunctionDefinition","parameters":{"id":497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":496,"mutability":"mutable","name":"slot","nameLocation":"15231:4:0","nodeType":"VariableDeclaration","scope":504,"src":"15223:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":495,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15223:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15217:22:0"},"returnParameters":{"id":501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":500,"mutability":"mutable","name":"r","nameLocation":"15283:1:0","nodeType":"VariableDeclaration","scope":504,"src":"15263:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":499,"nodeType":"UserDefinedTypeName","pathNode":{"id":498,"name":"AddressSlot","nameLocations":["15263:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":484,"src":"15263:11:0"},"referencedDeclaration":484,"src":"15263:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"15262:23:0"},"scope":538,"src":"15194:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":514,"nodeType":"Block","src":"15554:86:0","statements":[{"AST":{"nativeSrc":"15608:28:0","nodeType":"YulBlock","src":"15608:28:0","statements":[{"nativeSrc":"15616:14:0","nodeType":"YulAssignment","src":"15616:14:0","value":{"name":"slot","nativeSrc":"15626:4:0","nodeType":"YulIdentifier","src":"15626:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"15616:6:0","nodeType":"YulIdentifier","src":"15616:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":511,"isOffset":false,"isSlot":true,"src":"15616:6:0","suffix":"slot","valueSize":1},{"declaration":507,"isOffset":false,"isSlot":false,"src":"15626:4:0","valueSize":1}],"id":513,"nodeType":"InlineAssembly","src":"15599:37:0"}]},"documentation":{"id":505,"nodeType":"StructuredDocumentation","src":"15376:83:0","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":515,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"15471:14:0","nodeType":"FunctionDefinition","parameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"slot","nameLocation":"15499:4:0","nodeType":"VariableDeclaration","scope":515,"src":"15491:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":506,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15491:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15485:22:0"},"returnParameters":{"id":512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":511,"mutability":"mutable","name":"r","nameLocation":"15551:1:0","nodeType":"VariableDeclaration","scope":515,"src":"15531:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$487_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":510,"nodeType":"UserDefinedTypeName","pathNode":{"id":509,"name":"BooleanSlot","nameLocations":["15531:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":487,"src":"15531:11:0"},"referencedDeclaration":487,"src":"15531:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$487_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"15530:23:0"},"scope":538,"src":"15462:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":525,"nodeType":"Block","src":"15822:86:0","statements":[{"AST":{"nativeSrc":"15876:28:0","nodeType":"YulBlock","src":"15876:28:0","statements":[{"nativeSrc":"15884:14:0","nodeType":"YulAssignment","src":"15884:14:0","value":{"name":"slot","nativeSrc":"15894:4:0","nodeType":"YulIdentifier","src":"15894:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"15884:6:0","nodeType":"YulIdentifier","src":"15884:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":522,"isOffset":false,"isSlot":true,"src":"15884:6:0","suffix":"slot","valueSize":1},{"declaration":518,"isOffset":false,"isSlot":false,"src":"15894:4:0","valueSize":1}],"id":524,"nodeType":"InlineAssembly","src":"15867:37:0"}]},"documentation":{"id":516,"nodeType":"StructuredDocumentation","src":"15644:83:0","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":526,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"15739:14:0","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"slot","nameLocation":"15767:4:0","nodeType":"VariableDeclaration","scope":526,"src":"15759:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15759:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15753:22:0"},"returnParameters":{"id":523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":522,"mutability":"mutable","name":"r","nameLocation":"15819:1:0","nodeType":"VariableDeclaration","scope":526,"src":"15799:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$490_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":521,"nodeType":"UserDefinedTypeName","pathNode":{"id":520,"name":"Bytes32Slot","nameLocations":["15799:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":490,"src":"15799:11:0"},"referencedDeclaration":490,"src":"15799:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$490_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"15798:23:0"},"scope":538,"src":"15730:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":536,"nodeType":"Block","src":"16090:86:0","statements":[{"AST":{"nativeSrc":"16144:28:0","nodeType":"YulBlock","src":"16144:28:0","statements":[{"nativeSrc":"16152:14:0","nodeType":"YulAssignment","src":"16152:14:0","value":{"name":"slot","nativeSrc":"16162:4:0","nodeType":"YulIdentifier","src":"16162:4:0"},"variableNames":[{"name":"r.slot","nativeSrc":"16152:6:0","nodeType":"YulIdentifier","src":"16152:6:0"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":533,"isOffset":false,"isSlot":true,"src":"16152:6:0","suffix":"slot","valueSize":1},{"declaration":529,"isOffset":false,"isSlot":false,"src":"16162:4:0","valueSize":1}],"id":535,"nodeType":"InlineAssembly","src":"16135:37:0"}]},"documentation":{"id":527,"nodeType":"StructuredDocumentation","src":"15912:83:0","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":537,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"16007:14:0","nodeType":"FunctionDefinition","parameters":{"id":530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":529,"mutability":"mutable","name":"slot","nameLocation":"16035:4:0","nodeType":"VariableDeclaration","scope":537,"src":"16027:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16027:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16021:22:0"},"returnParameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":533,"mutability":"mutable","name":"r","nameLocation":"16087:1:0","nodeType":"VariableDeclaration","scope":537,"src":"16067:21:0","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$493_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":532,"nodeType":"UserDefinedTypeName","pathNode":{"id":531,"name":"Uint256Slot","nameLocations":["16067:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":493,"src":"16067:11:0"},"referencedDeclaration":493,"src":"16067:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$493_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"16066:23:0"},"scope":538,"src":"15998:178:0","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3994,"src":"14899:1279:0","usedErrors":[],"usedEvents":[]},{"id":539,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"16337:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"ERC1967Upgrade","contractDependencies":[],"contractKind":"contract","documentation":{"id":540,"nodeType":"StructuredDocumentation","src":"16362:236:0","text":" @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"},"fullyImplemented":true,"id":851,"linearizedBaseContracts":[851],"name":"ERC1967Upgrade","nameLocation":"16617:14:0","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":543,"mutability":"constant","name":"_ROLLBACK_SLOT","nameLocation":"16738:14:0","nodeType":"VariableDeclaration","scope":851,"src":"16713:112:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16713:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433","id":542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16759:66:0","typeDescriptions":{"typeIdentifier":"t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1","typeString":"int_const 3304...(69 digits omitted)...9347"},"value":"0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"},"visibility":"private"},{"constant":true,"documentation":{"id":544,"nodeType":"StructuredDocumentation","src":"16830:206:0","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":547,"mutability":"constant","name":"_IMPLEMENTATION_SLOT","nameLocation":"17065:20:0","nodeType":"VariableDeclaration","scope":851,"src":"17039:119:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":545,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17039:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17092:66:0","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"17163:64:0","text":" @dev Emitted when the implementation is upgraded."},"eventSelector":"bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b","id":552,"name":"Upgraded","nameLocation":"17236:8:0","nodeType":"EventDefinition","parameters":{"id":551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":550,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"17261:14:0","nodeType":"VariableDeclaration","scope":552,"src":"17245:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":549,"name":"address","nodeType":"ElementaryTypeName","src":"17245:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17244:32:0"},"src":"17230:47:0"},{"body":{"id":564,"nodeType":"Block","src":"17409:72:0","statements":[{"expression":{"expression":{"arguments":[{"id":560,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"17449:20:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":558,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"17422:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17434:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"17422:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17422:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":562,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17471:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"17422:54:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":557,"id":563,"nodeType":"Return","src":"17415:61:0"}]},"documentation":{"id":553,"nodeType":"StructuredDocumentation","src":"17281:63:0","text":" @dev Returns the current implementation address."},"id":565,"implemented":true,"kind":"function","modifiers":[],"name":"_getImplementation","nameLocation":"17356:18:0","nodeType":"FunctionDefinition","parameters":{"id":554,"nodeType":"ParameterList","parameters":[],"src":"17374:2:0"},"returnParameters":{"id":557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":565,"src":"17400:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":555,"name":"address","nodeType":"ElementaryTypeName","src":"17400:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17399:9:0"},"scope":851,"src":"17347:134:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":588,"nodeType":"Block","src":"17627:204:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":574,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":568,"src":"17667:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":572,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"17648:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17656:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":167,"src":"17648:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17648:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"17693:47:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""},"value":"ERC1967: new implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65","typeString":"literal_string \"ERC1967: new implementation is not a contract\""}],"id":571,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17633:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17633:113:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":578,"nodeType":"ExpressionStatement","src":"17633:113:0"},{"expression":{"id":586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":582,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"17779:20:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":579,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"17752:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17764:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"17752:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17752:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"17801:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"17752:54:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":585,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":568,"src":"17809:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17752:74:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":587,"nodeType":"ExpressionStatement","src":"17752:74:0"}]},"documentation":{"id":566,"nodeType":"StructuredDocumentation","src":"17485:76:0","text":" @dev Stores a new address in the EIP1967 implementation slot."},"id":589,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"17573:18:0","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":568,"mutability":"mutable","name":"newImplementation","nameLocation":"17600:17:0","nodeType":"VariableDeclaration","scope":589,"src":"17592:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":567,"name":"address","nodeType":"ElementaryTypeName","src":"17592:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17591:27:0"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"17627:0:0"},"scope":851,"src":"17564:267:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":603,"nodeType":"Block","src":"17981:86:0","statements":[{"expression":{"arguments":[{"id":596,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"18006:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":595,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"17987:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17987:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":598,"nodeType":"ExpressionStatement","src":"17987:37:0"},{"eventCall":{"arguments":[{"id":600,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"18044:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":599,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":552,"src":"18035:8:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18035:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":602,"nodeType":"EmitStatement","src":"18030:32:0"}]},"documentation":{"id":590,"nodeType":"StructuredDocumentation","src":"17835:87:0","text":" @dev Perform implementation upgrade\n Emits an {Upgraded} event."},"id":604,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"17934:10:0","nodeType":"FunctionDefinition","parameters":{"id":593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":592,"mutability":"mutable","name":"newImplementation","nameLocation":"17953:17:0","nodeType":"VariableDeclaration","scope":604,"src":"17945:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":591,"name":"address","nodeType":"ElementaryTypeName","src":"17945:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17944:27:0"},"returnParameters":{"id":594,"nodeType":"ParameterList","parameters":[],"src":"17981:0:0"},"scope":851,"src":"17925:142:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":633,"nodeType":"Block","src":"18303:147:0","statements":[{"expression":{"arguments":[{"id":615,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":607,"src":"18320:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":614,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":604,"src":"18309:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18309:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":617,"nodeType":"ExpressionStatement","src":"18309:29:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":618,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"18348:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18353:6:0","memberName":"length","nodeType":"MemberAccess","src":"18348:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18362:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18348:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":622,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":611,"src":"18367:9:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18348:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":632,"nodeType":"IfStatement","src":"18344:102:0","trueBody":{"id":631,"nodeType":"Block","src":"18378:68:0","statements":[{"expression":{"arguments":[{"id":627,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":607,"src":"18415:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":628,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"18434:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":624,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"18386:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18394:20:0","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":366,"src":"18386:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18386:53:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":630,"nodeType":"ExpressionStatement","src":"18386:53:0"}]}}]},"documentation":{"id":605,"nodeType":"StructuredDocumentation","src":"18071:115:0","text":" @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."},"id":634,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCall","nameLocation":"18198:17:0","nodeType":"FunctionDefinition","parameters":{"id":612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":607,"mutability":"mutable","name":"newImplementation","nameLocation":"18229:17:0","nodeType":"VariableDeclaration","scope":634,"src":"18221:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":606,"name":"address","nodeType":"ElementaryTypeName","src":"18221:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":609,"mutability":"mutable","name":"data","nameLocation":"18265:4:0","nodeType":"VariableDeclaration","scope":634,"src":"18252:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":608,"name":"bytes","nodeType":"ElementaryTypeName","src":"18252:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":611,"mutability":"mutable","name":"forceCall","nameLocation":"18280:9:0","nodeType":"VariableDeclaration","scope":634,"src":"18275:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":610,"name":"bool","nodeType":"ElementaryTypeName","src":"18275:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18215:78:0"},"returnParameters":{"id":613,"nodeType":"ParameterList","parameters":[],"src":"18303:0:0"},"scope":851,"src":"18189:261:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":686,"nodeType":"Block","src":"18728:794:0","statements":[{"condition":{"expression":{"arguments":[{"id":646,"name":"_ROLLBACK_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"19053:14:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":644,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"19026:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19038:14:0","memberName":"getBooleanSlot","nodeType":"MemberAccess","referencedDeclaration":515,"src":"19026:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$487_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"}},"id":647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19026:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$487_storage_ptr","typeString":"struct StorageSlot.BooleanSlot storage pointer"}},"id":648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19069:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":486,"src":"19026:48:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":684,"nodeType":"Block","src":"19134:384:0","statements":[{"clauses":[{"block":{"id":669,"nodeType":"Block","src":"19238:131:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":663,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":660,"src":"19267:4:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":664,"name":"_IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":547,"src":"19275:20:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"19267:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944","id":666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19307:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""},"value":"ERC1967Upgrade: unsupported proxiableUUID"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c","typeString":"literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""}],"id":662,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19248:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19248:112:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":668,"nodeType":"ExpressionStatement","src":"19248:112:0"}]},"errorName":"","id":670,"nodeType":"TryCatchClause","parameters":{"id":661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":660,"mutability":"mutable","name":"slot","nameLocation":"19225:4:0","nodeType":"VariableDeclaration","scope":670,"src":"19217:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":659,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19217:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"19207:30:0"},"src":"19199:170:0"},{"block":{"id":675,"nodeType":"Block","src":"19376:75:0","statements":[{"expression":{"arguments":[{"hexValue":"45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053","id":672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19393:48:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""},"value":"ERC1967Upgrade: new implementation is not UUPS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24","typeString":"literal_string \"ERC1967Upgrade: new implementation is not UUPS\""}],"id":671,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"19386:6:0","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19386:56:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":674,"nodeType":"ExpressionStatement","src":"19386:56:0"}]},"errorName":"","id":676,"nodeType":"TryCatchClause","src":"19370:81:0"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":655,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"19164:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":654,"name":"IERC1822Proxiable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":141,"src":"19146:17:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC1822Proxiable_$141_$","typeString":"type(contract IERC1822Proxiable)"}},"id":656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19146:36:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC1822Proxiable_$141","typeString":"contract IERC1822Proxiable"}},"id":657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19183:13:0","memberName":"proxiableUUID","nodeType":"MemberAccess","referencedDeclaration":140,"src":"19146:50:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19146:52:0","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":677,"nodeType":"TryStatement","src":"19142:309:0"},{"expression":{"arguments":[{"id":679,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"19476:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":680,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":639,"src":"19495:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":681,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":641,"src":"19501:9:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":678,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"19458:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19458:53:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":683,"nodeType":"ExpressionStatement","src":"19458:53:0"}]},"id":685,"nodeType":"IfStatement","src":"19022:496:0","trueBody":{"id":653,"nodeType":"Block","src":"19076:52:0","statements":[{"expression":{"arguments":[{"id":650,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":637,"src":"19103:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":649,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"19084:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19084:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":652,"nodeType":"ExpressionStatement","src":"19084:37:0"}]}}]},"documentation":{"id":635,"nodeType":"StructuredDocumentation","src":"18454:153:0","text":" @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."},"id":687,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeToAndCallUUPS","nameLocation":"18619:21:0","nodeType":"FunctionDefinition","parameters":{"id":642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"newImplementation","nameLocation":"18654:17:0","nodeType":"VariableDeclaration","scope":687,"src":"18646:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":636,"name":"address","nodeType":"ElementaryTypeName","src":"18646:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":639,"mutability":"mutable","name":"data","nameLocation":"18690:4:0","nodeType":"VariableDeclaration","scope":687,"src":"18677:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":638,"name":"bytes","nodeType":"ElementaryTypeName","src":"18677:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":641,"mutability":"mutable","name":"forceCall","nameLocation":"18705:9:0","nodeType":"VariableDeclaration","scope":687,"src":"18700:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":640,"name":"bool","nodeType":"ElementaryTypeName","src":"18700:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18640:78:0"},"returnParameters":{"id":643,"nodeType":"ParameterList","parameters":[],"src":"18728:0:0"},"scope":851,"src":"18610:912:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"19526:181:0","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":691,"mutability":"constant","name":"_ADMIN_SLOT","nameLocation":"19736:11:0","nodeType":"VariableDeclaration","scope":851,"src":"19710:110:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":689,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19710:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19754:66:0","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":692,"nodeType":"StructuredDocumentation","src":"19825:63:0","text":" @dev Emitted when the admin account has changed."},"eventSelector":"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f","id":698,"name":"AdminChanged","nameLocation":"19897:12:0","nodeType":"EventDefinition","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":694,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"19918:13:0","nodeType":"VariableDeclaration","scope":698,"src":"19910:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":693,"name":"address","nodeType":"ElementaryTypeName","src":"19910:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":696,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"19941:8:0","nodeType":"VariableDeclaration","scope":698,"src":"19933:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":695,"name":"address","nodeType":"ElementaryTypeName","src":"19933:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19909:41:0"},"src":"19891:60:0"},{"body":{"id":710,"nodeType":"Block","src":"20057:63:0","statements":[{"expression":{"expression":{"arguments":[{"id":706,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"20097:11:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":704,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"20070:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20082:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"20070:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20070:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20110:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"20070:45:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":703,"id":709,"nodeType":"Return","src":"20063:52:0"}]},"documentation":{"id":699,"nodeType":"StructuredDocumentation","src":"19955:46:0","text":" @dev Returns the current admin."},"id":711,"implemented":true,"kind":"function","modifiers":[],"name":"_getAdmin","nameLocation":"20013:9:0","nodeType":"FunctionDefinition","parameters":{"id":700,"nodeType":"ParameterList","parameters":[],"src":"20022:2:0"},"returnParameters":{"id":703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":702,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":711,"src":"20048:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"20048:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20047:9:0"},"scope":851,"src":"20004:116:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":736,"nodeType":"Block","src":"20239:146:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":718,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"20253:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20273:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":720,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20265:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":719,"name":"address","nodeType":"ElementaryTypeName","src":"20265:7:0","typeDescriptions":{}}},"id":722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20265:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20253:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373","id":724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"20277:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""},"value":"ERC1967: new admin is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5","typeString":"literal_string \"ERC1967: new admin is the zero address\""}],"id":717,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20245:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20245:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":726,"nodeType":"ExpressionStatement","src":"20245:73:0"},{"expression":{"id":734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":730,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":691,"src":"20351:11:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":727,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"20324:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20336:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"20324:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20324:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20364:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"20324:45:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":733,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":714,"src":"20372:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"20324:56:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":735,"nodeType":"ExpressionStatement","src":"20324:56:0"}]},"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"20124:67:0","text":" @dev Stores a new address in the EIP1967 admin slot."},"id":737,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"20203:9:0","nodeType":"FunctionDefinition","parameters":{"id":715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":714,"mutability":"mutable","name":"newAdmin","nameLocation":"20221:8:0","nodeType":"VariableDeclaration","scope":737,"src":"20213:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":713,"name":"address","nodeType":"ElementaryTypeName","src":"20213:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20212:18:0"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[],"src":"20239:0:0"},"scope":851,"src":"20194:191:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":753,"nodeType":"Block","src":"20533:76:0","statements":[{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":744,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"20557:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20557:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":746,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":740,"src":"20570:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":743,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":698,"src":"20544:12:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20544:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":748,"nodeType":"EmitStatement","src":"20539:40:0"},{"expression":{"arguments":[{"id":750,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":740,"src":"20595:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":749,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":737,"src":"20585:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20585:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":752,"nodeType":"ExpressionStatement","src":"20585:19:0"}]},"documentation":{"id":738,"nodeType":"StructuredDocumentation","src":"20389:92:0","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."},"id":754,"implemented":true,"kind":"function","modifiers":[],"name":"_changeAdmin","nameLocation":"20493:12:0","nodeType":"FunctionDefinition","parameters":{"id":741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":740,"mutability":"mutable","name":"newAdmin","nameLocation":"20514:8:0","nodeType":"VariableDeclaration","scope":754,"src":"20506:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":739,"name":"address","nodeType":"ElementaryTypeName","src":"20506:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20505:18:0"},"returnParameters":{"id":742,"nodeType":"ParameterList","parameters":[],"src":"20533:0:0"},"scope":851,"src":"20484:125:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":true,"documentation":{"id":755,"nodeType":"StructuredDocumentation","src":"20613:226:0","text":" @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."},"id":758,"mutability":"constant","name":"_BEACON_SLOT","nameLocation":"20868:12:0","nodeType":"VariableDeclaration","scope":851,"src":"20842:111:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20842:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530","id":757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20887:66:0","typeDescriptions":{"typeIdentifier":"t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1","typeString":"int_const 7415...(69 digits omitted)...4704"},"value":"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":759,"nodeType":"StructuredDocumentation","src":"20958:56:0","text":" @dev Emitted when the beacon is upgraded."},"eventSelector":"1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e","id":763,"name":"BeaconUpgraded","nameLocation":"21023:14:0","nodeType":"EventDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"indexed":true,"mutability":"mutable","name":"beacon","nameLocation":"21054:6:0","nodeType":"VariableDeclaration","scope":763,"src":"21038:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":760,"name":"address","nodeType":"ElementaryTypeName","src":"21038:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21037:24:0"},"src":"21017:45:0"},{"body":{"id":775,"nodeType":"Block","src":"21170:64:0","statements":[{"expression":{"expression":{"arguments":[{"id":771,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":758,"src":"21210:12:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":769,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"21183:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21195:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"21183:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21183:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21224:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"21183:46:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":768,"id":774,"nodeType":"Return","src":"21176:53:0"}]},"documentation":{"id":764,"nodeType":"StructuredDocumentation","src":"21066:47:0","text":" @dev Returns the current beacon."},"id":776,"implemented":true,"kind":"function","modifiers":[],"name":"_getBeacon","nameLocation":"21125:10:0","nodeType":"FunctionDefinition","parameters":{"id":765,"nodeType":"ParameterList","parameters":[],"src":"21135:2:0"},"returnParameters":{"id":768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":776,"src":"21161:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":766,"name":"address","nodeType":"ElementaryTypeName","src":"21161:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21160:9:0"},"scope":851,"src":"21116:118:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":811,"nodeType":"Block","src":"21355:312:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":785,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"21395:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":783,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"21376:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21384:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":167,"src":"21376:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21376:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374","id":787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21413:39:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""},"value":"ERC1967: new beacon is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470","typeString":"literal_string \"ERC1967: new beacon is not a contract\""}],"id":782,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21361:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21361:97:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":789,"nodeType":"ExpressionStatement","src":"21361:97:0"},{"expression":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":794,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"21506:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":793,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"21498:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$150_$","typeString":"type(contract IBeacon)"}},"id":795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21498:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$150","typeString":"contract IBeacon"}},"id":796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21517:14:0","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":149,"src":"21498:33:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21498:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":791,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"21479:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21487:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":167,"src":"21479:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21479:55:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374","id":799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"21542:50:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""},"value":"ERC1967: beacon implementation is not a contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8","typeString":"literal_string \"ERC1967: beacon implementation is not a contract\""}],"id":790,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"21464:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21464:134:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":801,"nodeType":"ExpressionStatement","src":"21464:134:0"},{"expression":{"id":809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":805,"name":"_BEACON_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":758,"src":"21631:12:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":802,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"21604:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21616:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"21604:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21604:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"21645:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"21604:46:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":808,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"21653:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21604:58:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":810,"nodeType":"ExpressionStatement","src":"21604:58:0"}]},"documentation":{"id":777,"nodeType":"StructuredDocumentation","src":"21238:67:0","text":" @dev Stores a new beacon in the EIP1967 beacon slot."},"id":812,"implemented":true,"kind":"function","modifiers":[],"name":"_setBeacon","nameLocation":"21317:10:0","nodeType":"FunctionDefinition","parameters":{"id":780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":779,"mutability":"mutable","name":"newBeacon","nameLocation":"21336:9:0","nodeType":"VariableDeclaration","scope":812,"src":"21328:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":778,"name":"address","nodeType":"ElementaryTypeName","src":"21328:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21327:19:0"},"returnParameters":{"id":781,"nodeType":"ParameterList","parameters":[],"src":"21355:0:0"},"scope":851,"src":"21308:359:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":849,"nodeType":"Block","src":"22068:193:0","statements":[{"expression":{"arguments":[{"id":823,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"22085:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":822,"name":"_setBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"22074:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22074:21:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":825,"nodeType":"ExpressionStatement","src":"22074:21:0"},{"eventCall":{"arguments":[{"id":827,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"22121:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":826,"name":"BeaconUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"22106:14:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22106:25:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":829,"nodeType":"EmitStatement","src":"22101:30:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":830,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":817,"src":"22141:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22146:6:0","memberName":"length","nodeType":"MemberAccess","src":"22141:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22155:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"22141:15:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":834,"name":"forceCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":819,"src":"22160:9:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"22141:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":848,"nodeType":"IfStatement","src":"22137:120:0","trueBody":{"id":847,"nodeType":"Block","src":"22171:86:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":840,"name":"newBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"22216:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":839,"name":"IBeacon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":150,"src":"22208:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBeacon_$150_$","typeString":"type(contract IBeacon)"}},"id":841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22208:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBeacon_$150","typeString":"contract IBeacon"}},"id":842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22227:14:0","memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":149,"src":"22208:33:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22208:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":844,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":817,"src":"22245:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":836,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"22179:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$479_$","typeString":"type(library Address)"}},"id":838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22187:20:0","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":366,"src":"22179:28:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22179:71:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":846,"nodeType":"ExpressionStatement","src":"22179:71:0"}]}}]},"documentation":{"id":813,"nodeType":"StructuredDocumentation","src":"21671:282:0","text":" @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."},"id":850,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeBeaconToAndCall","nameLocation":"21965:23:0","nodeType":"FunctionDefinition","parameters":{"id":820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":815,"mutability":"mutable","name":"newBeacon","nameLocation":"22002:9:0","nodeType":"VariableDeclaration","scope":850,"src":"21994:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":814,"name":"address","nodeType":"ElementaryTypeName","src":"21994:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":817,"mutability":"mutable","name":"data","nameLocation":"22030:4:0","nodeType":"VariableDeclaration","scope":850,"src":"22017:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":816,"name":"bytes","nodeType":"ElementaryTypeName","src":"22017:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":819,"mutability":"mutable","name":"forceCall","nameLocation":"22045:9:0","nodeType":"VariableDeclaration","scope":850,"src":"22040:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":818,"name":"bool","nodeType":"ElementaryTypeName","src":"22040:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21988:70:0"},"returnParameters":{"id":821,"nodeType":"ParameterList","parameters":[],"src":"22068:0:0"},"scope":851,"src":"21956:305:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3994,"src":"16599:5664:0","usedErrors":[],"usedEvents":[552,698,763]},{"id":852,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"22388:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":853,"nodeType":"StructuredDocumentation","src":"22413:598:0","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":902,"linearizedBaseContracts":[902],"name":"Proxy","nameLocation":"23030:5:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":860,"nodeType":"Block","src":"23285:719:0","statements":[{"AST":{"nativeSrc":"23300:700:0","nodeType":"YulBlock","src":"23300:700:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"23529:1:0","nodeType":"YulLiteral","src":"23529:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"23532:1:0","nodeType":"YulLiteral","src":"23532:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"23535:12:0","nodeType":"YulIdentifier","src":"23535:12:0"},"nativeSrc":"23535:14:0","nodeType":"YulFunctionCall","src":"23535:14:0"}],"functionName":{"name":"calldatacopy","nativeSrc":"23516:12:0","nodeType":"YulIdentifier","src":"23516:12:0"},"nativeSrc":"23516:34:0","nodeType":"YulFunctionCall","src":"23516:34:0"},"nativeSrc":"23516:34:0","nodeType":"YulExpressionStatement","src":"23516:34:0"},{"nativeSrc":"23659:74:0","nodeType":"YulVariableDeclaration","src":"23659:74:0","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"23686:3:0","nodeType":"YulIdentifier","src":"23686:3:0"},"nativeSrc":"23686:5:0","nodeType":"YulFunctionCall","src":"23686:5:0"},{"name":"implementation","nativeSrc":"23693:14:0","nodeType":"YulIdentifier","src":"23693:14:0"},{"kind":"number","nativeSrc":"23709:1:0","nodeType":"YulLiteral","src":"23709:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"23712:12:0","nodeType":"YulIdentifier","src":"23712:12:0"},"nativeSrc":"23712:14:0","nodeType":"YulFunctionCall","src":"23712:14:0"},{"kind":"number","nativeSrc":"23728:1:0","nodeType":"YulLiteral","src":"23728:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"23731:1:0","nodeType":"YulLiteral","src":"23731:1:0","type":"","value":"0"}],"functionName":{"name":"delegatecall","nativeSrc":"23673:12:0","nodeType":"YulIdentifier","src":"23673:12:0"},"nativeSrc":"23673:60:0","nodeType":"YulFunctionCall","src":"23673:60:0"},"variables":[{"name":"result","nativeSrc":"23663:6:0","nodeType":"YulTypedName","src":"23663:6:0","type":""}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"23789:1:0","nodeType":"YulLiteral","src":"23789:1:0","type":"","value":"0"},{"kind":"number","nativeSrc":"23792:1:0","nodeType":"YulLiteral","src":"23792:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"23795:14:0","nodeType":"YulIdentifier","src":"23795:14:0"},"nativeSrc":"23795:16:0","nodeType":"YulFunctionCall","src":"23795:16:0"}],"functionName":{"name":"returndatacopy","nativeSrc":"23774:14:0","nodeType":"YulIdentifier","src":"23774:14:0"},"nativeSrc":"23774:38:0","nodeType":"YulFunctionCall","src":"23774:38:0"},"nativeSrc":"23774:38:0","nodeType":"YulExpressionStatement","src":"23774:38:0"},{"cases":[{"body":{"nativeSrc":"23889:45:0","nodeType":"YulBlock","src":"23889:45:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"23906:1:0","nodeType":"YulLiteral","src":"23906:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"23909:14:0","nodeType":"YulIdentifier","src":"23909:14:0"},"nativeSrc":"23909:16:0","nodeType":"YulFunctionCall","src":"23909:16:0"}],"functionName":{"name":"revert","nativeSrc":"23899:6:0","nodeType":"YulIdentifier","src":"23899:6:0"},"nativeSrc":"23899:27:0","nodeType":"YulFunctionCall","src":"23899:27:0"},"nativeSrc":"23899:27:0","nodeType":"YulExpressionStatement","src":"23899:27:0"}]},"nativeSrc":"23882:52:0","nodeType":"YulCase","src":"23882:52:0","value":{"kind":"number","nativeSrc":"23887:1:0","nodeType":"YulLiteral","src":"23887:1:0","type":"","value":"0"}},{"body":{"nativeSrc":"23949:45:0","nodeType":"YulBlock","src":"23949:45:0","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"23966:1:0","nodeType":"YulLiteral","src":"23966:1:0","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"23969:14:0","nodeType":"YulIdentifier","src":"23969:14:0"},"nativeSrc":"23969:16:0","nodeType":"YulFunctionCall","src":"23969:16:0"}],"functionName":{"name":"return","nativeSrc":"23959:6:0","nodeType":"YulIdentifier","src":"23959:6:0"},"nativeSrc":"23959:27:0","nodeType":"YulFunctionCall","src":"23959:27:0"},"nativeSrc":"23959:27:0","nodeType":"YulExpressionStatement","src":"23959:27:0"}]},"nativeSrc":"23941:53:0","nodeType":"YulCase","src":"23941:53:0","value":"default"}],"expression":{"name":"result","nativeSrc":"23827:6:0","nodeType":"YulIdentifier","src":"23827:6:0"},"nativeSrc":"23820:174:0","nodeType":"YulSwitch","src":"23820:174:0"}]},"evmVersion":"shanghai","externalReferences":[{"declaration":856,"isOffset":false,"isSlot":false,"src":"23693:14:0","valueSize":1}],"id":859,"nodeType":"InlineAssembly","src":"23291:709:0"}]},"documentation":{"id":854,"nodeType":"StructuredDocumentation","src":"23040:182:0","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":861,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"23234:9:0","nodeType":"FunctionDefinition","parameters":{"id":857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":856,"mutability":"mutable","name":"implementation","nameLocation":"23252:14:0","nodeType":"VariableDeclaration","scope":861,"src":"23244:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":855,"name":"address","nodeType":"ElementaryTypeName","src":"23244:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23243:24:0"},"returnParameters":{"id":858,"nodeType":"ParameterList","parameters":[],"src":"23285:0:0"},"scope":902,"src":"23225:779:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":862,"nodeType":"StructuredDocumentation","src":"24008:167:0","text":" @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n and {_fallback} should delegate."},"id":867,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"24187:15:0","nodeType":"FunctionDefinition","parameters":{"id":863,"nodeType":"ParameterList","parameters":[],"src":"24202:2:0"},"returnParameters":{"id":866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":867,"src":"24236:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":864,"name":"address","nodeType":"ElementaryTypeName","src":"24236:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24235:9:0"},"scope":902,"src":"24178:67:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":879,"nodeType":"Block","src":"24499:62:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":871,"name":"_beforeFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":901,"src":"24505:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24505:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":873,"nodeType":"ExpressionStatement","src":"24505:17:0"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":875,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":867,"src":"24538:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24538:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":874,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":861,"src":"24528:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24528:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":878,"nodeType":"ExpressionStatement","src":"24528:28:0"}]},"documentation":{"id":868,"nodeType":"StructuredDocumentation","src":"24249:209:0","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":880,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"24470:9:0","nodeType":"FunctionDefinition","parameters":{"id":869,"nodeType":"ParameterList","parameters":[],"src":"24479:2:0"},"returnParameters":{"id":870,"nodeType":"ParameterList","parameters":[],"src":"24499:0:0"},"scope":902,"src":"24461:100:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":887,"nodeType":"Block","src":"24784:22:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":884,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":880,"src":"24790:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24790:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":886,"nodeType":"ExpressionStatement","src":"24790:11:0"}]},"documentation":{"id":881,"nodeType":"StructuredDocumentation","src":"24565:180:0","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":888,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":882,"nodeType":"ParameterList","parameters":[],"src":"24756:2:0"},"returnParameters":{"id":883,"nodeType":"ParameterList","parameters":[],"src":"24784:0:0"},"scope":902,"src":"24748:58:0","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":895,"nodeType":"Block","src":"24991:22:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":892,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":880,"src":"24997:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24997:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":894,"nodeType":"ExpressionStatement","src":"24997:11:0"}]},"documentation":{"id":889,"nodeType":"StructuredDocumentation","src":"24810:143:0","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n is empty."},"id":896,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[],"src":"24963:2:0"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"24991:0:0"},"scope":902,"src":"24956:57:0","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":900,"nodeType":"Block","src":"25325:2:0","statements":[]},"documentation":{"id":897,"nodeType":"StructuredDocumentation","src":"25017:261:0","text":" @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n call, or as part of the Solidity `fallback` or `receive` functions.\n If overridden should call `super._beforeFallback()`."},"id":901,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"25290:15:0","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[],"src":"25305:2:0"},"returnParameters":{"id":899,"nodeType":"ParameterList","parameters":[],"src":"25325:0:0"},"scope":902,"src":"25281:46:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3994,"src":"23012:2317:0","usedErrors":[],"usedEvents":[]},{"id":903,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"25484:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":905,"name":"Proxy","nameLocations":["25907:5:0"],"nodeType":"IdentifierPath","referencedDeclaration":902,"src":"25907:5:0"},"id":906,"nodeType":"InheritanceSpecifier","src":"25907:5:0"},{"baseName":{"id":907,"name":"ERC1967Upgrade","nameLocations":["25914:14:0"],"nodeType":"IdentifierPath","referencedDeclaration":851,"src":"25914:14:0"},"id":908,"nodeType":"InheritanceSpecifier","src":"25914:14:0"}],"canonicalName":"ERC1967Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":904,"nodeType":"StructuredDocumentation","src":"25509:372:0","text":" @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n implementation address that can be changed. This address is stored in storage in the location specified by\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n implementation behind the proxy."},"fullyImplemented":true,"id":936,"linearizedBaseContracts":[936,851,902],"name":"ERC1967Proxy","nameLocation":"25891:12:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":922,"nodeType":"Block","src":"26315:50:0","statements":[{"expression":{"arguments":[{"id":917,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":911,"src":"26339:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":918,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":913,"src":"26347:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26354:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":916,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"26321:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26321:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":921,"nodeType":"ExpressionStatement","src":"26321:39:0"}]},"documentation":{"id":909,"nodeType":"StructuredDocumentation","src":"25933:323:0","text":" @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n function call, and allows initializing the storage of the proxy like a Solidity constructor."},"id":923,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"_logic","nameLocation":"26279:6:0","nodeType":"VariableDeclaration","scope":923,"src":"26271:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":910,"name":"address","nodeType":"ElementaryTypeName","src":"26271:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"_data","nameLocation":"26300:5:0","nodeType":"VariableDeclaration","scope":923,"src":"26287:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":912,"name":"bytes","nodeType":"ElementaryTypeName","src":"26287:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"26270:36:0"},"returnParameters":{"id":915,"nodeType":"ParameterList","parameters":[],"src":"26315:0:0"},"scope":936,"src":"26259:106:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[867],"body":{"id":934,"nodeType":"Block","src":"26538:53:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":930,"name":"ERC1967Upgrade","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":851,"src":"26551:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ERC1967Upgrade_$851_$","typeString":"type(contract ERC1967Upgrade)"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26566:18:0","memberName":"_getImplementation","nodeType":"MemberAccess","referencedDeclaration":565,"src":"26551:33:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26551:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":929,"id":933,"nodeType":"Return","src":"26544:42:0"}]},"documentation":{"id":924,"nodeType":"StructuredDocumentation","src":"26369:63:0","text":" @dev Returns the current implementation address."},"id":935,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"26444:15:0","nodeType":"FunctionDefinition","overrides":{"id":926,"nodeType":"OverrideSpecifier","overrides":[],"src":"26500:8:0"},"parameters":{"id":925,"nodeType":"ParameterList","parameters":[],"src":"26459:2:0"},"returnParameters":{"id":929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":928,"mutability":"mutable","name":"impl","nameLocation":"26530:4:0","nodeType":"VariableDeclaration","scope":935,"src":"26522:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":927,"name":"address","nodeType":"ElementaryTypeName","src":"26522:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26521:14:0"},"scope":936,"src":"26435:156:0","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":3994,"src":"25882:711:0","usedErrors":[],"usedEvents":[552,698,763]},{"id":937,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"26786:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":939,"name":"ERC1967Proxy","nameLocations":["28303:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":936,"src":"28303:12:0"},"id":940,"nodeType":"InheritanceSpecifier","src":"28303:12:0"}],"canonicalName":"TransparentUpgradeableProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":938,"nodeType":"StructuredDocumentation","src":"26811:1451:0","text":" @dev This contract implements a proxy that is upgradeable by an admin.\n To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n clashing], which can potentially be used in an attack, this contract uses the\n https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n things that go hand in hand:\n 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n that call matches one of the admin functions exposed by the proxy itself.\n 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n \"admin cannot fallback to proxy target\".\n These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n to sudden errors when trying to call a function from the proxy implementation.\n Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy."},"fullyImplemented":true,"id":1082,"linearizedBaseContracts":[1082,936,851,902],"name":"TransparentUpgradeableProxy","nameLocation":"28272:27:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":958,"nodeType":"Block","src":"28643:31:0","statements":[{"expression":{"arguments":[{"id":955,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":945,"src":"28662:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":954,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":754,"src":"28649:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28649:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":957,"nodeType":"ExpressionStatement","src":"28649:20:0"}]},"documentation":{"id":941,"nodeType":"StructuredDocumentation","src":"28320:204:0","text":" @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}."},"id":959,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":950,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":943,"src":"28628:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":951,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":947,"src":"28636:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":952,"kind":"baseConstructorSpecifier","modifierName":{"id":949,"name":"ERC1967Proxy","nameLocations":["28615:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":936,"src":"28615:12:0"},"nodeType":"ModifierInvocation","src":"28615:27:0"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":943,"mutability":"mutable","name":"_logic","nameLocation":"28552:6:0","nodeType":"VariableDeclaration","scope":959,"src":"28544:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":942,"name":"address","nodeType":"ElementaryTypeName","src":"28544:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":945,"mutability":"mutable","name":"admin_","nameLocation":"28572:6:0","nodeType":"VariableDeclaration","scope":959,"src":"28564:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":944,"name":"address","nodeType":"ElementaryTypeName","src":"28564:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":947,"mutability":"mutable","name":"_data","nameLocation":"28597:5:0","nodeType":"VariableDeclaration","scope":959,"src":"28584:18:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":946,"name":"bytes","nodeType":"ElementaryTypeName","src":"28584:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"28538:68:0"},"returnParameters":{"id":953,"nodeType":"ParameterList","parameters":[],"src":"28643:0:0"},"scope":1082,"src":"28527:147:0","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":974,"nodeType":"Block","src":"28826:89:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":962,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"28836:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28840:6:0","memberName":"sender","nodeType":"MemberAccess","src":"28836:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":964,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"28850:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28850:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"28836:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":972,"nodeType":"Block","src":"28885:26:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":969,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":880,"src":"28893:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28893:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":971,"nodeType":"ExpressionStatement","src":"28893:11:0"}]},"id":973,"nodeType":"IfStatement","src":"28832:79:0","trueBody":{"id":968,"nodeType":"Block","src":"28863:16:0","statements":[{"id":967,"nodeType":"PlaceholderStatement","src":"28871:1:0"}]}}]},"documentation":{"id":960,"nodeType":"StructuredDocumentation","src":"28678:126:0","text":" @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin."},"id":975,"name":"ifAdmin","nameLocation":"28816:7:0","nodeType":"ModifierDefinition","parameters":{"id":961,"nodeType":"ParameterList","parameters":[],"src":"28823:2:0"},"src":"28807:108:0","virtual":false,"visibility":"internal"},{"body":{"id":988,"nodeType":"Block","src":"29396:31:0","statements":[{"expression":{"id":986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":983,"name":"admin_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":981,"src":"29402:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":984,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"29411:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29411:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29402:20:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":987,"nodeType":"ExpressionStatement","src":"29402:20:0"}]},"documentation":{"id":976,"nodeType":"StructuredDocumentation","src":"28919:415:0","text":" @dev Returns the current admin.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"},"functionSelector":"f851a440","id":989,"implemented":true,"kind":"function","modifiers":[{"id":979,"kind":"modifierInvocation","modifierName":{"id":978,"name":"ifAdmin","nameLocations":["29363:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"29363:7:0"},"nodeType":"ModifierInvocation","src":"29363:7:0"}],"name":"admin","nameLocation":"29346:5:0","nodeType":"FunctionDefinition","parameters":{"id":977,"nodeType":"ParameterList","parameters":[],"src":"29351:2:0"},"returnParameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"admin_","nameLocation":"29388:6:0","nodeType":"VariableDeclaration","scope":989,"src":"29380:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":980,"name":"address","nodeType":"ElementaryTypeName","src":"29380:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29379:16:0"},"scope":1082,"src":"29337:90:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1002,"nodeType":"Block","src":"29944:46:0","statements":[{"expression":{"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":997,"name":"implementation_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":995,"src":"29950:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":998,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[935],"referencedDeclaration":935,"src":"29968:15:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29968:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29950:35:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1001,"nodeType":"ExpressionStatement","src":"29950:35:0"}]},"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"29431:433:0","text":" @dev Returns the current implementation.\n NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`"},"functionSelector":"5c60da1b","id":1003,"implemented":true,"kind":"function","modifiers":[{"id":993,"kind":"modifierInvocation","modifierName":{"id":992,"name":"ifAdmin","nameLocations":["29902:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"29902:7:0"},"nodeType":"ModifierInvocation","src":"29902:7:0"}],"name":"implementation","nameLocation":"29876:14:0","nodeType":"FunctionDefinition","parameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"29890:2:0"},"returnParameters":{"id":996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":995,"mutability":"mutable","name":"implementation_","nameLocation":"29927:15:0","nodeType":"VariableDeclaration","scope":1003,"src":"29919:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":994,"name":"address","nodeType":"ElementaryTypeName","src":"29919:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29918:25:0"},"scope":1082,"src":"29867:123:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1015,"nodeType":"Block","src":"30243:33:0","statements":[{"expression":{"arguments":[{"id":1012,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1006,"src":"30262:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1011,"name":"_changeAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":754,"src":"30249:12:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":1013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30249:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1014,"nodeType":"ExpressionStatement","src":"30249:22:0"}]},"documentation":{"id":1004,"nodeType":"StructuredDocumentation","src":"29994:182:0","text":" @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event.\n NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}."},"functionSelector":"8f283970","id":1016,"implemented":true,"kind":"function","modifiers":[{"id":1009,"kind":"modifierInvocation","modifierName":{"id":1008,"name":"ifAdmin","nameLocations":["30235:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"30235:7:0"},"nodeType":"ModifierInvocation","src":"30235:7:0"}],"name":"changeAdmin","nameLocation":"30188:11:0","nodeType":"FunctionDefinition","parameters":{"id":1007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1006,"mutability":"mutable","name":"newAdmin","nameLocation":"30208:8:0","nodeType":"VariableDeclaration","scope":1016,"src":"30200:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1005,"name":"address","nodeType":"ElementaryTypeName","src":"30200:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30199:18:0"},"returnParameters":{"id":1010,"nodeType":"ParameterList","parameters":[],"src":"30243:0:0"},"scope":1082,"src":"30179:97:0","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":1033,"nodeType":"Block","src":"30487:65:0","statements":[{"expression":{"arguments":[{"id":1025,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1019,"src":"30511:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"","id":1028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"30536:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":1027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30530:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":1026,"name":"bytes","nodeType":"ElementaryTypeName","src":"30530:5:0","typeDescriptions":{}}},"id":1029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30530:9:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"66616c7365","id":1030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30541:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1024,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"30493:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":1031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30493:54:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1032,"nodeType":"ExpressionStatement","src":"30493:54:0"}]},"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"30280:141:0","text":" @dev Upgrade the implementation of the proxy.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}."},"functionSelector":"3659cfe6","id":1034,"implemented":true,"kind":"function","modifiers":[{"id":1022,"kind":"modifierInvocation","modifierName":{"id":1021,"name":"ifAdmin","nameLocations":["30479:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"30479:7:0"},"nodeType":"ModifierInvocation","src":"30479:7:0"}],"name":"upgradeTo","nameLocation":"30433:9:0","nodeType":"FunctionDefinition","parameters":{"id":1020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1019,"mutability":"mutable","name":"newImplementation","nameLocation":"30451:17:0","nodeType":"VariableDeclaration","scope":1034,"src":"30443:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1018,"name":"address","nodeType":"ElementaryTypeName","src":"30443:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30442:27:0"},"returnParameters":{"id":1023,"nodeType":"ParameterList","parameters":[],"src":"30487:0:0"},"scope":1082,"src":"30424:128:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":1050,"nodeType":"Block","src":"31023:59:0","statements":[{"expression":{"arguments":[{"id":1045,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"31047:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1046,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"31066:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"hexValue":"74727565","id":1047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"31072:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1044,"name":"_upgradeToAndCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":634,"src":"31029:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$","typeString":"function (address,bytes memory,bool)"}},"id":1048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31029:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1049,"nodeType":"ExpressionStatement","src":"31029:48:0"}]},"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"30556:353:0","text":" @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n proxied contract.\n NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}."},"functionSelector":"4f1ef286","id":1051,"implemented":true,"kind":"function","modifiers":[{"id":1042,"kind":"modifierInvocation","modifierName":{"id":1041,"name":"ifAdmin","nameLocations":["31015:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":975,"src":"31015:7:0"},"nodeType":"ModifierInvocation","src":"31015:7:0"}],"name":"upgradeToAndCall","nameLocation":"30921:16:0","nodeType":"FunctionDefinition","parameters":{"id":1040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1037,"mutability":"mutable","name":"newImplementation","nameLocation":"30951:17:0","nodeType":"VariableDeclaration","scope":1051,"src":"30943:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1036,"name":"address","nodeType":"ElementaryTypeName","src":"30943:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1039,"mutability":"mutable","name":"data","nameLocation":"30989:4:0","nodeType":"VariableDeclaration","scope":1051,"src":"30974:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1038,"name":"bytes","nodeType":"ElementaryTypeName","src":"30974:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"30937:60:0"},"returnParameters":{"id":1043,"nodeType":"ParameterList","parameters":[],"src":"31023:0:0"},"scope":1082,"src":"30912:170:0","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":1060,"nodeType":"Block","src":"31193:29:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":1057,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"31206:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31206:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1056,"id":1059,"nodeType":"Return","src":"31199:18:0"}]},"documentation":{"id":1052,"nodeType":"StructuredDocumentation","src":"31086:46:0","text":" @dev Returns the current admin."},"id":1061,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"31144:6:0","nodeType":"FunctionDefinition","parameters":{"id":1053,"nodeType":"ParameterList","parameters":[],"src":"31150:2:0"},"returnParameters":{"id":1056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1061,"src":"31184:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1054,"name":"address","nodeType":"ElementaryTypeName","src":"31184:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31183:9:0"},"scope":1082,"src":"31135:87:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[901],"body":{"id":1080,"nodeType":"Block","src":"31388:162:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":1067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"31409:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31413:6:0","memberName":"sender","nodeType":"MemberAccess","src":"31409:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1069,"name":"_getAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":711,"src":"31423:9:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31423:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"31409:25:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574","id":1072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"31442:68:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""},"value":"TransparentUpgradeableProxy: admin cannot fallback to proxy target"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d","typeString":"literal_string \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\""}],"id":1066,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"31394:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31394:122:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1074,"nodeType":"ExpressionStatement","src":"31394:122:0"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":1075,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"31522:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_TransparentUpgradeableProxy_$1082_$","typeString":"type(contract super TransparentUpgradeableProxy)"}},"id":1077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31528:15:0","memberName":"_beforeFallback","nodeType":"MemberAccess","referencedDeclaration":901,"src":"31522:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":1078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31522:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1079,"nodeType":"ExpressionStatement","src":"31522:23:0"}]},"documentation":{"id":1062,"nodeType":"StructuredDocumentation","src":"31226:106:0","text":" @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}."},"id":1081,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeFallback","nameLocation":"31344:15:0","nodeType":"FunctionDefinition","overrides":{"id":1064,"nodeType":"OverrideSpecifier","overrides":[],"src":"31379:8:0"},"parameters":{"id":1063,"nodeType":"ParameterList","parameters":[],"src":"31359:2:0"},"returnParameters":{"id":1065,"nodeType":"ParameterList","parameters":[],"src":"31388:0:0"},"scope":1082,"src":"31335:215:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":3994,"src":"28263:3289:0","usedErrors":[],"usedEvents":[552,698,763]},{"id":1083,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"31696:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":1085,"name":"Ownable","nameLocations":["31973:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":132,"src":"31973:7:0"},"id":1086,"nodeType":"InheritanceSpecifier","src":"31973:7:0"}],"canonicalName":"ProxyAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":1084,"nodeType":"StructuredDocumentation","src":"31721:228:0","text":" @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}."},"fullyImplemented":true,"id":1215,"linearizedBaseContracts":[1215,132,21],"name":"ProxyAdmin","nameLocation":"31959:10:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":1119,"nodeType":"Block","src":"32247:322:0","statements":[{"assignments":[1096,1098],"declarations":[{"constant":false,"id":1096,"mutability":"mutable","name":"success","nameLocation":"32408:7:0","nodeType":"VariableDeclaration","scope":1119,"src":"32403:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1095,"name":"bool","nodeType":"ElementaryTypeName","src":"32403:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1098,"mutability":"mutable","name":"returndata","nameLocation":"32430:10:0","nodeType":"VariableDeclaration","scope":1119,"src":"32417:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1097,"name":"bytes","nodeType":"ElementaryTypeName","src":"32417:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1106,"initialValue":{"arguments":[{"hexValue":"5c60da1b","id":1104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"32477:13:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29","typeString":"literal_string hex\"5c60da1b\""}],"expression":{"arguments":[{"id":1101,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1090,"src":"32452:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}],"id":1100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32444:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1099,"name":"address","nodeType":"ElementaryTypeName","src":"32444:7:0","typeDescriptions":{}}},"id":1102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32444:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32459:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"32444:25:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":1105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32444:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"32402:94:0"},{"expression":{"arguments":[{"id":1108,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1096,"src":"32510:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1107,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"32502:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32502:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1110,"nodeType":"ExpressionStatement","src":"32502:16:0"},{"expression":{"arguments":[{"id":1113,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1098,"src":"32542:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32555:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1114,"name":"address","nodeType":"ElementaryTypeName","src":"32555:7:0","typeDescriptions":{}}}],"id":1116,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"32554:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":1111,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32531:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32535:6:0","memberName":"decode","nodeType":"MemberAccess","src":"32531:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32531:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":1094,"id":1118,"nodeType":"Return","src":"32524:40:0"}]},"documentation":{"id":1087,"nodeType":"StructuredDocumentation","src":"31985:146:0","text":" @dev Returns the current implementation of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"204e1c7a","id":1120,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyImplementation","nameLocation":"32143:22:0","nodeType":"FunctionDefinition","parameters":{"id":1091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1090,"mutability":"mutable","name":"proxy","nameLocation":"32199:5:0","nodeType":"VariableDeclaration","scope":1120,"src":"32171:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1089,"nodeType":"UserDefinedTypeName","pathNode":{"id":1088,"name":"TransparentUpgradeableProxy","nameLocations":["32171:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"32171:27:0"},"referencedDeclaration":1082,"src":"32171:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"32165:43:0"},"returnParameters":{"id":1094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1120,"src":"32238:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1092,"name":"address","nodeType":"ElementaryTypeName","src":"32238:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32237:9:0"},"scope":1215,"src":"32134:435:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":1153,"nodeType":"Block","src":"32817:313:0","statements":[{"assignments":[1130,1132],"declarations":[{"constant":false,"id":1130,"mutability":"mutable","name":"success","nameLocation":"32969:7:0","nodeType":"VariableDeclaration","scope":1153,"src":"32964:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1129,"name":"bool","nodeType":"ElementaryTypeName","src":"32964:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1132,"mutability":"mutable","name":"returndata","nameLocation":"32991:10:0","nodeType":"VariableDeclaration","scope":1153,"src":"32978:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1131,"name":"bytes","nodeType":"ElementaryTypeName","src":"32978:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1140,"initialValue":{"arguments":[{"hexValue":"f851a440","id":1138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"33038:13:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7","typeString":"literal_string hex\"f851a440\""}],"expression":{"arguments":[{"id":1135,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1124,"src":"33013:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}],"id":1134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33005:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1133,"name":"address","nodeType":"ElementaryTypeName","src":"33005:7:0","typeDescriptions":{}}},"id":1136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33005:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33020:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"33005:25:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":1139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33005:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"32963:94:0"},{"expression":{"arguments":[{"id":1142,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1130,"src":"33071:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1141,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"33063:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33063:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1144,"nodeType":"ExpressionStatement","src":"33063:16:0"},{"expression":{"arguments":[{"id":1147,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1132,"src":"33103:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":1149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33116:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1148,"name":"address","nodeType":"ElementaryTypeName","src":"33116:7:0","typeDescriptions":{}}}],"id":1150,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"33115:9:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"}],"expression":{"id":1145,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"33092:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33096:6:0","memberName":"decode","nodeType":"MemberAccess","src":"33092:10:0","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":1151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33092:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":1128,"id":1152,"nodeType":"Return","src":"33085:40:0"}]},"documentation":{"id":1121,"nodeType":"StructuredDocumentation","src":"32573:137:0","text":" @dev Returns the current admin of `proxy`.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"f3b7dead","id":1154,"implemented":true,"kind":"function","modifiers":[],"name":"getProxyAdmin","nameLocation":"32722:13:0","nodeType":"FunctionDefinition","parameters":{"id":1125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1124,"mutability":"mutable","name":"proxy","nameLocation":"32769:5:0","nodeType":"VariableDeclaration","scope":1154,"src":"32741:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1123,"nodeType":"UserDefinedTypeName","pathNode":{"id":1122,"name":"TransparentUpgradeableProxy","nameLocations":["32741:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"32741:27:0"},"referencedDeclaration":1082,"src":"32741:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"src":"32735:43:0"},"returnParameters":{"id":1128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1154,"src":"32808:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1126,"name":"address","nodeType":"ElementaryTypeName","src":"32808:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32807:9:0"},"scope":1215,"src":"32713:417:0","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":1171,"nodeType":"Block","src":"33404:38:0","statements":[{"expression":{"arguments":[{"id":1168,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"33428:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1165,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"33410:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"id":1167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33416:11:0","memberName":"changeAdmin","nodeType":"MemberAccess","referencedDeclaration":1016,"src":"33410:17:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":1169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33410:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1170,"nodeType":"ExpressionStatement","src":"33410:27:0"}]},"documentation":{"id":1155,"nodeType":"StructuredDocumentation","src":"33134:151:0","text":" @dev Changes the admin of `proxy` to `newAdmin`.\n Requirements:\n - This contract must be the current admin of `proxy`."},"functionSelector":"7eff275e","id":1172,"implemented":true,"kind":"function","modifiers":[{"id":1163,"kind":"modifierInvocation","modifierName":{"id":1162,"name":"onlyOwner","nameLocations":["33394:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"33394:9:0"},"nodeType":"ModifierInvocation","src":"33394:9:0"}],"name":"changeProxyAdmin","nameLocation":"33297:16:0","nodeType":"FunctionDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1158,"mutability":"mutable","name":"proxy","nameLocation":"33347:5:0","nodeType":"VariableDeclaration","scope":1172,"src":"33319:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1157,"nodeType":"UserDefinedTypeName","pathNode":{"id":1156,"name":"TransparentUpgradeableProxy","nameLocations":["33319:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"33319:27:0"},"referencedDeclaration":1082,"src":"33319:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":1160,"mutability":"mutable","name":"newAdmin","nameLocation":"33366:8:0","nodeType":"VariableDeclaration","scope":1172,"src":"33358:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1159,"name":"address","nodeType":"ElementaryTypeName","src":"33358:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33313:65:0"},"returnParameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"33404:0:0"},"scope":1215,"src":"33288:154:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1189,"nodeType":"Block","src":"33744:42:0","statements":[{"expression":{"arguments":[{"id":1186,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1178,"src":"33766:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":1183,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1176,"src":"33750:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"id":1185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33756:9:0","memberName":"upgradeTo","nodeType":"MemberAccess","referencedDeclaration":1034,"src":"33750:15:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":1187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33750:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1188,"nodeType":"ExpressionStatement","src":"33750:31:0"}]},"documentation":{"id":1173,"nodeType":"StructuredDocumentation","src":"33446:182:0","text":" @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"99a88ec4","id":1190,"implemented":true,"kind":"function","modifiers":[{"id":1181,"kind":"modifierInvocation","modifierName":{"id":1180,"name":"onlyOwner","nameLocations":["33734:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"33734:9:0"},"nodeType":"ModifierInvocation","src":"33734:9:0"}],"name":"upgrade","nameLocation":"33640:7:0","nodeType":"FunctionDefinition","parameters":{"id":1179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1176,"mutability":"mutable","name":"proxy","nameLocation":"33681:5:0","nodeType":"VariableDeclaration","scope":1190,"src":"33653:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1175,"nodeType":"UserDefinedTypeName","pathNode":{"id":1174,"name":"TransparentUpgradeableProxy","nameLocations":["33653:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"33653:27:0"},"referencedDeclaration":1082,"src":"33653:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":1178,"mutability":"mutable","name":"implementation","nameLocation":"33700:14:0","nodeType":"VariableDeclaration","scope":1190,"src":"33692:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1177,"name":"address","nodeType":"ElementaryTypeName","src":"33692:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33647:71:0"},"returnParameters":{"id":1182,"nodeType":"ParameterList","parameters":[],"src":"33744:0:0"},"scope":1215,"src":"33631:155:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1213,"nodeType":"Block","src":"34185:73:0","statements":[{"expression":{"arguments":[{"id":1209,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1196,"src":"34232:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1210,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1198,"src":"34248:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":1203,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1194,"src":"34191:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"id":1205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34197:16:0","memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":1051,"src":"34191:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":1208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":1206,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34221:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34225:5:0","memberName":"value","nodeType":"MemberAccess","src":"34221:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"34191:40:0","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$value","typeString":"function (address,bytes memory) payable external"}},"id":1211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34191:62:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1212,"nodeType":"ExpressionStatement","src":"34191:62:0"}]},"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"33790:241:0","text":" @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n {TransparentUpgradeableProxy-upgradeToAndCall}.\n Requirements:\n - This contract must be the admin of `proxy`."},"functionSelector":"9623609d","id":1214,"implemented":true,"kind":"function","modifiers":[{"id":1201,"kind":"modifierInvocation","modifierName":{"id":1200,"name":"onlyOwner","nameLocations":["34175:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":51,"src":"34175:9:0"},"nodeType":"ModifierInvocation","src":"34175:9:0"}],"name":"upgradeAndCall","nameLocation":"34043:14:0","nodeType":"FunctionDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1194,"mutability":"mutable","name":"proxy","nameLocation":"34091:5:0","nodeType":"VariableDeclaration","scope":1214,"src":"34063:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":1193,"nodeType":"UserDefinedTypeName","pathNode":{"id":1192,"name":"TransparentUpgradeableProxy","nameLocations":["34063:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"34063:27:0"},"referencedDeclaration":1082,"src":"34063:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"},{"constant":false,"id":1196,"mutability":"mutable","name":"implementation","nameLocation":"34110:14:0","nodeType":"VariableDeclaration","scope":1214,"src":"34102:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1195,"name":"address","nodeType":"ElementaryTypeName","src":"34102:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"data","nameLocation":"34143:4:0","nodeType":"VariableDeclaration","scope":1214,"src":"34130:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1197,"name":"bytes","nodeType":"ElementaryTypeName","src":"34130:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"34057:94:0"},"returnParameters":{"id":1202,"nodeType":"ParameterList","parameters":[],"src":"34185:0:0"},"scope":1215,"src":"34034:224:0","stateMutability":"payable","virtual":true,"visibility":"public"}],"scope":3994,"src":"31950:2310:0","usedErrors":[],"usedEvents":[33]},{"id":1216,"literals":["solidity",">=","0.5",".17","<","0.9",".0"],"nodeType":"PragmaDirective","src":"34311:32:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IMintableERC20","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1256,"linearizedBaseContracts":[1256],"name":"IMintableERC20","nameLocation":"34355:14:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"40c10f19","id":1225,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"34383:4:0","nodeType":"FunctionDefinition","parameters":{"id":1221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1218,"mutability":"mutable","name":"account","nameLocation":"34396:7:0","nodeType":"VariableDeclaration","scope":1225,"src":"34388:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1217,"name":"address","nodeType":"ElementaryTypeName","src":"34388:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1220,"mutability":"mutable","name":"amount","nameLocation":"34413:6:0","nodeType":"VariableDeclaration","scope":1225,"src":"34405:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1219,"name":"uint256","nodeType":"ElementaryTypeName","src":"34405:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34387:33:0"},"returnParameters":{"id":1224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1225,"src":"34439:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1222,"name":"bool","nodeType":"ElementaryTypeName","src":"34439:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34438:6:0"},"scope":1256,"src":"34374:71:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a9059cbb","id":1234,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"34458:8:0","nodeType":"FunctionDefinition","parameters":{"id":1230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1227,"mutability":"mutable","name":"recipient","nameLocation":"34475:9:0","nodeType":"VariableDeclaration","scope":1234,"src":"34467:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1226,"name":"address","nodeType":"ElementaryTypeName","src":"34467:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1229,"mutability":"mutable","name":"amount","nameLocation":"34494:6:0","nodeType":"VariableDeclaration","scope":1234,"src":"34486:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1228,"name":"uint256","nodeType":"ElementaryTypeName","src":"34486:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34466:35:0"},"returnParameters":{"id":1233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1234,"src":"34520:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1231,"name":"bool","nodeType":"ElementaryTypeName","src":"34520:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34519:6:0"},"scope":1256,"src":"34449:77:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"18160ddd","id":1239,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"34539:11:0","nodeType":"FunctionDefinition","parameters":{"id":1235,"nodeType":"ParameterList","parameters":[],"src":"34550:2:0"},"returnParameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1239,"src":"34576:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1236,"name":"uint256","nodeType":"ElementaryTypeName","src":"34576:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34575:9:0"},"scope":1256,"src":"34530:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"70a08231","id":1246,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"34598:9:0","nodeType":"FunctionDefinition","parameters":{"id":1242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1241,"mutability":"mutable","name":"account","nameLocation":"34616:7:0","nodeType":"VariableDeclaration","scope":1246,"src":"34608:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1240,"name":"address","nodeType":"ElementaryTypeName","src":"34608:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34607:17:0"},"returnParameters":{"id":1245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1246,"src":"34648:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1243,"name":"uint256","nodeType":"ElementaryTypeName","src":"34648:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34647:9:0"},"scope":1256,"src":"34589:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":1255,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"34670:7:0","nodeType":"FunctionDefinition","parameters":{"id":1251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1248,"mutability":"mutable","name":"spender","nameLocation":"34686:7:0","nodeType":"VariableDeclaration","scope":1255,"src":"34678:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1247,"name":"address","nodeType":"ElementaryTypeName","src":"34678:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1250,"mutability":"mutable","name":"amount","nameLocation":"34703:6:0","nodeType":"VariableDeclaration","scope":1255,"src":"34695:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1249,"name":"uint256","nodeType":"ElementaryTypeName","src":"34695:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34677:33:0"},"returnParameters":{"id":1254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1253,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1255,"src":"34729:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1252,"name":"bool","nodeType":"ElementaryTypeName","src":"34729:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34728:6:0"},"scope":1256,"src":"34661:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3994,"src":"34345:392:0","usedErrors":[],"usedEvents":[]},{"id":1257,"literals":["solidity",">=","0.5",".17","<","0.9",".0"],"nodeType":"PragmaDirective","src":"34785:32:0"},{"id":1258,"literals":["experimental","ABIEncoderV2"],"nodeType":"PragmaDirective","src":"34818:33:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IPublicLock","contractDependencies":[],"contractKind":"interface","documentation":{"id":1259,"nodeType":"StructuredDocumentation","src":"34853:42:0","text":" @title The PublicLock Interface"},"fullyImplemented":false,"id":1907,"linearizedBaseContracts":[1907],"name":"IPublicLock","nameLocation":"34907:11:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"34923:13:0","text":"Functions"},"functionSelector":"6eadde43","id":1275,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"34948:10:0","nodeType":"FunctionDefinition","parameters":{"id":1273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1262,"mutability":"mutable","name":"_lockCreator","nameLocation":"34972:12:0","nodeType":"VariableDeclaration","scope":1275,"src":"34964:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1261,"name":"address","nodeType":"ElementaryTypeName","src":"34964:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1264,"mutability":"mutable","name":"_expirationDuration","nameLocation":"34995:19:0","nodeType":"VariableDeclaration","scope":1275,"src":"34990:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1263,"name":"uint","nodeType":"ElementaryTypeName","src":"34990:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1266,"mutability":"mutable","name":"_tokenAddress","nameLocation":"35028:13:0","nodeType":"VariableDeclaration","scope":1275,"src":"35020:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1265,"name":"address","nodeType":"ElementaryTypeName","src":"35020:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1268,"mutability":"mutable","name":"_keyPrice","nameLocation":"35052:9:0","nodeType":"VariableDeclaration","scope":1275,"src":"35047:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1267,"name":"uint","nodeType":"ElementaryTypeName","src":"35047:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1270,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"35072:16:0","nodeType":"VariableDeclaration","scope":1275,"src":"35067:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1269,"name":"uint","nodeType":"ElementaryTypeName","src":"35067:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"_lockName","nameLocation":"35110:9:0","nodeType":"VariableDeclaration","scope":1275,"src":"35094:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1271,"name":"string","nodeType":"ElementaryTypeName","src":"35094:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"34958:165:0"},"returnParameters":{"id":1274,"nodeType":"ParameterList","parameters":[],"src":"35132:0:0"},"scope":1907,"src":"34939:194:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"a217fddf","id":1280,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"35182:18:0","nodeType":"FunctionDefinition","parameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"35200:2:0"},"returnParameters":{"id":1279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1278,"mutability":"mutable","name":"role","nameLocation":"35234:4:0","nodeType":"VariableDeclaration","scope":1280,"src":"35226:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1277,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35226:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"35225:14:0"},"scope":1907,"src":"35173:67:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1281,"nodeType":"StructuredDocumentation","src":"35244:129:0","text":" @notice The version number of the current implementation on this network.\n @return The current version number."},"functionSelector":"d1bbd49c","id":1286,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockVersion","nameLocation":"35385:17:0","nodeType":"FunctionDefinition","parameters":{"id":1282,"nodeType":"ParameterList","parameters":[],"src":"35402:2:0"},"returnParameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1284,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1286,"src":"35428:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1283,"name":"uint16","nodeType":"ElementaryTypeName","src":"35428:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"35427:8:0"},"scope":1907,"src":"35376:60:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"35440:577:0","text":" @dev Called by lock manager to withdraw all funds from the lock\n @param _tokenAddress specifies the token address to withdraw or 0 for ETH. This is usually\n the same as `tokenAddress` in MixinFunds.\n @param _recipient specifies the address that will receive the tokens\n @param _amount specifies the max amount to withdraw, which may be reduced when\n considering the available balance. Set to 0 or MAX_UINT to withdraw everything.\n -- however be wary of draining funds as it breaks the `cancelAndRefund` and `expireAndRefundFor` use cases."},"functionSelector":"d9caed12","id":1296,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"36029:8:0","nodeType":"FunctionDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1289,"mutability":"mutable","name":"_tokenAddress","nameLocation":"36051:13:0","nodeType":"VariableDeclaration","scope":1296,"src":"36043:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1288,"name":"address","nodeType":"ElementaryTypeName","src":"36043:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1291,"mutability":"mutable","name":"_recipient","nameLocation":"36086:10:0","nodeType":"VariableDeclaration","scope":1296,"src":"36070:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":1290,"name":"address","nodeType":"ElementaryTypeName","src":"36070:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":1293,"mutability":"mutable","name":"_amount","nameLocation":"36107:7:0","nodeType":"VariableDeclaration","scope":1296,"src":"36102:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1292,"name":"uint","nodeType":"ElementaryTypeName","src":"36102:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36037:81:0"},"returnParameters":{"id":1295,"nodeType":"ParameterList","parameters":[],"src":"36127:0:0"},"scope":1907,"src":"36020:108:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1297,"nodeType":"StructuredDocumentation","src":"36132:418:0","text":" A function which lets a Lock manager of the lock to change the price for future purchases.\n @dev Throws if called by other than a Lock manager\n @dev Throws if lock has been disabled\n @dev Throws if _tokenAddress is not a valid token\n @param _keyPrice The new price to set for keys\n @param _tokenAddress The address of the erc20 token to use for pricing the keys,\n or 0 to use ETH"},"functionSelector":"a2e4cd2e","id":1304,"implemented":false,"kind":"function","modifiers":[],"name":"updateKeyPricing","nameLocation":"36562:16:0","nodeType":"FunctionDefinition","parameters":{"id":1302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1299,"mutability":"mutable","name":"_keyPrice","nameLocation":"36584:9:0","nodeType":"VariableDeclaration","scope":1304,"src":"36579:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1298,"name":"uint","nodeType":"ElementaryTypeName","src":"36579:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1301,"mutability":"mutable","name":"_tokenAddress","nameLocation":"36603:13:0","nodeType":"VariableDeclaration","scope":1304,"src":"36595:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1300,"name":"address","nodeType":"ElementaryTypeName","src":"36595:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"36578:39:0"},"returnParameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"36626:0:0"},"scope":1907,"src":"36553:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"36631:712:0","text":" Update the main key properties for the entire lock:\n - default duration of each key\n - the maximum number of keys the lock can edit\n - the maximum number of keys a single address can hold\n @notice keys previously bought are unaffected by this changes in expiration duration (i.e.\n existing keys timestamps are not recalculated/updated)\n @param _newExpirationDuration the new amount of time for each key purchased or type(uint).max for a non-expiring key\n @param _maxKeysPerAcccount the maximum amount of key a single user can own\n @param _maxNumberOfKeys uint the maximum number of keys\n @dev _maxNumberOfKeys Can't be smaller than the existing supply"},"functionSelector":"282478df","id":1314,"implemented":false,"kind":"function","modifiers":[],"name":"updateLockConfig","nameLocation":"37355:16:0","nodeType":"FunctionDefinition","parameters":{"id":1312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1307,"mutability":"mutable","name":"_newExpirationDuration","nameLocation":"37382:22:0","nodeType":"VariableDeclaration","scope":1314,"src":"37377:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1306,"name":"uint","nodeType":"ElementaryTypeName","src":"37377:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1309,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"37415:16:0","nodeType":"VariableDeclaration","scope":1314,"src":"37410:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1308,"name":"uint","nodeType":"ElementaryTypeName","src":"37410:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1311,"mutability":"mutable","name":"_maxKeysPerAcccount","nameLocation":"37442:19:0","nodeType":"VariableDeclaration","scope":1314,"src":"37437:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1310,"name":"uint","nodeType":"ElementaryTypeName","src":"37437:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37371:94:0"},"returnParameters":{"id":1313,"nodeType":"ParameterList","parameters":[],"src":"37474:0:0"},"scope":1907,"src":"37346:129:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1315,"nodeType":"StructuredDocumentation","src":"37479:103:0","text":" Checks if the user has a non-expired key.\n @param _user The address of the key owner"},"functionSelector":"6d8ea5b4","id":1322,"implemented":false,"kind":"function","modifiers":[],"name":"getHasValidKey","nameLocation":"37594:14:0","nodeType":"FunctionDefinition","parameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1317,"mutability":"mutable","name":"_user","nameLocation":"37617:5:0","nodeType":"VariableDeclaration","scope":1322,"src":"37609:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1316,"name":"address","nodeType":"ElementaryTypeName","src":"37609:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"37608:15:0"},"returnParameters":{"id":1321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1322,"src":"37647:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1319,"name":"bool","nodeType":"ElementaryTypeName","src":"37647:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"37646:6:0"},"scope":1907,"src":"37585:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"37657:190:0","text":" @dev Returns the key's ExpirationTimestamp field for a given owner.\n @param _tokenId the id of the key\n @dev Returns 0 if the owner has never owned a key for this lock"},"functionSelector":"54b249fb","id":1330,"implemented":false,"kind":"function","modifiers":[],"name":"keyExpirationTimestampFor","nameLocation":"37859:25:0","nodeType":"FunctionDefinition","parameters":{"id":1326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"mutability":"mutable","name":"_tokenId","nameLocation":"37895:8:0","nodeType":"VariableDeclaration","scope":1330,"src":"37890:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1324,"name":"uint","nodeType":"ElementaryTypeName","src":"37890:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37884:23:0"},"returnParameters":{"id":1329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1328,"mutability":"mutable","name":"timestamp","nameLocation":"37936:9:0","nodeType":"VariableDeclaration","scope":1330,"src":"37931:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1327,"name":"uint","nodeType":"ElementaryTypeName","src":"37931:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37930:16:0"},"scope":1907,"src":"37850:97:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1331,"nodeType":"StructuredDocumentation","src":"37951:147:0","text":" Public function which returns the total number of unique owners (both expired\n and valid). This may be larger than totalSupply."},"functionSelector":"93fd1844","id":1336,"implemented":false,"kind":"function","modifiers":[],"name":"numberOfOwners","nameLocation":"38110:14:0","nodeType":"FunctionDefinition","parameters":{"id":1332,"nodeType":"ParameterList","parameters":[],"src":"38124:2:0"},"returnParameters":{"id":1335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1336,"src":"38150:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1333,"name":"uint","nodeType":"ElementaryTypeName","src":"38150:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38149:6:0"},"scope":1907,"src":"38101:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1337,"nodeType":"StructuredDocumentation","src":"38160:224:0","text":" Allows the Lock owner to assign\n @param _lockName a descriptive name for this Lock.\n @param _lockSymbol a Symbol for this Lock (default to KEY).\n @param _baseTokenURI the baseTokenURI for this Lock"},"functionSelector":"d1b8759b","id":1346,"implemented":false,"kind":"function","modifiers":[],"name":"setLockMetadata","nameLocation":"38396:15:0","nodeType":"FunctionDefinition","parameters":{"id":1344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1339,"mutability":"mutable","name":"_lockName","nameLocation":"38433:9:0","nodeType":"VariableDeclaration","scope":1346,"src":"38417:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1338,"name":"string","nodeType":"ElementaryTypeName","src":"38417:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1341,"mutability":"mutable","name":"_lockSymbol","nameLocation":"38464:11:0","nodeType":"VariableDeclaration","scope":1346,"src":"38448:27:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1340,"name":"string","nodeType":"ElementaryTypeName","src":"38448:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1343,"mutability":"mutable","name":"_baseTokenURI","nameLocation":"38497:13:0","nodeType":"VariableDeclaration","scope":1346,"src":"38481:29:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1342,"name":"string","nodeType":"ElementaryTypeName","src":"38481:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"38411:103:0"},"returnParameters":{"id":1345,"nodeType":"ParameterList","parameters":[],"src":"38523:0:0"},"scope":1907,"src":"38387:137:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1347,"nodeType":"StructuredDocumentation","src":"38528:91:0","text":" @dev Gets the token symbol\n @return string representing the token symbol"},"functionSelector":"95d89b41","id":1352,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"38631:6:0","nodeType":"FunctionDefinition","parameters":{"id":1348,"nodeType":"ParameterList","parameters":[],"src":"38637:2:0"},"returnParameters":{"id":1351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1352,"src":"38663:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1349,"name":"string","nodeType":"ElementaryTypeName","src":"38663:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"38662:15:0"},"scope":1907,"src":"38622:56:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1353,"nodeType":"StructuredDocumentation","src":"38682:446:0","text":"@notice A distinct Uniform Resource Identifier (URI) for a given asset.\n @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC\n 3986. The URI may point to a JSON file that conforms to the \"ERC721\n Metadata JSON Schema\".\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\n @param _tokenId The tokenID we're inquiring about\n @return String representing the URI for the requested token"},"functionSelector":"c87b56dd","id":1360,"implemented":false,"kind":"function","modifiers":[],"name":"tokenURI","nameLocation":"39140:8:0","nodeType":"FunctionDefinition","parameters":{"id":1356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1355,"mutability":"mutable","name":"_tokenId","nameLocation":"39157:8:0","nodeType":"VariableDeclaration","scope":1360,"src":"39149:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1354,"name":"uint256","nodeType":"ElementaryTypeName","src":"39149:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39148:18:0"},"returnParameters":{"id":1359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1360,"src":"39190:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1357,"name":"string","nodeType":"ElementaryTypeName","src":"39190:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"39189:15:0"},"scope":1907,"src":"39131:74:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"39209:651:0","text":" Allows a Lock manager to add or remove an event hook\n @param _onKeyPurchaseHook Hook called when the `purchase` function is called\n @param _onKeyCancelHook Hook called when the internal `_cancelAndRefund` function is called\n @param _onValidKeyHook Hook called to determine if the contract should overide the status for a given address\n @param _onTokenURIHook Hook called to generate a data URI used for NFT metadata\n @param _onKeyTransferHook Hook called when a key is transfered\n @param _onKeyExtendHook Hook called when a key is extended or renewed\n @param _onKeyGrantHook Hook called when a key is granted"},"functionSelector":"74cac47d","id":1378,"implemented":false,"kind":"function","modifiers":[],"name":"setEventHooks","nameLocation":"39872:13:0","nodeType":"FunctionDefinition","parameters":{"id":1376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1363,"mutability":"mutable","name":"_onKeyPurchaseHook","nameLocation":"39899:18:0","nodeType":"VariableDeclaration","scope":1378,"src":"39891:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1362,"name":"address","nodeType":"ElementaryTypeName","src":"39891:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1365,"mutability":"mutable","name":"_onKeyCancelHook","nameLocation":"39931:16:0","nodeType":"VariableDeclaration","scope":1378,"src":"39923:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1364,"name":"address","nodeType":"ElementaryTypeName","src":"39923:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1367,"mutability":"mutable","name":"_onValidKeyHook","nameLocation":"39961:15:0","nodeType":"VariableDeclaration","scope":1378,"src":"39953:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1366,"name":"address","nodeType":"ElementaryTypeName","src":"39953:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1369,"mutability":"mutable","name":"_onTokenURIHook","nameLocation":"39990:15:0","nodeType":"VariableDeclaration","scope":1378,"src":"39982:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1368,"name":"address","nodeType":"ElementaryTypeName","src":"39982:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1371,"mutability":"mutable","name":"_onKeyTransferHook","nameLocation":"40019:18:0","nodeType":"VariableDeclaration","scope":1378,"src":"40011:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1370,"name":"address","nodeType":"ElementaryTypeName","src":"40011:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1373,"mutability":"mutable","name":"_onKeyExtendHook","nameLocation":"40051:16:0","nodeType":"VariableDeclaration","scope":1378,"src":"40043:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1372,"name":"address","nodeType":"ElementaryTypeName","src":"40043:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1375,"mutability":"mutable","name":"_onKeyGrantHook","nameLocation":"40081:15:0","nodeType":"VariableDeclaration","scope":1378,"src":"40073:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1374,"name":"address","nodeType":"ElementaryTypeName","src":"40073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"39885:215:0"},"returnParameters":{"id":1377,"nodeType":"ParameterList","parameters":[],"src":"40109:0:0"},"scope":1907,"src":"39863:247:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1379,"nodeType":"StructuredDocumentation","src":"40114:397:0","text":" Allows a Lock manager to give a collection of users a key with no charge.\n Each key may be assigned a different expiration date.\n @dev Throws if called by other than a Lock manager\n @param _recipients An array of receiving addresses\n @param _expirationTimestamps An array of expiration Timestamps for the keys being granted\n @return the ids of the granted tokens"},"functionSelector":"81a3c943","id":1394,"implemented":false,"kind":"function","modifiers":[],"name":"grantKeys","nameLocation":"40523:9:0","nodeType":"FunctionDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1382,"mutability":"mutable","name":"_recipients","nameLocation":"40557:11:0","nodeType":"VariableDeclaration","scope":1394,"src":"40538:30:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1380,"name":"address","nodeType":"ElementaryTypeName","src":"40538:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1381,"nodeType":"ArrayTypeName","src":"40538:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1385,"mutability":"mutable","name":"_expirationTimestamps","nameLocation":"40590:21:0","nodeType":"VariableDeclaration","scope":1394,"src":"40574:37:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1383,"name":"uint","nodeType":"ElementaryTypeName","src":"40574:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1384,"nodeType":"ArrayTypeName","src":"40574:6:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1388,"mutability":"mutable","name":"_keyManagers","nameLocation":"40636:12:0","nodeType":"VariableDeclaration","scope":1394,"src":"40617:31:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1386,"name":"address","nodeType":"ElementaryTypeName","src":"40617:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1387,"nodeType":"ArrayTypeName","src":"40617:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"40532:120:0"},"returnParameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1394,"src":"40671:16:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1390,"name":"uint256","nodeType":"ElementaryTypeName","src":"40671:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1391,"nodeType":"ArrayTypeName","src":"40671:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"40670:18:0"},"scope":1907,"src":"40514:175:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"40693:266:0","text":" Allows the Lock owner to extend an existing keys with no charge.\n @param _tokenId The id of the token to extend\n @param _duration The duration in secondes to add ot the key\n @dev set `_duration` to 0 to use the default duration of the lock"},"functionSelector":"4cd38c1d","id":1402,"implemented":false,"kind":"function","modifiers":[],"name":"grantKeyExtension","nameLocation":"40971:17:0","nodeType":"FunctionDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"mutability":"mutable","name":"_tokenId","nameLocation":"40994:8:0","nodeType":"VariableDeclaration","scope":1402,"src":"40989:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1396,"name":"uint","nodeType":"ElementaryTypeName","src":"40989:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1399,"mutability":"mutable","name":"_duration","nameLocation":"41009:9:0","nodeType":"VariableDeclaration","scope":1402,"src":"41004:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint","nodeType":"ElementaryTypeName","src":"41004:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"40988:31:0"},"returnParameters":{"id":1401,"nodeType":"ParameterList","parameters":[],"src":"41028:0:0"},"scope":1907,"src":"40962:67:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1403,"nodeType":"StructuredDocumentation","src":"41033:996:0","text":" @dev Purchase function\n @param _values array of tokens amount to pay for this purchase >= the current keyPrice - any applicable discount\n (_values is ignored when using ETH)\n @param _recipients array of addresses of the recipients of the purchased key\n @param _referrers array of addresses of the users making the referral\n @param _keyManagers optional array of addresses to grant managing rights to a specific address on creation\n @param _data array of arbitrary data populated by the front-end which initiated the sale\n @notice when called for an existing and non-expired key, the `_keyManager` param will be ignored\n @dev Setting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the\n price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more\n than keyPrice is approved for spending).\n @return tokenIds the ids of the created tokens"},"functionSelector":"33818997","id":1424,"implemented":false,"kind":"function","modifiers":[],"name":"purchase","nameLocation":"42041:8:0","nodeType":"FunctionDefinition","parameters":{"id":1419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1406,"mutability":"mutable","name":"_values","nameLocation":"42074:7:0","nodeType":"VariableDeclaration","scope":1424,"src":"42055:26:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1404,"name":"uint256","nodeType":"ElementaryTypeName","src":"42055:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1405,"nodeType":"ArrayTypeName","src":"42055:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1409,"mutability":"mutable","name":"_recipients","nameLocation":"42106:11:0","nodeType":"VariableDeclaration","scope":1424,"src":"42087:30:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1407,"name":"address","nodeType":"ElementaryTypeName","src":"42087:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1408,"nodeType":"ArrayTypeName","src":"42087:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1412,"mutability":"mutable","name":"_referrers","nameLocation":"42142:10:0","nodeType":"VariableDeclaration","scope":1424,"src":"42123:29:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1410,"name":"address","nodeType":"ElementaryTypeName","src":"42123:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1411,"nodeType":"ArrayTypeName","src":"42123:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1415,"mutability":"mutable","name":"_keyManagers","nameLocation":"42177:12:0","nodeType":"VariableDeclaration","scope":1424,"src":"42158:31:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1413,"name":"address","nodeType":"ElementaryTypeName","src":"42158:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1414,"nodeType":"ArrayTypeName","src":"42158:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1418,"mutability":"mutable","name":"_data","nameLocation":"42212:5:0","nodeType":"VariableDeclaration","scope":1424,"src":"42195:22:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":1416,"name":"bytes","nodeType":"ElementaryTypeName","src":"42195:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":1417,"nodeType":"ArrayTypeName","src":"42195:7:0","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"42049:172:0"},"returnParameters":{"id":1423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1422,"mutability":"mutable","name":"tokenIds","nameLocation":"42265:8:0","nodeType":"VariableDeclaration","scope":1424,"src":"42248:25:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1420,"name":"uint256","nodeType":"ElementaryTypeName","src":"42248:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1421,"nodeType":"ArrayTypeName","src":"42248:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"42247:27:0"},"scope":1907,"src":"42032:243:0","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1425,"nodeType":"StructuredDocumentation","src":"42279:497:0","text":" @dev Extend function\n @param _value the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount\n (_value is ignored when using ETH)\n @param _tokenId the id of the key to extend\n @param _referrer address of the user making the referral\n @param _data arbitrary data populated by the front-end which initiated the sale\n @dev Throws if lock is disabled or key does not exist for _recipient. Throws if _recipient == address(0)."},"functionSelector":"d813cc19","id":1436,"implemented":false,"kind":"function","modifiers":[],"name":"extend","nameLocation":"42788:6:0","nodeType":"FunctionDefinition","parameters":{"id":1434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1427,"mutability":"mutable","name":"_value","nameLocation":"42805:6:0","nodeType":"VariableDeclaration","scope":1436,"src":"42800:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1426,"name":"uint","nodeType":"ElementaryTypeName","src":"42800:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1429,"mutability":"mutable","name":"_tokenId","nameLocation":"42822:8:0","nodeType":"VariableDeclaration","scope":1436,"src":"42817:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1428,"name":"uint","nodeType":"ElementaryTypeName","src":"42817:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1431,"mutability":"mutable","name":"_referrer","nameLocation":"42844:9:0","nodeType":"VariableDeclaration","scope":1436,"src":"42836:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1430,"name":"address","nodeType":"ElementaryTypeName","src":"42836:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1433,"mutability":"mutable","name":"_data","nameLocation":"42874:5:0","nodeType":"VariableDeclaration","scope":1436,"src":"42859:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1432,"name":"bytes","nodeType":"ElementaryTypeName","src":"42859:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"42794:89:0"},"returnParameters":{"id":1435,"nodeType":"ParameterList","parameters":[],"src":"42900:0:0"},"scope":1907,"src":"42779:122:0","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1437,"nodeType":"StructuredDocumentation","src":"42905:249:0","text":" Returns the percentage of the keyPrice to be sent to the referrer (in basis points)\n @param _referrer the address of the referrer\n @return referrerFee the percentage of the keyPrice to be sent to the referrer (in basis points)"},"functionSelector":"c23135dd","id":1444,"implemented":false,"kind":"function","modifiers":[],"name":"referrerFees","nameLocation":"43166:12:0","nodeType":"FunctionDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1439,"mutability":"mutable","name":"_referrer","nameLocation":"43192:9:0","nodeType":"VariableDeclaration","scope":1444,"src":"43184:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1438,"name":"address","nodeType":"ElementaryTypeName","src":"43184:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"43178:27:0"},"returnParameters":{"id":1443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1442,"mutability":"mutable","name":"referrerFee","nameLocation":"43234:11:0","nodeType":"VariableDeclaration","scope":1444,"src":"43229:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1441,"name":"uint","nodeType":"ElementaryTypeName","src":"43229:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43228:18:0"},"scope":1907,"src":"43157:90:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1445,"nodeType":"StructuredDocumentation","src":"43251:407:0","text":" Set a specific percentage of the keyPrice to be sent to the referrer while purchasing,\n extending or renewing a key.\n @param _referrer the address of the referrer\n @param _feeBasisPoint the percentage of the price to be used for this\n specific referrer (in basis points)\n @dev To send a fixed percentage of the key price to all referrers, sett a percentage to `address(0)`"},"functionSelector":"debe2b0d","id":1452,"implemented":false,"kind":"function","modifiers":[],"name":"setReferrerFee","nameLocation":"43670:14:0","nodeType":"FunctionDefinition","parameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1447,"mutability":"mutable","name":"_referrer","nameLocation":"43693:9:0","nodeType":"VariableDeclaration","scope":1452,"src":"43685:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1446,"name":"address","nodeType":"ElementaryTypeName","src":"43685:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1449,"mutability":"mutable","name":"_feeBasisPoint","nameLocation":"43709:14:0","nodeType":"VariableDeclaration","scope":1452,"src":"43704:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1448,"name":"uint","nodeType":"ElementaryTypeName","src":"43704:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43684:40:0"},"returnParameters":{"id":1451,"nodeType":"ParameterList","parameters":[],"src":"43733:0:0"},"scope":1907,"src":"43661:73:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1453,"nodeType":"StructuredDocumentation","src":"43738:234:0","text":" Merge existing keys\n @param _tokenIdFrom the id of the token to substract time from\n @param _tokenIdTo the id of the destination token to add time\n @param _amount the amount of time to transfer (in seconds)"},"functionSelector":"068208cd","id":1462,"implemented":false,"kind":"function","modifiers":[],"name":"mergeKeys","nameLocation":"43984:9:0","nodeType":"FunctionDefinition","parameters":{"id":1460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"_tokenIdFrom","nameLocation":"43999:12:0","nodeType":"VariableDeclaration","scope":1462,"src":"43994:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1454,"name":"uint","nodeType":"ElementaryTypeName","src":"43994:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1457,"mutability":"mutable","name":"_tokenIdTo","nameLocation":"44018:10:0","nodeType":"VariableDeclaration","scope":1462,"src":"44013:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1456,"name":"uint","nodeType":"ElementaryTypeName","src":"44013:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1459,"mutability":"mutable","name":"_amount","nameLocation":"44035:7:0","nodeType":"VariableDeclaration","scope":1462,"src":"44030:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1458,"name":"uint","nodeType":"ElementaryTypeName","src":"44030:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43993:50:0"},"returnParameters":{"id":1461,"nodeType":"ParameterList","parameters":[],"src":"44052:0:0"},"scope":1907,"src":"43975:78:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"44057:163:0","text":" Deactivate an existing key\n @param _tokenId the id of token to burn\n @notice the key will be expired and ownership records will be destroyed"},"functionSelector":"42966c68","id":1468,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"44232:4:0","nodeType":"FunctionDefinition","parameters":{"id":1466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1465,"mutability":"mutable","name":"_tokenId","nameLocation":"44242:8:0","nodeType":"VariableDeclaration","scope":1468,"src":"44237:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1464,"name":"uint","nodeType":"ElementaryTypeName","src":"44237:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"44236:15:0"},"returnParameters":{"id":1467,"nodeType":"ParameterList","parameters":[],"src":"44260:0:0"},"scope":1907,"src":"44223:38:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1469,"nodeType":"StructuredDocumentation","src":"44265:147:0","text":" @param _gasRefundValue price in wei or token in smallest price unit\n @dev Set the value to be refunded to the sender on purchase"},"functionSelector":"f5766b39","id":1474,"implemented":false,"kind":"function","modifiers":[],"name":"setGasRefundValue","nameLocation":"44424:17:0","nodeType":"FunctionDefinition","parameters":{"id":1472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1471,"mutability":"mutable","name":"_gasRefundValue","nameLocation":"44450:15:0","nodeType":"VariableDeclaration","scope":1474,"src":"44442:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1470,"name":"uint256","nodeType":"ElementaryTypeName","src":"44442:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"44441:25:0"},"returnParameters":{"id":1473,"nodeType":"ParameterList","parameters":[],"src":"44475:0:0"},"scope":1907,"src":"44415:61:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1475,"nodeType":"StructuredDocumentation","src":"44480:150:0","text":" _gasRefundValue price in wei or token in smallest price unit\n @dev Returns the value/price to be refunded to the sender on purchase"},"functionSelector":"6207a8da","id":1480,"implemented":false,"kind":"function","modifiers":[],"name":"gasRefundValue","nameLocation":"44642:14:0","nodeType":"FunctionDefinition","parameters":{"id":1476,"nodeType":"ParameterList","parameters":[],"src":"44656:2:0"},"returnParameters":{"id":1479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1478,"mutability":"mutable","name":"_gasRefundValue","nameLocation":"44690:15:0","nodeType":"VariableDeclaration","scope":1480,"src":"44682:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1477,"name":"uint256","nodeType":"ElementaryTypeName","src":"44682:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"44681:25:0"},"scope":1907,"src":"44633:74:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1481,"nodeType":"StructuredDocumentation","src":"44711:164:0","text":" @notice returns the minimum price paid for a purchase with these params.\n @dev this considers any discount from Unlock or the OnKeyPurchase hook."},"functionSelector":"097ba333","id":1492,"implemented":false,"kind":"function","modifiers":[],"name":"purchasePriceFor","nameLocation":"44887:16:0","nodeType":"FunctionDefinition","parameters":{"id":1488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1483,"mutability":"mutable","name":"_recipient","nameLocation":"44917:10:0","nodeType":"VariableDeclaration","scope":1492,"src":"44909:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1482,"name":"address","nodeType":"ElementaryTypeName","src":"44909:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1485,"mutability":"mutable","name":"_referrer","nameLocation":"44941:9:0","nodeType":"VariableDeclaration","scope":1492,"src":"44933:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1484,"name":"address","nodeType":"ElementaryTypeName","src":"44933:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1487,"mutability":"mutable","name":"_data","nameLocation":"44971:5:0","nodeType":"VariableDeclaration","scope":1492,"src":"44956:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1486,"name":"bytes","nodeType":"ElementaryTypeName","src":"44956:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"44903:77:0"},"returnParameters":{"id":1491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1492,"src":"45004:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1489,"name":"uint","nodeType":"ElementaryTypeName","src":"45004:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45003:6:0"},"scope":1907,"src":"44878:132:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1493,"nodeType":"StructuredDocumentation","src":"45014:220:0","text":" Allow a Lock manager to change the transfer fee.\n @dev Throws if called by other than a Lock manager\n @param _transferFeeBasisPoints The new transfer fee in basis-points(bps).\n Ex: 200 bps = 2%"},"functionSelector":"8577a6d5","id":1498,"implemented":false,"kind":"function","modifiers":[],"name":"updateTransferFee","nameLocation":"45246:17:0","nodeType":"FunctionDefinition","parameters":{"id":1496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1495,"mutability":"mutable","name":"_transferFeeBasisPoints","nameLocation":"45269:23:0","nodeType":"VariableDeclaration","scope":1498,"src":"45264:28:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1494,"name":"uint","nodeType":"ElementaryTypeName","src":"45264:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45263:30:0"},"returnParameters":{"id":1497,"nodeType":"ParameterList","parameters":[],"src":"45302:0:0"},"scope":1907,"src":"45237:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1499,"nodeType":"StructuredDocumentation","src":"45307:393:0","text":" Determines how much of a fee would need to be paid in order to\n transfer to another account. This is pro-rated so the fee goes\n down overtime.\n @dev Throws if _tokenId does not have a valid key\n @param _tokenId The id of the key check the transfer fee for.\n @param _time The amount of time to calculate the fee for.\n @return The transfer fee in seconds."},"functionSelector":"b1a3b25d","id":1508,"implemented":false,"kind":"function","modifiers":[],"name":"getTransferFee","nameLocation":"45712:14:0","nodeType":"FunctionDefinition","parameters":{"id":1504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1501,"mutability":"mutable","name":"_tokenId","nameLocation":"45737:8:0","nodeType":"VariableDeclaration","scope":1508,"src":"45732:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1500,"name":"uint","nodeType":"ElementaryTypeName","src":"45732:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1503,"mutability":"mutable","name":"_time","nameLocation":"45756:5:0","nodeType":"VariableDeclaration","scope":1508,"src":"45751:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1502,"name":"uint","nodeType":"ElementaryTypeName","src":"45751:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45726:39:0"},"returnParameters":{"id":1507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1508,"src":"45789:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1505,"name":"uint","nodeType":"ElementaryTypeName","src":"45789:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"45788:6:0"},"scope":1907,"src":"45703:92:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1509,"nodeType":"StructuredDocumentation","src":"45799:347:0","text":" @dev Invoked by a Lock manager to expire the user's key\n and perform a refund and cancellation of the key\n @param _tokenId The key id we wish to refund to\n @param _amount The amount to refund to the key-owner\n @dev Throws if called by other than a Lock manager\n @dev Throws if _keyOwner does not have a valid key"},"functionSelector":"558b71e9","id":1516,"implemented":false,"kind":"function","modifiers":[],"name":"expireAndRefundFor","nameLocation":"46158:18:0","nodeType":"FunctionDefinition","parameters":{"id":1514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1511,"mutability":"mutable","name":"_tokenId","nameLocation":"46182:8:0","nodeType":"VariableDeclaration","scope":1516,"src":"46177:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1510,"name":"uint","nodeType":"ElementaryTypeName","src":"46177:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1513,"mutability":"mutable","name":"_amount","nameLocation":"46197:7:0","nodeType":"VariableDeclaration","scope":1516,"src":"46192:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1512,"name":"uint","nodeType":"ElementaryTypeName","src":"46192:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46176:29:0"},"returnParameters":{"id":1515,"nodeType":"ParameterList","parameters":[],"src":"46214:0:0"},"scope":1907,"src":"46149:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1517,"nodeType":"StructuredDocumentation","src":"46219:271:0","text":" @dev allows the key manager to expire a given tokenId\n and send a refund to the keyOwner based on the amount of time remaining.\n @param _tokenId The id of the key to cancel.\n @notice cancel is enabled with a 10% penalty by default on all Locks."},"functionSelector":"d32bfb6c","id":1522,"implemented":false,"kind":"function","modifiers":[],"name":"cancelAndRefund","nameLocation":"46502:15:0","nodeType":"FunctionDefinition","parameters":{"id":1520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1519,"mutability":"mutable","name":"_tokenId","nameLocation":"46523:8:0","nodeType":"VariableDeclaration","scope":1522,"src":"46518:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1518,"name":"uint","nodeType":"ElementaryTypeName","src":"46518:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46517:15:0"},"returnParameters":{"id":1521,"nodeType":"ParameterList","parameters":[],"src":"46541:0:0"},"scope":1907,"src":"46493:49:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1523,"nodeType":"StructuredDocumentation","src":"46546:277:0","text":" Allow a Lock manager to change the refund penalty.\n @dev Throws if called by other than a Lock manager\n @param _freeTrialLength The new duration of free trials for this lock\n @param _refundPenaltyBasisPoints The new refund penaly in basis-points(bps)"},"functionSelector":"39f46986","id":1530,"implemented":false,"kind":"function","modifiers":[],"name":"updateRefundPenalty","nameLocation":"46835:19:0","nodeType":"FunctionDefinition","parameters":{"id":1528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1525,"mutability":"mutable","name":"_freeTrialLength","nameLocation":"46865:16:0","nodeType":"VariableDeclaration","scope":1530,"src":"46860:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1524,"name":"uint","nodeType":"ElementaryTypeName","src":"46860:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1527,"mutability":"mutable","name":"_refundPenaltyBasisPoints","nameLocation":"46892:25:0","nodeType":"VariableDeclaration","scope":1530,"src":"46887:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1526,"name":"uint","nodeType":"ElementaryTypeName","src":"46887:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"46854:67:0"},"returnParameters":{"id":1529,"nodeType":"ParameterList","parameters":[],"src":"46930:0:0"},"scope":1907,"src":"46826:105:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1531,"nodeType":"StructuredDocumentation","src":"46935:349:0","text":" @dev Determines how much of a refund a key owner would receive if they issued\n @param _tokenId the id of the token to get the refund value for.\n @notice Due to the time required to mine a tx, the actual refund amount will be lower\n than what the user reads from this call.\n @return refund the amount of tokens refunded"},"functionSelector":"92ac98a5","id":1538,"implemented":false,"kind":"function","modifiers":[],"name":"getCancelAndRefundValue","nameLocation":"47296:23:0","nodeType":"FunctionDefinition","parameters":{"id":1534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1533,"mutability":"mutable","name":"_tokenId","nameLocation":"47330:8:0","nodeType":"VariableDeclaration","scope":1538,"src":"47325:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1532,"name":"uint","nodeType":"ElementaryTypeName","src":"47325:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"47319:23:0"},"returnParameters":{"id":1537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1536,"mutability":"mutable","name":"refund","nameLocation":"47371:6:0","nodeType":"VariableDeclaration","scope":1538,"src":"47366:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1535,"name":"uint","nodeType":"ElementaryTypeName","src":"47366:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"47365:13:0"},"scope":1907,"src":"47287:92:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"d2503485","id":1543,"implemented":false,"kind":"function","modifiers":[],"name":"addLockManager","nameLocation":"47392:14:0","nodeType":"FunctionDefinition","parameters":{"id":1541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"mutability":"mutable","name":"account","nameLocation":"47415:7:0","nodeType":"VariableDeclaration","scope":1543,"src":"47407:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1539,"name":"address","nodeType":"ElementaryTypeName","src":"47407:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47406:17:0"},"returnParameters":{"id":1542,"nodeType":"ParameterList","parameters":[],"src":"47432:0:0"},"scope":1907,"src":"47383:50:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"aae4b8f7","id":1550,"implemented":false,"kind":"function","modifiers":[],"name":"isLockManager","nameLocation":"47446:13:0","nodeType":"FunctionDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1545,"mutability":"mutable","name":"account","nameLocation":"47468:7:0","nodeType":"VariableDeclaration","scope":1550,"src":"47460:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1544,"name":"address","nodeType":"ElementaryTypeName","src":"47460:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47459:17:0"},"returnParameters":{"id":1549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1548,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1550,"src":"47500:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1547,"name":"bool","nodeType":"ElementaryTypeName","src":"47500:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"47499:6:0"},"scope":1907,"src":"47437:69:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"47510:112:0","text":" Returns the address of the `onKeyPurchaseHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"2d33dd5b","id":1556,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyPurchaseHook","nameLocation":"47634:17:0","nodeType":"FunctionDefinition","parameters":{"id":1552,"nodeType":"ParameterList","parameters":[],"src":"47651:2:0"},"returnParameters":{"id":1555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1554,"mutability":"mutable","name":"hookAddress","nameLocation":"47685:11:0","nodeType":"VariableDeclaration","scope":1556,"src":"47677:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1553,"name":"address","nodeType":"ElementaryTypeName","src":"47677:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47676:21:0"},"scope":1907,"src":"47625:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1557,"nodeType":"StructuredDocumentation","src":"47702:110:0","text":" Returns the address of the `onKeyCancelHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"217751bc","id":1562,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyCancelHook","nameLocation":"47824:15:0","nodeType":"FunctionDefinition","parameters":{"id":1558,"nodeType":"ParameterList","parameters":[],"src":"47839:2:0"},"returnParameters":{"id":1561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1560,"mutability":"mutable","name":"hookAddress","nameLocation":"47873:11:0","nodeType":"VariableDeclaration","scope":1562,"src":"47865:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1559,"name":"address","nodeType":"ElementaryTypeName","src":"47865:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"47864:21:0"},"scope":1907,"src":"47815:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"47890:109:0","text":" Returns the address of the `onValidKeyHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"26e9ca07","id":1568,"implemented":false,"kind":"function","modifiers":[],"name":"onValidKeyHook","nameLocation":"48011:14:0","nodeType":"FunctionDefinition","parameters":{"id":1564,"nodeType":"ParameterList","parameters":[],"src":"48025:2:0"},"returnParameters":{"id":1567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1566,"mutability":"mutable","name":"hookAddress","nameLocation":"48059:11:0","nodeType":"VariableDeclaration","scope":1568,"src":"48051:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1565,"name":"address","nodeType":"ElementaryTypeName","src":"48051:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48050:21:0"},"scope":1907,"src":"48002:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1569,"nodeType":"StructuredDocumentation","src":"48076:109:0","text":" Returns the address of the `onTokenURIHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"7ec2a724","id":1574,"implemented":false,"kind":"function","modifiers":[],"name":"onTokenURIHook","nameLocation":"48197:14:0","nodeType":"FunctionDefinition","parameters":{"id":1570,"nodeType":"ParameterList","parameters":[],"src":"48211:2:0"},"returnParameters":{"id":1573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1572,"mutability":"mutable","name":"hookAddress","nameLocation":"48245:11:0","nodeType":"VariableDeclaration","scope":1574,"src":"48237:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1571,"name":"address","nodeType":"ElementaryTypeName","src":"48237:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48236:21:0"},"scope":1907,"src":"48188:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1575,"nodeType":"StructuredDocumentation","src":"48262:112:0","text":" Returns the address of the `onKeyTransferHook` hook.\n @return hookAddress address of the hook"},"functionSelector":"389f07e8","id":1580,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyTransferHook","nameLocation":"48386:17:0","nodeType":"FunctionDefinition","parameters":{"id":1576,"nodeType":"ParameterList","parameters":[],"src":"48403:2:0"},"returnParameters":{"id":1579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1578,"mutability":"mutable","name":"hookAddress","nameLocation":"48437:11:0","nodeType":"VariableDeclaration","scope":1580,"src":"48429:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1577,"name":"address","nodeType":"ElementaryTypeName","src":"48429:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48428:21:0"},"scope":1907,"src":"48377:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1581,"nodeType":"StructuredDocumentation","src":"48454:114:0","text":" Returns the address of the `onKeyExtendHook` hook.\n @return hookAddress the address ok the hook"},"functionSelector":"c907c3ec","id":1586,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyExtendHook","nameLocation":"48580:15:0","nodeType":"FunctionDefinition","parameters":{"id":1582,"nodeType":"ParameterList","parameters":[],"src":"48595:2:0"},"returnParameters":{"id":1585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"mutability":"mutable","name":"hookAddress","nameLocation":"48629:11:0","nodeType":"VariableDeclaration","scope":1586,"src":"48621:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1583,"name":"address","nodeType":"ElementaryTypeName","src":"48621:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48620:21:0"},"scope":1907,"src":"48571:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1587,"nodeType":"StructuredDocumentation","src":"48646:113:0","text":" Returns the address of the `onKeyGrantHook` hook.\n @return hookAddress the address ok the hook"},"functionSelector":"b129694e","id":1592,"implemented":false,"kind":"function","modifiers":[],"name":"onKeyGrantHook","nameLocation":"48771:14:0","nodeType":"FunctionDefinition","parameters":{"id":1588,"nodeType":"ParameterList","parameters":[],"src":"48785:2:0"},"returnParameters":{"id":1591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1590,"mutability":"mutable","name":"hookAddress","nameLocation":"48819:11:0","nodeType":"VariableDeclaration","scope":1592,"src":"48811:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1589,"name":"address","nodeType":"ElementaryTypeName","src":"48811:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"48810:21:0"},"scope":1907,"src":"48762:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f0ba6040","id":1595,"implemented":false,"kind":"function","modifiers":[],"name":"renounceLockManager","nameLocation":"48845:19:0","nodeType":"FunctionDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[],"src":"48864:2:0"},"returnParameters":{"id":1594,"nodeType":"ParameterList","parameters":[],"src":"48875:0:0"},"scope":1907,"src":"48836:40:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1596,"nodeType":"StructuredDocumentation","src":"48880:77:0","text":" @return the maximum number of key allowed for a single address"},"functionSelector":"d52e4a10","id":1601,"implemented":false,"kind":"function","modifiers":[],"name":"maxKeysPerAddress","nameLocation":"48969:17:0","nodeType":"FunctionDefinition","parameters":{"id":1597,"nodeType":"ParameterList","parameters":[],"src":"48986:2:0"},"returnParameters":{"id":1600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1601,"src":"49012:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1598,"name":"uint","nodeType":"ElementaryTypeName","src":"49012:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49011:6:0"},"scope":1907,"src":"48960:58:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"11a4c03a","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"expirationDuration","nameLocation":"49031:18:0","nodeType":"FunctionDefinition","parameters":{"id":1602,"nodeType":"ParameterList","parameters":[],"src":"49049:2:0"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1606,"src":"49075:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"49075:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49074:9:0"},"scope":1907,"src":"49022:62:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a375cb05","id":1611,"implemented":false,"kind":"function","modifiers":[],"name":"freeTrialLength","nameLocation":"49097:15:0","nodeType":"FunctionDefinition","parameters":{"id":1607,"nodeType":"ParameterList","parameters":[],"src":"49112:2:0"},"returnParameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1611,"src":"49138:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1608,"name":"uint256","nodeType":"ElementaryTypeName","src":"49138:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49137:9:0"},"scope":1907,"src":"49088:59:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"10e56973","id":1616,"implemented":false,"kind":"function","modifiers":[],"name":"keyPrice","nameLocation":"49160:8:0","nodeType":"FunctionDefinition","parameters":{"id":1612,"nodeType":"ParameterList","parameters":[],"src":"49168:2:0"},"returnParameters":{"id":1615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1616,"src":"49194:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"49194:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49193:9:0"},"scope":1907,"src":"49151:52:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"74b6c106","id":1621,"implemented":false,"kind":"function","modifiers":[],"name":"maxNumberOfKeys","nameLocation":"49216:15:0","nodeType":"FunctionDefinition","parameters":{"id":1617,"nodeType":"ParameterList","parameters":[],"src":"49231:2:0"},"returnParameters":{"id":1620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1621,"src":"49257:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1618,"name":"uint256","nodeType":"ElementaryTypeName","src":"49257:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49256:9:0"},"scope":1907,"src":"49207:59:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"56e0d51f","id":1626,"implemented":false,"kind":"function","modifiers":[],"name":"refundPenaltyBasisPoints","nameLocation":"49279:24:0","nodeType":"FunctionDefinition","parameters":{"id":1622,"nodeType":"ParameterList","parameters":[],"src":"49303:2:0"},"returnParameters":{"id":1625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1626,"src":"49329:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1623,"name":"uint256","nodeType":"ElementaryTypeName","src":"49329:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49328:9:0"},"scope":1907,"src":"49270:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9d76ea58","id":1631,"implemented":false,"kind":"function","modifiers":[],"name":"tokenAddress","nameLocation":"49351:12:0","nodeType":"FunctionDefinition","parameters":{"id":1627,"nodeType":"ParameterList","parameters":[],"src":"49363:2:0"},"returnParameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1631,"src":"49389:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1628,"name":"address","nodeType":"ElementaryTypeName","src":"49389:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"49388:9:0"},"scope":1907,"src":"49342:56:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"183767da","id":1636,"implemented":false,"kind":"function","modifiers":[],"name":"transferFeeBasisPoints","nameLocation":"49411:22:0","nodeType":"FunctionDefinition","parameters":{"id":1632,"nodeType":"ParameterList","parameters":[],"src":"49433:2:0"},"returnParameters":{"id":1635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1634,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1636,"src":"49459:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1633,"name":"uint256","nodeType":"ElementaryTypeName","src":"49459:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49458:9:0"},"scope":1907,"src":"49402:66:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0f15023b","id":1641,"implemented":false,"kind":"function","modifiers":[],"name":"unlockProtocol","nameLocation":"49481:14:0","nodeType":"FunctionDefinition","parameters":{"id":1637,"nodeType":"ParameterList","parameters":[],"src":"49495:2:0"},"returnParameters":{"id":1640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1639,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1641,"src":"49521:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1638,"name":"address","nodeType":"ElementaryTypeName","src":"49521:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"49520:9:0"},"scope":1907,"src":"49472:58:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4d025fed","id":1648,"implemented":false,"kind":"function","modifiers":[],"name":"keyManagerOf","nameLocation":"49543:12:0","nodeType":"FunctionDefinition","parameters":{"id":1644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1648,"src":"49556:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1642,"name":"uint","nodeType":"ElementaryTypeName","src":"49556:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"49555:6:0"},"returnParameters":{"id":1647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1648,"src":"49585:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1645,"name":"address","nodeType":"ElementaryTypeName","src":"49585:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"49584:9:0"},"scope":1907,"src":"49534:60:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1649,"nodeType":"StructuredDocumentation","src":"49672:630:0","text":" @notice Allows the key owner to safely share their key (parent key) by\n transferring a portion of the remaining time to a new key (child key).\n @dev Throws if key is not valid.\n @dev Throws if `_to` is the zero address\n @param _to The recipient of the shared key\n @param _tokenId the key to share\n @param _timeShared The amount of time shared\n checks if `_to` is a smart contract (code size > 0). If so, it calls\n `onERC721Received` on `_to` and throws if the return value is not\n `bytes4(keccak256('onERC721Received(address,address,uint,bytes)'))`.\n @dev Emit Transfer event"},"functionSelector":"f12c6b6e","id":1658,"implemented":false,"kind":"function","modifiers":[],"name":"shareKey","nameLocation":"50314:8:0","nodeType":"FunctionDefinition","parameters":{"id":1656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"mutability":"mutable","name":"_to","nameLocation":"50331:3:0","nodeType":"VariableDeclaration","scope":1658,"src":"50323:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"50323:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1653,"mutability":"mutable","name":"_tokenId","nameLocation":"50341:8:0","nodeType":"VariableDeclaration","scope":1658,"src":"50336:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1652,"name":"uint","nodeType":"ElementaryTypeName","src":"50336:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"_timeShared","nameLocation":"50356:11:0","nodeType":"VariableDeclaration","scope":1658,"src":"50351:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1654,"name":"uint","nodeType":"ElementaryTypeName","src":"50351:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50322:46:0"},"returnParameters":{"id":1657,"nodeType":"ParameterList","parameters":[],"src":"50377:0:0"},"scope":1907,"src":"50305:73:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1659,"nodeType":"StructuredDocumentation","src":"50382:210:0","text":" @notice Update transfer and cancel rights for a given key\n @param _tokenId The id of the key to assign rights for\n @param _keyManager The address to assign the rights to for the given key"},"functionSelector":"b11d7ec1","id":1666,"implemented":false,"kind":"function","modifiers":[],"name":"setKeyManagerOf","nameLocation":"50604:15:0","nodeType":"FunctionDefinition","parameters":{"id":1664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1661,"mutability":"mutable","name":"_tokenId","nameLocation":"50625:8:0","nodeType":"VariableDeclaration","scope":1666,"src":"50620:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1660,"name":"uint","nodeType":"ElementaryTypeName","src":"50620:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1663,"mutability":"mutable","name":"_keyManager","nameLocation":"50643:11:0","nodeType":"VariableDeclaration","scope":1666,"src":"50635:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1662,"name":"address","nodeType":"ElementaryTypeName","src":"50635:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"50619:36:0"},"returnParameters":{"id":1665,"nodeType":"ParameterList","parameters":[],"src":"50664:0:0"},"scope":1907,"src":"50595:70:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1667,"nodeType":"StructuredDocumentation","src":"50669:166:0","text":" Check if a certain key is valid\n @param _tokenId the id of the key to check validity\n @notice this makes use of the onValidKeyHook if it is set"},"functionSelector":"a98d3623","id":1674,"implemented":false,"kind":"function","modifiers":[],"name":"isValidKey","nameLocation":"50847:10:0","nodeType":"FunctionDefinition","parameters":{"id":1670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1669,"mutability":"mutable","name":"_tokenId","nameLocation":"50863:8:0","nodeType":"VariableDeclaration","scope":1674,"src":"50858:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1668,"name":"uint","nodeType":"ElementaryTypeName","src":"50858:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50857:15:0"},"returnParameters":{"id":1673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1674,"src":"50896:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1671,"name":"bool","nodeType":"ElementaryTypeName","src":"50896:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"50895:6:0"},"scope":1907,"src":"50838:64:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1675,"nodeType":"StructuredDocumentation","src":"50906:230:0","text":" Returns the number of keys owned by `_keyOwner` (expired or not)\n @param _keyOwner address for which we are retrieving the total number of keys\n @return numberOfKeys total number of keys owned by the address"},"functionSelector":"812eecd4","id":1682,"implemented":false,"kind":"function","modifiers":[],"name":"totalKeys","nameLocation":"51148:9:0","nodeType":"FunctionDefinition","parameters":{"id":1678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1677,"mutability":"mutable","name":"_keyOwner","nameLocation":"51171:9:0","nodeType":"VariableDeclaration","scope":1682,"src":"51163:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1676,"name":"address","nodeType":"ElementaryTypeName","src":"51163:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"51157:27:0"},"returnParameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1680,"mutability":"mutable","name":"numberOfKeys","nameLocation":"51213:12:0","nodeType":"VariableDeclaration","scope":1682,"src":"51208:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1679,"name":"uint","nodeType":"ElementaryTypeName","src":"51208:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51207:19:0"},"scope":1907,"src":"51139:88:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"51231:72:0","text":"@notice A descriptive name for a collection of NFTs in this contract"},"functionSelector":"06fdde03","id":1688,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"51315:4:0","nodeType":"FunctionDefinition","parameters":{"id":1684,"nodeType":"ParameterList","parameters":[],"src":"51319:2:0"},"returnParameters":{"id":1687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1686,"mutability":"mutable","name":"_name","nameLocation":"51359:5:0","nodeType":"VariableDeclaration","scope":1688,"src":"51345:19:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1685,"name":"string","nodeType":"ElementaryTypeName","src":"51345:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"51344:21:0"},"scope":1907,"src":"51306:60:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1689,"nodeType":"StructuredDocumentation","src":"51444:19:0","text":"From ERC165.sol"},"functionSelector":"01ffc9a7","id":1696,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"51475:17:0","nodeType":"FunctionDefinition","parameters":{"id":1692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1691,"mutability":"mutable","name":"interfaceId","nameLocation":"51500:11:0","nodeType":"VariableDeclaration","scope":1696,"src":"51493:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1690,"name":"bytes4","nodeType":"ElementaryTypeName","src":"51493:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"51492:20:0"},"returnParameters":{"id":1695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1696,"src":"51536:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1693,"name":"bool","nodeType":"ElementaryTypeName","src":"51536:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"51535:6:0"},"scope":1907,"src":"51466:76:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1697,"nodeType":"StructuredDocumentation","src":"51639:183:0","text":" In the specific case of a Lock, `balanceOf` returns only the tokens with a valid expiration timerange\n @return balance The number of valid keys owned by `_keyOwner`"},"functionSelector":"70a08231","id":1704,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"51834:9:0","nodeType":"FunctionDefinition","parameters":{"id":1700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1699,"mutability":"mutable","name":"_owner","nameLocation":"51852:6:0","nodeType":"VariableDeclaration","scope":1704,"src":"51844:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1698,"name":"address","nodeType":"ElementaryTypeName","src":"51844:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"51843:16:0"},"returnParameters":{"id":1703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1702,"mutability":"mutable","name":"balance","nameLocation":"51891:7:0","nodeType":"VariableDeclaration","scope":1704,"src":"51883:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1701,"name":"uint256","nodeType":"ElementaryTypeName","src":"51883:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51882:17:0"},"scope":1907,"src":"51825:75:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1705,"nodeType":"StructuredDocumentation","src":"51904:72:0","text":" @dev Returns the owner of the NFT specified by `tokenId`."},"functionSelector":"6352211e","id":1712,"implemented":false,"kind":"function","modifiers":[],"name":"ownerOf","nameLocation":"51988:7:0","nodeType":"FunctionDefinition","parameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"tokenId","nameLocation":"52004:7:0","nodeType":"VariableDeclaration","scope":1712,"src":"51996:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1706,"name":"uint256","nodeType":"ElementaryTypeName","src":"51996:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"51995:17:0"},"returnParameters":{"id":1711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1710,"mutability":"mutable","name":"_owner","nameLocation":"52044:6:0","nodeType":"VariableDeclaration","scope":1712,"src":"52036:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1709,"name":"address","nodeType":"ElementaryTypeName","src":"52036:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"52035:16:0"},"scope":1907,"src":"51979:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1713,"nodeType":"StructuredDocumentation","src":"52056:339:0","text":" @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to\n another (`to`).\n Requirements:\n - `from`, `to` cannot be zero.\n - `tokenId` must be owned by `from`.\n - If the caller is not `from`, it must be have been allowed to move this\n NFT by either {approve} or {setApprovalForAll}."},"functionSelector":"42842e0e","id":1722,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"52407:16:0","nodeType":"FunctionDefinition","parameters":{"id":1720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1715,"mutability":"mutable","name":"from","nameLocation":"52432:4:0","nodeType":"VariableDeclaration","scope":1722,"src":"52424:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1714,"name":"address","nodeType":"ElementaryTypeName","src":"52424:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1717,"mutability":"mutable","name":"to","nameLocation":"52446:2:0","nodeType":"VariableDeclaration","scope":1722,"src":"52438:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1716,"name":"address","nodeType":"ElementaryTypeName","src":"52438:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1719,"mutability":"mutable","name":"tokenId","nameLocation":"52458:7:0","nodeType":"VariableDeclaration","scope":1722,"src":"52450:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1718,"name":"uint256","nodeType":"ElementaryTypeName","src":"52450:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"52423:43:0"},"returnParameters":{"id":1721,"nodeType":"ParameterList","parameters":[],"src":"52475:0:0"},"scope":1907,"src":"52398:78:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1723,"nodeType":"StructuredDocumentation","src":"52480:441:0","text":" an ERC721-like function to transfer a token from one account to another.\n @param from the owner of token to transfer\n @param to the address that will receive the token\n @param tokenId the id of the token\n @dev Requirements: if the caller is not `from`, it must be approved to move this token by\n either {approve} or {setApprovalForAll}.\n The key manager will be reset to address zero after the transfer"},"functionSelector":"23b872dd","id":1732,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"52933:12:0","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1725,"mutability":"mutable","name":"from","nameLocation":"52954:4:0","nodeType":"VariableDeclaration","scope":1732,"src":"52946:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1724,"name":"address","nodeType":"ElementaryTypeName","src":"52946:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1727,"mutability":"mutable","name":"to","nameLocation":"52968:2:0","nodeType":"VariableDeclaration","scope":1732,"src":"52960:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1726,"name":"address","nodeType":"ElementaryTypeName","src":"52960:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1729,"mutability":"mutable","name":"tokenId","nameLocation":"52980:7:0","nodeType":"VariableDeclaration","scope":1732,"src":"52972:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1728,"name":"uint256","nodeType":"ElementaryTypeName","src":"52972:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"52945:43:0"},"returnParameters":{"id":1731,"nodeType":"ParameterList","parameters":[],"src":"52997:0:0"},"scope":1907,"src":"52924:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1733,"nodeType":"StructuredDocumentation","src":"53002:537:0","text":" Lending a key allows you to transfer the token while retaining the\n ownerships right by setting yourself as a key manager first.\n @param from the owner of token to transfer\n @param to the address that will receive the token\n @param tokenId the id of the token\n @notice This function can only be called by 1) the key owner when no key manager is set or 2) the key manager.\n After calling the function, the `_recipent` will be the new owner, and the sender of the tx\n will become the key manager."},"functionSelector":"0c2db8d1","id":1742,"implemented":false,"kind":"function","modifiers":[],"name":"lendKey","nameLocation":"53551:7:0","nodeType":"FunctionDefinition","parameters":{"id":1740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1735,"mutability":"mutable","name":"from","nameLocation":"53567:4:0","nodeType":"VariableDeclaration","scope":1742,"src":"53559:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1734,"name":"address","nodeType":"ElementaryTypeName","src":"53559:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1737,"mutability":"mutable","name":"to","nameLocation":"53581:2:0","nodeType":"VariableDeclaration","scope":1742,"src":"53573:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1736,"name":"address","nodeType":"ElementaryTypeName","src":"53573:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1739,"mutability":"mutable","name":"tokenId","nameLocation":"53590:7:0","nodeType":"VariableDeclaration","scope":1742,"src":"53585:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1738,"name":"uint","nodeType":"ElementaryTypeName","src":"53585:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53558:40:0"},"returnParameters":{"id":1741,"nodeType":"ParameterList","parameters":[],"src":"53607:0:0"},"scope":1907,"src":"53542:66:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1743,"nodeType":"StructuredDocumentation","src":"53612:280:0","text":" Unlend is called when you have lent a key and want to claim its full ownership back.\n @param _recipient the address that will receive the token ownership\n @param _tokenId the id of the token\n @dev Only the key manager of the token can call this function"},"functionSelector":"407dc589","id":1750,"implemented":false,"kind":"function","modifiers":[],"name":"unlendKey","nameLocation":"53904:9:0","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1745,"mutability":"mutable","name":"_recipient","nameLocation":"53922:10:0","nodeType":"VariableDeclaration","scope":1750,"src":"53914:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1744,"name":"address","nodeType":"ElementaryTypeName","src":"53914:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1747,"mutability":"mutable","name":"_tokenId","nameLocation":"53939:8:0","nodeType":"VariableDeclaration","scope":1750,"src":"53934:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1746,"name":"uint","nodeType":"ElementaryTypeName","src":"53934:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53913:35:0"},"returnParameters":{"id":1749,"nodeType":"ParameterList","parameters":[],"src":"53957:0:0"},"scope":1907,"src":"53895:63:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":1757,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"53971:7:0","nodeType":"FunctionDefinition","parameters":{"id":1755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1752,"mutability":"mutable","name":"to","nameLocation":"53987:2:0","nodeType":"VariableDeclaration","scope":1757,"src":"53979:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1751,"name":"address","nodeType":"ElementaryTypeName","src":"53979:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1754,"mutability":"mutable","name":"tokenId","nameLocation":"53999:7:0","nodeType":"VariableDeclaration","scope":1757,"src":"53991:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1753,"name":"uint256","nodeType":"ElementaryTypeName","src":"53991:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53978:29:0"},"returnParameters":{"id":1756,"nodeType":"ParameterList","parameters":[],"src":"54016:0:0"},"scope":1907,"src":"53962:55:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1758,"nodeType":"StructuredDocumentation","src":"54021:271:0","text":" @notice Get the approved address for a single NFT\n @dev Throws if `_tokenId` is not a valid NFT.\n @param _tokenId The NFT to find the approved address for\n @return operator The approved address for this NFT, or the zero address if there is none"},"functionSelector":"081812fc","id":1765,"implemented":false,"kind":"function","modifiers":[],"name":"getApproved","nameLocation":"54304:11:0","nodeType":"FunctionDefinition","parameters":{"id":1761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1760,"mutability":"mutable","name":"_tokenId","nameLocation":"54329:8:0","nodeType":"VariableDeclaration","scope":1765,"src":"54321:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1759,"name":"uint256","nodeType":"ElementaryTypeName","src":"54321:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"54315:26:0"},"returnParameters":{"id":1764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1763,"mutability":"mutable","name":"operator","nameLocation":"54373:8:0","nodeType":"VariableDeclaration","scope":1765,"src":"54365:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1762,"name":"address","nodeType":"ElementaryTypeName","src":"54365:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"54364:18:0"},"scope":1907,"src":"54295:88:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1766,"nodeType":"StructuredDocumentation","src":"54387:329:0","text":" @dev Sets or unsets the approval of a given operator\n An operator is allowed to transfer all tokens of the sender on their behalf\n @param _operator operator address to set the approval\n @param _approved representing the status of the approval to be set\n @notice disabled when transfers are disabled"},"functionSelector":"a22cb465","id":1773,"implemented":false,"kind":"function","modifiers":[],"name":"setApprovalForAll","nameLocation":"54728:17:0","nodeType":"FunctionDefinition","parameters":{"id":1771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1768,"mutability":"mutable","name":"_operator","nameLocation":"54754:9:0","nodeType":"VariableDeclaration","scope":1773,"src":"54746:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1767,"name":"address","nodeType":"ElementaryTypeName","src":"54746:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1770,"mutability":"mutable","name":"_approved","nameLocation":"54770:9:0","nodeType":"VariableDeclaration","scope":1773,"src":"54765:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1769,"name":"bool","nodeType":"ElementaryTypeName","src":"54765:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"54745:35:0"},"returnParameters":{"id":1772,"nodeType":"ParameterList","parameters":[],"src":"54789:0:0"},"scope":1907,"src":"54719:71:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1774,"nodeType":"StructuredDocumentation","src":"54794:307:0","text":" @dev Tells whether an operator is approved by a given keyManager\n @param _owner owner address which you want to query the approval of\n @param _operator operator address which you want to query the approval of\n @return bool whether the given operator is approved by the given owner"},"functionSelector":"e985e9c5","id":1783,"implemented":false,"kind":"function","modifiers":[],"name":"isApprovedForAll","nameLocation":"55113:16:0","nodeType":"FunctionDefinition","parameters":{"id":1779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1776,"mutability":"mutable","name":"_owner","nameLocation":"55143:6:0","nodeType":"VariableDeclaration","scope":1783,"src":"55135:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1775,"name":"address","nodeType":"ElementaryTypeName","src":"55135:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1778,"mutability":"mutable","name":"_operator","nameLocation":"55163:9:0","nodeType":"VariableDeclaration","scope":1783,"src":"55155:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1777,"name":"address","nodeType":"ElementaryTypeName","src":"55155:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"55129:47:0"},"returnParameters":{"id":1782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1781,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1783,"src":"55200:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1780,"name":"bool","nodeType":"ElementaryTypeName","src":"55200:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"55199:6:0"},"scope":1907,"src":"55104:102:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b88d4fde","id":1794,"implemented":false,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"55219:16:0","nodeType":"FunctionDefinition","parameters":{"id":1792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"from","nameLocation":"55249:4:0","nodeType":"VariableDeclaration","scope":1794,"src":"55241:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1784,"name":"address","nodeType":"ElementaryTypeName","src":"55241:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1787,"mutability":"mutable","name":"to","nameLocation":"55267:2:0","nodeType":"VariableDeclaration","scope":1794,"src":"55259:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1786,"name":"address","nodeType":"ElementaryTypeName","src":"55259:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1789,"mutability":"mutable","name":"tokenId","nameLocation":"55283:7:0","nodeType":"VariableDeclaration","scope":1794,"src":"55275:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1788,"name":"uint256","nodeType":"ElementaryTypeName","src":"55275:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1791,"mutability":"mutable","name":"data","nameLocation":"55311:4:0","nodeType":"VariableDeclaration","scope":1794,"src":"55296:19:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1790,"name":"bytes","nodeType":"ElementaryTypeName","src":"55296:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"55235:84:0"},"returnParameters":{"id":1793,"nodeType":"ParameterList","parameters":[],"src":"55328:0:0"},"scope":1907,"src":"55210:119:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1795,"nodeType":"StructuredDocumentation","src":"55333:143:0","text":" Returns the total number of keys, including non-valid ones\n @return _totalKeysCreated the total number of keys, valid or not"},"functionSelector":"18160ddd","id":1800,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"55488:11:0","nodeType":"FunctionDefinition","parameters":{"id":1796,"nodeType":"ParameterList","parameters":[],"src":"55499:2:0"},"returnParameters":{"id":1799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1798,"mutability":"mutable","name":"_totalKeysCreated","nameLocation":"55533:17:0","nodeType":"VariableDeclaration","scope":1800,"src":"55525:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1797,"name":"uint256","nodeType":"ElementaryTypeName","src":"55525:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55524:27:0"},"scope":1907,"src":"55479:73:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f745c59","id":1809,"implemented":false,"kind":"function","modifiers":[],"name":"tokenOfOwnerByIndex","nameLocation":"55565:19:0","nodeType":"FunctionDefinition","parameters":{"id":1805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1802,"mutability":"mutable","name":"_owner","nameLocation":"55598:6:0","nodeType":"VariableDeclaration","scope":1809,"src":"55590:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1801,"name":"address","nodeType":"ElementaryTypeName","src":"55590:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1804,"mutability":"mutable","name":"index","nameLocation":"55618:5:0","nodeType":"VariableDeclaration","scope":1809,"src":"55610:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1803,"name":"uint256","nodeType":"ElementaryTypeName","src":"55610:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55584:43:0"},"returnParameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1807,"mutability":"mutable","name":"tokenId","nameLocation":"55659:7:0","nodeType":"VariableDeclaration","scope":1809,"src":"55651:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1806,"name":"uint256","nodeType":"ElementaryTypeName","src":"55651:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55650:17:0"},"scope":1907,"src":"55556:112:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4f6ccce7","id":1816,"implemented":false,"kind":"function","modifiers":[],"name":"tokenByIndex","nameLocation":"55681:12:0","nodeType":"FunctionDefinition","parameters":{"id":1812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1811,"mutability":"mutable","name":"index","nameLocation":"55702:5:0","nodeType":"VariableDeclaration","scope":1816,"src":"55694:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1810,"name":"uint256","nodeType":"ElementaryTypeName","src":"55694:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55693:15:0"},"returnParameters":{"id":1815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1816,"src":"55732:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1813,"name":"uint256","nodeType":"ElementaryTypeName","src":"55732:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"55731:9:0"},"scope":1907,"src":"55672:69:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1817,"nodeType":"StructuredDocumentation","src":"55745:62:0","text":" Innherited from Open Zeppelin AccessControl.sol"},"functionSelector":"248a9ca3","id":1824,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"55819:12:0","nodeType":"FunctionDefinition","parameters":{"id":1820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1819,"mutability":"mutable","name":"role","nameLocation":"55840:4:0","nodeType":"VariableDeclaration","scope":1824,"src":"55832:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55832:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"55831:14:0"},"returnParameters":{"id":1823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1824,"src":"55869:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1821,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55869:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"55868:9:0"},"scope":1907,"src":"55810:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":1831,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"55891:9:0","nodeType":"FunctionDefinition","parameters":{"id":1829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"role","nameLocation":"55909:4:0","nodeType":"VariableDeclaration","scope":1831,"src":"55901:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1825,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55901:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1828,"mutability":"mutable","name":"account","nameLocation":"55923:7:0","nodeType":"VariableDeclaration","scope":1831,"src":"55915:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1827,"name":"address","nodeType":"ElementaryTypeName","src":"55915:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"55900:31:0"},"returnParameters":{"id":1830,"nodeType":"ParameterList","parameters":[],"src":"55940:0:0"},"scope":1907,"src":"55882:59:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":1838,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"55954:10:0","nodeType":"FunctionDefinition","parameters":{"id":1836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1833,"mutability":"mutable","name":"role","nameLocation":"55973:4:0","nodeType":"VariableDeclaration","scope":1838,"src":"55965:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1832,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55965:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1835,"mutability":"mutable","name":"account","nameLocation":"55987:7:0","nodeType":"VariableDeclaration","scope":1838,"src":"55979:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1834,"name":"address","nodeType":"ElementaryTypeName","src":"55979:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"55964:31:0"},"returnParameters":{"id":1837,"nodeType":"ParameterList","parameters":[],"src":"56004:0:0"},"scope":1907,"src":"55945:60:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":1845,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"56018:12:0","nodeType":"FunctionDefinition","parameters":{"id":1843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1840,"mutability":"mutable","name":"role","nameLocation":"56039:4:0","nodeType":"VariableDeclaration","scope":1845,"src":"56031:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"56031:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1842,"mutability":"mutable","name":"account","nameLocation":"56053:7:0","nodeType":"VariableDeclaration","scope":1845,"src":"56045:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1841,"name":"address","nodeType":"ElementaryTypeName","src":"56045:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56030:31:0"},"returnParameters":{"id":1844,"nodeType":"ParameterList","parameters":[],"src":"56070:0:0"},"scope":1907,"src":"56009:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"91d14854","id":1854,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"56084:7:0","nodeType":"FunctionDefinition","parameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1847,"mutability":"mutable","name":"role","nameLocation":"56100:4:0","nodeType":"VariableDeclaration","scope":1854,"src":"56092:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1846,"name":"bytes32","nodeType":"ElementaryTypeName","src":"56092:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"account","nameLocation":"56114:7:0","nodeType":"VariableDeclaration","scope":1854,"src":"56106:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1848,"name":"address","nodeType":"ElementaryTypeName","src":"56106:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56091:31:0"},"returnParameters":{"id":1853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1854,"src":"56146:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1851,"name":"bool","nodeType":"ElementaryTypeName","src":"56146:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"56145:6:0"},"scope":1907,"src":"56075:77:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1855,"nodeType":"StructuredDocumentation","src":"56156:362:0","text":"`owner()` is provided as an helper to mimick the `Ownable` contract ABI.\n The `Ownable` logic is used by many 3rd party services to determine\n contract ownership - e.g. who is allowed to edit metadata on Opensea.\n @notice This logic is NOT used internally by the Unlock Protocol and is made\n available only as a convenience helper."},"functionSelector":"8da5cb5b","id":1860,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"56530:5:0","nodeType":"FunctionDefinition","parameters":{"id":1856,"nodeType":"ParameterList","parameters":[],"src":"56535:2:0"},"returnParameters":{"id":1859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1858,"mutability":"mutable","name":"owner","nameLocation":"56569:5:0","nodeType":"VariableDeclaration","scope":1860,"src":"56561:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1857,"name":"address","nodeType":"ElementaryTypeName","src":"56561:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56560:15:0"},"scope":1907,"src":"56521:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"13af4035","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"setOwner","nameLocation":"56589:8:0","nodeType":"FunctionDefinition","parameters":{"id":1863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1862,"mutability":"mutable","name":"account","nameLocation":"56606:7:0","nodeType":"VariableDeclaration","scope":1865,"src":"56598:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1861,"name":"address","nodeType":"ElementaryTypeName","src":"56598:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56597:17:0"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[],"src":"56623:0:0"},"scope":1907,"src":"56580:44:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2f54bf6e","id":1872,"implemented":false,"kind":"function","modifiers":[],"name":"isOwner","nameLocation":"56637:7:0","nodeType":"FunctionDefinition","parameters":{"id":1868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1867,"mutability":"mutable","name":"account","nameLocation":"56653:7:0","nodeType":"VariableDeclaration","scope":1872,"src":"56645:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1866,"name":"address","nodeType":"ElementaryTypeName","src":"56645:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"56644:17:0"},"returnParameters":{"id":1871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1870,"mutability":"mutable","name":"isOwner","nameLocation":"56690:7:0","nodeType":"VariableDeclaration","scope":1872,"src":"56685:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1869,"name":"bool","nodeType":"ElementaryTypeName","src":"56685:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"56684:14:0"},"scope":1907,"src":"56628:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1873,"nodeType":"StructuredDocumentation","src":"56703:394:0","text":" Migrate data from the previous single owner => key mapping to\n the new data structure w multiple tokens.\n @param _calldata an ABI-encoded representation of the params (v10: the number of records to migrate as `uint`)\n @dev when all record schemas are sucessfully upgraded, this function will update the `schemaVersion`\n variable to the latest/current lock version"},"functionSelector":"8932a90d","id":1878,"implemented":false,"kind":"function","modifiers":[],"name":"migrate","nameLocation":"57109:7:0","nodeType":"FunctionDefinition","parameters":{"id":1876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1875,"mutability":"mutable","name":"_calldata","nameLocation":"57132:9:0","nodeType":"VariableDeclaration","scope":1878,"src":"57117:24:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1874,"name":"bytes","nodeType":"ElementaryTypeName","src":"57117:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"57116:26:0"},"returnParameters":{"id":1877,"nodeType":"ParameterList","parameters":[],"src":"57151:0:0"},"scope":1907,"src":"57100:52:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1879,"nodeType":"StructuredDocumentation","src":"57156:274:0","text":" Returns the version number of the data schema currently used by the lock\n @notice if this is different from `publicLockVersion`, then the ability to purchase, grant\n or extend keys is disabled.\n @dev will return 0 if no ;igration has ever been run"},"functionSelector":"4e2ce6d3","id":1884,"implemented":false,"kind":"function","modifiers":[],"name":"schemaVersion","nameLocation":"57442:13:0","nodeType":"FunctionDefinition","parameters":{"id":1880,"nodeType":"ParameterList","parameters":[],"src":"57455:2:0"},"returnParameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1884,"src":"57481:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1881,"name":"uint","nodeType":"ElementaryTypeName","src":"57481:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"57480:6:0"},"scope":1907,"src":"57433:54:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1885,"nodeType":"StructuredDocumentation","src":"57491:97:0","text":" Set the schema version to the latest\n @notice only lock manager call call this"},"functionSelector":"f32e8b24","id":1888,"implemented":false,"kind":"function","modifiers":[],"name":"updateSchemaVersion","nameLocation":"57600:19:0","nodeType":"FunctionDefinition","parameters":{"id":1886,"nodeType":"ParameterList","parameters":[],"src":"57619:2:0"},"returnParameters":{"id":1887,"nodeType":"ParameterList","parameters":[],"src":"57630:0:0"},"scope":1907,"src":"57591:40:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1889,"nodeType":"StructuredDocumentation","src":"57635:210:0","text":" Renew a given token\n @notice only works for non-free, expiring, ERC20 locks\n @param _tokenId the ID fo the token to renew\n @param _referrer the address of the person to be granted UDT"},"functionSelector":"8505fe95","id":1896,"implemented":false,"kind":"function","modifiers":[],"name":"renewMembershipFor","nameLocation":"57857:18:0","nodeType":"FunctionDefinition","parameters":{"id":1894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"mutability":"mutable","name":"_tokenId","nameLocation":"57881:8:0","nodeType":"VariableDeclaration","scope":1896,"src":"57876:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1890,"name":"uint","nodeType":"ElementaryTypeName","src":"57876:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1893,"mutability":"mutable","name":"_referrer","nameLocation":"57899:9:0","nodeType":"VariableDeclaration","scope":1896,"src":"57891:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1892,"name":"address","nodeType":"ElementaryTypeName","src":"57891:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"57875:34:0"},"returnParameters":{"id":1895,"nodeType":"ParameterList","parameters":[],"src":"57918:0:0"},"scope":1907,"src":"57848:71:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1897,"nodeType":"StructuredDocumentation","src":"57923:505:0","text":" @dev helper to check if a key is currently renewable\n it will revert if the pricing or duration of the lock have been modified\n unfavorably since the key was bought(price increase or duration decrease).\n It will also revert if a lock is not renewable or if the key is not ready for renewal yet\n (at least 90% expired).\n @param tokenId the id of the token to check\n @param referrer the address where to send the referrer fee\n @return true if the terms has changed"},"functionSelector":"50878a47","id":1906,"implemented":false,"kind":"function","modifiers":[],"name":"isRenewable","nameLocation":"58440:11:0","nodeType":"FunctionDefinition","parameters":{"id":1902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1899,"mutability":"mutable","name":"tokenId","nameLocation":"58465:7:0","nodeType":"VariableDeclaration","scope":1906,"src":"58457:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1898,"name":"uint256","nodeType":"ElementaryTypeName","src":"58457:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1901,"mutability":"mutable","name":"referrer","nameLocation":"58486:8:0","nodeType":"VariableDeclaration","scope":1906,"src":"58478:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1900,"name":"address","nodeType":"ElementaryTypeName","src":"58478:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58451:47:0"},"returnParameters":{"id":1905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1906,"src":"58522:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1903,"name":"bool","nodeType":"ElementaryTypeName","src":"58522:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"58521:6:0"},"scope":1907,"src":"58431:97:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3994,"src":"34897:23633:0","usedErrors":[],"usedEvents":[]},{"id":1908,"literals":["solidity",">=","0.5",".0"],"nodeType":"PragmaDirective","src":"58583:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IUniswapOracleV3","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1948,"linearizedBaseContracts":[1948],"name":"IUniswapOracleV3","nameLocation":"58619:16:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"b4d1d795","id":1913,"implemented":false,"kind":"function","modifiers":[],"name":"PERIOD","nameLocation":"58649:6:0","nodeType":"FunctionDefinition","parameters":{"id":1909,"nodeType":"ParameterList","parameters":[],"src":"58655:2:0"},"returnParameters":{"id":1912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1911,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1913,"src":"58676:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1910,"name":"uint256","nodeType":"ElementaryTypeName","src":"58676:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"58675:9:0"},"scope":1948,"src":"58640:45:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c45a0155","id":1918,"implemented":false,"kind":"function","modifiers":[],"name":"factory","nameLocation":"58698:7:0","nodeType":"FunctionDefinition","parameters":{"id":1914,"nodeType":"ParameterList","parameters":[],"src":"58705:2:0"},"returnParameters":{"id":1917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1918,"src":"58726:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"58726:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58725:9:0"},"scope":1948,"src":"58689:46:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c640752d","id":1925,"implemented":false,"kind":"function","modifiers":[],"name":"update","nameLocation":"58748:6:0","nodeType":"FunctionDefinition","parameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1920,"mutability":"mutable","name":"_tokenIn","nameLocation":"58763:8:0","nodeType":"VariableDeclaration","scope":1925,"src":"58755:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1919,"name":"address","nodeType":"ElementaryTypeName","src":"58755:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1922,"mutability":"mutable","name":"_tokenOut","nameLocation":"58781:9:0","nodeType":"VariableDeclaration","scope":1925,"src":"58773:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1921,"name":"address","nodeType":"ElementaryTypeName","src":"58773:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58754:37:0"},"returnParameters":{"id":1924,"nodeType":"ParameterList","parameters":[],"src":"58800:0:0"},"scope":1948,"src":"58739:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"8c86f1e4","id":1936,"implemented":false,"kind":"function","modifiers":[],"name":"consult","nameLocation":"58814:7:0","nodeType":"FunctionDefinition","parameters":{"id":1932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"_tokenIn","nameLocation":"58835:8:0","nodeType":"VariableDeclaration","scope":1936,"src":"58827:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1926,"name":"address","nodeType":"ElementaryTypeName","src":"58827:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1929,"mutability":"mutable","name":"_amountIn","nameLocation":"58857:9:0","nodeType":"VariableDeclaration","scope":1936,"src":"58849:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1928,"name":"uint256","nodeType":"ElementaryTypeName","src":"58849:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1931,"mutability":"mutable","name":"_tokenOut","nameLocation":"58880:9:0","nodeType":"VariableDeclaration","scope":1936,"src":"58872:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1930,"name":"address","nodeType":"ElementaryTypeName","src":"58872:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58821:72:0"},"returnParameters":{"id":1935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1934,"mutability":"mutable","name":"_amountOut","nameLocation":"58925:10:0","nodeType":"VariableDeclaration","scope":1936,"src":"58917:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1933,"name":"uint256","nodeType":"ElementaryTypeName","src":"58917:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"58916:20:0"},"scope":1948,"src":"58805:132:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"c1e553e7","id":1947,"implemented":false,"kind":"function","modifiers":[],"name":"updateAndConsult","nameLocation":"58950:16:0","nodeType":"FunctionDefinition","parameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1938,"mutability":"mutable","name":"_tokenIn","nameLocation":"58980:8:0","nodeType":"VariableDeclaration","scope":1947,"src":"58972:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1937,"name":"address","nodeType":"ElementaryTypeName","src":"58972:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1940,"mutability":"mutable","name":"_amountIn","nameLocation":"59002:9:0","nodeType":"VariableDeclaration","scope":1947,"src":"58994:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1939,"name":"uint256","nodeType":"ElementaryTypeName","src":"58994:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1942,"mutability":"mutable","name":"_tokenOut","nameLocation":"59025:9:0","nodeType":"VariableDeclaration","scope":1947,"src":"59017:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1941,"name":"address","nodeType":"ElementaryTypeName","src":"59017:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"58966:72:0"},"returnParameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1945,"mutability":"mutable","name":"_amountOut","nameLocation":"59065:10:0","nodeType":"VariableDeclaration","scope":1947,"src":"59057:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1944,"name":"uint256","nodeType":"ElementaryTypeName","src":"59057:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"59056:20:0"},"scope":1948,"src":"58941:136:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3994,"src":"58609:470:0","usedErrors":[],"usedEvents":[]},{"id":1949,"literals":["solidity",">=","0.5",".17","<","0.9",".0"],"nodeType":"PragmaDirective","src":"59123:32:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IUnlock","contractDependencies":[],"contractKind":"interface","documentation":{"id":1950,"nodeType":"StructuredDocumentation","src":"59157:39:0","text":" @title The Unlock Interface*"},"fullyImplemented":false,"id":2258,"linearizedBaseContracts":[2258],"name":"IUnlock","nameLocation":"59208:7:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"c4d66de8","id":1955,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"59322:10:0","nodeType":"FunctionDefinition","parameters":{"id":1953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1952,"mutability":"mutable","name":"_unlockOwner","nameLocation":"59341:12:0","nodeType":"VariableDeclaration","scope":1955,"src":"59333:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1951,"name":"address","nodeType":"ElementaryTypeName","src":"59333:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"59332:22:0"},"returnParameters":{"id":1954,"nodeType":"ParameterList","parameters":[],"src":"59363:0:0"},"scope":2258,"src":"59313:51:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1956,"nodeType":"StructuredDocumentation","src":"59368:70:0","text":" @dev deploy a ProxyAdmin contract used to upgrade locks"},"functionSelector":"c7d7d0c9","id":1959,"implemented":false,"kind":"function","modifiers":[],"name":"initializeProxyAdmin","nameLocation":"59450:20:0","nodeType":"FunctionDefinition","parameters":{"id":1957,"nodeType":"ParameterList","parameters":[],"src":"59470:2:0"},"returnParameters":{"id":1958,"nodeType":"ParameterList","parameters":[],"src":"59481:0:0"},"scope":2258,"src":"59441:41:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1960,"nodeType":"StructuredDocumentation","src":"59486:157:0","text":" Retrieve the contract address of the proxy admin that manages the locks\n @return _proxyAdminAddress the address of the ProxyAdmin instance"},"functionSelector":"5979e755","id":1965,"implemented":false,"kind":"function","modifiers":[],"name":"proxyAdminAddress","nameLocation":"59655:17:0","nodeType":"FunctionDefinition","parameters":{"id":1961,"nodeType":"ParameterList","parameters":[],"src":"59672:2:0"},"returnParameters":{"id":1964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1963,"mutability":"mutable","name":"_proxyAdminAddress","nameLocation":"59718:18:0","nodeType":"VariableDeclaration","scope":1965,"src":"59710:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1962,"name":"address","nodeType":"ElementaryTypeName","src":"59710:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"59709:28:0"},"scope":2258,"src":"59646:92:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1966,"nodeType":"StructuredDocumentation","src":"59742:708:0","text":" @notice Create lock (legacy)\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param _expirationDuration the duration of the lock (pass 0 for unlimited duration)\n @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n @param _keyPrice the price of each key\n @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n @param _lockName the name of the lock\n param _salt [deprec] -- kept only for backwards copatibility\n This may be implemented as a sequence ID or with RNG. It's used with `create2`\n to know the lock's address before the transaction is mined.\n @dev internally call `createUpgradeableLock`"},"functionSelector":"42d92106","id":1983,"implemented":false,"kind":"function","modifiers":[],"name":"createLock","nameLocation":"60462:10:0","nodeType":"FunctionDefinition","parameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1968,"mutability":"mutable","name":"_expirationDuration","nameLocation":"60483:19:0","nodeType":"VariableDeclaration","scope":1983,"src":"60478:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1967,"name":"uint","nodeType":"ElementaryTypeName","src":"60478:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1970,"mutability":"mutable","name":"_tokenAddress","nameLocation":"60516:13:0","nodeType":"VariableDeclaration","scope":1983,"src":"60508:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1969,"name":"address","nodeType":"ElementaryTypeName","src":"60508:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1972,"mutability":"mutable","name":"_keyPrice","nameLocation":"60540:9:0","nodeType":"VariableDeclaration","scope":1983,"src":"60535:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1971,"name":"uint","nodeType":"ElementaryTypeName","src":"60535:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1974,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"60560:16:0","nodeType":"VariableDeclaration","scope":1983,"src":"60555:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1973,"name":"uint","nodeType":"ElementaryTypeName","src":"60555:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1976,"mutability":"mutable","name":"_lockName","nameLocation":"60598:9:0","nodeType":"VariableDeclaration","scope":1983,"src":"60582:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":1975,"name":"string","nodeType":"ElementaryTypeName","src":"60582:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":1978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1983,"src":"60613:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"},"typeName":{"id":1977,"name":"bytes12","nodeType":"ElementaryTypeName","src":"60613:7:0","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"}},"visibility":"internal"}],"src":"60472:161:0"},"returnParameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1983,"src":"60652:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1980,"name":"address","nodeType":"ElementaryTypeName","src":"60652:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"60651:9:0"},"scope":2258,"src":"60453:208:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1984,"nodeType":"StructuredDocumentation","src":"60665:572:0","text":" @notice Create lock (default)\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param data bytes containing the call to initialize the lock template\n @dev this call is passed as encoded function - for instance:\n bytes memory data = abi.encodeWithSignature(\n 'initialize(address,uint256,address,uint256,uint256,string)',\n msg.sender,\n _expirationDuration,\n _tokenAddress,\n _keyPrice,\n _maxNumberOfKeys,\n _lockName\n );\n @return address of the create lock"},"functionSelector":"4452c2b2","id":1991,"implemented":false,"kind":"function","modifiers":[],"name":"createUpgradeableLock","nameLocation":"61249:21:0","nodeType":"FunctionDefinition","parameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1986,"mutability":"mutable","name":"data","nameLocation":"61284:4:0","nodeType":"VariableDeclaration","scope":1991,"src":"61271:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1985,"name":"bytes","nodeType":"ElementaryTypeName","src":"61271:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"61270:19:0"},"returnParameters":{"id":1990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1991,"src":"61308:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1988,"name":"address","nodeType":"ElementaryTypeName","src":"61308:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"61307:9:0"},"scope":2258,"src":"61240:77:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1992,"nodeType":"StructuredDocumentation","src":"61321:263:0","text":" Create an upgradeable lock using a specific PublicLock version\n @param data bytes containing the call to initialize the lock template\n (refer to createUpgradeableLock for more details)\n @param _lockVersion the version of the lock to use"},"functionSelector":"487a8a76","id":2001,"implemented":false,"kind":"function","modifiers":[],"name":"createUpgradeableLockAtVersion","nameLocation":"61596:30:0","nodeType":"FunctionDefinition","parameters":{"id":1997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1994,"mutability":"mutable","name":"data","nameLocation":"61645:4:0","nodeType":"VariableDeclaration","scope":2001,"src":"61632:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1993,"name":"bytes","nodeType":"ElementaryTypeName","src":"61632:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1996,"mutability":"mutable","name":"_lockVersion","nameLocation":"61662:12:0","nodeType":"VariableDeclaration","scope":2001,"src":"61655:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1995,"name":"uint16","nodeType":"ElementaryTypeName","src":"61655:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"61626:52:0"},"returnParameters":{"id":2000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2001,"src":"61697:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1998,"name":"address","nodeType":"ElementaryTypeName","src":"61697:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"61696:9:0"},"scope":2258,"src":"61587:119:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2002,"nodeType":"StructuredDocumentation","src":"61710:309:0","text":" @notice Upgrade a lock to a specific version\n @dev only available for publicLockVersion > 10 (proxyAdmin /required)\n @param lockAddress the existing lock address\n @param version the version number you are targeting\n Likely implemented with OpenZeppelin TransparentProxy contract"},"functionSelector":"ccf54648","id":2011,"implemented":false,"kind":"function","modifiers":[],"name":"upgradeLock","nameLocation":"62031:11:0","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2004,"mutability":"mutable","name":"lockAddress","nameLocation":"62064:11:0","nodeType":"VariableDeclaration","scope":2011,"src":"62048:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2003,"name":"address","nodeType":"ElementaryTypeName","src":"62048:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2006,"mutability":"mutable","name":"version","nameLocation":"62088:7:0","nodeType":"VariableDeclaration","scope":2011,"src":"62081:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2005,"name":"uint16","nodeType":"ElementaryTypeName","src":"62081:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"62042:57:0"},"returnParameters":{"id":2010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2011,"src":"62118:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2008,"name":"address","nodeType":"ElementaryTypeName","src":"62118:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"62117:9:0"},"scope":2258,"src":"62022:105:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2012,"nodeType":"StructuredDocumentation","src":"62131:356:0","text":" This function keeps track of the added GDP, as well as grants of discount tokens\n to the referrer, if applicable.\n The number of discount tokens granted is based on the value of the referal,\n the current growth rate and the lock's discount token distribution rate\n This function is invoked by a previously deployed lock only."},"functionSelector":"939d9f1f","id":2019,"implemented":false,"kind":"function","modifiers":[],"name":"recordKeyPurchase","nameLocation":"62499:17:0","nodeType":"FunctionDefinition","parameters":{"id":2017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2014,"mutability":"mutable","name":"_value","nameLocation":"62527:6:0","nodeType":"VariableDeclaration","scope":2019,"src":"62522:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2013,"name":"uint","nodeType":"ElementaryTypeName","src":"62522:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2016,"mutability":"mutable","name":"_referrer","nameLocation":"62547:9:0","nodeType":"VariableDeclaration","scope":2019,"src":"62539:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2015,"name":"address","nodeType":"ElementaryTypeName","src":"62539:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"62516:83:0"},"returnParameters":{"id":2018,"nodeType":"ParameterList","parameters":[],"src":"62608:0:0"},"scope":2258,"src":"62490:119:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2020,"nodeType":"StructuredDocumentation","src":"62613:436:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] Kept for backwards compatibility\n This function will keep track of consumed discounts by a given user.\n It will also grant discount tokens to the creator who is granting the discount based on the\n amount of discount and compensation rate.\n This function is invoked by a previously deployed lock only."},"functionSelector":"36524663","id":2027,"implemented":false,"kind":"function","modifiers":[],"name":"recordConsumedDiscount","nameLocation":"63061:22:0","nodeType":"FunctionDefinition","parameters":{"id":2025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2022,"mutability":"mutable","name":"_discount","nameLocation":"63094:9:0","nodeType":"VariableDeclaration","scope":2027,"src":"63089:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2021,"name":"uint","nodeType":"ElementaryTypeName","src":"63089:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2024,"mutability":"mutable","name":"_tokens","nameLocation":"63114:7:0","nodeType":"VariableDeclaration","scope":2027,"src":"63109:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2023,"name":"uint","nodeType":"ElementaryTypeName","src":"63109:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63083:81:0"},"returnParameters":{"id":2026,"nodeType":"ParameterList","parameters":[],"src":"63178:0:0"},"scope":2258,"src":"63052:127:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2028,"nodeType":"StructuredDocumentation","src":"63183:385:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] Kept for backwards compatibility\n This function returns the discount available for a user, when purchasing a\n a key from a lock.\n This does not modify the state. It returns both the discount and the number of tokens\n consumed to grant that discount."},"functionSelector":"0cb175e3","id":2039,"implemented":false,"kind":"function","modifiers":[],"name":"computeAvailableDiscountFor","nameLocation":"63580:27:0","nodeType":"FunctionDefinition","parameters":{"id":2033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2030,"mutability":"mutable","name":"_purchaser","nameLocation":"63621:10:0","nodeType":"VariableDeclaration","scope":2039,"src":"63613:18:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2029,"name":"address","nodeType":"ElementaryTypeName","src":"63613:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2032,"mutability":"mutable","name":"_keyPrice","nameLocation":"63681:9:0","nodeType":"VariableDeclaration","scope":2039,"src":"63676:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2031,"name":"uint","nodeType":"ElementaryTypeName","src":"63676:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63607:126:0"},"returnParameters":{"id":2038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2035,"mutability":"mutable","name":"discount","nameLocation":"63762:8:0","nodeType":"VariableDeclaration","scope":2039,"src":"63757:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2034,"name":"uint","nodeType":"ElementaryTypeName","src":"63757:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2037,"mutability":"mutable","name":"tokens","nameLocation":"63777:6:0","nodeType":"VariableDeclaration","scope":2039,"src":"63772:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2036,"name":"uint","nodeType":"ElementaryTypeName","src":"63772:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"63756:28:0"},"scope":2258,"src":"63571:214:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"a998e9fb","id":2044,"implemented":false,"kind":"function","modifiers":[],"name":"globalBaseTokenURI","nameLocation":"63846:18:0","nodeType":"FunctionDefinition","parameters":{"id":2040,"nodeType":"ParameterList","parameters":[],"src":"63864:2:0"},"returnParameters":{"id":2043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2044,"src":"63890:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2041,"name":"string","nodeType":"ElementaryTypeName","src":"63890:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"63889:15:0"},"scope":2258,"src":"63837:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2045,"nodeType":"StructuredDocumentation","src":"63909:103:0","text":" @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks."},"functionSelector":"7ff94bb2","id":2050,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalBaseTokenURI","nameLocation":"64024:21:0","nodeType":"FunctionDefinition","parameters":{"id":2046,"nodeType":"ParameterList","parameters":[],"src":"64045:2:0"},"returnParameters":{"id":2049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2050,"src":"64071:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2047,"name":"string","nodeType":"ElementaryTypeName","src":"64071:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"64070:15:0"},"scope":2258,"src":"64015:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"cec41052","id":2055,"implemented":false,"kind":"function","modifiers":[],"name":"globalTokenSymbol","nameLocation":"64150:17:0","nodeType":"FunctionDefinition","parameters":{"id":2051,"nodeType":"ParameterList","parameters":[],"src":"64167:2:0"},"returnParameters":{"id":2054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2055,"src":"64193:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2052,"name":"string","nodeType":"ElementaryTypeName","src":"64193:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"64192:15:0"},"scope":2258,"src":"64141:67:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"9a8a0592","id":2060,"implemented":false,"kind":"function","modifiers":[],"name":"chainId","nameLocation":"64262:7:0","nodeType":"FunctionDefinition","parameters":{"id":2056,"nodeType":"ParameterList","parameters":[],"src":"64269:2:0"},"returnParameters":{"id":2059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2060,"src":"64295:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2057,"name":"uint","nodeType":"ElementaryTypeName","src":"64295:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"64294:6:0"},"scope":2258,"src":"64253:48:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2061,"nodeType":"StructuredDocumentation","src":"64305:102:0","text":" @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks."},"functionSelector":"35a750de","id":2066,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalTokenSymbol","nameLocation":"64419:20:0","nodeType":"FunctionDefinition","parameters":{"id":2062,"nodeType":"ParameterList","parameters":[],"src":"64439:2:0"},"returnParameters":{"id":2065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2066,"src":"64465:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2063,"name":"string","nodeType":"ElementaryTypeName","src":"64465:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"64464:15:0"},"scope":2258,"src":"64410:70:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2067,"nodeType":"StructuredDocumentation","src":"64484:73:0","text":" @notice Allows the owner to update configuration variables"},"functionSelector":"7d8fb641","id":2082,"implemented":false,"kind":"function","modifiers":[],"name":"configUnlock","nameLocation":"64569:12:0","nodeType":"FunctionDefinition","parameters":{"id":2080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2069,"mutability":"mutable","name":"_udt","nameLocation":"64595:4:0","nodeType":"VariableDeclaration","scope":2082,"src":"64587:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2068,"name":"address","nodeType":"ElementaryTypeName","src":"64587:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2071,"mutability":"mutable","name":"_weth","nameLocation":"64613:5:0","nodeType":"VariableDeclaration","scope":2082,"src":"64605:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2070,"name":"address","nodeType":"ElementaryTypeName","src":"64605:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2073,"mutability":"mutable","name":"_estimatedGasForPurchase","nameLocation":"64629:24:0","nodeType":"VariableDeclaration","scope":2082,"src":"64624:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2072,"name":"uint","nodeType":"ElementaryTypeName","src":"64624:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2075,"mutability":"mutable","name":"_symbol","nameLocation":"64675:7:0","nodeType":"VariableDeclaration","scope":2082,"src":"64659:23:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2074,"name":"string","nodeType":"ElementaryTypeName","src":"64659:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"_URI","nameLocation":"64704:4:0","nodeType":"VariableDeclaration","scope":2082,"src":"64688:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2076,"name":"string","nodeType":"ElementaryTypeName","src":"64688:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2079,"mutability":"mutable","name":"_chainId","nameLocation":"64719:8:0","nodeType":"VariableDeclaration","scope":2082,"src":"64714:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2078,"name":"uint","nodeType":"ElementaryTypeName","src":"64714:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"64581:150:0"},"returnParameters":{"id":2081,"nodeType":"ParameterList","parameters":[],"src":"64740:0:0"},"scope":2258,"src":"64560:181:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2083,"nodeType":"StructuredDocumentation","src":"64745:156:0","text":" @notice Add a PublicLock template to be used for future calls to `createLock`.\n @dev This is used to upgrade conytract per version number"},"functionSelector":"caeee3a3","id":2090,"implemented":false,"kind":"function","modifiers":[],"name":"addLockTemplate","nameLocation":"64913:15:0","nodeType":"FunctionDefinition","parameters":{"id":2088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2085,"mutability":"mutable","name":"impl","nameLocation":"64937:4:0","nodeType":"VariableDeclaration","scope":2090,"src":"64929:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2084,"name":"address","nodeType":"ElementaryTypeName","src":"64929:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2087,"mutability":"mutable","name":"version","nameLocation":"64950:7:0","nodeType":"VariableDeclaration","scope":2090,"src":"64943:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2086,"name":"uint16","nodeType":"ElementaryTypeName","src":"64943:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"64928:30:0"},"returnParameters":{"id":2089,"nodeType":"ParameterList","parameters":[],"src":"64967:0:0"},"scope":2258,"src":"64904:64:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2091,"nodeType":"StructuredDocumentation","src":"64972:185:0","text":" Match lock templates addresses with version numbers\n @param _version the number of the version of the template\n @return _implAddress address of the lock templates"},"functionSelector":"666018a5","id":2098,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockImpls","nameLocation":"65169:15:0","nodeType":"FunctionDefinition","parameters":{"id":2094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2093,"mutability":"mutable","name":"_version","nameLocation":"65197:8:0","nodeType":"VariableDeclaration","scope":2098,"src":"65190:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2092,"name":"uint16","nodeType":"ElementaryTypeName","src":"65190:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"65184:25:0"},"returnParameters":{"id":2097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"mutability":"mutable","name":"_implAddress","nameLocation":"65241:12:0","nodeType":"VariableDeclaration","scope":2098,"src":"65233:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2095,"name":"address","nodeType":"ElementaryTypeName","src":"65233:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"65232:22:0"},"scope":2258,"src":"65160:95:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2099,"nodeType":"StructuredDocumentation","src":"65259:208:0","text":" Match version numbers with lock templates addresses\n @param _impl the address of the deployed template contract (PublicLock)\n @return number of the version corresponding to this address"},"functionSelector":"25772ad9","id":2106,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockVersions","nameLocation":"65479:18:0","nodeType":"FunctionDefinition","parameters":{"id":2102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"_impl","nameLocation":"65506:5:0","nodeType":"VariableDeclaration","scope":2106,"src":"65498:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2100,"name":"address","nodeType":"ElementaryTypeName","src":"65498:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"65497:15:0"},"returnParameters":{"id":2105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2104,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2106,"src":"65536:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2103,"name":"uint16","nodeType":"ElementaryTypeName","src":"65536:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"65535:8:0"},"scope":2258,"src":"65470:74:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2107,"nodeType":"StructuredDocumentation","src":"65548:155:0","text":" Retrive the latest existing lock template version\n @return _version the version number of the latest template (used to deploy contracts)"},"functionSelector":"cd93b532","id":2112,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockLatestVersion","nameLocation":"65715:23:0","nodeType":"FunctionDefinition","parameters":{"id":2108,"nodeType":"ParameterList","parameters":[],"src":"65738:2:0"},"returnParameters":{"id":2111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2110,"mutability":"mutable","name":"_version","nameLocation":"65771:8:0","nodeType":"VariableDeclaration","scope":2112,"src":"65764:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2109,"name":"uint16","nodeType":"ElementaryTypeName","src":"65764:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"65763:17:0"},"scope":2258,"src":"65706:75:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2113,"nodeType":"StructuredDocumentation","src":"65785:158:0","text":" @notice Upgrade the PublicLock template used for future calls to `createLock`.\n @dev This will initialize the template and revokeOwnership."},"functionSelector":"ef67fde6","id":2118,"implemented":false,"kind":"function","modifiers":[],"name":"setLockTemplate","nameLocation":"65955:15:0","nodeType":"FunctionDefinition","parameters":{"id":2116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2115,"mutability":"mutable","name":"_publicLockAddress","nameLocation":"65987:18:0","nodeType":"VariableDeclaration","scope":2118,"src":"65971:34:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2114,"name":"address","nodeType":"ElementaryTypeName","src":"65971:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"65970:36:0"},"returnParameters":{"id":2117,"nodeType":"ParameterList","parameters":[],"src":"66015:0:0"},"scope":2258,"src":"65946:70:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"963a9478","id":2125,"implemented":false,"kind":"function","modifiers":[],"name":"resetTrackedValue","nameLocation":"66101:17:0","nodeType":"FunctionDefinition","parameters":{"id":2123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2120,"mutability":"mutable","name":"_grossNetworkProduct","nameLocation":"66129:20:0","nodeType":"VariableDeclaration","scope":2125,"src":"66124:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2119,"name":"uint","nodeType":"ElementaryTypeName","src":"66124:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2122,"mutability":"mutable","name":"_totalDiscountGranted","nameLocation":"66160:21:0","nodeType":"VariableDeclaration","scope":2125,"src":"66155:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2121,"name":"uint","nodeType":"ElementaryTypeName","src":"66155:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66118:67:0"},"returnParameters":{"id":2124,"nodeType":"ParameterList","parameters":[],"src":"66194:0:0"},"scope":2258,"src":"66092:103:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d6e9e803","id":2130,"implemented":false,"kind":"function","modifiers":[],"name":"grossNetworkProduct","nameLocation":"66208:19:0","nodeType":"FunctionDefinition","parameters":{"id":2126,"nodeType":"ParameterList","parameters":[],"src":"66227:2:0"},"returnParameters":{"id":2129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2130,"src":"66253:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2127,"name":"uint","nodeType":"ElementaryTypeName","src":"66253:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66252:6:0"},"scope":2258,"src":"66199:60:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a082eb0e","id":2135,"implemented":false,"kind":"function","modifiers":[],"name":"totalDiscountGranted","nameLocation":"66272:20:0","nodeType":"FunctionDefinition","parameters":{"id":2131,"nodeType":"ParameterList","parameters":[],"src":"66292:2:0"},"returnParameters":{"id":2134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2135,"src":"66318:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2132,"name":"uint","nodeType":"ElementaryTypeName","src":"66318:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66317:6:0"},"scope":2258,"src":"66263:61:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"5de9a137","id":2146,"implemented":false,"kind":"function","modifiers":[],"name":"locks","nameLocation":"66337:5:0","nodeType":"FunctionDefinition","parameters":{"id":2138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2146,"src":"66348:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2136,"name":"address","nodeType":"ElementaryTypeName","src":"66348:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66342:17:0"},"returnParameters":{"id":2145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2140,"mutability":"mutable","name":"deployed","nameLocation":"66400:8:0","nodeType":"VariableDeclaration","scope":2146,"src":"66395:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2139,"name":"bool","nodeType":"ElementaryTypeName","src":"66395:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2142,"mutability":"mutable","name":"totalSales","nameLocation":"66415:10:0","nodeType":"VariableDeclaration","scope":2146,"src":"66410:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2141,"name":"uint","nodeType":"ElementaryTypeName","src":"66410:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2144,"mutability":"mutable","name":"yieldedDiscountTokens","nameLocation":"66432:21:0","nodeType":"VariableDeclaration","scope":2146,"src":"66427:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2143,"name":"uint","nodeType":"ElementaryTypeName","src":"66427:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"66394:60:0"},"scope":2258,"src":"66328:127:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"f8328991","id":2151,"implemented":false,"kind":"function","modifiers":[],"name":"publicLockAddress","nameLocation":"66547:17:0","nodeType":"FunctionDefinition","parameters":{"id":2147,"nodeType":"ParameterList","parameters":[],"src":"66564:2:0"},"returnParameters":{"id":2150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2151,"src":"66590:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2148,"name":"address","nodeType":"ElementaryTypeName","src":"66590:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66589:9:0"},"scope":2258,"src":"66538:61:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6bced5a2","id":2158,"implemented":false,"kind":"function","modifiers":[],"name":"uniswapOracles","nameLocation":"66721:14:0","nodeType":"FunctionDefinition","parameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2153,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2158,"src":"66736:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2152,"name":"address","nodeType":"ElementaryTypeName","src":"66736:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66735:9:0"},"returnParameters":{"id":2157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2158,"src":"66768:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2155,"name":"address","nodeType":"ElementaryTypeName","src":"66768:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66767:9:0"},"scope":2258,"src":"66712:65:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3fc8cef3","id":2163,"implemented":false,"kind":"function","modifiers":[],"name":"weth","nameLocation":"66847:4:0","nodeType":"FunctionDefinition","parameters":{"id":2159,"nodeType":"ParameterList","parameters":[],"src":"66851:2:0"},"returnParameters":{"id":2162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2163,"src":"66877:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2160,"name":"address","nodeType":"ElementaryTypeName","src":"66877:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66876:9:0"},"scope":2258,"src":"66838:48:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"262d0a85","id":2168,"implemented":false,"kind":"function","modifiers":[],"name":"udt","nameLocation":"66959:3:0","nodeType":"FunctionDefinition","parameters":{"id":2164,"nodeType":"ParameterList","parameters":[],"src":"66962:2:0"},"returnParameters":{"id":2167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2168,"src":"66988:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2165,"name":"address","nodeType":"ElementaryTypeName","src":"66988:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"66987:9:0"},"scope":2258,"src":"66950:47:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"743bbc2f","id":2173,"implemented":false,"kind":"function","modifiers":[],"name":"estimatedGasForPurchase","nameLocation":"67067:23:0","nodeType":"FunctionDefinition","parameters":{"id":2169,"nodeType":"ParameterList","parameters":[],"src":"67090:2:0"},"returnParameters":{"id":2172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2173,"src":"67116:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2170,"name":"uint","nodeType":"ElementaryTypeName","src":"67116:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67115:6:0"},"scope":2258,"src":"67058:64:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2174,"nodeType":"StructuredDocumentation","src":"67126:208:0","text":" Helper to get the network mining basefee as introduced in EIP-1559\n @dev this helper can be wrapped in try/catch statement to avoid\n revert in networks where EIP-1559 is not implemented"},"functionSelector":"ba5ea0d5","id":2179,"implemented":false,"kind":"function","modifiers":[],"name":"networkBaseFee","nameLocation":"67346:14:0","nodeType":"FunctionDefinition","parameters":{"id":2175,"nodeType":"ParameterList","parameters":[],"src":"67360:2:0"},"returnParameters":{"id":2178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2177,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2179,"src":"67386:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2176,"name":"uint","nodeType":"ElementaryTypeName","src":"67386:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"67385:6:0"},"scope":2258,"src":"67337:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"4220bd46","id":2184,"implemented":false,"kind":"function","modifiers":[],"name":"unlockVersion","nameLocation":"67482:13:0","nodeType":"FunctionDefinition","parameters":{"id":2180,"nodeType":"ParameterList","parameters":[],"src":"67495:2:0"},"returnParameters":{"id":2183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2182,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2184,"src":"67521:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2181,"name":"uint16","nodeType":"ElementaryTypeName","src":"67521:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"67520:8:0"},"scope":2258,"src":"67473:56:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2185,"nodeType":"StructuredDocumentation","src":"67533:259:0","text":" @notice allows the owner to set the oracle address to use for value conversions\n setting the _oracleAddress to address(0) removes support for the token\n @dev This will also call update to ensure at least one datapoint has been recorded."},"functionSelector":"5c38eb3a","id":2192,"implemented":false,"kind":"function","modifiers":[],"name":"setOracle","nameLocation":"67804:9:0","nodeType":"FunctionDefinition","parameters":{"id":2190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2187,"mutability":"mutable","name":"_tokenAddress","nameLocation":"67822:13:0","nodeType":"VariableDeclaration","scope":2192,"src":"67814:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2186,"name":"address","nodeType":"ElementaryTypeName","src":"67814:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"_oracleAddress","nameLocation":"67845:14:0","nodeType":"VariableDeclaration","scope":2192,"src":"67837:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2188,"name":"address","nodeType":"ElementaryTypeName","src":"67837:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"67813:47:0"},"returnParameters":{"id":2191,"nodeType":"ParameterList","parameters":[],"src":"67869:0:0"},"scope":2258,"src":"67795:75:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b0ca0c83","id":2197,"implemented":false,"kind":"function","modifiers":[],"name":"__initializeOwnable","nameLocation":"67973:19:0","nodeType":"FunctionDefinition","parameters":{"id":2195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2194,"mutability":"mutable","name":"sender","nameLocation":"68001:6:0","nodeType":"VariableDeclaration","scope":2197,"src":"67993:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2193,"name":"address","nodeType":"ElementaryTypeName","src":"67993:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"67992:16:0"},"returnParameters":{"id":2196,"nodeType":"ParameterList","parameters":[],"src":"68017:0:0"},"scope":2258,"src":"67964:54:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2198,"nodeType":"StructuredDocumentation","src":"68022:68:0","text":" @dev Returns true if the caller is the current owner."},"functionSelector":"8f32d59b","id":2203,"implemented":false,"kind":"function","modifiers":[],"name":"isOwner","nameLocation":"68102:7:0","nodeType":"FunctionDefinition","parameters":{"id":2199,"nodeType":"ParameterList","parameters":[],"src":"68109:2:0"},"returnParameters":{"id":2202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2203,"src":"68135:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2200,"name":"bool","nodeType":"ElementaryTypeName","src":"68135:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"68134:6:0"},"scope":2258,"src":"68093:48:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2204,"nodeType":"StructuredDocumentation","src":"68145:61:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":2209,"implemented":false,"kind":"function","modifiers":[],"name":"owner","nameLocation":"68218:5:0","nodeType":"FunctionDefinition","parameters":{"id":2205,"nodeType":"ParameterList","parameters":[],"src":"68223:2:0"},"returnParameters":{"id":2208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2209,"src":"68249:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2206,"name":"address","nodeType":"ElementaryTypeName","src":"68249:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"68248:9:0"},"scope":2258,"src":"68209:49:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2210,"nodeType":"StructuredDocumentation","src":"68262:319:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":2213,"implemented":false,"kind":"function","modifiers":[],"name":"renounceOwnership","nameLocation":"68593:17:0","nodeType":"FunctionDefinition","parameters":{"id":2211,"nodeType":"ParameterList","parameters":[],"src":"68610:2:0"},"returnParameters":{"id":2212,"nodeType":"ParameterList","parameters":[],"src":"68621:0:0"},"scope":2258,"src":"68584:38:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2214,"nodeType":"StructuredDocumentation","src":"68626:132:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":2219,"implemented":false,"kind":"function","modifiers":[],"name":"transferOwnership","nameLocation":"68770:17:0","nodeType":"FunctionDefinition","parameters":{"id":2217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2216,"mutability":"mutable","name":"newOwner","nameLocation":"68796:8:0","nodeType":"VariableDeclaration","scope":2219,"src":"68788:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2215,"name":"address","nodeType":"ElementaryTypeName","src":"68788:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"68787:18:0"},"returnParameters":{"id":2218,"nodeType":"ParameterList","parameters":[],"src":"68814:0:0"},"scope":2258,"src":"68761:54:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2220,"nodeType":"StructuredDocumentation","src":"68819:99:0","text":" Set the fee collected by the protocol\n @param _protocolFee fee (in basis points)"},"functionSelector":"787dce3d","id":2225,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFee","nameLocation":"68930:14:0","nodeType":"FunctionDefinition","parameters":{"id":2223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2222,"mutability":"mutable","name":"_protocolFee","nameLocation":"68950:12:0","nodeType":"VariableDeclaration","scope":2225,"src":"68945:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2221,"name":"uint","nodeType":"ElementaryTypeName","src":"68945:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"68944:19:0"},"returnParameters":{"id":2224,"nodeType":"ParameterList","parameters":[],"src":"68972:0:0"},"scope":2258,"src":"68921:52:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2226,"nodeType":"StructuredDocumentation","src":"68977:163:0","text":" The fee (in basis points) collected by the protocol on each purchase / \nextension / renewal of a key\n @return the protocol fee in basic point"},"functionSelector":"b0e21e8a","id":2231,"implemented":false,"kind":"function","modifiers":[],"name":"protocolFee","nameLocation":"69152:11:0","nodeType":"FunctionDefinition","parameters":{"id":2227,"nodeType":"ParameterList","parameters":[],"src":"69163:2:0"},"returnParameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2231,"src":"69189:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2228,"name":"uint","nodeType":"ElementaryTypeName","src":"69189:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"69188:6:0"},"scope":2258,"src":"69143:52:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2232,"nodeType":"StructuredDocumentation","src":"69199:343:0","text":" Returns the ProxyAdmin contract address that manage upgrades for\n the current Unlock contract.\n @dev this reads the address directly from storage, at the slot `_ADMIN_SLOT`\n defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds\n to the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1"},"functionSelector":"6e9960c3","id":2237,"implemented":false,"kind":"function","modifiers":[],"name":"getAdmin","nameLocation":"69554:8:0","nodeType":"FunctionDefinition","parameters":{"id":2233,"nodeType":"ParameterList","parameters":[],"src":"69562:2:0"},"returnParameters":{"id":2236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2237,"src":"69588:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2234,"name":"address","nodeType":"ElementaryTypeName","src":"69588:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"69587:9:0"},"scope":2258,"src":"69545:52:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2238,"nodeType":"StructuredDocumentation","src":"69601:255:0","text":" Call executed by a lock after its version upgrade triggred by `upgradeLock`\n - PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance\n of the Unlock contract\n @dev The `msg.sender` will be the upgraded lock"},"functionSelector":"ed9674bd","id":2241,"implemented":false,"kind":"function","modifiers":[],"name":"postLockUpgrade","nameLocation":"69868:15:0","nodeType":"FunctionDefinition","parameters":{"id":2239,"nodeType":"ParameterList","parameters":[],"src":"69883:2:0"},"returnParameters":{"id":2240,"nodeType":"ParameterList","parameters":[],"src":"69894:0:0"},"scope":2258,"src":"69859:36:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2242,"nodeType":"StructuredDocumentation","src":"69899:360:0","text":" Functions which transfers tokens held by the contract\n It handles both ERC20 and the base currency.\n @dev This function is onlyOwner\n @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n @param to the address to transfer the tokens to\n @param amount the amount of tokens to transfer"},"functionSelector":"a64b6e5f","id":2251,"implemented":false,"kind":"function","modifiers":[],"name":"transferTokens","nameLocation":"70271:14:0","nodeType":"FunctionDefinition","parameters":{"id":2249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2244,"mutability":"mutable","name":"token","nameLocation":"70294:5:0","nodeType":"VariableDeclaration","scope":2251,"src":"70286:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2243,"name":"address","nodeType":"ElementaryTypeName","src":"70286:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"to","nameLocation":"70309:2:0","nodeType":"VariableDeclaration","scope":2251,"src":"70301:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2245,"name":"address","nodeType":"ElementaryTypeName","src":"70301:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2248,"mutability":"mutable","name":"amount","nameLocation":"70321:6:0","nodeType":"VariableDeclaration","scope":2251,"src":"70313:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2247,"name":"uint256","nodeType":"ElementaryTypeName","src":"70313:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"70285:43:0"},"returnParameters":{"id":2250,"nodeType":"ParameterList","parameters":[],"src":"70337:0:0"},"scope":2258,"src":"70262:76:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2252,"nodeType":"StructuredDocumentation","src":"70342:268:0","text":" Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n The lock will still be able to sell its memberships.\n @dev This function is onlyOwner\n @param lock address of the lock to remove"},"functionSelector":"4a387bef","id":2257,"implemented":false,"kind":"function","modifiers":[],"name":"removeLock","nameLocation":"70622:10:0","nodeType":"FunctionDefinition","parameters":{"id":2255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2254,"mutability":"mutable","name":"lock","nameLocation":"70641:4:0","nodeType":"VariableDeclaration","scope":2257,"src":"70633:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2253,"name":"address","nodeType":"ElementaryTypeName","src":"70633:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"70632:14:0"},"returnParameters":{"id":2256,"nodeType":"ParameterList","parameters":[],"src":"70655:0:0"},"scope":2258,"src":"70613:43:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3994,"src":"59198:11460:0","usedErrors":[],"usedEvents":[]},{"id":2259,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"70810:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"AddressUpgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":2260,"nodeType":"StructuredDocumentation","src":"70835:67:0","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":2541,"linearizedBaseContracts":[2541],"name":"AddressUpgradeable","nameLocation":"70911:18:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":2274,"nodeType":"Block","src":"71907:236:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":2268,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2263,"src":"72115:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72123:4:0","memberName":"code","nodeType":"MemberAccess","src":"72115:12:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72128:6:0","memberName":"length","nodeType":"MemberAccess","src":"72115:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"72137:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"72115:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2267,"id":2273,"nodeType":"Return","src":"72108:30:0"}]},"documentation":{"id":2261,"nodeType":"StructuredDocumentation","src":"70934:904:0","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":2275,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"71850:10:0","nodeType":"FunctionDefinition","parameters":{"id":2264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2263,"mutability":"mutable","name":"account","nameLocation":"71869:7:0","nodeType":"VariableDeclaration","scope":2275,"src":"71861:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2262,"name":"address","nodeType":"ElementaryTypeName","src":"71861:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"71860:17:0"},"returnParameters":{"id":2267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2275,"src":"71901:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2265,"name":"bool","nodeType":"ElementaryTypeName","src":"71901:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"71900:6:0"},"scope":2541,"src":"71841:302:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2308,"nodeType":"Block","src":"73097:245:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2286,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"73119:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}],"id":2285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"73111:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2284,"name":"address","nodeType":"ElementaryTypeName","src":"73111:7:0","typeDescriptions":{}}},"id":2287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73111:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73125:7:0","memberName":"balance","nodeType":"MemberAccess","src":"73111:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2289,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"73136:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"73111:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":2291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"73144:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":2283,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"73103:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73103:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2293,"nodeType":"ExpressionStatement","src":"73103:73:0"},{"assignments":[2295,null],"declarations":[{"constant":false,"id":2295,"mutability":"mutable","name":"success","nameLocation":"73189:7:0","nodeType":"VariableDeclaration","scope":2308,"src":"73184:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2294,"name":"bool","nodeType":"ElementaryTypeName","src":"73184:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2302,"initialValue":{"arguments":[{"hexValue":"","id":2300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"73232:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":2296,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2278,"src":"73202:9:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":2297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"73212:4:0","memberName":"call","nodeType":"MemberAccess","src":"73202:14:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2298,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"73224:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"73202:29:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73202:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"73183:52:0"},{"expression":{"arguments":[{"id":2304,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"73256:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":2305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"73271:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":2303,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"73241:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"73241:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2307,"nodeType":"ExpressionStatement","src":"73241:96:0"}]},"documentation":{"id":2276,"nodeType":"StructuredDocumentation","src":"72147:876:0","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":2309,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"73035:9:0","nodeType":"FunctionDefinition","parameters":{"id":2281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2278,"mutability":"mutable","name":"recipient","nameLocation":"73061:9:0","nodeType":"VariableDeclaration","scope":2309,"src":"73045:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":2277,"name":"address","nodeType":"ElementaryTypeName","src":"73045:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":2280,"mutability":"mutable","name":"amount","nameLocation":"73080:6:0","nodeType":"VariableDeclaration","scope":2309,"src":"73072:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2279,"name":"uint256","nodeType":"ElementaryTypeName","src":"73072:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"73044:43:0"},"returnParameters":{"id":2282,"nodeType":"ParameterList","parameters":[],"src":"73097:0:0"},"scope":2541,"src":"73026:316:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2326,"nodeType":"Block","src":"74147:96:0","statements":[{"expression":{"arguments":[{"id":2320,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2312,"src":"74188:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2321,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2314,"src":"74196:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"74202:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":2323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"74205:32:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":2319,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2367,2411],"referencedDeclaration":2411,"src":"74166:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74166:72:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2318,"id":2325,"nodeType":"Return","src":"74153:85:0"}]},"documentation":{"id":2310,"nodeType":"StructuredDocumentation","src":"73346:697:0","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":2327,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"74055:12:0","nodeType":"FunctionDefinition","parameters":{"id":2315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2312,"mutability":"mutable","name":"target","nameLocation":"74081:6:0","nodeType":"VariableDeclaration","scope":2327,"src":"74073:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2311,"name":"address","nodeType":"ElementaryTypeName","src":"74073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2314,"mutability":"mutable","name":"data","nameLocation":"74106:4:0","nodeType":"VariableDeclaration","scope":2327,"src":"74093:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2313,"name":"bytes","nodeType":"ElementaryTypeName","src":"74093:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"74067:47:0"},"returnParameters":{"id":2318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2327,"src":"74133:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2316,"name":"bytes","nodeType":"ElementaryTypeName","src":"74133:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"74132:14:0"},"scope":2541,"src":"74046:197:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2346,"nodeType":"Block","src":"74584:70:0","statements":[{"expression":{"arguments":[{"id":2340,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2330,"src":"74619:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2341,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"74627:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":2342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"74633:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":2343,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2334,"src":"74636:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2339,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2367,2411],"referencedDeclaration":2411,"src":"74597:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74597:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2338,"id":2345,"nodeType":"Return","src":"74590:59:0"}]},"documentation":{"id":2328,"nodeType":"StructuredDocumentation","src":"74247:201:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":2347,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"74460:12:0","nodeType":"FunctionDefinition","parameters":{"id":2335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2330,"mutability":"mutable","name":"target","nameLocation":"74486:6:0","nodeType":"VariableDeclaration","scope":2347,"src":"74478:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2329,"name":"address","nodeType":"ElementaryTypeName","src":"74478:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"data","nameLocation":"74511:4:0","nodeType":"VariableDeclaration","scope":2347,"src":"74498:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2331,"name":"bytes","nodeType":"ElementaryTypeName","src":"74498:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"errorMessage","nameLocation":"74535:12:0","nodeType":"VariableDeclaration","scope":2347,"src":"74521:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2333,"name":"string","nodeType":"ElementaryTypeName","src":"74521:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"74472:79:0"},"returnParameters":{"id":2338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2347,"src":"74570:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2336,"name":"bytes","nodeType":"ElementaryTypeName","src":"74570:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"74569:14:0"},"scope":2541,"src":"74451:203:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2366,"nodeType":"Block","src":"75121:151:0","statements":[{"expression":{"arguments":[{"id":2360,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2350,"src":"75171:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2361,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2352,"src":"75187:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2354,"src":"75201:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":2363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"75216:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":2359,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[2367,2411],"referencedDeclaration":2411,"src":"75140:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":2364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75140:127:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2358,"id":2365,"nodeType":"Return","src":"75127:140:0"}]},"documentation":{"id":2348,"nodeType":"StructuredDocumentation","src":"74658:331:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":2367,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"75001:21:0","nodeType":"FunctionDefinition","parameters":{"id":2355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2350,"mutability":"mutable","name":"target","nameLocation":"75036:6:0","nodeType":"VariableDeclaration","scope":2367,"src":"75028:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2349,"name":"address","nodeType":"ElementaryTypeName","src":"75028:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"data","nameLocation":"75061:4:0","nodeType":"VariableDeclaration","scope":2367,"src":"75048:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2351,"name":"bytes","nodeType":"ElementaryTypeName","src":"75048:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2354,"mutability":"mutable","name":"value","nameLocation":"75079:5:0","nodeType":"VariableDeclaration","scope":2367,"src":"75071:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2353,"name":"uint256","nodeType":"ElementaryTypeName","src":"75071:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"75022:66:0"},"returnParameters":{"id":2358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2367,"src":"75107:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2356,"name":"bytes","nodeType":"ElementaryTypeName","src":"75107:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"75106:14:0"},"scope":2541,"src":"74992:280:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2410,"nodeType":"Block","src":"75667:277:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":2384,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"75696:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$2541","typeString":"library AddressUpgradeable"}],"id":2383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"75688:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2382,"name":"address","nodeType":"ElementaryTypeName","src":"75688:7:0","typeDescriptions":{}}},"id":2385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75688:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"75702:7:0","memberName":"balance","nodeType":"MemberAccess","src":"75688:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2387,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"75713:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75688:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":2389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"75726:40:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":2381,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"75673:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75673:99:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2391,"nodeType":"ExpressionStatement","src":"75673:99:0"},{"assignments":[2393,2395],"declarations":[{"constant":false,"id":2393,"mutability":"mutable","name":"success","nameLocation":"75784:7:0","nodeType":"VariableDeclaration","scope":2410,"src":"75779:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2392,"name":"bool","nodeType":"ElementaryTypeName","src":"75779:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2395,"mutability":"mutable","name":"returndata","nameLocation":"75806:10:0","nodeType":"VariableDeclaration","scope":2410,"src":"75793:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2394,"name":"bytes","nodeType":"ElementaryTypeName","src":"75793:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2402,"initialValue":{"arguments":[{"id":2400,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2372,"src":"75846:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2396,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2370,"src":"75820:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"75827:4:0","memberName":"call","nodeType":"MemberAccess","src":"75820:11:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":2398,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"75839:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"75820:25:0","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":2401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75820:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"75778:73:0"},{"expression":{"arguments":[{"id":2404,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2370,"src":"75897:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2405,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2393,"src":"75905:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2406,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"75914:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2407,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2376,"src":"75926:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2403,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2496,"src":"75870:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75870:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2380,"id":2409,"nodeType":"Return","src":"75857:82:0"}]},"documentation":{"id":2368,"nodeType":"StructuredDocumentation","src":"75276:227:0","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":2411,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"75515:21:0","nodeType":"FunctionDefinition","parameters":{"id":2377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2370,"mutability":"mutable","name":"target","nameLocation":"75550:6:0","nodeType":"VariableDeclaration","scope":2411,"src":"75542:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2369,"name":"address","nodeType":"ElementaryTypeName","src":"75542:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2372,"mutability":"mutable","name":"data","nameLocation":"75575:4:0","nodeType":"VariableDeclaration","scope":2411,"src":"75562:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2371,"name":"bytes","nodeType":"ElementaryTypeName","src":"75562:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"value","nameLocation":"75593:5:0","nodeType":"VariableDeclaration","scope":2411,"src":"75585:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2373,"name":"uint256","nodeType":"ElementaryTypeName","src":"75585:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2376,"mutability":"mutable","name":"errorMessage","nameLocation":"75618:12:0","nodeType":"VariableDeclaration","scope":2411,"src":"75604:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2375,"name":"string","nodeType":"ElementaryTypeName","src":"75604:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"75536:98:0"},"returnParameters":{"id":2380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2411,"src":"75653:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2378,"name":"bytes","nodeType":"ElementaryTypeName","src":"75653:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"75652:14:0"},"scope":2541,"src":"75506:438:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2427,"nodeType":"Block","src":"76219:97:0","statements":[{"expression":{"arguments":[{"id":2422,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2414,"src":"76257:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2423,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2416,"src":"76265:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":2424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"76271:39:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":2421,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[2428,2457],"referencedDeclaration":2457,"src":"76238:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":2425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76238:73:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2420,"id":2426,"nodeType":"Return","src":"76225:86:0"}]},"documentation":{"id":2412,"nodeType":"StructuredDocumentation","src":"75948:156:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":2428,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"76116:18:0","nodeType":"FunctionDefinition","parameters":{"id":2417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2414,"mutability":"mutable","name":"target","nameLocation":"76148:6:0","nodeType":"VariableDeclaration","scope":2428,"src":"76140:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2413,"name":"address","nodeType":"ElementaryTypeName","src":"76140:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2416,"mutability":"mutable","name":"data","nameLocation":"76173:4:0","nodeType":"VariableDeclaration","scope":2428,"src":"76160:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2415,"name":"bytes","nodeType":"ElementaryTypeName","src":"76160:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"76134:47:0"},"returnParameters":{"id":2420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2428,"src":"76205:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2418,"name":"bytes","nodeType":"ElementaryTypeName","src":"76205:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"76204:14:0"},"scope":2541,"src":"76107:209:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2456,"nodeType":"Block","src":"76630:164:0","statements":[{"assignments":[2441,2443],"declarations":[{"constant":false,"id":2441,"mutability":"mutable","name":"success","nameLocation":"76642:7:0","nodeType":"VariableDeclaration","scope":2456,"src":"76637:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2440,"name":"bool","nodeType":"ElementaryTypeName","src":"76637:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"returndata","nameLocation":"76664:10:0","nodeType":"VariableDeclaration","scope":2456,"src":"76651:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2442,"name":"bytes","nodeType":"ElementaryTypeName","src":"76651:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2448,"initialValue":{"arguments":[{"id":2446,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"76696:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2444,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"76678:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"76685:10:0","memberName":"staticcall","nodeType":"MemberAccess","src":"76678:17:0","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":2447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76678:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"76636:65:0"},{"expression":{"arguments":[{"id":2450,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2431,"src":"76747:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2451,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"76755:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2452,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2443,"src":"76764:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2453,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2435,"src":"76776:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2449,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2496,"src":"76720:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76720:69:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2439,"id":2455,"nodeType":"Return","src":"76707:82:0"}]},"documentation":{"id":2429,"nodeType":"StructuredDocumentation","src":"76320:163:0","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":2457,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"76495:18:0","nodeType":"FunctionDefinition","parameters":{"id":2436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2431,"mutability":"mutable","name":"target","nameLocation":"76527:6:0","nodeType":"VariableDeclaration","scope":2457,"src":"76519:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2430,"name":"address","nodeType":"ElementaryTypeName","src":"76519:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2433,"mutability":"mutable","name":"data","nameLocation":"76552:4:0","nodeType":"VariableDeclaration","scope":2457,"src":"76539:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2432,"name":"bytes","nodeType":"ElementaryTypeName","src":"76539:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2435,"mutability":"mutable","name":"errorMessage","nameLocation":"76576:12:0","nodeType":"VariableDeclaration","scope":2457,"src":"76562:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2434,"name":"string","nodeType":"ElementaryTypeName","src":"76562:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"76513:79:0"},"returnParameters":{"id":2439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2438,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2457,"src":"76616:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2437,"name":"bytes","nodeType":"ElementaryTypeName","src":"76616:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"76615:14:0"},"scope":2541,"src":"76486:308:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2495,"nodeType":"Block","src":"77244:372:0","statements":[{"condition":{"id":2471,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2462,"src":"77254:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2493,"nodeType":"Block","src":"77564:48:0","statements":[{"expression":{"arguments":[{"id":2489,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2464,"src":"77580:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2490,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2466,"src":"77592:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2488,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2540,"src":"77572:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":2491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77572:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2492,"nodeType":"ExpressionStatement","src":"77572:33:0"}]},"id":2494,"nodeType":"IfStatement","src":"77250:362:0","trueBody":{"id":2487,"nodeType":"Block","src":"77263:295:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2472,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2464,"src":"77275:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"77286:6:0","memberName":"length","nodeType":"MemberAccess","src":"77275:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"77296:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"77275:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2484,"nodeType":"IfStatement","src":"77271:256:0","trueBody":{"id":2483,"nodeType":"Block","src":"77299:228:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":2478,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2460,"src":"77477:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2477,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"77466:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77466:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":2480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"77486:31:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":2476,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"77458:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77458:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2482,"nodeType":"ExpressionStatement","src":"77458:60:0"}]}},{"expression":{"id":2485,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2464,"src":"77541:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2470,"id":2486,"nodeType":"Return","src":"77534:17:0"}]}}]},"documentation":{"id":2458,"nodeType":"StructuredDocumentation","src":"76798:267:0","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":2496,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"77077:26:0","nodeType":"FunctionDefinition","parameters":{"id":2467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2460,"mutability":"mutable","name":"target","nameLocation":"77117:6:0","nodeType":"VariableDeclaration","scope":2496,"src":"77109:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2459,"name":"address","nodeType":"ElementaryTypeName","src":"77109:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2462,"mutability":"mutable","name":"success","nameLocation":"77134:7:0","nodeType":"VariableDeclaration","scope":2496,"src":"77129:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2461,"name":"bool","nodeType":"ElementaryTypeName","src":"77129:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2464,"mutability":"mutable","name":"returndata","nameLocation":"77160:10:0","nodeType":"VariableDeclaration","scope":2496,"src":"77147:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2463,"name":"bytes","nodeType":"ElementaryTypeName","src":"77147:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2466,"mutability":"mutable","name":"errorMessage","nameLocation":"77190:12:0","nodeType":"VariableDeclaration","scope":2496,"src":"77176:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2465,"name":"string","nodeType":"ElementaryTypeName","src":"77176:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"77103:103:0"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2496,"src":"77230:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2468,"name":"bytes","nodeType":"ElementaryTypeName","src":"77230:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"77229:14:0"},"scope":2541,"src":"77068:548:0","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2519,"nodeType":"Block","src":"77969:109:0","statements":[{"condition":{"id":2508,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"77979:7:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2517,"nodeType":"Block","src":"78026:48:0","statements":[{"expression":{"arguments":[{"id":2513,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"78042:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2514,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"78054:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2512,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2540,"src":"78034:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":2515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78034:33:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2516,"nodeType":"ExpressionStatement","src":"78034:33:0"}]},"id":2518,"nodeType":"IfStatement","src":"77975:99:0","trueBody":{"id":2511,"nodeType":"Block","src":"77988:32:0","statements":[{"expression":{"id":2509,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2501,"src":"78003:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":2507,"id":2510,"nodeType":"Return","src":"77996:17:0"}]}}]},"documentation":{"id":2497,"nodeType":"StructuredDocumentation","src":"77620:200:0","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":2520,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"77832:16:0","nodeType":"FunctionDefinition","parameters":{"id":2504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2499,"mutability":"mutable","name":"success","nameLocation":"77859:7:0","nodeType":"VariableDeclaration","scope":2520,"src":"77854:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2498,"name":"bool","nodeType":"ElementaryTypeName","src":"77854:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2501,"mutability":"mutable","name":"returndata","nameLocation":"77885:10:0","nodeType":"VariableDeclaration","scope":2520,"src":"77872:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2500,"name":"bytes","nodeType":"ElementaryTypeName","src":"77872:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2503,"mutability":"mutable","name":"errorMessage","nameLocation":"77915:12:0","nodeType":"VariableDeclaration","scope":2520,"src":"77901:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2502,"name":"string","nodeType":"ElementaryTypeName","src":"77901:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"77848:83:0"},"returnParameters":{"id":2507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2520,"src":"77955:12:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2505,"name":"bytes","nodeType":"ElementaryTypeName","src":"77955:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"77954:14:0"},"scope":2541,"src":"77823:255:0","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2539,"nodeType":"Block","src":"78177:393:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2527,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2522,"src":"78245:10:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"78256:6:0","memberName":"length","nodeType":"MemberAccess","src":"78245:17:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"78265:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"78245:21:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2537,"nodeType":"Block","src":"78531:35:0","statements":[{"expression":{"arguments":[{"id":2534,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2524,"src":"78546:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2533,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"78539:6:0","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":2535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78539:20:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2536,"nodeType":"ExpressionStatement","src":"78539:20:0"}]},"id":2538,"nodeType":"IfStatement","src":"78241:325:0","trueBody":{"id":2532,"nodeType":"Block","src":"78268:257:0","statements":[{"AST":{"nativeSrc":"78408:111:0","nodeType":"YulBlock","src":"78408:111:0","statements":[{"nativeSrc":"78418:40:0","nodeType":"YulVariableDeclaration","src":"78418:40:0","value":{"arguments":[{"name":"returndata","nativeSrc":"78447:10:0","nodeType":"YulIdentifier","src":"78447:10:0"}],"functionName":{"name":"mload","nativeSrc":"78441:5:0","nodeType":"YulIdentifier","src":"78441:5:0"},"nativeSrc":"78441:17:0","nodeType":"YulFunctionCall","src":"78441:17:0"},"variables":[{"name":"returndata_size","nativeSrc":"78422:15:0","nodeType":"YulTypedName","src":"78422:15:0","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"78478:2:0","nodeType":"YulLiteral","src":"78478:2:0","type":"","value":"32"},{"name":"returndata","nativeSrc":"78482:10:0","nodeType":"YulIdentifier","src":"78482:10:0"}],"functionName":{"name":"add","nativeSrc":"78474:3:0","nodeType":"YulIdentifier","src":"78474:3:0"},"nativeSrc":"78474:19:0","nodeType":"YulFunctionCall","src":"78474:19:0"},{"name":"returndata_size","nativeSrc":"78495:15:0","nodeType":"YulIdentifier","src":"78495:15:0"}],"functionName":{"name":"revert","nativeSrc":"78467:6:0","nodeType":"YulIdentifier","src":"78467:6:0"},"nativeSrc":"78467:44:0","nodeType":"YulFunctionCall","src":"78467:44:0"},"nativeSrc":"78467:44:0","nodeType":"YulExpressionStatement","src":"78467:44:0"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"shanghai","externalReferences":[{"declaration":2522,"isOffset":false,"isSlot":false,"src":"78447:10:0","valueSize":1},{"declaration":2522,"isOffset":false,"isSlot":false,"src":"78482:10:0","valueSize":1}],"id":2531,"nodeType":"InlineAssembly","src":"78399:120:0"}]}}]},"id":2540,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"78091:7:0","nodeType":"FunctionDefinition","parameters":{"id":2525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2522,"mutability":"mutable","name":"returndata","nameLocation":"78117:10:0","nodeType":"VariableDeclaration","scope":2540,"src":"78104:23:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2521,"name":"bytes","nodeType":"ElementaryTypeName","src":"78104:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2524,"mutability":"mutable","name":"errorMessage","nameLocation":"78147:12:0","nodeType":"VariableDeclaration","scope":2540,"src":"78133:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2523,"name":"string","nodeType":"ElementaryTypeName","src":"78133:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"78098:65:0"},"returnParameters":{"id":2526,"nodeType":"ParameterList","parameters":[],"src":"78177:0:0"},"scope":2541,"src":"78082:488:0","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":3994,"src":"70903:7669:0","usedErrors":[],"usedEvents":[]},{"id":2542,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"78689:23:0"},{"abstract":true,"baseContracts":[],"canonicalName":"UnlockInitializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2543,"nodeType":"StructuredDocumentation","src":"78714:1497:0","text":" @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() initializer {}\n ```\n ===="},"fullyImplemented":true,"id":2613,"linearizedBaseContracts":[2613],"name":"UnlockInitializable","nameLocation":"80230:19:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"80254:69:0","text":" @dev Indicates that the contract has been initialized."},"id":2546,"mutability":"mutable","name":"initialized","nameLocation":"80339:11:0","nodeType":"VariableDeclaration","scope":2613,"src":"80326:24:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2545,"name":"bool","nodeType":"ElementaryTypeName","src":"80326:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"documentation":{"id":2547,"nodeType":"StructuredDocumentation","src":"80355:87:0","text":" @dev Indicates that the contract is in the process of being initialized."},"id":2549,"mutability":"mutable","name":"initializing","nameLocation":"80458:12:0","nodeType":"VariableDeclaration","scope":2613,"src":"80445:25:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2548,"name":"bool","nodeType":"ElementaryTypeName","src":"80445:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":2586,"nodeType":"Block","src":"80590:561:0","statements":[{"expression":{"arguments":[{"condition":{"id":2553,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"80869:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":2557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"80903:12:0","subExpression":{"id":2556,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"80904:11:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"80869:46:0","trueExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2554,"name":"_isConstructor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2612,"src":"80884:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"80884:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"414c52454144595f494e495449414c495a4544","id":2559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"80923:21:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3","typeString":"literal_string \"ALREADY_INITIALIZED\""},"value":"ALREADY_INITIALIZED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_241395e6b20092ec3fd5dfc22ea70fc2615c08854b7fd10fb3028d965cf738f3","typeString":"literal_string \"ALREADY_INITIALIZED\""}],"id":2552,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"80854:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"80854:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2561,"nodeType":"ExpressionStatement","src":"80854:96:0"},{"assignments":[2563],"declarations":[{"constant":false,"id":2563,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"80962:14:0","nodeType":"VariableDeclaration","scope":2586,"src":"80957:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2562,"name":"bool","nodeType":"ElementaryTypeName","src":"80957:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2566,"initialValue":{"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"80979:13:0","subExpression":{"id":2564,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"80980:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"80957:35:0"},{"condition":{"id":2567,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2563,"src":"81002:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2577,"nodeType":"IfStatement","src":"80998:80:0","trueBody":{"id":2576,"nodeType":"Block","src":"81018:60:0","statements":[{"expression":{"id":2570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2568,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"81026:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"81041:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"81026:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2571,"nodeType":"ExpressionStatement","src":"81026:19:0"},{"expression":{"id":2574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2572,"name":"initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"81053:11:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"81067:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"81053:18:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2575,"nodeType":"ExpressionStatement","src":"81053:18:0"}]}},{"id":2578,"nodeType":"PlaceholderStatement","src":"81084:1:0"},{"condition":{"id":2579,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2563,"src":"81096:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2585,"nodeType":"IfStatement","src":"81092:55:0","trueBody":{"id":2584,"nodeType":"Block","src":"81112:35:0","statements":[{"expression":{"id":2582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2580,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"81120:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":2581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"81135:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"81120:20:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2583,"nodeType":"ExpressionStatement","src":"81120:20:0"}]}}]},"documentation":{"id":2550,"nodeType":"StructuredDocumentation","src":"80475:89:0","text":" @dev Modifier to protect an initializer function from being invoked twice."},"id":2587,"name":"initializer","nameLocation":"80576:11:0","nodeType":"ModifierDefinition","parameters":{"id":2551,"nodeType":"ParameterList","parameters":[],"src":"80587:2:0"},"src":"80567:584:0","virtual":false,"visibility":"internal"},{"body":{"id":2596,"nodeType":"Block","src":"81358:59:0","statements":[{"expression":{"arguments":[{"id":2591,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2549,"src":"81372:12:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e4f545f494e495449414c495a494e47","id":2592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"81386:18:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_8ccf6bdc0b751d2d263b8778f2da89b11c590f3d1857d3b2825769eaa0a2647a","typeString":"literal_string \"NOT_INITIALIZING\""},"value":"NOT_INITIALIZING"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8ccf6bdc0b751d2d263b8778f2da89b11c590f3d1857d3b2825769eaa0a2647a","typeString":"literal_string \"NOT_INITIALIZING\""}],"id":2590,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"81364:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81364:41:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2594,"nodeType":"ExpressionStatement","src":"81364:41:0"},{"id":2595,"nodeType":"PlaceholderStatement","src":"81411:1:0"}]},"documentation":{"id":2588,"nodeType":"StructuredDocumentation","src":"81155:172:0","text":" @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} modifier, directly or indirectly."},"id":2597,"name":"onlyInitializing","nameLocation":"81339:16:0","nodeType":"ModifierDefinition","parameters":{"id":2589,"nodeType":"ParameterList","parameters":[],"src":"81355:2:0"},"src":"81330:87:0","virtual":false,"visibility":"internal"},{"body":{"id":2611,"nodeType":"Block","src":"81475:63:0","statements":[{"expression":{"id":2609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"81488:45:0","subExpression":{"arguments":[{"arguments":[{"id":2606,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"81527:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_UnlockInitializable_$2613","typeString":"contract UnlockInitializable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_UnlockInitializable_$2613","typeString":"contract UnlockInitializable"}],"id":2605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"81519:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2604,"name":"address","nodeType":"ElementaryTypeName","src":"81519:7:0","typeDescriptions":{}}},"id":2607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81519:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2602,"name":"AddressUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2541,"src":"81489:18:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressUpgradeable_$2541_$","typeString":"type(library AddressUpgradeable)"}},"id":2603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"81508:10:0","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":2275,"src":"81489:29:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81489:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2601,"id":2610,"nodeType":"Return","src":"81481:52:0"}]},"id":2612,"implemented":true,"kind":"function","modifiers":[],"name":"_isConstructor","nameLocation":"81430:14:0","nodeType":"FunctionDefinition","parameters":{"id":2598,"nodeType":"ParameterList","parameters":[],"src":"81444:2:0"},"returnParameters":{"id":2601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2612,"src":"81469:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2599,"name":"bool","nodeType":"ElementaryTypeName","src":"81469:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"81468:6:0"},"scope":2613,"src":"81421:117:0","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":3994,"src":"80212:1328:0","usedErrors":[],"usedEvents":[]},{"id":2614,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"81650:23:0"},{"abstract":true,"baseContracts":[{"baseName":{"id":2616,"name":"UnlockInitializable","nameLocations":["82218:19:0"],"nodeType":"IdentifierPath","referencedDeclaration":2613,"src":"82218:19:0"},"id":2617,"nodeType":"InheritanceSpecifier","src":"82218:19:0"}],"canonicalName":"UnlockContextUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2615,"nodeType":"StructuredDocumentation","src":"81675:496:0","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":2655,"linearizedBaseContracts":[2655,2613],"name":"UnlockContextUpgradeable","nameLocation":"82190:24:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":2625,"nodeType":"Block","src":"82294:37:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2622,"name":"__Context_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2632,"src":"82300:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"82300:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2624,"nodeType":"ExpressionStatement","src":"82300:26:0"}]},"id":2626,"implemented":true,"kind":"function","modifiers":[{"id":2620,"kind":"modifierInvocation","modifierName":{"id":2619,"name":"onlyInitializing","nameLocations":["82277:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"82277:16:0"},"nodeType":"ModifierInvocation","src":"82277:16:0"}],"name":"__Context_init","nameLocation":"82251:14:0","nodeType":"FunctionDefinition","parameters":{"id":2618,"nodeType":"ParameterList","parameters":[],"src":"82265:2:0"},"returnParameters":{"id":2621,"nodeType":"ParameterList","parameters":[],"src":"82294:0:0"},"scope":2655,"src":"82242:89:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2631,"nodeType":"Block","src":"82397:2:0","statements":[]},"id":2632,"implemented":true,"kind":"function","modifiers":[{"id":2629,"kind":"modifierInvocation","modifierName":{"id":2628,"name":"onlyInitializing","nameLocations":["82380:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"82380:16:0"},"nodeType":"ModifierInvocation","src":"82380:16:0"}],"name":"__Context_init_unchained","nameLocation":"82344:24:0","nodeType":"FunctionDefinition","parameters":{"id":2627,"nodeType":"ParameterList","parameters":[],"src":"82368:2:0"},"returnParameters":{"id":2630,"nodeType":"ParameterList","parameters":[],"src":"82397:0:0"},"scope":2655,"src":"82335:64:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2640,"nodeType":"Block","src":"82465:28:0","statements":[{"expression":{"expression":{"id":2637,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"82478:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"82482:6:0","memberName":"sender","nodeType":"MemberAccess","src":"82478:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2636,"id":2639,"nodeType":"Return","src":"82471:17:0"}]},"id":2641,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"82412:10:0","nodeType":"FunctionDefinition","parameters":{"id":2633,"nodeType":"ParameterList","parameters":[],"src":"82422:2:0"},"returnParameters":{"id":2636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2641,"src":"82456:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2634,"name":"address","nodeType":"ElementaryTypeName","src":"82456:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"82455:9:0"},"scope":2655,"src":"82403:90:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2649,"nodeType":"Block","src":"82564:26:0","statements":[{"expression":{"expression":{"id":2646,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"82577:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"82581:4:0","memberName":"data","nodeType":"MemberAccess","src":"82577:8:0","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":2645,"id":2648,"nodeType":"Return","src":"82570:15:0"}]},"id":2650,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"82506:8:0","nodeType":"FunctionDefinition","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"82514:2:0"},"returnParameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2650,"src":"82548:14:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2643,"name":"bytes","nodeType":"ElementaryTypeName","src":"82548:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"82547:16:0"},"scope":2655,"src":"82497:93:0","stateMutability":"view","virtual":true,"visibility":"internal"},{"constant":false,"id":2654,"mutability":"mutable","name":"______gap","nameLocation":"82614:9:0","nodeType":"VariableDeclaration","scope":2655,"src":"82594:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":2651,"name":"uint256","nodeType":"ElementaryTypeName","src":"82594:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2653,"length":{"hexValue":"3530","id":2652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"82602:2:0","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"82594:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":3994,"src":"82172:454:0","usedErrors":[],"usedEvents":[]},{"id":2656,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"82726:23:0"},{"abstract":true,"baseContracts":[{"baseName":{"id":2658,"name":"UnlockInitializable","nameLocations":["83382:19:0"],"nodeType":"IdentifierPath","referencedDeclaration":2613,"src":"83382:19:0"},"id":2659,"nodeType":"InheritanceSpecifier","src":"83382:19:0"},{"baseName":{"id":2660,"name":"UnlockContextUpgradeable","nameLocations":["83405:24:0"],"nodeType":"IdentifierPath","referencedDeclaration":2655,"src":"83405:24:0"},"id":2661,"nodeType":"InheritanceSpecifier","src":"83405:24:0"}],"canonicalName":"UnlockOwnable","contractDependencies":[],"contractKind":"contract","documentation":{"id":2657,"nodeType":"StructuredDocumentation","src":"82751:593:0","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be aplied to your functions to restrict their use to\n the owner.\n This contract was originally part of openzeppelin/contracts-ethereum-package\n but had to be included (instead of using the one in openzeppelin/contracts-upgradeable )\n because the ______gap array length was 49 instead of 50"},"fullyImplemented":true,"id":2784,"linearizedBaseContracts":[2784,2655,2613],"name":"UnlockOwnable","nameLocation":"83363:13:0","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2663,"mutability":"mutable","name":"_owner","nameLocation":"83450:6:0","nodeType":"VariableDeclaration","scope":2784,"src":"83434:22:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2662,"name":"address","nodeType":"ElementaryTypeName","src":"83434:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":2669,"name":"OwnershipTransferred","nameLocation":"83467:20:0","nodeType":"EventDefinition","parameters":{"id":2668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2665,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"83509:13:0","nodeType":"VariableDeclaration","scope":2669,"src":"83493:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2664,"name":"address","nodeType":"ElementaryTypeName","src":"83493:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2667,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"83544:8:0","nodeType":"VariableDeclaration","scope":2669,"src":"83528:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2666,"name":"address","nodeType":"ElementaryTypeName","src":"83528:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"83487:69:0"},"src":"83461:96:0"},{"body":{"id":2689,"nodeType":"Block","src":"83715:77:0","statements":[{"expression":{"id":2679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2677,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"83721:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2678,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2672,"src":"83730:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"83721:15:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2680,"nodeType":"ExpressionStatement","src":"83721:15:0"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":2684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"83776:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"83768:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2682,"name":"address","nodeType":"ElementaryTypeName","src":"83768:7:0","typeDescriptions":{}}},"id":2685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"83768:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2686,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"83780:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2681,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2669,"src":"83747:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"83747:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2688,"nodeType":"EmitStatement","src":"83742:45:0"}]},"documentation":{"id":2670,"nodeType":"StructuredDocumentation","src":"83561:87:0","text":" @dev Initializes the contract setting the deployer as the initial owner."},"functionSelector":"b0ca0c83","id":2690,"implemented":true,"kind":"function","modifiers":[{"id":2675,"kind":"modifierInvocation","modifierName":{"id":2674,"name":"initializer","nameLocations":["83703:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":2587,"src":"83703:11:0"},"nodeType":"ModifierInvocation","src":"83703:11:0"}],"name":"__initializeOwnable","nameLocation":"83660:19:0","nodeType":"FunctionDefinition","parameters":{"id":2673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2672,"mutability":"mutable","name":"sender","nameLocation":"83688:6:0","nodeType":"VariableDeclaration","scope":2690,"src":"83680:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2671,"name":"address","nodeType":"ElementaryTypeName","src":"83680:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"83679:16:0"},"returnParameters":{"id":2676,"nodeType":"ParameterList","parameters":[],"src":"83715:0:0"},"scope":2784,"src":"83651:141:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2698,"nodeType":"Block","src":"83907:24:0","statements":[{"expression":{"id":2696,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"83920:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2695,"id":2697,"nodeType":"Return","src":"83913:13:0"}]},"documentation":{"id":2691,"nodeType":"StructuredDocumentation","src":"83796:61:0","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":2699,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"83869:5:0","nodeType":"FunctionDefinition","parameters":{"id":2692,"nodeType":"ParameterList","parameters":[],"src":"83874:2:0"},"returnParameters":{"id":2695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2699,"src":"83898:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2693,"name":"address","nodeType":"ElementaryTypeName","src":"83898:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"83897:9:0"},"scope":2784,"src":"83860:71:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2709,"nodeType":"Block","src":"84032:50:0","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2703,"name":"isOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2722,"src":"84046:7:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84046:9:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f4f574e4552","id":2705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"84057:12:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed52dd835ef8b4a2cee9a7c6acf4a6ded47de936e18191957aa373d7aa16dbef","typeString":"literal_string \"ONLY_OWNER\""},"value":"ONLY_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ed52dd835ef8b4a2cee9a7c6acf4a6ded47de936e18191957aa373d7aa16dbef","typeString":"literal_string \"ONLY_OWNER\""}],"id":2702,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"84038:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84038:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2707,"nodeType":"ExpressionStatement","src":"84038:32:0"},{"id":2708,"nodeType":"PlaceholderStatement","src":"84076:1:0"}]},"documentation":{"id":2700,"nodeType":"StructuredDocumentation","src":"83935:73:0","text":" @dev Throws if called by any account other than the owner."},"id":2710,"name":"onlyOwner","nameLocation":"84020:9:0","nodeType":"ModifierDefinition","parameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"84029:2:0"},"src":"84011:71:0","virtual":false,"visibility":"internal"},{"body":{"id":2721,"nodeType":"Block","src":"84203:40:0","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2716,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"84216:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84216:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2718,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"84232:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"84216:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2715,"id":2720,"nodeType":"Return","src":"84209:29:0"}]},"documentation":{"id":2711,"nodeType":"StructuredDocumentation","src":"84086:68:0","text":" @dev Returns true if the caller is the current owner."},"functionSelector":"8f32d59b","id":2722,"implemented":true,"kind":"function","modifiers":[],"name":"isOwner","nameLocation":"84166:7:0","nodeType":"FunctionDefinition","parameters":{"id":2712,"nodeType":"ParameterList","parameters":[],"src":"84173:2:0"},"returnParameters":{"id":2715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2722,"src":"84197:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2713,"name":"bool","nodeType":"ElementaryTypeName","src":"84197:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"84196:6:0"},"scope":2784,"src":"84157:86:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2735,"nodeType":"Block","src":"84617:41:0","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":2731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"84650:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"84642:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2729,"name":"address","nodeType":"ElementaryTypeName","src":"84642:7:0","typeDescriptions":{}}},"id":2732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84642:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2728,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"84623:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84623:30:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2734,"nodeType":"ExpressionStatement","src":"84623:30:0"}]},"documentation":{"id":2723,"nodeType":"StructuredDocumentation","src":"84247:321:0","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n > Note: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":2736,"implemented":true,"kind":"function","modifiers":[{"id":2726,"kind":"modifierInvocation","modifierName":{"id":2725,"name":"onlyOwner","nameLocations":["84607:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"84607:9:0"},"nodeType":"ModifierInvocation","src":"84607:9:0"}],"name":"renounceOwnership","nameLocation":"84580:17:0","nodeType":"FunctionDefinition","parameters":{"id":2724,"nodeType":"ParameterList","parameters":[],"src":"84597:2:0"},"returnParameters":{"id":2727,"nodeType":"ParameterList","parameters":[],"src":"84617:0:0"},"scope":2784,"src":"84571:87:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2758,"nodeType":"Block","src":"84859:93:0","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2745,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"84873:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"84893:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"84885:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2746,"name":"address","nodeType":"ElementaryTypeName","src":"84885:7:0","typeDescriptions":{}}},"id":2749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84885:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"84873:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4f574e4552","id":2751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"84897:15:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""},"value":"INVALID_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""}],"id":2744,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"84865:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84865:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2753,"nodeType":"ExpressionStatement","src":"84865:48:0"},{"expression":{"arguments":[{"id":2755,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"84938:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2754,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2779,"src":"84919:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"84919:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2757,"nodeType":"ExpressionStatement","src":"84919:28:0"}]},"documentation":{"id":2737,"nodeType":"StructuredDocumentation","src":"84662:132:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":2759,"implemented":true,"kind":"function","modifiers":[{"id":2742,"kind":"modifierInvocation","modifierName":{"id":2741,"name":"onlyOwner","nameLocations":["84849:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"84849:9:0"},"nodeType":"ModifierInvocation","src":"84849:9:0"}],"name":"transferOwnership","nameLocation":"84806:17:0","nodeType":"FunctionDefinition","parameters":{"id":2740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2739,"mutability":"mutable","name":"newOwner","nameLocation":"84832:8:0","nodeType":"VariableDeclaration","scope":2759,"src":"84824:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2738,"name":"address","nodeType":"ElementaryTypeName","src":"84824:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"84823:18:0"},"returnParameters":{"id":2743,"nodeType":"ParameterList","parameters":[],"src":"84859:0:0"},"scope":2784,"src":"84797:155:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2778,"nodeType":"Block","src":"85100:110:0","statements":[{"assignments":[2766],"declarations":[{"constant":false,"id":2766,"mutability":"mutable","name":"oldOwner","nameLocation":"85114:8:0","nodeType":"VariableDeclaration","scope":2778,"src":"85106:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2765,"name":"address","nodeType":"ElementaryTypeName","src":"85106:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2768,"initialValue":{"id":2767,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"85125:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"85106:25:0"},{"expression":{"id":2771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2769,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"85137:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2770,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"85146:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"85137:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2772,"nodeType":"ExpressionStatement","src":"85137:17:0"},{"eventCall":{"arguments":[{"id":2774,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"85186:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2775,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"85196:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2773,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2669,"src":"85165:20:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"85165:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2777,"nodeType":"EmitStatement","src":"85160:45:0"}]},"documentation":{"id":2760,"nodeType":"StructuredDocumentation","src":"84956:86:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`)."},"id":2779,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"85054:18:0","nodeType":"FunctionDefinition","parameters":{"id":2763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2762,"mutability":"mutable","name":"newOwner","nameLocation":"85081:8:0","nodeType":"VariableDeclaration","scope":2779,"src":"85073:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2761,"name":"address","nodeType":"ElementaryTypeName","src":"85073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"85072:18:0"},"returnParameters":{"id":2764,"nodeType":"ParameterList","parameters":[],"src":"85100:0:0"},"scope":2784,"src":"85045:165:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":false,"id":2783,"mutability":"mutable","name":"______gap","nameLocation":"85234:9:0","nodeType":"VariableDeclaration","scope":2784,"src":"85214:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":2780,"name":"uint256","nodeType":"ElementaryTypeName","src":"85214:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2782,"length":{"hexValue":"3530","id":2781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"85222:2:0","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"85214:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":3994,"src":"83345:1901:0","usedErrors":[],"usedEvents":[2669]},{"id":2785,"literals":["solidity","^","0.8",".7"],"nodeType":"PragmaDirective","src":"85278:23:0"},{"abstract":false,"baseContracts":[{"baseName":{"id":2787,"name":"UnlockInitializable","nameLocations":["86822:19:0"],"nodeType":"IdentifierPath","referencedDeclaration":2613,"src":"86822:19:0"},"id":2788,"nodeType":"InheritanceSpecifier","src":"86822:19:0"},{"baseName":{"id":2789,"name":"UnlockOwnable","nameLocations":["86843:13:0"],"nodeType":"IdentifierPath","referencedDeclaration":2784,"src":"86843:13:0"},"id":2790,"nodeType":"InheritanceSpecifier","src":"86843:13:0"}],"canonicalName":"Unlock","contractDependencies":[1082,1215],"contractKind":"contract","documentation":{"id":2786,"nodeType":"StructuredDocumentation","src":"86596:207:0","text":"@dev Must list the direct base contracts in the order from “most base-like” to “most derived”.\n https://solidity.readthedocs.io/en/latest/contracts.html#multiple-inheritance-and-linearization"},"fullyImplemented":true,"id":3993,"linearizedBaseContracts":[3993,2784,2655,2613],"name":"Unlock","nameLocation":"86812:6:0","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Unlock.LockBalances","documentation":{"id":2791,"nodeType":"StructuredDocumentation","src":"86861:245:0","text":" The struct for a lock\n We use deployed to keep track of deployments.\n This is required because both totalSales and yieldedDiscountTokens are 0 when initialized,\n which would be the same values when the lock is not set."},"id":2798,"members":[{"constant":false,"id":2793,"mutability":"mutable","name":"deployed","nameLocation":"87140:8:0","nodeType":"VariableDeclaration","scope":2798,"src":"87135:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2792,"name":"bool","nodeType":"ElementaryTypeName","src":"87135:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2795,"mutability":"mutable","name":"totalSales","nameLocation":"87159:10:0","nodeType":"VariableDeclaration","scope":2798,"src":"87154:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2794,"name":"uint","nodeType":"ElementaryTypeName","src":"87154:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2797,"mutability":"mutable","name":"yieldedDiscountTokens","nameLocation":"87198:21:0","nodeType":"VariableDeclaration","scope":2798,"src":"87193:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2796,"name":"uint","nodeType":"ElementaryTypeName","src":"87193:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"LockBalances","nameLocation":"87116:12:0","nodeType":"StructDefinition","scope":3993,"src":"87109:115:0","visibility":"public"},{"body":{"id":2810,"nodeType":"Block","src":"87260:67:0","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":2801,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"87274:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":2804,"indexExpression":{"expression":{"id":2802,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"87280:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"87284:6:0","memberName":"sender","nodeType":"MemberAccess","src":"87280:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"87274:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":2805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"87292:8:0","memberName":"deployed","nodeType":"MemberAccess","referencedDeclaration":2793,"src":"87274:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f4c4f434b53","id":2806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"87302:12:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_2f7a57ed2eb35ddf4bed51ee630a02fca60e093675c5fed0b5d65ba05e2cb9fc","typeString":"literal_string \"ONLY_LOCKS\""},"value":"ONLY_LOCKS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2f7a57ed2eb35ddf4bed51ee630a02fca60e093675c5fed0b5d65ba05e2cb9fc","typeString":"literal_string \"ONLY_LOCKS\""}],"id":2800,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"87266:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"87266:49:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2808,"nodeType":"ExpressionStatement","src":"87266:49:0"},{"id":2809,"nodeType":"PlaceholderStatement","src":"87321:1:0"}]},"id":2811,"name":"onlyFromDeployedLock","nameLocation":"87237:20:0","nodeType":"ModifierDefinition","parameters":{"id":2799,"nodeType":"ParameterList","parameters":[],"src":"87257:2:0"},"src":"87228:99:0","virtual":false,"visibility":"internal"},{"constant":false,"functionSelector":"d6e9e803","id":2813,"mutability":"mutable","name":"grossNetworkProduct","nameLocation":"87343:19:0","nodeType":"VariableDeclaration","scope":3993,"src":"87331:31:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2812,"name":"uint","nodeType":"ElementaryTypeName","src":"87331:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"a082eb0e","id":2815,"mutability":"mutable","name":"totalDiscountGranted","nameLocation":"87379:20:0","nodeType":"VariableDeclaration","scope":3993,"src":"87367:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2814,"name":"uint","nodeType":"ElementaryTypeName","src":"87367:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"5de9a137","id":2820,"mutability":"mutable","name":"locks","nameLocation":"87528:5:0","nodeType":"VariableDeclaration","scope":3993,"src":"87488:45:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances)"},"typeName":{"id":2819,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2816,"name":"address","nodeType":"ElementaryTypeName","src":"87496:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"87488:32:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2818,"nodeType":"UserDefinedTypeName","pathNode":{"id":2817,"name":"LockBalances","nameLocations":["87507:12:0"],"nodeType":"IdentifierPath","referencedDeclaration":2798,"src":"87507:12:0"},"referencedDeclaration":2798,"src":"87507:12:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage_ptr","typeString":"struct Unlock.LockBalances"}}},"visibility":"public"},{"constant":false,"functionSelector":"a998e9fb","id":2822,"mutability":"mutable","name":"globalBaseTokenURI","nameLocation":"87645:18:0","nodeType":"VariableDeclaration","scope":3993,"src":"87631:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2821,"name":"string","nodeType":"ElementaryTypeName","src":"87631:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"cec41052","id":2824,"mutability":"mutable","name":"globalTokenSymbol","nameLocation":"87775:17:0","nodeType":"VariableDeclaration","scope":3993,"src":"87761:31:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2823,"name":"string","nodeType":"ElementaryTypeName","src":"87761:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"f8328991","id":2826,"mutability":"mutable","name":"publicLockAddress","nameLocation":"87909:17:0","nodeType":"VariableDeclaration","scope":3993,"src":"87894:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2825,"name":"address","nodeType":"ElementaryTypeName","src":"87894:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"6bced5a2","id":2831,"mutability":"mutable","name":"uniswapOracles","nameLocation":"88082:14:0","nodeType":"VariableDeclaration","scope":3993,"src":"88038:58:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"},"typeName":{"id":2830,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2827,"name":"address","nodeType":"ElementaryTypeName","src":"88046:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"88038:36:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2829,"nodeType":"UserDefinedTypeName","pathNode":{"id":2828,"name":"IUniswapOracleV3","nameLocations":["88057:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":1948,"src":"88057:16:0"},"referencedDeclaration":1948,"src":"88057:16:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}}},"visibility":"public"},{"constant":false,"functionSelector":"3fc8cef3","id":2833,"mutability":"mutable","name":"weth","nameLocation":"88173:4:0","nodeType":"VariableDeclaration","scope":3993,"src":"88158:19:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2832,"name":"address","nodeType":"ElementaryTypeName","src":"88158:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"262d0a85","id":2835,"mutability":"mutable","name":"udt","nameLocation":"88257:3:0","nodeType":"VariableDeclaration","scope":3993,"src":"88242:18:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2834,"name":"address","nodeType":"ElementaryTypeName","src":"88242:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"functionSelector":"743bbc2f","id":2837,"mutability":"mutable","name":"estimatedGasForPurchase","nameLocation":"88334:23:0","nodeType":"VariableDeclaration","scope":3993,"src":"88322:35:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2836,"name":"uint","nodeType":"ElementaryTypeName","src":"88322:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"9a8a0592","id":2839,"mutability":"mutable","name":"chainId","nameLocation":"88453:7:0","nodeType":"VariableDeclaration","scope":3993,"src":"88441:19:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2838,"name":"uint","nodeType":"ElementaryTypeName","src":"88441:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"5979e755","id":2841,"mutability":"mutable","name":"proxyAdminAddress","nameLocation":"88503:17:0","nodeType":"VariableDeclaration","scope":3993,"src":"88488:32:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2840,"name":"address","nodeType":"ElementaryTypeName","src":"88488:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"id":2844,"mutability":"mutable","name":"proxyAdmin","nameLocation":"88543:10:0","nodeType":"VariableDeclaration","scope":3993,"src":"88524:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"},"typeName":{"id":2843,"nodeType":"UserDefinedTypeName","pathNode":{"id":2842,"name":"ProxyAdmin","nameLocations":["88524:10:0"],"nodeType":"IdentifierPath","referencedDeclaration":1215,"src":"88524:10:0"},"referencedDeclaration":1215,"src":"88524:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"visibility":"private"},{"constant":false,"id":2848,"mutability":"mutable","name":"_publicLockVersions","nameLocation":"88619:19:0","nodeType":"VariableDeclaration","scope":3993,"src":"88584:54:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"},"typeName":{"id":2847,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"88592:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"88584:26:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2846,"name":"uint16","nodeType":"ElementaryTypeName","src":"88603:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}},"visibility":"private"},{"constant":false,"id":2852,"mutability":"mutable","name":"_publicLockImpls","nameLocation":"88677:16:0","nodeType":"VariableDeclaration","scope":3993,"src":"88642:51:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"},"typeName":{"id":2851,"keyName":"","keyNameLocation":"-1:-1:-1","keyType":{"id":2849,"name":"uint16","nodeType":"ElementaryTypeName","src":"88650:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Mapping","src":"88642:26:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":2850,"name":"address","nodeType":"ElementaryTypeName","src":"88660:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"functionSelector":"cd93b532","id":2854,"mutability":"mutable","name":"publicLockLatestVersion","nameLocation":"88711:23:0","nodeType":"VariableDeclaration","scope":3993,"src":"88697:37:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2853,"name":"uint16","nodeType":"ElementaryTypeName","src":"88697:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"public"},{"constant":false,"functionSelector":"b0e21e8a","id":2856,"mutability":"mutable","name":"protocolFee","nameLocation":"88769:11:0","nodeType":"VariableDeclaration","scope":3993,"src":"88757:23:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2855,"name":"uint","nodeType":"ElementaryTypeName","src":"88757:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"errorSelector":"a2cfffa0","id":2858,"name":"Unlock__MANAGER_ONLY","nameLocation":"88803:20:0","nodeType":"ErrorDefinition","parameters":{"id":2857,"nodeType":"ParameterList","parameters":[],"src":"88823:2:0"},"src":"88797:29:0"},{"errorSelector":"37bb0061","id":2860,"name":"Unlock__VERSION_TOO_HIGH","nameLocation":"88835:24:0","nodeType":"ErrorDefinition","parameters":{"id":2859,"nodeType":"ParameterList","parameters":[],"src":"88859:2:0"},"src":"88829:33:0"},{"errorSelector":"d6a7ab8e","id":2862,"name":"Unlock__MISSING_TEMPLATE","nameLocation":"88871:24:0","nodeType":"ErrorDefinition","parameters":{"id":2861,"nodeType":"ParameterList","parameters":[],"src":"88895:2:0"},"src":"88865:33:0"},{"errorSelector":"feb51c9f","id":2864,"name":"Unlock__ALREADY_DEPLOYED","nameLocation":"88907:24:0","nodeType":"ErrorDefinition","parameters":{"id":2863,"nodeType":"ParameterList","parameters":[],"src":"88931:2:0"},"src":"88901:33:0"},{"errorSelector":"82b5cfcc","id":2866,"name":"Unlock__MISSING_PROXY_ADMIN","nameLocation":"88943:27:0","nodeType":"ErrorDefinition","parameters":{"id":2865,"nodeType":"ParameterList","parameters":[],"src":"88970:2:0"},"src":"88937:36:0"},{"errorSelector":"adf22763","id":2868,"name":"Unlock__MISSING_LOCK_TEMPLATE","nameLocation":"88982:29:0","nodeType":"ErrorDefinition","parameters":{"id":2867,"nodeType":"ParameterList","parameters":[],"src":"89011:2:0"},"src":"88976:38:0"},{"errorSelector":"822f134e","id":2872,"name":"Unlock__MISSING_LOCK","nameLocation":"89023:20:0","nodeType":"ErrorDefinition","parameters":{"id":2871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2870,"mutability":"mutable","name":"lockAddress","nameLocation":"89052:11:0","nodeType":"VariableDeclaration","scope":2872,"src":"89044:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2869,"name":"address","nodeType":"ElementaryTypeName","src":"89044:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89043:21:0"},"src":"89017:48:0"},{"errorSelector":"000111e2","id":2874,"name":"Unlock__INVALID_AMOUNT","nameLocation":"89074:22:0","nodeType":"ErrorDefinition","parameters":{"id":2873,"nodeType":"ParameterList","parameters":[],"src":"89096:2:0"},"src":"89068:31:0"},{"anonymous":false,"eventSelector":"01017ed19df0c7f8acc436147b234b09664a9fb4797b4fa3fb9e599c2eb67be7","id":2880,"name":"NewLock","nameLocation":"89121:7:0","nodeType":"EventDefinition","parameters":{"id":2879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2876,"indexed":true,"mutability":"mutable","name":"lockOwner","nameLocation":"89145:9:0","nodeType":"VariableDeclaration","scope":2880,"src":"89129:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2875,"name":"address","nodeType":"ElementaryTypeName","src":"89129:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2878,"indexed":true,"mutability":"mutable","name":"newLockAddress","nameLocation":"89172:14:0","nodeType":"VariableDeclaration","scope":2880,"src":"89156:30:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2877,"name":"address","nodeType":"ElementaryTypeName","src":"89156:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89128:59:0"},"src":"89115:73:0"},{"anonymous":false,"eventSelector":"5e7b70a9e6f0b4c7cf2657cf563ce85eed3aebb7731396118d01a195d218fd5e","id":2886,"name":"LockUpgraded","nameLocation":"89198:12:0","nodeType":"EventDefinition","parameters":{"id":2885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2882,"indexed":false,"mutability":"mutable","name":"lockAddress","nameLocation":"89219:11:0","nodeType":"VariableDeclaration","scope":2886,"src":"89211:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2881,"name":"address","nodeType":"ElementaryTypeName","src":"89211:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2884,"indexed":false,"mutability":"mutable","name":"version","nameLocation":"89239:7:0","nodeType":"VariableDeclaration","scope":2886,"src":"89232:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2883,"name":"uint16","nodeType":"ElementaryTypeName","src":"89232:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"89210:37:0"},"src":"89192:56:0"},{"anonymous":false,"eventSelector":"a14230a1687e9bb8cdc0f3931d27c3a806e88c1c2235ba7756d6911feb35be67","id":2900,"name":"ConfigUnlock","nameLocation":"89258:12:0","nodeType":"EventDefinition","parameters":{"id":2899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2888,"indexed":false,"mutability":"mutable","name":"udt","nameLocation":"89284:3:0","nodeType":"VariableDeclaration","scope":2900,"src":"89276:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2887,"name":"address","nodeType":"ElementaryTypeName","src":"89276:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2890,"indexed":false,"mutability":"mutable","name":"weth","nameLocation":"89301:4:0","nodeType":"VariableDeclaration","scope":2900,"src":"89293:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2889,"name":"address","nodeType":"ElementaryTypeName","src":"89293:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2892,"indexed":false,"mutability":"mutable","name":"estimatedGasForPurchase","nameLocation":"89316:23:0","nodeType":"VariableDeclaration","scope":2900,"src":"89311:28:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2891,"name":"uint","nodeType":"ElementaryTypeName","src":"89311:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2894,"indexed":false,"mutability":"mutable","name":"globalTokenSymbol","nameLocation":"89352:17:0","nodeType":"VariableDeclaration","scope":2900,"src":"89345:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2893,"name":"string","nodeType":"ElementaryTypeName","src":"89345:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2896,"indexed":false,"mutability":"mutable","name":"globalTokenURI","nameLocation":"89382:14:0","nodeType":"VariableDeclaration","scope":2900,"src":"89375:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2895,"name":"string","nodeType":"ElementaryTypeName","src":"89375:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2898,"indexed":false,"mutability":"mutable","name":"chainId","nameLocation":"89407:7:0","nodeType":"VariableDeclaration","scope":2900,"src":"89402:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2897,"name":"uint","nodeType":"ElementaryTypeName","src":"89402:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"89270:148:0"},"src":"89252:167:0"},{"anonymous":false,"eventSelector":"4fa58418e580e78539e8d3d8d17d94dbaca0927533953c8248f313e6f8927c21","id":2904,"name":"SetLockTemplate","nameLocation":"89429:15:0","nodeType":"EventDefinition","parameters":{"id":2903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2902,"indexed":false,"mutability":"mutable","name":"publicLockAddress","nameLocation":"89453:17:0","nodeType":"VariableDeclaration","scope":2904,"src":"89445:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2901,"name":"address","nodeType":"ElementaryTypeName","src":"89445:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89444:27:0"},"src":"89423:49:0"},{"anonymous":false,"eventSelector":"3b50eb9d9b4a8db204f2928c9e572c2865b0d02803493ccb6aa256848323ebb7","id":2916,"name":"GNPChanged","nameLocation":"89482:10:0","nodeType":"EventDefinition","parameters":{"id":2915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2906,"indexed":false,"mutability":"mutable","name":"grossNetworkProduct","nameLocation":"89503:19:0","nodeType":"VariableDeclaration","scope":2916,"src":"89498:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2905,"name":"uint","nodeType":"ElementaryTypeName","src":"89498:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2908,"indexed":false,"mutability":"mutable","name":"_valueInETH","nameLocation":"89533:11:0","nodeType":"VariableDeclaration","scope":2916,"src":"89528:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2907,"name":"uint","nodeType":"ElementaryTypeName","src":"89528:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2910,"indexed":false,"mutability":"mutable","name":"tokenAddress","nameLocation":"89558:12:0","nodeType":"VariableDeclaration","scope":2916,"src":"89550:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2909,"name":"address","nodeType":"ElementaryTypeName","src":"89550:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2912,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"89581:5:0","nodeType":"VariableDeclaration","scope":2916,"src":"89576:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2911,"name":"uint","nodeType":"ElementaryTypeName","src":"89576:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2914,"indexed":false,"mutability":"mutable","name":"lockAddress","nameLocation":"89600:11:0","nodeType":"VariableDeclaration","scope":2916,"src":"89592:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2913,"name":"address","nodeType":"ElementaryTypeName","src":"89592:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89492:123:0"},"src":"89476:140:0"},{"anonymous":false,"eventSelector":"7b2ce3c83b45f79993ff2cbf5651caff2dfe04010b4846e03066b84e3e4059bb","id":2922,"name":"ResetTrackedValue","nameLocation":"89626:17:0","nodeType":"EventDefinition","parameters":{"id":2921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"indexed":false,"mutability":"mutable","name":"grossNetworkProduct","nameLocation":"89649:19:0","nodeType":"VariableDeclaration","scope":2922,"src":"89644:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2917,"name":"uint","nodeType":"ElementaryTypeName","src":"89644:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2920,"indexed":false,"mutability":"mutable","name":"totalDiscountGranted","nameLocation":"89675:20:0","nodeType":"VariableDeclaration","scope":2922,"src":"89670:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2919,"name":"uint","nodeType":"ElementaryTypeName","src":"89670:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"89643:53:0"},"src":"89620:77:0"},{"anonymous":false,"eventSelector":"d36d021c4aa145e30eadc73e34284101030d688b9eb9413a4dc3af40ab1d4748","id":2928,"name":"UnlockTemplateAdded","nameLocation":"89707:19:0","nodeType":"EventDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2924,"indexed":true,"mutability":"mutable","name":"impl","nameLocation":"89743:4:0","nodeType":"VariableDeclaration","scope":2928,"src":"89727:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2923,"name":"address","nodeType":"ElementaryTypeName","src":"89727:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2926,"indexed":true,"mutability":"mutable","name":"version","nameLocation":"89764:7:0","nodeType":"VariableDeclaration","scope":2928,"src":"89749:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2925,"name":"uint16","nodeType":"ElementaryTypeName","src":"89749:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"89726:46:0"},"src":"89701:72:0"},{"body":{"id":2944,"nodeType":"Block","src":"89931:165:0","statements":[{"expression":{"arguments":[{"id":2938,"name":"_unlockOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2930,"src":"90014:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2935,"name":"UnlockOwnable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2784,"src":"89980:13:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_UnlockOwnable_$2784_$","typeString":"type(contract UnlockOwnable)"}},"id":2937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"89994:19:0","memberName":"__initializeOwnable","nodeType":"MemberAccess","referencedDeclaration":2690,"src":"89980:33:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"89980:47:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2940,"nodeType":"ExpressionStatement","src":"89980:47:0"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2941,"name":"_deployProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"90072:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_address_$","typeString":"function () returns (address)"}},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90072:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2943,"nodeType":"ExpressionStatement","src":"90072:19:0"}]},"functionSelector":"c4d66de8","id":2945,"implemented":true,"kind":"function","modifiers":[{"id":2933,"kind":"modifierInvocation","modifierName":{"id":2932,"name":"initializer","nameLocations":["89919:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":2587,"src":"89919:11:0"},"nodeType":"ModifierInvocation","src":"89919:11:0"}],"name":"initialize","nameLocation":"89879:10:0","nodeType":"FunctionDefinition","parameters":{"id":2931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2930,"mutability":"mutable","name":"_unlockOwner","nameLocation":"89898:12:0","nodeType":"VariableDeclaration","scope":2945,"src":"89890:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2929,"name":"address","nodeType":"ElementaryTypeName","src":"89890:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"89889:22:0"},"returnParameters":{"id":2934,"nodeType":"ParameterList","parameters":[],"src":"89931:0:0"},"scope":3993,"src":"89870:226:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2964,"nodeType":"Block","src":"90149:120:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2950,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"90159:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"90188:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"90180:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2951,"name":"address","nodeType":"ElementaryTypeName","src":"90180:7:0","typeDescriptions":{}}},"id":2954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90180:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"90159:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2960,"nodeType":"IfStatement","src":"90155:85:0","trueBody":{"id":2959,"nodeType":"Block","src":"90192:48:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2956,"name":"Unlock__ALREADY_DEPLOYED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2864,"src":"90207:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":2957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90207:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2958,"nodeType":"RevertStatement","src":"90200:33:0"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2961,"name":"_deployProxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"90245:17:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_address_$","typeString":"function () returns (address)"}},"id":2962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90245:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2963,"nodeType":"ExpressionStatement","src":"90245:19:0"}]},"functionSelector":"c7d7d0c9","id":2965,"implemented":true,"kind":"function","modifiers":[{"id":2948,"kind":"modifierInvocation","modifierName":{"id":2947,"name":"onlyOwner","nameLocations":["90139:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"90139:9:0"},"nodeType":"ModifierInvocation","src":"90139:9:0"}],"name":"initializeProxyAdmin","nameLocation":"90109:20:0","nodeType":"FunctionDefinition","parameters":{"id":2946,"nodeType":"ParameterList","parameters":[],"src":"90129:2:0"},"returnParameters":{"id":2949,"nodeType":"ParameterList","parameters":[],"src":"90149:0:0"},"scope":3993,"src":"90100:169:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":2990,"nodeType":"Block","src":"90506:117:0","statements":[{"expression":{"id":2976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2971,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"90512:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":2974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"90525:14:0","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_ProxyAdmin_$1215_$","typeString":"function () returns (contract ProxyAdmin)"},"typeName":{"id":2973,"nodeType":"UserDefinedTypeName","pathNode":{"id":2972,"name":"ProxyAdmin","nameLocations":["90529:10:0"],"nodeType":"IdentifierPath","referencedDeclaration":1215,"src":"90529:10:0"},"referencedDeclaration":1215,"src":"90529:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}}},"id":2975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90525:16:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"src":"90512:29:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"id":2977,"nodeType":"ExpressionStatement","src":"90512:29:0"},{"expression":{"id":2983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2978,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"90547:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2981,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"90575:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}],"id":2980,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"90567:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2979,"name":"address","nodeType":"ElementaryTypeName","src":"90567:7:0","typeDescriptions":{}}},"id":2982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90567:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"90547:39:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2984,"nodeType":"ExpressionStatement","src":"90547:39:0"},{"expression":{"arguments":[{"id":2987,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"90607:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}],"id":2986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"90599:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2985,"name":"address","nodeType":"ElementaryTypeName","src":"90599:7:0","typeDescriptions":{}}},"id":2988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"90599:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2970,"id":2989,"nodeType":"Return","src":"90592:26:0"}]},"documentation":{"id":2966,"nodeType":"StructuredDocumentation","src":"90273:175:0","text":" @dev Deploy the ProxyAdmin contract that will manage lock templates upgrades\n This deploys an instance of ProxyAdmin used by PublicLock transparent proxies."},"id":2991,"implemented":true,"kind":"function","modifiers":[],"name":"_deployProxyAdmin","nameLocation":"90460:17:0","nodeType":"FunctionDefinition","parameters":{"id":2967,"nodeType":"ParameterList","parameters":[],"src":"90477:2:0"},"returnParameters":{"id":2970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2991,"src":"90497:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2968,"name":"address","nodeType":"ElementaryTypeName","src":"90497:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"90496:9:0"},"scope":3993,"src":"90451:172:0","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":3003,"nodeType":"Block","src":"90787:44:0","statements":[{"expression":{"baseExpression":{"id":2999,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"90800:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3001,"indexExpression":{"id":3000,"name":"_impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"90820:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"90800:26:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":2998,"id":3002,"nodeType":"Return","src":"90793:33:0"}]},"documentation":{"id":2992,"nodeType":"StructuredDocumentation","src":"90627:83:0","text":" @dev Helper to get the version number of a template from his address"},"functionSelector":"25772ad9","id":3004,"implemented":true,"kind":"function","modifiers":[],"name":"publicLockVersions","nameLocation":"90722:18:0","nodeType":"FunctionDefinition","parameters":{"id":2995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2994,"mutability":"mutable","name":"_impl","nameLocation":"90749:5:0","nodeType":"VariableDeclaration","scope":3004,"src":"90741:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2993,"name":"address","nodeType":"ElementaryTypeName","src":"90741:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"90740:15:0"},"returnParameters":{"id":2998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2997,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3004,"src":"90779:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":2996,"name":"uint16","nodeType":"ElementaryTypeName","src":"90779:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"90778:8:0"},"scope":3993,"src":"90713:118:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3016,"nodeType":"Block","src":"90999:44:0","statements":[{"expression":{"baseExpression":{"id":3012,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"91012:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3014,"indexExpression":{"id":3013,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3007,"src":"91029:8:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"91012:26:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3011,"id":3015,"nodeType":"Return","src":"91005:33:0"}]},"documentation":{"id":3005,"nodeType":"StructuredDocumentation","src":"90835:87:0","text":" @dev Helper to get the address of a template based on its version number"},"functionSelector":"666018a5","id":3017,"implemented":true,"kind":"function","modifiers":[],"name":"publicLockImpls","nameLocation":"90934:15:0","nodeType":"FunctionDefinition","parameters":{"id":3008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3007,"mutability":"mutable","name":"_version","nameLocation":"90957:8:0","nodeType":"VariableDeclaration","scope":3017,"src":"90950:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3006,"name":"uint16","nodeType":"ElementaryTypeName","src":"90950:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"90949:17:0"},"returnParameters":{"id":3011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3017,"src":"90990:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3009,"name":"address","nodeType":"ElementaryTypeName","src":"90990:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"90989:9:0"},"scope":3993,"src":"90925:118:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3068,"nodeType":"Block","src":"91385:373:0","statements":[{"expression":{"arguments":[{"arguments":[{"id":3033,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"91551:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}],"id":3032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"91543:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3031,"name":"address","nodeType":"ElementaryTypeName","src":"91543:7:0","typeDescriptions":{}}},"id":3034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91543:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":3035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91558:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":3038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91569:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"91561:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3036,"name":"address","nodeType":"ElementaryTypeName","src":"91561:7:0","typeDescriptions":{}}},"id":3039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91561:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":3040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91573:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"91576:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"","id":3042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"91579:2:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"arguments":[{"id":3028,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91526:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3027,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"91514:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91514:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"91532:10:0","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":1275,"src":"91514:28:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256,string memory) external"}},"id":3043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91514:68:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3044,"nodeType":"ExpressionStatement","src":"91514:68:0"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":3046,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91600:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3045,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"91588:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91588:17:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"91606:19:0","memberName":"renounceLockManager","nodeType":"MemberAccess","referencedDeclaration":1595,"src":"91588:37:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91588:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3050,"nodeType":"ExpressionStatement","src":"91588:39:0"},{"expression":{"id":3055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3051,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"91634:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3053,"indexExpression":{"id":3052,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91654:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"91634:25:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3054,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"91662:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"91634:35:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":3056,"nodeType":"ExpressionStatement","src":"91634:35:0"},{"expression":{"id":3061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3057,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"91675:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3059,"indexExpression":{"id":3058,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"91692:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"91675:25:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3060,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91703:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"91675:32:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3062,"nodeType":"ExpressionStatement","src":"91675:32:0"},{"eventCall":{"arguments":[{"id":3064,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3020,"src":"91739:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3065,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"91745:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":3063,"name":"UnlockTemplateAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2928,"src":"91719:19:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint16)"}},"id":3066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"91719:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3067,"nodeType":"EmitStatement","src":"91714:39:0"}]},"documentation":{"id":3018,"nodeType":"StructuredDocumentation","src":"91047:263:0","text":" @dev Registers a new PublicLock template immplementation\n The template is identified by a version number\n Once registered, the template can be used to upgrade an existing Lock\n @dev This will initialize the template and revokeOwnership."},"functionSelector":"caeee3a3","id":3069,"implemented":true,"kind":"function","modifiers":[{"id":3025,"kind":"modifierInvocation","modifierName":{"id":3024,"name":"onlyOwner","nameLocations":["91375:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"91375:9:0"},"nodeType":"ModifierInvocation","src":"91375:9:0"}],"name":"addLockTemplate","nameLocation":"91322:15:0","nodeType":"FunctionDefinition","parameters":{"id":3023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3020,"mutability":"mutable","name":"impl","nameLocation":"91346:4:0","nodeType":"VariableDeclaration","scope":3069,"src":"91338:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3019,"name":"address","nodeType":"ElementaryTypeName","src":"91338:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3022,"mutability":"mutable","name":"version","nameLocation":"91359:7:0","nodeType":"VariableDeclaration","scope":3069,"src":"91352:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3021,"name":"uint16","nodeType":"ElementaryTypeName","src":"91352:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"91337:30:0"},"returnParameters":{"id":3026,"nodeType":"ParameterList","parameters":[],"src":"91385:0:0"},"scope":3993,"src":"91313:445:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3105,"nodeType":"Block","src":"92692:293:0","statements":[{"assignments":[3088],"declarations":[{"constant":false,"id":3088,"mutability":"mutable","name":"data","nameLocation":"92711:4:0","nodeType":"VariableDeclaration","scope":3105,"src":"92698:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3087,"name":"bytes","nodeType":"ElementaryTypeName","src":"92698:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3100,"initialValue":{"arguments":[{"hexValue":"696e697469616c697a6528616464726573732c75696e743235362c616464726573732c75696e743235362c75696e743235362c737472696e6729","id":3091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"92749:60:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_6eadde437099d0265e7165a15d81631ed9730315ed96ffeb677d29c93655bb57","typeString":"literal_string \"initialize(address,uint256,address,uint256,uint256,string)\""},"value":"initialize(address,uint256,address,uint256,uint256,string)"},{"expression":{"id":3092,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"92817:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"92821:6:0","memberName":"sender","nodeType":"MemberAccess","src":"92817:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3094,"name":"_expirationDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"92835:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3095,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3074,"src":"92862:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3096,"name":"_keyPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3076,"src":"92883:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3097,"name":"_maxNumberOfKeys","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3078,"src":"92900:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3098,"name":"_lockName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3080,"src":"92924:9:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6eadde437099d0265e7165a15d81631ed9730315ed96ffeb677d29c93655bb57","typeString":"literal_string \"initialize(address,uint256,address,uint256,uint256,string)\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":3089,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"92718:3:0","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"92722:19:0","memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"92718:23:0","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":3099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"92718:221:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"92698:241:0"},{"expression":{"arguments":[{"id":3102,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3088,"src":"92975:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3101,"name":"createUpgradeableLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3124,"src":"92953:21:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (bytes memory) returns (address)"}},"id":3103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"92953:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3086,"id":3104,"nodeType":"Return","src":"92946:34:0"}]},"documentation":{"id":3070,"nodeType":"StructuredDocumentation","src":"91762:721:0","text":" @notice Create lock (legacy)\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param _expirationDuration the duration of the lock (pass type(uint).max for unlimited duration)\n @param _tokenAddress set to the ERC20 token address, or 0 for ETH.\n @param _keyPrice the price of each key\n @param _maxNumberOfKeys the maximum nimbers of keys to be edited\n @param _lockName the name of the lock\n param _salt [deprec] -- kept only for backwards copatibility\n This may be implemented as a sequence ID or with RNG. It's used with `create2`\n to know the lock's address before the transaction is mined.\n @dev internally call `createUpgradeableLock`"},"functionSelector":"42d92106","id":3106,"implemented":true,"kind":"function","modifiers":[],"name":"createLock","nameLocation":"92495:10:0","nodeType":"FunctionDefinition","parameters":{"id":3083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3072,"mutability":"mutable","name":"_expirationDuration","nameLocation":"92516:19:0","nodeType":"VariableDeclaration","scope":3106,"src":"92511:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3071,"name":"uint","nodeType":"ElementaryTypeName","src":"92511:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3074,"mutability":"mutable","name":"_tokenAddress","nameLocation":"92549:13:0","nodeType":"VariableDeclaration","scope":3106,"src":"92541:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3073,"name":"address","nodeType":"ElementaryTypeName","src":"92541:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3076,"mutability":"mutable","name":"_keyPrice","nameLocation":"92573:9:0","nodeType":"VariableDeclaration","scope":3106,"src":"92568:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3075,"name":"uint","nodeType":"ElementaryTypeName","src":"92568:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3078,"mutability":"mutable","name":"_maxNumberOfKeys","nameLocation":"92593:16:0","nodeType":"VariableDeclaration","scope":3106,"src":"92588:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3077,"name":"uint","nodeType":"ElementaryTypeName","src":"92588:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3080,"mutability":"mutable","name":"_lockName","nameLocation":"92631:9:0","nodeType":"VariableDeclaration","scope":3106,"src":"92615:25:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":3079,"name":"string","nodeType":"ElementaryTypeName","src":"92615:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3082,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3106,"src":"92646:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"},"typeName":{"id":3081,"name":"bytes12","nodeType":"ElementaryTypeName","src":"92646:7:0","typeDescriptions":{"typeIdentifier":"t_bytes12","typeString":"bytes12"}},"visibility":"internal"}],"src":"92505:161:0"},"returnParameters":{"id":3086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3106,"src":"92683:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3084,"name":"address","nodeType":"ElementaryTypeName","src":"92683:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"92682:9:0"},"scope":3993,"src":"92486:499:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3123,"nodeType":"Block","src":"93641:128:0","statements":[{"assignments":[3115],"declarations":[{"constant":false,"id":3115,"mutability":"mutable","name":"newLock","nameLocation":"93655:7:0","nodeType":"VariableDeclaration","scope":3123,"src":"93647:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3114,"name":"address","nodeType":"ElementaryTypeName","src":"93647:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3120,"initialValue":{"arguments":[{"id":3117,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3109,"src":"93703:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3118,"name":"publicLockLatestVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2854,"src":"93715:23:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":3116,"name":"createUpgradeableLockAtVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3202,"src":"93665:30:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_uint16_$returns$_t_address_$","typeString":"function (bytes memory,uint16) returns (address)"}},"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"93665:79:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"93647:97:0"},{"expression":{"id":3121,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3115,"src":"93757:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3113,"id":3122,"nodeType":"Return","src":"93750:14:0"}]},"documentation":{"id":3107,"nodeType":"StructuredDocumentation","src":"92989:574:0","text":" @notice Create upgradeable lock\n This deploys a lock for a creator. It also keeps track of the deployed lock.\n @param data bytes containing the call to initialize the lock template\n @dev this call is passed as encoded function - for instance:\n bytes memory data = abi.encodeWithSignature(\n 'initialize(address,uint256,address,uint256,uint256,string)',\n msg.sender,\n _expirationDuration,\n _tokenAddress,\n _keyPrice,\n _maxNumberOfKeys,\n _lockName\n );\n @return address of the create lock"},"functionSelector":"4452c2b2","id":3124,"implemented":true,"kind":"function","modifiers":[],"name":"createUpgradeableLock","nameLocation":"93575:21:0","nodeType":"FunctionDefinition","parameters":{"id":3110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3109,"mutability":"mutable","name":"data","nameLocation":"93610:4:0","nodeType":"VariableDeclaration","scope":3124,"src":"93597:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3108,"name":"bytes","nodeType":"ElementaryTypeName","src":"93597:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"93596:19:0"},"returnParameters":{"id":3113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3124,"src":"93632:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3111,"name":"address","nodeType":"ElementaryTypeName","src":"93632:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"93631:9:0"},"scope":3993,"src":"93566:203:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3201,"nodeType":"Block","src":"94156:736:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3134,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"94166:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94195:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94187:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3135,"name":"address","nodeType":"ElementaryTypeName","src":"94187:7:0","typeDescriptions":{}}},"id":3138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94187:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"94166:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3144,"nodeType":"IfStatement","src":"94162:88:0","trueBody":{"id":3143,"nodeType":"Block","src":"94199:51:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3140,"name":"Unlock__MISSING_PROXY_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"94214:27:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94214:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3142,"nodeType":"RevertStatement","src":"94207:36:0"}]}},{"assignments":[3146],"declarations":[{"constant":false,"id":3146,"mutability":"mutable","name":"publicLockImpl","nameLocation":"94288:14:0","nodeType":"VariableDeclaration","scope":3201,"src":"94280:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3145,"name":"address","nodeType":"ElementaryTypeName","src":"94280:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3150,"initialValue":{"baseExpression":{"id":3147,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"94305:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3149,"indexExpression":{"id":3148,"name":"_lockVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3129,"src":"94322:12:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"94305:30:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"94280:55:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3151,"name":"publicLockImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3146,"src":"94345:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94371:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3153,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94363:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3152,"name":"address","nodeType":"ElementaryTypeName","src":"94363:7:0","typeDescriptions":{}}},"id":3155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94363:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"94345:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3161,"nodeType":"IfStatement","src":"94341:87:0","trueBody":{"id":3160,"nodeType":"Block","src":"94375:53:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3157,"name":"Unlock__MISSING_LOCK_TEMPLATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"94390:29:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94390:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3159,"nodeType":"RevertStatement","src":"94383:38:0"}]}},{"assignments":[3164],"declarations":[{"constant":false,"id":3164,"mutability":"mutable","name":"proxy","nameLocation":"94501:5:0","nodeType":"VariableDeclaration","scope":3201,"src":"94473:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":3163,"nodeType":"UserDefinedTypeName","pathNode":{"id":3162,"name":"TransparentUpgradeableProxy","nameLocations":["94473:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"94473:27:0"},"referencedDeclaration":1082,"src":"94473:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"id":3172,"initialValue":{"arguments":[{"id":3168,"name":"publicLockImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3146,"src":"94548:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3169,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"94570:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3170,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3127,"src":"94595:4:0","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"94509:31:0","typeDescriptions":{"typeIdentifier":"t_function_creation_payable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$_t_contract$_TransparentUpgradeableProxy_$1082_$","typeString":"function (address,address,bytes memory) payable returns (contract TransparentUpgradeableProxy)"},"typeName":{"id":3166,"nodeType":"UserDefinedTypeName","pathNode":{"id":3165,"name":"TransparentUpgradeableProxy","nameLocations":["94513:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"94513:27:0"},"referencedDeclaration":1082,"src":"94513:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}},"id":3171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94509:96:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"nodeType":"VariableDeclarationStatement","src":"94473:132:0"},{"assignments":[3174],"declarations":[{"constant":false,"id":3174,"mutability":"mutable","name":"newLock","nameLocation":"94627:7:0","nodeType":"VariableDeclaration","scope":3201,"src":"94611:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3173,"name":"address","nodeType":"ElementaryTypeName","src":"94611:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":3182,"initialValue":{"arguments":[{"arguments":[{"id":3179,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3164,"src":"94653:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}],"id":3178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94645:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3177,"name":"address","nodeType":"ElementaryTypeName","src":"94645:7:0","typeDescriptions":{}}},"id":3180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94645:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"94637:8:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3175,"name":"address","nodeType":"ElementaryTypeName","src":"94637:8:0","stateMutability":"payable","typeDescriptions":{}}},"id":3181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94637:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"94611:49:0"},{"expression":{"id":3191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3183,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"94694:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3185,"indexExpression":{"id":3184,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"94700:7:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"94694:14:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"74727565","id":3187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"94742:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":3188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94766:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"94798:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3186,"name":"LockBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"94711:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_LockBalances_$2798_storage_ptr_$","typeString":"type(struct Unlock.LockBalances storage pointer)"}},"id":3190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["94732:8:0","94754:10:0","94775:21:0"],"names":["deployed","totalSales","yieldedDiscountTokens"],"nodeType":"FunctionCall","src":"94711:95:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_memory_ptr","typeString":"struct Unlock.LockBalances memory"}},"src":"94694:112:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3192,"nodeType":"ExpressionStatement","src":"94694:112:0"},{"eventCall":{"arguments":[{"expression":{"id":3194,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"94847:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"94851:6:0","memberName":"sender","nodeType":"MemberAccess","src":"94847:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3196,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"94859:7:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3193,"name":"NewLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"94839:7:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"94839:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3198,"nodeType":"EmitStatement","src":"94834:33:0"},{"expression":{"id":3199,"name":"newLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3174,"src":"94880:7:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":3133,"id":3200,"nodeType":"Return","src":"94873:14:0"}]},"documentation":{"id":3125,"nodeType":"StructuredDocumentation","src":"93773:263:0","text":" Create an upgradeable lock using a specific PublicLock version\n @param data bytes containing the call to initialize the lock template\n (refer to createUpgradeableLock for more details)\n @param _lockVersion the version of the lock to use"},"functionSelector":"487a8a76","id":3202,"implemented":true,"kind":"function","modifiers":[],"name":"createUpgradeableLockAtVersion","nameLocation":"94048:30:0","nodeType":"FunctionDefinition","parameters":{"id":3130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3127,"mutability":"mutable","name":"data","nameLocation":"94097:4:0","nodeType":"VariableDeclaration","scope":3202,"src":"94084:17:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3126,"name":"bytes","nodeType":"ElementaryTypeName","src":"94084:5:0","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3129,"mutability":"mutable","name":"_lockVersion","nameLocation":"94114:12:0","nodeType":"VariableDeclaration","scope":3202,"src":"94107:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3128,"name":"uint16","nodeType":"ElementaryTypeName","src":"94107:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"94078:52:0"},"returnParameters":{"id":3133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3202,"src":"94147:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3131,"name":"address","nodeType":"ElementaryTypeName","src":"94147:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"94146:9:0"},"scope":3993,"src":"94039:853:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3302,"nodeType":"Block","src":"95242:966:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3212,"name":"proxyAdminAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2841,"src":"95252:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"95281:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3214,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"95273:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3213,"name":"address","nodeType":"ElementaryTypeName","src":"95273:7:0","typeDescriptions":{}}},"id":3216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95273:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"95252:31:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3222,"nodeType":"IfStatement","src":"95248:88:0","trueBody":{"id":3221,"nodeType":"Block","src":"95285:51:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3218,"name":"Unlock__MISSING_PROXY_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"95300:27:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95300:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3220,"nodeType":"RevertStatement","src":"95293:36:0"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3224,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"95380:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"expression":{"id":3225,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"95393:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"95397:6:0","memberName":"sender","nodeType":"MemberAccess","src":"95393:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3223,"name":"_isLockManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"95365:14:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (address,address) view returns (bool)"}},"id":3227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95365:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"74727565","id":3228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"95408:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"95365:47:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3234,"nodeType":"IfStatement","src":"95361:97:0","trueBody":{"id":3233,"nodeType":"Block","src":"95414:44:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3230,"name":"Unlock__MANAGER_ONLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2858,"src":"95429:20:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95429:22:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3232,"nodeType":"RevertStatement","src":"95422:29:0"}]}},{"assignments":[3237],"declarations":[{"constant":false,"id":3237,"mutability":"mutable","name":"lock","nameLocation":"95497:4:0","nodeType":"VariableDeclaration","scope":3302,"src":"95485:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"},"typeName":{"id":3236,"nodeType":"UserDefinedTypeName","pathNode":{"id":3235,"name":"IPublicLock","nameLocations":["95485:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":1907,"src":"95485:11:0"},"referencedDeclaration":1907,"src":"95485:11:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"visibility":"internal"}],"id":3241,"initialValue":{"arguments":[{"id":3239,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"95516:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3238,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"95504:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95504:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"nodeType":"VariableDeclarationStatement","src":"95485:43:0"},{"assignments":[3243],"declarations":[{"constant":false,"id":3243,"mutability":"mutable","name":"currentVersion","nameLocation":"95541:14:0","nodeType":"VariableDeclaration","scope":3302,"src":"95534:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3242,"name":"uint16","nodeType":"ElementaryTypeName","src":"95534:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":3247,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3244,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3237,"src":"95558:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"95563:17:0","memberName":"publicLockVersion","nodeType":"MemberAccess","referencedDeclaration":1286,"src":"95558:22:0","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint16_$","typeString":"function () pure external returns (uint16)"}},"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95558:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"95534:48:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3248,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"95593:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3249,"name":"currentVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3243,"src":"95604:14:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"95621:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"95604:18:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"95593:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3257,"nodeType":"IfStatement","src":"95589:83:0","trueBody":{"id":3256,"nodeType":"Block","src":"95624:48:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3253,"name":"Unlock__VERSION_TOO_HIGH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2860,"src":"95639:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95639:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3255,"nodeType":"RevertStatement","src":"95632:33:0"}]}},{"assignments":[3259],"declarations":[{"constant":false,"id":3259,"mutability":"mutable","name":"impl","nameLocation":"95710:4:0","nodeType":"VariableDeclaration","scope":3302,"src":"95702:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3258,"name":"address","nodeType":"ElementaryTypeName","src":"95702:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3263,"initialValue":{"baseExpression":{"id":3260,"name":"_publicLockImpls","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2852,"src":"95717:16:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint16_$_t_address_$","typeString":"mapping(uint16 => address)"}},"id":3262,"indexExpression":{"id":3261,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"95734:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"95717:25:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"95702:40:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3264,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3259,"src":"95752:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"95768:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"95760:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3265,"name":"address","nodeType":"ElementaryTypeName","src":"95760:7:0","typeDescriptions":{}}},"id":3268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95760:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"95752:18:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3274,"nodeType":"IfStatement","src":"95748:72:0","trueBody":{"id":3273,"nodeType":"Block","src":"95772:48:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3270,"name":"Unlock__MISSING_TEMPLATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"95787:24:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95787:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3272,"nodeType":"RevertStatement","src":"95780:33:0"}]}},{"assignments":[3277],"declarations":[{"constant":false,"id":3277,"mutability":"mutable","name":"proxy","nameLocation":"95854:5:0","nodeType":"VariableDeclaration","scope":3302,"src":"95826:33:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},"typeName":{"id":3276,"nodeType":"UserDefinedTypeName","pathNode":{"id":3275,"name":"TransparentUpgradeableProxy","nameLocations":["95826:27:0"],"nodeType":"IdentifierPath","referencedDeclaration":1082,"src":"95826:27:0"},"referencedDeclaration":1082,"src":"95826:27:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"visibility":"internal"}],"id":3281,"initialValue":{"arguments":[{"id":3279,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"95897:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":3278,"name":"TransparentUpgradeableProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1082,"src":"95862:27:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransparentUpgradeableProxy_$1082_$","typeString":"type(contract TransparentUpgradeableProxy)"}},"id":3280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95862:52:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},"nodeType":"VariableDeclarationStatement","src":"95826:88:0"},{"expression":{"arguments":[{"id":3285,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3277,"src":"95940:5:0","typeDescriptions":{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"}},{"id":3286,"name":"impl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3259,"src":"95947:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TransparentUpgradeableProxy_$1082","typeString":"contract TransparentUpgradeableProxy"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3282,"name":"proxyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"95921:10:0","typeDescriptions":{"typeIdentifier":"t_contract$_ProxyAdmin_$1215","typeString":"contract ProxyAdmin"}},"id":3284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"95932:7:0","memberName":"upgrade","nodeType":"MemberAccess","referencedDeclaration":1190,"src":"95921:18:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_TransparentUpgradeableProxy_$1082_$_t_address_$returns$__$","typeString":"function (contract TransparentUpgradeableProxy,address) external"}},"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"95921:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3288,"nodeType":"ExpressionStatement","src":"95921:31:0"},{"expression":{"arguments":[{"hexValue":"3078","id":3292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"96128:4:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""},"value":"0x"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""}],"expression":{"id":3289,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3237,"src":"96115:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"96120:7:0","memberName":"migrate","nodeType":"MemberAccess","referencedDeclaration":1878,"src":"96115:12:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":3293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96115:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3294,"nodeType":"ExpressionStatement","src":"96115:18:0"},{"eventCall":{"arguments":[{"id":3296,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"96158:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":3297,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3207,"src":"96171:7:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":3295,"name":"LockUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"96145:12:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint16)"}},"id":3298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96145:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3299,"nodeType":"EmitStatement","src":"96140:39:0"},{"expression":{"id":3300,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3205,"src":"96192:11:0","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":3211,"id":3301,"nodeType":"Return","src":"96185:18:0"}]},"documentation":{"id":3203,"nodeType":"StructuredDocumentation","src":"94896:237:0","text":" @dev Upgrade a Lock template implementation\n @param lockAddress the address of the lock to be upgraded\n @param version the version number of the template\n @custom:oz-upgrades-unsafe-allow-reachable delegatecall"},"functionSelector":"ccf54648","id":3303,"implemented":true,"kind":"function","modifiers":[],"name":"upgradeLock","nameLocation":"95146:11:0","nodeType":"FunctionDefinition","parameters":{"id":3208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3205,"mutability":"mutable","name":"lockAddress","nameLocation":"95179:11:0","nodeType":"VariableDeclaration","scope":3303,"src":"95163:27:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":3204,"name":"address","nodeType":"ElementaryTypeName","src":"95163:15:0","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":3207,"mutability":"mutable","name":"version","nameLocation":"95203:7:0","nodeType":"VariableDeclaration","scope":3303,"src":"95196:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3206,"name":"uint16","nodeType":"ElementaryTypeName","src":"95196:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"95157:57:0"},"returnParameters":{"id":3211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3303,"src":"95233:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3209,"name":"address","nodeType":"ElementaryTypeName","src":"95233:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"95232:9:0"},"scope":3993,"src":"95137:1071:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3324,"nodeType":"Block","src":"96324:94:0","statements":[{"assignments":[3314],"declarations":[{"constant":false,"id":3314,"mutability":"mutable","name":"lock","nameLocation":"96342:4:0","nodeType":"VariableDeclaration","scope":3324,"src":"96330:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"},"typeName":{"id":3313,"nodeType":"UserDefinedTypeName","pathNode":{"id":3312,"name":"IPublicLock","nameLocations":["96330:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":1907,"src":"96330:11:0"},"referencedDeclaration":1907,"src":"96330:11:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"visibility":"internal"}],"id":3318,"initialValue":{"arguments":[{"id":3316,"name":"lockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3305,"src":"96361:11:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3315,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"96349:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96349:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"nodeType":"VariableDeclarationStatement","src":"96330:43:0"},{"expression":{"arguments":[{"id":3321,"name":"_sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3307,"src":"96405:7:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3319,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3314,"src":"96386:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"96391:13:0","memberName":"isLockManager","nodeType":"MemberAccess","referencedDeclaration":1550,"src":"96386:18:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":3322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"96386:27:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3311,"id":3323,"nodeType":"Return","src":"96379:34:0"}]},"id":3325,"implemented":true,"kind":"function","modifiers":[],"name":"_isLockManager","nameLocation":"96221:14:0","nodeType":"FunctionDefinition","parameters":{"id":3308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3305,"mutability":"mutable","name":"lockAddress","nameLocation":"96249:11:0","nodeType":"VariableDeclaration","scope":3325,"src":"96241:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3304,"name":"address","nodeType":"ElementaryTypeName","src":"96241:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3307,"mutability":"mutable","name":"_sender","nameLocation":"96274:7:0","nodeType":"VariableDeclaration","scope":3325,"src":"96266:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3306,"name":"address","nodeType":"ElementaryTypeName","src":"96266:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"96235:50:0"},"returnParameters":{"id":3311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3310,"mutability":"mutable","name":"isManager","nameLocation":"96313:9:0","nodeType":"VariableDeclaration","scope":3325,"src":"96308:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3309,"name":"bool","nodeType":"ElementaryTypeName","src":"96308:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"96307:16:0"},"scope":3993,"src":"96212:206:0","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":3341,"nodeType":"Block","src":"96723:24:0","statements":[{"expression":{"components":[{"hexValue":"30","id":3337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"96737:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":3338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"96740:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":3339,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"96736:6:0","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"functionReturnParameters":3336,"id":3340,"nodeType":"Return","src":"96729:13:0"}]},"documentation":{"id":3326,"nodeType":"StructuredDocumentation","src":"96422:152:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] Kept for backwards compatibility"},"functionSelector":"0cb175e3","id":3342,"implemented":true,"kind":"function","modifiers":[],"name":"computeAvailableDiscountFor","nameLocation":"96586:27:0","nodeType":"FunctionDefinition","parameters":{"id":3331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3342,"src":"96619:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3327,"name":"address","nodeType":"ElementaryTypeName","src":"96619:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3342,"src":"96649:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3329,"name":"uint","nodeType":"ElementaryTypeName","src":"96649:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"96613:60:0"},"returnParameters":{"id":3336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3333,"mutability":"mutable","name":"discount","nameLocation":"96700:8:0","nodeType":"VariableDeclaration","scope":3342,"src":"96695:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3332,"name":"uint","nodeType":"ElementaryTypeName","src":"96695:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3335,"mutability":"mutable","name":"tokens","nameLocation":"96715:6:0","nodeType":"VariableDeclaration","scope":3342,"src":"96710:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3334,"name":"uint","nodeType":"ElementaryTypeName","src":"96710:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"96694:28:0"},"scope":3993,"src":"96577:170:0","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":3351,"nodeType":"Block","src":"97017:31:0","statements":[{"expression":{"expression":{"id":3348,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"97030:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97036:7:0","memberName":"basefee","nodeType":"MemberAccess","src":"97030:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3347,"id":3350,"nodeType":"Return","src":"97023:20:0"}]},"documentation":{"id":3343,"nodeType":"StructuredDocumentation","src":"96751:208:0","text":" Helper to get the network mining basefee as introduced in EIP-1559\n @dev this helper can be wrapped in try/catch statement to avoid\n revert in networks where EIP-1559 is not implemented"},"functionSelector":"ba5ea0d5","id":3352,"implemented":true,"kind":"function","modifiers":[],"name":"networkBaseFee","nameLocation":"96971:14:0","nodeType":"FunctionDefinition","parameters":{"id":3344,"nodeType":"ParameterList","parameters":[],"src":"96985:2:0"},"returnParameters":{"id":3347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3352,"src":"97011:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3345,"name":"uint","nodeType":"ElementaryTypeName","src":"97011:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"97010:6:0"},"scope":3993,"src":"96962:86:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3614,"nodeType":"Block","src":"97510:3076:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3362,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"97520:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"97529:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"97520:10:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3613,"nodeType":"IfStatement","src":"97516:3066:0","trueBody":{"id":3612,"nodeType":"Block","src":"97532:3050:0","statements":[{"assignments":[3366],"declarations":[{"constant":false,"id":3366,"mutability":"mutable","name":"valueInETH","nameLocation":"97545:10:0","nodeType":"VariableDeclaration","scope":3612,"src":"97540:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3365,"name":"uint","nodeType":"ElementaryTypeName","src":"97540:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3367,"nodeType":"VariableDeclarationStatement","src":"97540:15:0"},{"assignments":[3369],"declarations":[{"constant":false,"id":3369,"mutability":"mutable","name":"tokenAddress","nameLocation":"97571:12:0","nodeType":"VariableDeclaration","scope":3612,"src":"97563:20:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3368,"name":"address","nodeType":"ElementaryTypeName","src":"97563:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3376,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3371,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"97598:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97602:6:0","memberName":"sender","nodeType":"MemberAccess","src":"97598:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3370,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"97586:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97586:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97610:12:0","memberName":"tokenAddress","nodeType":"MemberAccess","referencedDeclaration":1631,"src":"97586:36:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97586:38:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"97563:61:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3377,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97636:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"97660:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"97652:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3378,"name":"address","nodeType":"ElementaryTypeName","src":"97652:7:0","typeDescriptions":{}}},"id":3381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97652:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"97636:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3383,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97666:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3384,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"97682:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"97666:20:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"97636:50:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3419,"nodeType":"Block","src":"97973:109:0","statements":[{"expression":{"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3415,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"98054:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3416,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"98067:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"98054:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3418,"nodeType":"ExpressionStatement","src":"98054:19:0"}]},"id":3420,"nodeType":"IfStatement","src":"97632:450:0","trueBody":{"id":3414,"nodeType":"Block","src":"97688:279:0","statements":[{"assignments":[3389],"declarations":[{"constant":false,"id":3389,"mutability":"mutable","name":"oracle","nameLocation":"97790:6:0","nodeType":"VariableDeclaration","scope":3414,"src":"97773:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"},"typeName":{"id":3388,"nodeType":"UserDefinedTypeName","pathNode":{"id":3387,"name":"IUniswapOracleV3","nameLocations":["97773:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":1948,"src":"97773:16:0"},"referencedDeclaration":1948,"src":"97773:16:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"visibility":"internal"}],"id":3393,"initialValue":{"baseExpression":{"id":3390,"name":"uniswapOracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"97799:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"}},"id":3392,"indexExpression":{"id":3391,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97814:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"97799:28:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"nodeType":"VariableDeclarationStatement","src":"97773:54:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3396,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"97849:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}],"id":3395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"97841:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3394,"name":"address","nodeType":"ElementaryTypeName","src":"97841:7:0","typeDescriptions":{}}},"id":3397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97841:15:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"97868:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3399,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"97860:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3398,"name":"address","nodeType":"ElementaryTypeName","src":"97860:7:0","typeDescriptions":{}}},"id":3401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97860:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"97841:29:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3413,"nodeType":"IfStatement","src":"97837:122:0","trueBody":{"id":3412,"nodeType":"Block","src":"97872:87:0","statements":[{"expression":{"id":3410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3403,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"97884:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3406,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"97921:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3407,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"97935:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3408,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"97943:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3404,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"97897:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"97904:16:0","memberName":"updateAndConsult","nodeType":"MemberAccess","referencedDeclaration":1947,"src":"97897:23:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":3409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"97897:51:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"97884:64:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3411,"nodeType":"ExpressionStatement","src":"97884:64:0"}]}}]}},{"expression":{"arguments":[{"id":3422,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"98125:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3423,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"98145:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3424,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"98167:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3425,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"98183:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98187:6:0","memberName":"sender","nodeType":"MemberAccess","src":"98183:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3421,"name":"updateGrossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3642,"src":"98090:25:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,address,uint256,address)"}},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98090:126:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3428,"nodeType":"ExpressionStatement","src":"98090:126:0"},{"expression":{"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":3429,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"98295:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3432,"indexExpression":{"expression":{"id":3430,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"98301:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98305:6:0","memberName":"sender","nodeType":"MemberAccess","src":"98301:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"98295:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"98313:10:0","memberName":"totalSales","nodeType":"MemberAccess","referencedDeclaration":2795,"src":"98295:28:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3434,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"98327:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"98295:42:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3436,"nodeType":"ExpressionStatement","src":"98295:42:0"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3437,"name":"_referrer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"98533:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98554:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98546:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3438,"name":"address","nodeType":"ElementaryTypeName","src":"98546:7:0","typeDescriptions":{}}},"id":3441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98546:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"98533:23:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3444,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"98580:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98584:6:0","memberName":"sender","nodeType":"MemberAccess","src":"98580:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3443,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"98568:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98568:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98592:17:0","memberName":"publicLockVersion","nodeType":"MemberAccess","referencedDeclaration":1286,"src":"98568:41:0","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint16_$","typeString":"function () pure external returns (uint16)"}},"id":3448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98568:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"3133","id":3449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98615:2:0","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"98568:49:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"98533:84:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3611,"nodeType":"IfStatement","src":"98520:2056:0","trueBody":{"id":3610,"nodeType":"Block","src":"98626:1950:0","statements":[{"assignments":[3454],"declarations":[{"constant":false,"id":3454,"mutability":"mutable","name":"udtOracle","nameLocation":"98653:9:0","nodeType":"VariableDeclaration","scope":3610,"src":"98636:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"},"typeName":{"id":3453,"nodeType":"UserDefinedTypeName","pathNode":{"id":3452,"name":"IUniswapOracleV3","nameLocations":["98636:16:0"],"nodeType":"IdentifierPath","referencedDeclaration":1948,"src":"98636:16:0"},"referencedDeclaration":1948,"src":"98636:16:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"visibility":"internal"}],"id":3458,"initialValue":{"baseExpression":{"id":3455,"name":"uniswapOracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"98665:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"}},"id":3457,"indexExpression":{"id":3456,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"98680:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"98665:19:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"nodeType":"VariableDeclarationStatement","src":"98636:48:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3461,"name":"udtOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"98706:9:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}],"id":3460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98698:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3459,"name":"address","nodeType":"ElementaryTypeName","src":"98698:7:0","typeDescriptions":{}}},"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98698:18:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98728:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98720:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3463,"name":"address","nodeType":"ElementaryTypeName","src":"98720:7:0","typeDescriptions":{}}},"id":3466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98720:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"98698:32:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3609,"nodeType":"IfStatement","src":"98694:1874:0","trueBody":{"id":3608,"nodeType":"Block","src":"98732:1836:0","statements":[{"assignments":[3469],"declarations":[{"constant":false,"id":3469,"mutability":"mutable","name":"udtPrice","nameLocation":"98809:8:0","nodeType":"VariableDeclaration","scope":3608,"src":"98804:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3468,"name":"uint","nodeType":"ElementaryTypeName","src":"98804:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3478,"initialValue":{"arguments":[{"id":3472,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"98847:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":3475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98852:2:0","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":3474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"98858:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"98852:8:0","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}},{"id":3476,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"98862:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3470,"name":"udtOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3454,"src":"98820:9:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98830:16:0","memberName":"updateAndConsult","nodeType":"MemberAccess","referencedDeclaration":1947,"src":"98820:26:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":3477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98820:47:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"98804:63:0"},{"assignments":[3480],"declarations":[{"constant":false,"id":3480,"mutability":"mutable","name":"balance","nameLocation":"98885:7:0","nodeType":"VariableDeclaration","scope":3608,"src":"98880:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3479,"name":"uint","nodeType":"ElementaryTypeName","src":"98880:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3490,"initialValue":{"arguments":[{"arguments":[{"id":3487,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"98933:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}],"id":3486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"98925:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3485,"name":"address","nodeType":"ElementaryTypeName","src":"98925:7:0","typeDescriptions":{}}},"id":3488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98925:13:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3482,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"98910:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3481,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"98895:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98895:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"98915:9:0","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1246,"src":"98895:29:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":3489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"98895:44:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"98880:59:0"},{"assignments":[3492],"declarations":[{"constant":false,"id":3492,"mutability":"mutable","name":"baseFee","nameLocation":"99020:7:0","nodeType":"VariableDeclaration","scope":3608,"src":"99015:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3491,"name":"uint","nodeType":"ElementaryTypeName","src":"99015:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3493,"nodeType":"VariableDeclarationStatement","src":"99015:12:0"},{"clauses":[{"block":{"id":3514,"nodeType":"Block","src":"99089:177:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3500,"name":"_basefee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"99140:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99152:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"99140:13:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3512,"nodeType":"Block","src":"99205:49:0","statements":[{"expression":{"id":3510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3508,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99221:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3509,"name":"_basefee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3498,"src":"99231:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99221:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3511,"nodeType":"ExpressionStatement","src":"99221:18:0"}]},"id":3513,"nodeType":"IfStatement","src":"99136:118:0","trueBody":{"id":3507,"nodeType":"Block","src":"99155:44:0","statements":[{"expression":{"id":3505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3503,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99171:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"313030","id":3504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99181:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"99171:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3506,"nodeType":"ExpressionStatement","src":"99171:13:0"}]}}]},"errorName":"","id":3515,"nodeType":"TryCatchClause","parameters":{"id":3499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3498,"mutability":"mutable","name":"_basefee","nameLocation":"99079:8:0","nodeType":"VariableDeclaration","scope":3515,"src":"99074:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3497,"name":"uint","nodeType":"ElementaryTypeName","src":"99074:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"99073:15:0"},"src":"99065:201:0"},{"block":{"id":3520,"nodeType":"Block","src":"99273:83:0","statements":[{"expression":{"id":3518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3516,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99330:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"313030","id":3517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99340:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"99330:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3519,"nodeType":"ExpressionStatement","src":"99330:13:0"}]},"errorName":"","id":3521,"nodeType":"TryCatchClause","src":"99267:89:0"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3494,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"99043:4:0","typeDescriptions":{"typeIdentifier":"t_contract$_Unlock_$3993","typeString":"contract Unlock"}},"id":3495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"99048:14:0","memberName":"networkBaseFee","nodeType":"MemberAccess","referencedDeclaration":3352,"src":"99043:19:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":3496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"99043:21:0","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3522,"nodeType":"TryStatement","src":"99039:317:0"},{"assignments":[3524],"declarations":[{"constant":false,"id":3524,"mutability":"mutable","name":"tokensToDistribute","nameLocation":"99470:18:0","nodeType":"VariableDeclaration","scope":3608,"src":"99465:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3523,"name":"uint","nodeType":"ElementaryTypeName","src":"99465:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3541,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3525,"name":"estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"99493:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3526,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3492,"src":"99519:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99493:33:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3528,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99492:35:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_125000000000000000000_by_1","typeString":"int_const 125000000000000000000"},"id":3533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"313235","id":3529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99543:3:0","typeDescriptions":{"typeIdentifier":"t_rational_125_by_1","typeString":"int_const 125"},"value":"125"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"id":3532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":3530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99549:2:0","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3138","id":3531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99555:2:0","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"99549:8:0","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"}},"src":"99543:14:0","typeDescriptions":{"typeIdentifier":"t_rational_125000000000000000000_by_1","typeString":"int_const 125000000000000000000"}}],"id":3534,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"99542:16:0","typeDescriptions":{"typeIdentifier":"t_rational_125000000000000000000_by_1","typeString":"int_const 125000000000000000000"}},"src":"99492:66:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3536,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99491:68:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99574:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"99491:86:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3539,"name":"udtPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3469,"src":"99592:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99491:109:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"99465:135:0"},{"assignments":[3543],"declarations":[{"constant":false,"id":3543,"mutability":"mutable","name":"maxTokens","nameLocation":"99760:9:0","nodeType":"VariableDeclaration","scope":3608,"src":"99755:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3542,"name":"uint","nodeType":"ElementaryTypeName","src":"99755:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3560,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3544,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"99773:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3545,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"99783:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99773:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3547,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99772:22:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99810:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"99815:1:0","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3550,"name":"valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"99819:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99815:14:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3552,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99814:16:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3553,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"99833:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99814:38:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99810:42:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3556,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"99809:44:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99772:81:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3558,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"99868:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99772:115:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"99755:132:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3561,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"99936:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3562,"name":"maxTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"99957:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99936:30:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3569,"nodeType":"IfStatement","src":"99932:93:0","trueBody":{"id":3568,"nodeType":"Block","src":"99968:57:0","statements":[{"expression":{"id":3566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3564,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"99982:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3565,"name":"maxTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3543,"src":"100003:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"99982:30:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3567,"nodeType":"ExpressionStatement","src":"99982:30:0"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3570,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100041:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":3571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"100062:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"100041:22:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3607,"nodeType":"IfStatement","src":"100037:521:0","trueBody":{"id":3606,"nodeType":"Block","src":"100065:493:0","statements":[{"assignments":[3574],"declarations":[{"constant":false,"id":3574,"mutability":"mutable","name":"devReward","nameLocation":"100180:9:0","nodeType":"VariableDeclaration","scope":3606,"src":"100175:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3573,"name":"uint","nodeType":"ElementaryTypeName","src":"100175:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3581,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3575,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100193:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3230","id":3576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"100214:2:0","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"src":"100193:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3578,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"100192:25:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"100220:3:0","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"100192:31:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"100175:48:0"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3582,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"100242:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3583,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100252:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100242:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3605,"nodeType":"IfStatement","src":"100238:308:0","trueBody":{"id":3604,"nodeType":"Block","src":"100272:274:0","statements":[{"expression":{"arguments":[{"id":3589,"name":"_referrer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"100394:9:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3590,"name":"tokensToDistribute","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3524,"src":"100421:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3591,"name":"devReward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"100442:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100421:30:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3586,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"100363:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3585,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"100348:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100348:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"100368:8:0","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1234,"src":"100348:28:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100348:119:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3594,"nodeType":"ExpressionStatement","src":"100348:119:0"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":3599,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2699,"src":"100512:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":3600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100512:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3601,"name":"devReward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"100521:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3596,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"100498:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3595,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"100483:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100483:19:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"100503:8:0","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1234,"src":"100483:28:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100483:48:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3603,"nodeType":"ExpressionStatement","src":"100483:48:0"}]}}]}}]}}]}}]}}]},"documentation":{"id":3353,"nodeType":"StructuredDocumentation","src":"97052:356:0","text":" This function keeps track of the added GDP, as well as grants of discount tokens\n to the referrer, if applicable.\n The number of discount tokens granted is based on the value of the referal,\n the current growth rate and the lock's discount token distribution rate\n This function is invoked by a previously deployed lock only."},"functionSelector":"939d9f1f","id":3615,"implemented":true,"kind":"function","modifiers":[{"id":3360,"kind":"modifierInvocation","modifierName":{"id":3359,"name":"onlyFromDeployedLock","nameLocations":["97489:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":2811,"src":"97489:20:0"},"nodeType":"ModifierInvocation","src":"97489:20:0"}],"name":"recordKeyPurchase","nameLocation":"97420:17:0","nodeType":"FunctionDefinition","parameters":{"id":3358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3355,"mutability":"mutable","name":"_value","nameLocation":"97448:6:0","nodeType":"VariableDeclaration","scope":3615,"src":"97443:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3354,"name":"uint","nodeType":"ElementaryTypeName","src":"97443:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3357,"mutability":"mutable","name":"_referrer","nameLocation":"97468:9:0","nodeType":"VariableDeclaration","scope":3615,"src":"97460:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3356,"name":"address","nodeType":"ElementaryTypeName","src":"97460:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"97437:44:0"},"returnParameters":{"id":3361,"nodeType":"ParameterList","parameters":[],"src":"97510:0:0"},"scope":3993,"src":"97411:3175:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3641,"nodeType":"Block","src":"100810:208:0","statements":[{"expression":{"id":3631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3627,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"100836:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3628,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"100858:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3629,"name":"_valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3618,"src":"100880:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100858:33:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"100836:55:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3632,"nodeType":"ExpressionStatement","src":"100836:55:0"},{"eventCall":{"arguments":[{"id":3634,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"100921:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3635,"name":"_valueInETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3618,"src":"100948:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3636,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3620,"src":"100967:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3637,"name":"_value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3622,"src":"100988:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3638,"name":"_lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3624,"src":"101002:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3633,"name":"GNPChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2916,"src":"100903:10:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (uint256,uint256,address,uint256,address)"}},"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"100903:110:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3640,"nodeType":"EmitStatement","src":"100898:115:0"}]},"documentation":{"id":3616,"nodeType":"StructuredDocumentation","src":"100590:84:0","text":" Update the GNP by a new value.\n Emits an event to simply tracking"},"id":3642,"implemented":true,"kind":"function","modifiers":[],"name":"updateGrossNetworkProduct","nameLocation":"100686:25:0","nodeType":"FunctionDefinition","parameters":{"id":3625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3618,"mutability":"mutable","name":"_valueInETH","nameLocation":"100722:11:0","nodeType":"VariableDeclaration","scope":3642,"src":"100717:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3617,"name":"uint","nodeType":"ElementaryTypeName","src":"100717:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3620,"mutability":"mutable","name":"_tokenAddress","nameLocation":"100747:13:0","nodeType":"VariableDeclaration","scope":3642,"src":"100739:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3619,"name":"address","nodeType":"ElementaryTypeName","src":"100739:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3622,"mutability":"mutable","name":"_value","nameLocation":"100771:6:0","nodeType":"VariableDeclaration","scope":3642,"src":"100766:11:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3621,"name":"uint","nodeType":"ElementaryTypeName","src":"100766:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3624,"mutability":"mutable","name":"_lock","nameLocation":"100791:5:0","nodeType":"VariableDeclaration","scope":3642,"src":"100783:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3623,"name":"address","nodeType":"ElementaryTypeName","src":"100783:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"100711:89:0"},"returnParameters":{"id":3626,"nodeType":"ParameterList","parameters":[],"src":"100810:0:0"},"scope":3993,"src":"100677:341:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3653,"nodeType":"Block","src":"101301:17:0","statements":[{"functionReturnParameters":3651,"id":3652,"nodeType":"Return","src":"101307:7:0"}]},"documentation":{"id":3643,"nodeType":"StructuredDocumentation","src":"101022:157:0","text":" @notice [DEPRECATED] Call to this function has been removed from PublicLock > v9.\n @dev [DEPRECATED] only Kept for backwards compatibility"},"functionSelector":"36524663","id":3654,"implemented":true,"kind":"function","modifiers":[{"id":3650,"kind":"modifierInvocation","modifierName":{"id":3649,"name":"onlyFromDeployedLock","nameLocations":["101280:20:0"],"nodeType":"IdentifierPath","referencedDeclaration":2811,"src":"101280:20:0"},"nodeType":"ModifierInvocation","src":"101280:20:0"}],"name":"recordConsumedDiscount","nameLocation":"101191:22:0","nodeType":"FunctionDefinition","parameters":{"id":3648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3654,"src":"101219:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3644,"name":"uint","nodeType":"ElementaryTypeName","src":"101219:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3654,"src":"101245:4:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3646,"name":"uint","nodeType":"ElementaryTypeName","src":"101245:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"101213:54:0"},"returnParameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"101301:0:0"},"scope":3993,"src":"101182:136:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3661,"nodeType":"Block","src":"101455:20:0","statements":[{"expression":{"hexValue":"3132","id":3659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"101468:2:0","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"functionReturnParameters":3658,"id":3660,"nodeType":"Return","src":"101461:9:0"}]},"functionSelector":"4220bd46","id":3662,"implemented":true,"kind":"function","modifiers":[],"name":"unlockVersion","nameLocation":"101408:13:0","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[],"src":"101421:2:0"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3662,"src":"101447:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":3656,"name":"uint16","nodeType":"ElementaryTypeName","src":"101447:6:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"101446:8:0"},"scope":3993,"src":"101399:76:0","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":3674,"nodeType":"Block","src":"101635:37:0","statements":[{"expression":{"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3670,"name":"protocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"101641:11:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3671,"name":"_protocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3665,"src":"101655:12:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"101641:26:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3673,"nodeType":"ExpressionStatement","src":"101641:26:0"}]},"documentation":{"id":3663,"nodeType":"StructuredDocumentation","src":"101479:91:0","text":" Set the fee used by the protocol\n @param _protocolFee fee in basic point"},"functionSelector":"787dce3d","id":3675,"implemented":true,"kind":"function","modifiers":[{"id":3668,"kind":"modifierInvocation","modifierName":{"id":3667,"name":"onlyOwner","nameLocations":["101625:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"101625:9:0"},"nodeType":"ModifierInvocation","src":"101625:9:0"}],"name":"setProtocolFee","nameLocation":"101582:14:0","nodeType":"FunctionDefinition","parameters":{"id":3666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3665,"mutability":"mutable","name":"_protocolFee","nameLocation":"101602:12:0","nodeType":"VariableDeclaration","scope":3675,"src":"101597:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3664,"name":"uint","nodeType":"ElementaryTypeName","src":"101597:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"101596:19:0"},"returnParameters":{"id":3669,"nodeType":"ParameterList","parameters":[],"src":"101635:0:0"},"scope":3993,"src":"101573:99:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3726,"nodeType":"Block","src":"101943:315:0","statements":[{"expression":{"id":3695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3693,"name":"udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2835,"src":"101949:3:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3694,"name":"_udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3678,"src":"101955:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"101949:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3696,"nodeType":"ExpressionStatement","src":"101949:10:0"},{"expression":{"id":3699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3697,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"101965:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3698,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3680,"src":"101972:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"101965:12:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3700,"nodeType":"ExpressionStatement","src":"101965:12:0"},{"expression":{"id":3703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3701,"name":"estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2837,"src":"101983:23:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3702,"name":"_estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"102009:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"101983:50:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3704,"nodeType":"ExpressionStatement","src":"101983:50:0"},{"expression":{"id":3707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3705,"name":"globalTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"102040:17:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3706,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3684,"src":"102060:7:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"102040:27:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3708,"nodeType":"ExpressionStatement","src":"102040:27:0"},{"expression":{"id":3711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3709,"name":"globalBaseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"102073:18:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3710,"name":"_URI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3686,"src":"102094:4:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},"src":"102073:25:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":3712,"nodeType":"ExpressionStatement","src":"102073:25:0"},{"expression":{"id":3715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3713,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2839,"src":"102105:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3714,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3688,"src":"102115:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"102105:18:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3716,"nodeType":"ExpressionStatement","src":"102105:18:0"},{"eventCall":{"arguments":[{"id":3718,"name":"_udt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3678,"src":"102155:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3719,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3680,"src":"102167:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3720,"name":"_estimatedGasForPurchase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"102180:24:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3721,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3684,"src":"102212:7:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":3722,"name":"_URI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3686,"src":"102227:4:0","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":3723,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3688,"src":"102239:8:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3717,"name":"ConfigUnlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2900,"src":"102135:12:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,string memory,string memory,uint256)"}},"id":3724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"102135:118:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3725,"nodeType":"EmitStatement","src":"102130:123:0"}]},"documentation":{"id":3676,"nodeType":"StructuredDocumentation","src":"101676:73:0","text":" @notice Allows the owner to update configuration variables"},"functionSelector":"7d8fb641","id":3727,"implemented":true,"kind":"function","modifiers":[{"id":3691,"kind":"modifierInvocation","modifierName":{"id":3690,"name":"onlyOwner","nameLocations":["101933:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"101933:9:0"},"nodeType":"ModifierInvocation","src":"101933:9:0"}],"name":"configUnlock","nameLocation":"101761:12:0","nodeType":"FunctionDefinition","parameters":{"id":3689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3678,"mutability":"mutable","name":"_udt","nameLocation":"101787:4:0","nodeType":"VariableDeclaration","scope":3727,"src":"101779:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3677,"name":"address","nodeType":"ElementaryTypeName","src":"101779:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3680,"mutability":"mutable","name":"_weth","nameLocation":"101805:5:0","nodeType":"VariableDeclaration","scope":3727,"src":"101797:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3679,"name":"address","nodeType":"ElementaryTypeName","src":"101797:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3682,"mutability":"mutable","name":"_estimatedGasForPurchase","nameLocation":"101821:24:0","nodeType":"VariableDeclaration","scope":3727,"src":"101816:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3681,"name":"uint","nodeType":"ElementaryTypeName","src":"101816:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3684,"mutability":"mutable","name":"_symbol","nameLocation":"101867:7:0","nodeType":"VariableDeclaration","scope":3727,"src":"101851:23:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":3683,"name":"string","nodeType":"ElementaryTypeName","src":"101851:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3686,"mutability":"mutable","name":"_URI","nameLocation":"101896:4:0","nodeType":"VariableDeclaration","scope":3727,"src":"101880:20:0","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":3685,"name":"string","nodeType":"ElementaryTypeName","src":"101880:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":3688,"mutability":"mutable","name":"_chainId","nameLocation":"101911:8:0","nodeType":"VariableDeclaration","scope":3727,"src":"101906:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3687,"name":"uint","nodeType":"ElementaryTypeName","src":"101906:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"101773:150:0"},"returnParameters":{"id":3692,"nodeType":"ParameterList","parameters":[],"src":"101943:0:0"},"scope":3993,"src":"101752:506:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3759,"nodeType":"Block","src":"102422:334:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3735,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"102432:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3737,"indexExpression":{"id":3736,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102452:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"102432:39:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"102475:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"102432:44:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3744,"nodeType":"IfStatement","src":"102428:103:0","trueBody":{"id":3743,"nodeType":"Block","src":"102478:53:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3740,"name":"Unlock__MISSING_LOCK_TEMPLATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"102493:29:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"102493:31:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3742,"nodeType":"RevertStatement","src":"102486:38:0"}]}},{"expression":{"id":3749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3745,"name":"publicLockLatestVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2854,"src":"102562:23:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":3746,"name":"_publicLockVersions","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2848,"src":"102588:19:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint16_$","typeString":"mapping(address => uint16)"}},"id":3748,"indexExpression":{"id":3747,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102608:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"102588:39:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"102562:65:0","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":3750,"nodeType":"ExpressionStatement","src":"102562:65:0"},{"expression":{"id":3753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3751,"name":"publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2826,"src":"102667:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3752,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102687:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"102667:38:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3754,"nodeType":"ExpressionStatement","src":"102667:38:0"},{"eventCall":{"arguments":[{"id":3756,"name":"_publicLockAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3730,"src":"102732:18:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3755,"name":"SetLockTemplate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"102716:15:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":3757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"102716:35:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3758,"nodeType":"EmitStatement","src":"102711:40:0"}]},"documentation":{"id":3728,"nodeType":"StructuredDocumentation","src":"102262:85:0","text":" @notice Set the default PublicLock template to use when creating locks"},"functionSelector":"ef67fde6","id":3760,"implemented":true,"kind":"function","modifiers":[{"id":3733,"kind":"modifierInvocation","modifierName":{"id":3732,"name":"onlyOwner","nameLocations":["102412:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"102412:9:0"},"nodeType":"ModifierInvocation","src":"102412:9:0"}],"name":"setLockTemplate","nameLocation":"102359:15:0","nodeType":"FunctionDefinition","parameters":{"id":3731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3730,"mutability":"mutable","name":"_publicLockAddress","nameLocation":"102383:18:0","nodeType":"VariableDeclaration","scope":3760,"src":"102375:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3729,"name":"address","nodeType":"ElementaryTypeName","src":"102375:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"102374:28:0"},"returnParameters":{"id":3734,"nodeType":"ParameterList","parameters":[],"src":"102422:0:0"},"scope":3993,"src":"102350:406:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3794,"nodeType":"Block","src":"103119:189:0","statements":[{"expression":{"id":3776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3770,"name":"uniswapOracles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2831,"src":"103125:14:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"mapping(address => contract IUniswapOracleV3)"}},"id":3772,"indexExpression":{"id":3771,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3763,"src":"103140:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"103125:29:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3774,"name":"_oracleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"103174:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3773,"name":"IUniswapOracleV3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1948,"src":"103157:16:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"type(contract IUniswapOracleV3)"}},"id":3775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103157:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"src":"103125:64:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3777,"nodeType":"ExpressionStatement","src":"103125:64:0"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3778,"name":"_oracleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"103199:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"103225:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"103217:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3779,"name":"address","nodeType":"ElementaryTypeName","src":"103217:7:0","typeDescriptions":{}}},"id":3782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103217:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"103199:28:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3793,"nodeType":"IfStatement","src":"103195:109:0","trueBody":{"id":3792,"nodeType":"Block","src":"103229:75:0","statements":[{"expression":{"arguments":[{"id":3788,"name":"_tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3763,"src":"103277:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3789,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"103292:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":3785,"name":"_oracleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3765,"src":"103254:14:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3784,"name":"IUniswapOracleV3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1948,"src":"103237:16:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUniswapOracleV3_$1948_$","typeString":"type(contract IUniswapOracleV3)"}},"id":3786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103237:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUniswapOracleV3_$1948","typeString":"contract IUniswapOracleV3"}},"id":3787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"103270:6:0","memberName":"update","nodeType":"MemberAccess","referencedDeclaration":1925,"src":"103237:39:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":3790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103237:60:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3791,"nodeType":"ExpressionStatement","src":"103237:60:0"}]}}]},"documentation":{"id":3761,"nodeType":"StructuredDocumentation","src":"102760:259:0","text":" @notice allows the owner to set the oracle address to use for value conversions\n setting the _oracleAddress to address(0) removes support for the token\n @dev This will also call update to ensure at least one datapoint has been recorded."},"functionSelector":"5c38eb3a","id":3795,"implemented":true,"kind":"function","modifiers":[{"id":3768,"kind":"modifierInvocation","modifierName":{"id":3767,"name":"onlyOwner","nameLocations":["103109:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"103109:9:0"},"nodeType":"ModifierInvocation","src":"103109:9:0"}],"name":"setOracle","nameLocation":"103031:9:0","nodeType":"FunctionDefinition","parameters":{"id":3766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3763,"mutability":"mutable","name":"_tokenAddress","nameLocation":"103054:13:0","nodeType":"VariableDeclaration","scope":3795,"src":"103046:21:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3762,"name":"address","nodeType":"ElementaryTypeName","src":"103046:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3765,"mutability":"mutable","name":"_oracleAddress","nameLocation":"103081:14:0","nodeType":"VariableDeclaration","scope":3795,"src":"103073:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3764,"name":"address","nodeType":"ElementaryTypeName","src":"103073:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"103040:59:0"},"returnParameters":{"id":3769,"nodeType":"ParameterList","parameters":[],"src":"103119:0:0"},"scope":3993,"src":"103022:286:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3817,"nodeType":"Block","src":"103497:177:0","statements":[{"expression":{"id":3806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3804,"name":"grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2813,"src":"103503:19:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3805,"name":"_grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3797,"src":"103525:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"103503:42:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3807,"nodeType":"ExpressionStatement","src":"103503:42:0"},{"expression":{"id":3810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3808,"name":"totalDiscountGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2815,"src":"103551:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3809,"name":"_totalDiscountGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3799,"src":"103574:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"103551:44:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3811,"nodeType":"ExpressionStatement","src":"103551:44:0"},{"eventCall":{"arguments":[{"id":3813,"name":"_grossNetworkProduct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3797,"src":"103625:20:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3814,"name":"_totalDiscountGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3799,"src":"103647:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3812,"name":"ResetTrackedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2922,"src":"103607:17:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":3815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"103607:62:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3816,"nodeType":"EmitStatement","src":"103602:67:0"}]},"functionSelector":"963a9478","id":3818,"implemented":true,"kind":"function","modifiers":[{"id":3802,"kind":"modifierInvocation","modifierName":{"id":3801,"name":"onlyOwner","nameLocations":["103487:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"103487:9:0"},"nodeType":"ModifierInvocation","src":"103487:9:0"}],"name":"resetTrackedValue","nameLocation":"103393:17:0","nodeType":"FunctionDefinition","parameters":{"id":3800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3797,"mutability":"mutable","name":"_grossNetworkProduct","nameLocation":"103421:20:0","nodeType":"VariableDeclaration","scope":3818,"src":"103416:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3796,"name":"uint","nodeType":"ElementaryTypeName","src":"103416:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3799,"mutability":"mutable","name":"_totalDiscountGranted","nameLocation":"103452:21:0","nodeType":"VariableDeclaration","scope":3818,"src":"103447:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3798,"name":"uint","nodeType":"ElementaryTypeName","src":"103447:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"103410:67:0"},"returnParameters":{"id":3803,"nodeType":"ParameterList","parameters":[],"src":"103497:0:0"},"scope":3993,"src":"103384:290:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3826,"nodeType":"Block","src":"103855:36:0","statements":[{"expression":{"id":3824,"name":"globalBaseTokenURI","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"103868:18:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3823,"id":3825,"nodeType":"Return","src":"103861:25:0"}]},"documentation":{"id":3819,"nodeType":"StructuredDocumentation","src":"103678:103:0","text":" @dev Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks."},"functionSelector":"7ff94bb2","id":3827,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalBaseTokenURI","nameLocation":"103793:21:0","nodeType":"FunctionDefinition","parameters":{"id":3820,"nodeType":"ParameterList","parameters":[],"src":"103814:2:0"},"returnParameters":{"id":3823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3827,"src":"103840:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3821,"name":"string","nodeType":"ElementaryTypeName","src":"103840:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"103839:15:0"},"scope":3993,"src":"103784:107:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3835,"nodeType":"Block","src":"104070:35:0","statements":[{"expression":{"id":3833,"name":"globalTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"104083:17:0","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":3832,"id":3834,"nodeType":"Return","src":"104076:24:0"}]},"documentation":{"id":3828,"nodeType":"StructuredDocumentation","src":"103895:102:0","text":" @dev Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks."},"functionSelector":"35a750de","id":3836,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalTokenSymbol","nameLocation":"104009:20:0","nodeType":"FunctionDefinition","parameters":{"id":3829,"nodeType":"ParameterList","parameters":[],"src":"104029:2:0"},"returnParameters":{"id":3832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3836,"src":"104055:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3830,"name":"string","nodeType":"ElementaryTypeName","src":"104055:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"104054:15:0"},"scope":3993,"src":"104000:105:0","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3851,"nodeType":"Block","src":"104189:157:0","statements":[{"assignments":[3842],"declarations":[{"constant":false,"id":3842,"mutability":"mutable","name":"_ADMIN_SLOT","nameLocation":"104203:11:0","nodeType":"VariableDeclaration","scope":3851,"src":"104195:19:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3841,"name":"bytes32","nodeType":"ElementaryTypeName","src":"104195:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3844,"initialValue":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":3843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104217:66:0","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"nodeType":"VariableDeclarationStatement","src":"104195:88:0"},{"expression":{"expression":{"arguments":[{"id":3847,"name":"_ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"104323:11:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3845,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":538,"src":"104296:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$538_$","typeString":"type(library StorageSlot)"}},"id":3846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104308:14:0","memberName":"getAddressSlot","nodeType":"MemberAccess","referencedDeclaration":504,"src":"104296:26:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$484_storage_ptr_$","typeString":"function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"}},"id":3848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104296:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$484_storage_ptr","typeString":"struct StorageSlot.AddressSlot storage pointer"}},"id":3849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"104336:5:0","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":483,"src":"104296:45:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3840,"id":3850,"nodeType":"Return","src":"104289:52:0"}]},"functionSelector":"6e9960c3","id":3852,"implemented":true,"kind":"function","modifiers":[],"name":"getAdmin","nameLocation":"104148:8:0","nodeType":"FunctionDefinition","parameters":{"id":3837,"nodeType":"ParameterList","parameters":[],"src":"104156:2:0"},"returnParameters":{"id":3840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3839,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3852,"src":"104180:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3838,"name":"address","nodeType":"ElementaryTypeName","src":"104180:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"104179:9:0"},"scope":3993,"src":"104139:207:0","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3926,"nodeType":"Block","src":"104414:884:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":3855,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"104509:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3858,"indexExpression":{"expression":{"id":3856,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"104515:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104519:6:0","memberName":"sender","nodeType":"MemberAccess","src":"104515:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"104509:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"104527:8:0","memberName":"deployed","nodeType":"MemberAccess","referencedDeclaration":2793,"src":"104509:26:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":3860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"104539:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"104509:35:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":3869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3863,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"104566:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104570:6:0","memberName":"sender","nodeType":"MemberAccess","src":"104566:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3862,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"104554:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104554:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104578:17:0","memberName":"publicLockVersion","nodeType":"MemberAccess","referencedDeclaration":1286,"src":"104554:41:0","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint16_$","typeString":"function () pure external returns (uint16)"}},"id":3867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104554:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3133","id":3868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104601:2:0","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"104554:49:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"104509:94:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3871,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"104613:5:0","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104619:7:0","memberName":"chainid","nodeType":"MemberAccess","src":"104613:13:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":3873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104630:1:0","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"104613:18:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"104509:122:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":3877,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"104653:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104657:6:0","memberName":"sender","nodeType":"MemberAccess","src":"104653:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3876,"name":"IPublicLock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"104641:11:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPublicLock_$1907_$","typeString":"type(contract IPublicLock)"}},"id":3879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104641:23:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPublicLock_$1907","typeString":"contract IPublicLock"}},"id":3880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104665:14:0","memberName":"unlockProtocol","nodeType":"MemberAccess","referencedDeclaration":1641,"src":"104641:38:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104641:40:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"307833643534303943634531643435323333644531443465424445653734623845303034616244443133","id":3882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104691:42:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13"},"src":"104641:92:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"104509:224:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3925,"nodeType":"IfStatement","src":"104498:796:0","trueBody":{"id":3924,"nodeType":"Block","src":"104780:514:0","statements":[{"assignments":[3887],"declarations":[{"constant":false,"id":3887,"mutability":"mutable","name":"previousUnlock","nameLocation":"104796:14:0","nodeType":"VariableDeclaration","scope":3924,"src":"104788:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"},"typeName":{"id":3886,"nodeType":"UserDefinedTypeName","pathNode":{"id":3885,"name":"IUnlock","nameLocations":["104788:7:0"],"nodeType":"IdentifierPath","referencedDeclaration":2258,"src":"104788:7:0"},"referencedDeclaration":2258,"src":"104788:7:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"}},"visibility":"internal"}],"id":3891,"initialValue":{"arguments":[{"hexValue":"307833643534303943634531643435323333644531443465424445653734623845303034616244443133","id":3889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"104830:42:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3888,"name":"IUnlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2258,"src":"104813:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IUnlock_$2258_$","typeString":"type(contract IUnlock)"}},"id":3890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104813:67:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"}},"nodeType":"VariableDeclarationStatement","src":"104788:92:0"},{"assignments":[3893,3895,3897],"declarations":[{"constant":false,"id":3893,"mutability":"mutable","name":"deployed","nameLocation":"104904:8:0","nodeType":"VariableDeclaration","scope":3924,"src":"104899:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3892,"name":"bool","nodeType":"ElementaryTypeName","src":"104899:4:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3895,"mutability":"mutable","name":"totalSales","nameLocation":"104927:10:0","nodeType":"VariableDeclaration","scope":3924,"src":"104922:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3894,"name":"uint","nodeType":"ElementaryTypeName","src":"104922:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3897,"mutability":"mutable","name":"yieldedDiscountTokens","nameLocation":"104952:21:0","nodeType":"VariableDeclaration","scope":3924,"src":"104947:26:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3896,"name":"uint","nodeType":"ElementaryTypeName","src":"104947:4:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3903,"initialValue":{"arguments":[{"expression":{"id":3900,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"105005:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105009:6:0","memberName":"sender","nodeType":"MemberAccess","src":"105005:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3898,"name":"previousUnlock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"104984:14:0","typeDescriptions":{"typeIdentifier":"t_contract$_IUnlock_$2258","typeString":"contract IUnlock"}},"id":3899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"104999:5:0","memberName":"locks","nodeType":"MemberAccess","referencedDeclaration":2146,"src":"104984:20:0","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address) view external returns (bool,uint256,uint256)"}},"id":3902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"104984:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"104889:127:0"},{"condition":{"id":3904,"name":"deployed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3893,"src":"105078:8:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3922,"nodeType":"Block","src":"105230:58:0","statements":[{"errorCall":{"arguments":[{"expression":{"id":3918,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"105268:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105272:6:0","memberName":"sender","nodeType":"MemberAccess","src":"105268:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3917,"name":"Unlock__MISSING_LOCK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2872,"src":"105247:20:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$__$","typeString":"function (address) pure"}},"id":3920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105247:32:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3921,"nodeType":"RevertStatement","src":"105240:39:0"}]},"id":3923,"nodeType":"IfStatement","src":"105074:214:0","trueBody":{"id":3916,"nodeType":"Block","src":"105088:136:0","statements":[{"expression":{"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3905,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"105098:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3908,"indexExpression":{"expression":{"id":3906,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"105104:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105108:6:0","memberName":"sender","nodeType":"MemberAccess","src":"105104:10:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"105098:17:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3910,"name":"deployed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3893,"src":"105142:8:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":3911,"name":"totalSales","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3895,"src":"105162:10:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3912,"name":"yieldedDiscountTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3897,"src":"105184:21:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3909,"name":"LockBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2798,"src":"105118:12:0","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_LockBalances_$2798_storage_ptr_$","typeString":"type(struct Unlock.LockBalances storage pointer)"}},"id":3913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105118:97:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_memory_ptr","typeString":"struct Unlock.LockBalances memory"}},"src":"105098:117:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"id":3915,"nodeType":"ExpressionStatement","src":"105098:117:0"}]}}]}}]},"functionSelector":"ed9674bd","id":3927,"implemented":true,"kind":"function","modifiers":[],"name":"postLockUpgrade","nameLocation":"104389:15:0","nodeType":"FunctionDefinition","parameters":{"id":3853,"nodeType":"ParameterList","parameters":[],"src":"104404:2:0"},"returnParameters":{"id":3854,"nodeType":"ParameterList","parameters":[],"src":"104414:0:0"},"scope":3993,"src":"104380:918:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3964,"nodeType":"Block","src":"105765:141:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3939,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3930,"src":"105775:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"105792:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"105784:7:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3940,"name":"address","nodeType":"ElementaryTypeName","src":"105784:7:0","typeDescriptions":{}}},"id":3943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105784:10:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"105775:19:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3962,"nodeType":"Block","src":"105859:43:0","statements":[{"expression":{"arguments":[{"id":3959,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3934,"src":"105888:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3956,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3932,"src":"105875:2:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"105867:8:0","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3954,"name":"address","nodeType":"ElementaryTypeName","src":"105867:8:0","stateMutability":"payable","typeDescriptions":{}}},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105867:11:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105879:8:0","memberName":"transfer","nodeType":"MemberAccess","src":"105867:20:0","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105867:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3961,"nodeType":"ExpressionStatement","src":"105867:28:0"}]},"id":3963,"nodeType":"IfStatement","src":"105771:131:0","trueBody":{"id":3953,"nodeType":"Block","src":"105796:57:0","statements":[{"expression":{"arguments":[{"id":3949,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3932,"src":"105835:2:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3950,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3934,"src":"105839:6:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":3946,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3930,"src":"105819:5:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3945,"name":"IMintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"105804:14:0","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMintableERC20_$1256_$","typeString":"type(contract IMintableERC20)"}},"id":3947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105804:21:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IMintableERC20_$1256","typeString":"contract IMintableERC20"}},"id":3948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"105826:8:0","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1234,"src":"105804:30:0","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":3951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"105804:42:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3952,"nodeType":"ExpressionStatement","src":"105804:42:0"}]}}]},"documentation":{"id":3928,"nodeType":"StructuredDocumentation","src":"105302:360:0","text":" Functions which transfers tokens held by the contract\n It handles both ERC20 and the base currency.\n @dev This function is onlyOwner\n @param token the address of the token to transfer (pass the 0x0 address for the base currency)\n @param to the address to transfer the tokens to\n @param amount the amount of tokens to transfer"},"functionSelector":"a64b6e5f","id":3965,"implemented":true,"kind":"function","modifiers":[{"id":3937,"kind":"modifierInvocation","modifierName":{"id":3936,"name":"onlyOwner","nameLocations":["105755:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"105755:9:0"},"nodeType":"ModifierInvocation","src":"105755:9:0"}],"name":"transferTokens","nameLocation":"105674:14:0","nodeType":"FunctionDefinition","parameters":{"id":3935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3930,"mutability":"mutable","name":"token","nameLocation":"105702:5:0","nodeType":"VariableDeclaration","scope":3965,"src":"105694:13:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3929,"name":"address","nodeType":"ElementaryTypeName","src":"105694:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3932,"mutability":"mutable","name":"to","nameLocation":"105721:2:0","nodeType":"VariableDeclaration","scope":3965,"src":"105713:10:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"105713:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3934,"mutability":"mutable","name":"amount","nameLocation":"105737:6:0","nodeType":"VariableDeclaration","scope":3965,"src":"105729:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3933,"name":"uint256","nodeType":"ElementaryTypeName","src":"105729:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"105688:59:0"},"returnParameters":{"id":3938,"nodeType":"ParameterList","parameters":[],"src":"105765:0:0"},"scope":3993,"src":"105665:241:0","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3978,"nodeType":"Block","src":"106234:29:0","statements":[{"expression":{"id":3976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"106240:18:0","subExpression":{"baseExpression":{"id":3973,"name":"locks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"106247:5:0","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_LockBalances_$2798_storage_$","typeString":"mapping(address => struct Unlock.LockBalances storage ref)"}},"id":3975,"indexExpression":{"id":3974,"name":"lock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3968,"src":"106253:4:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"106247:11:0","typeDescriptions":{"typeIdentifier":"t_struct$_LockBalances_$2798_storage","typeString":"struct Unlock.LockBalances storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3977,"nodeType":"ExpressionStatement","src":"106240:18:0"}]},"documentation":{"id":3966,"nodeType":"StructuredDocumentation","src":"105910:268:0","text":" Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens.\n The lock will still be able to sell its memberships.\n @dev This function is onlyOwner\n @param lock address of the lock to remove"},"functionSelector":"4a387bef","id":3979,"implemented":true,"kind":"function","modifiers":[{"id":3971,"kind":"modifierInvocation","modifierName":{"id":3970,"name":"onlyOwner","nameLocations":["106224:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2710,"src":"106224:9:0"},"nodeType":"ModifierInvocation","src":"106224:9:0"}],"name":"removeLock","nameLocation":"106190:10:0","nodeType":"FunctionDefinition","parameters":{"id":3969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3968,"mutability":"mutable","name":"lock","nameLocation":"106209:4:0","nodeType":"VariableDeclaration","scope":3979,"src":"106201:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3967,"name":"address","nodeType":"ElementaryTypeName","src":"106201:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"106200:14:0"},"returnParameters":{"id":3972,"nodeType":"ParameterList","parameters":[],"src":"106234:0:0"},"scope":3993,"src":"106181:82:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":3991,"nodeType":"Block","src":"106338:76:0","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3982,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"106348:3:0","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"106352:5:0","memberName":"value","nodeType":"MemberAccess","src":"106348:9:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":3984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"106361:1:0","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"106348:14:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3990,"nodeType":"IfStatement","src":"106344:66:0","trueBody":{"id":3989,"nodeType":"Block","src":"106364:46:0","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3986,"name":"Unlock__INVALID_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"106379:22:0","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":3987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"106379:24:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3988,"nodeType":"RevertStatement","src":"106372:31:0"}]}}]},"id":3992,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3980,"nodeType":"ParameterList","parameters":[],"src":"106318:2:0"},"returnParameters":{"id":3981,"nodeType":"ParameterList","parameters":[],"src":"106338:0:0"},"scope":3993,"src":"106311:103:0","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":3994,"src":"86803:19613:0","usedErrors":[2858,2860,2862,2864,2866,2868,2872,2874],"usedEvents":[2669,2880,2886,2900,2904,2916,2922,2928]}],"src":"208:106209:0"}}},"contracts":{"contracts/past-versions/UnlockV12.sol":{"Address":{"abi":[],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Address\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:Address\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_0[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\n","bytecode":{"object":"00000001012001900000000c0000613d0000008001000039000000400010043f0000000001000416000000000101004b0000000c0000c13d00000020010000390000010000100443000001200000044300000005010000410000000f0001042e000000000100001900000010000104300000000e000004320000000f0001042e00000010000104300000000000000000000000000000000000000000000000000000000200000000000000000000000000000040000001000000000000000000bab1010fbca505cd5e58703a8ecb63e1a12a3ee75f63c0e229e5e3497e4a51ae"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"Address_479\" {\n code {\n {\n /// @src 0:5044:13588 \"library Address {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"Address_479_deployed\")\n codecopy(_1, dataoffset(\"Address_479_deployed\"), _2)\n setimmutable(_1, \"library_deploy_address\", address())\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"Address_479_deployed\" {\n code {\n {\n /// @src 0:5044:13588 \"library Address {...\"\n revert(0, 0)\n }\n }\n data \".metadata\" hex\"a26469706673582212209fb4d236466ad13e5f0ec485713e8bc3bb05f5e03a6520b8b492209f0868e5a764736f6c63430008150033\"\n }\n}\n","hash":"010000073ebdff7330586f247d41146ea73dde9d2845ca003e0fa59ec33e7a40","factoryDependencies":{}},"AddressUpgradeable":{"abi":[],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"AddressUpgradeable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:AddressUpgradeable\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_0[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\n","bytecode":{"object":"00000001012001900000000c0000613d0000008001000039000000400010043f0000000001000416000000000101004b0000000c0000c13d00000020010000390000010000100443000001200000044300000005010000410000000f0001042e000000000100001900000010000104300000000e000004320000000f0001042e0000001000010430000000000000000000000000000000000000000000000000000000020000000000000000000000000000004000000100000000000000000011a5eb54bb86756ecdf8885f38d673712861af1fcc37472c95e9a64fb0d67d22"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"AddressUpgradeable_2541\" {\n code {\n {\n /// @src 0:70903:78572 \"library AddressUpgradeable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"AddressUpgradeable_2541_deployed\")\n codecopy(_1, dataoffset(\"AddressUpgradeable_2541_deployed\"), _2)\n setimmutable(_1, \"library_deploy_address\", address())\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"AddressUpgradeable_2541_deployed\" {\n code {\n {\n /// @src 0:70903:78572 \"library AddressUpgradeable {...\"\n revert(0, 0)\n }\n }\n data \".metadata\" hex\"a2646970667358221220e9e9c9395a5214e3993eb217f0a53e9b966c0a23d9de2b3c66d3c6943e6ac15964736f6c63430008150033\"\n }\n}\n","hash":"01000007362bb1f2b29fcd0894d609830c3d8b1a94e5d36a51cafc5d2f43afeb","factoryDependencies":{}},"Context":{"abi":[],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Context\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"ERC1967Proxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:ERC1967Proxy\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[7]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r3, stack[@ptr_return_data]\n\tadd\t128, r0, r8\n\tst.1\t64, r8\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_1\n\tptr.add\tr1, r3, r4\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tsub!\tr3, r0, r5\n\tjump.ne\t@.BB0_53\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_62\n\tadd\tstack[@returndatasize], r0, r3\n\tand\t31, r3, r2\n\tshr.s!\t5, r3, r1\n\tjump.eq\t@.BB0_76\n\tadd\tr0, r0, r5\n.BB0_51:\n\tshl.s\t5, r5, r6\n\tptr.add\tr4, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_51\n.BB0_76:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_68\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr4, r1, r4\n\tld\tr4, r4\n\tsub\t256, r2, r2\n\tshr\tr4, r2, r4\n\tshl\tr4, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_68\n.BB0_1:\n\tadd\t@CPI0_1[0], r3, r2\n\tsub.s!\t@CPI0_2[0], r2, r2\n\tjump.gt\t@.BB0_3\n.BB0_2:\n\tadd\t@CPI0_23[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI0_24[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_53:\n\tand\t31, r3, r6\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_80\n\tadd\tr0, r0, r7\n.BB0_55:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r5, r8\n\tjump.lt\t@.BB0_55\n.BB0_80:\n\tsub!\tr6, r0, r7\n\tjump.eq\t@.BB0_57\n\tshl.s\t3, r6, r6\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r7\n\tshl\tr7, r6, r7\n\tshr\tr7, r6, r7\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r6, r6\n\tshr\tr1, r6, r1\n\tshl\tr1, r6, r1\n\tor\tr1, r7, r1\n\tst.1\tr5, r1\n.BB0_57:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_69\n\tadd\tstack[@returndatasize], r0, r3\n\tand\t31, r3, r2\n\tshr.s!\t5, r3, r1\n\tjump.eq\t@.BB0_78\n\tadd\tr0, r0, r5\n.BB0_60:\n\tshl.s\t5, r5, r6\n\tptr.add\tr4, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_60\n.BB0_78:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_75\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr4, r1, r4\n\tld\tr4, r4\n\tsub\t256, r2, r2\n\tshr\tr4, r2, r4\n\tshl\tr4, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_75\n.BB0_3:\n\tadd\t159, r3, r2\n\tand\t@CPI0_3[0], r2, r2\n\tst.1\t64, r2\n\tand\t31, r3, r2\n\tshr.s!\t5, r3, r4\n\tjump.eq\t@.BB0_82\n\tadd\tr0, r0, r5\n.BB0_5:\n\tshl.s\t5, r5, r6\n\tptr.add\tr1, r6, r7\n\tld\tr7, r7\n\tadd\t128, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r4, r6\n\tjump.lt\t@.BB0_5\n.BB0_82:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_7\n\tshl.s\t5, r4, r4\n\tptr.add\tr1, r4, r1\n\tshl.s\t3, r2, r2\n\tadd\t128, r4, r4\n\tld.1\tr4, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tld\tr1, r1\n\tsub\t256, r2, r2\n\tshr\tr1, r2, r1\n\tshl\tr1, r2, r1\n\tor\tr1, r5, r1\n\tst.1\tr4, r1\n.BB0_7:\n\tsub.s!\t63, r3, r1\n\tjump.le\t@.BB0_8\n\tld.1\t128, r7\n\tand\t@CPI0_4[0], r7, r10\n\tsub.s!\t@CPI0_4[0], r7, r1\n\tjump.gt\t@.BB0_8\n\tld.1\t160, r2\n\tsub.s!\t@CPI0_5[0], r2, r1\n\tjump.gt\t@.BB0_8\n\tadd\t31, r2, r1\n\tadd\t@CPI0_6[0], r0, r4\n\tsub!\tr1, r3, r5\n\tadd\tr0, r0, r5\n\tadd.ge\tr4, r0, r5\n\tand\t@CPI0_6[0], r1, r1\n\tsub!\tr1, r0, r6\n\tadd.ge\tr0, r0, r4\n\tsub.s!\t@CPI0_6[0], r1, r1\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r1\n\tjump.ne\t@.BB0_8\n\tadd\t128, r2, r1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI0_5[0], r1, r4\n\tjump.gt\t@.BB0_2\n\tadd\t63, r1, r4\n\tsub.s\t32, r0, r9\n\tand\tr4, r9, r4\n\tld.1\t64, r11\n\tadd\tr11, r4, r4\n\tsub!\tr4, r11, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r4, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tadd\t128, r3, r3\n\tst.1\t64, r4\n\tst.1.inc\tr11, r1, r6\n\tadd\t160, r2, r2\n\tadd\tr1, r2, r4\n\tsub!\tr4, r3, r3\n\tjump.le\t@.BB0_16\n.BB0_8:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_62:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t31, r3, r4\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_77\n\tadd\tr0, r0, r6\n.BB0_64:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_64\n.BB0_77:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_66\n\tshl.s\t3, r4, r4\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_66:\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_68\n\tshl.s\t96, r3, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_69:\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr4, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r3, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t31, r3, r4\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_79\n\tadd\tr0, r0, r6\n.BB0_71:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_71\n.BB0_79:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_73\n\tshl.s\t3, r4, r4\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_73:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_74\n.BB0_75:\n.BB0_68:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r2\n\tadd.ge\tr1, r0, r3\n\tshl.s\t96, r3, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_74:\n\tshl.s\t96, r3, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_16:\n\tadd\tr11, r0, stack-[5]\n\tadd\tr10, r0, stack-[6]\n\tadd\tr9, r0, stack-[3]\n\tadd\tr8, r0, stack-[2]\n\tsub!\tr1, r0, r3\n\tjump.eq\t@.BB0_19\n\tadd\tr0, r0, r3\n.BB0_18:\n\tadd\tr3, r6, r4\n\tadd\tr3, r2, r5\n\tld.1\tr5, r5\n\tst.1\tr4, r5\n\tadd\t32, r3, r3\n\tsub!\tr3, r1, r4\n\tjump.lt\t@.BB0_18\n.BB0_19:\n\tadd\tr6, r0, stack-[4]\n\tadd\tr6, r1, r1\n\tst.1\tr1, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr7, r0, stack-[7]\n\tst.2\t4, r7\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_20\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_23\n\tld.1\t64, r1\n\tadd\t100, r1, r2\n\tadd\t@CPI0_20[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tadd\t@CPI0_21[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t45, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_17[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_22[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_23:\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tadd\tstack-[6], r0, r5\n\tor\tr2, r5, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tstack-[5], r0, r5\n\tadd\tstack-[4], r0, r7\n\tjump.eq\t@.BB0_8\n\tld.1\tr5, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_25\n.BB0_26:\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_19[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_25:\n\tld.1\t64, r4\n\tsub.s!\t@CPI0_13[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tadd\t96, r4, r1\n\tst.1\t64, r1\n\tadd\t64, r4, r1\n\tadd\t@CPI0_14[0], r0, r3\n\tst.1\tr1, r3\n\tadd\t39, r0, r1\n\tadd\tr4, r0, stack-[6]\n\tst.1.inc\tr4, r1, r3\n\tadd\t@CPI0_15[0], r0, r1\n\tadd\tr3, r0, stack-[1]\n\tst.1\tr3, r1\n\tld.1\tr5, r6\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_29\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r3\n\tjump\t@.BB0_30\n.BB0_29:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r7, r4\n\tadd.ge\tr3, r0, r7\n\tshl.s\t64, r7, r4\n\tsub.s!\t@CPI0_0[0], r6, r5\n\tadd.ge\tr3, r0, r6\n\tshl.s\t96, r6, r5\n\tor\tr5, r4, r5\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\tr5, r1, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r3\n.BB0_30:\n\tadd\t96, r0, r1\n\tsub!\tr3, r0, r4\n\tjump.ne\t@.BB0_40\n.BB0_31:\n\tld.1\tr1, r1\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_36\n\tsub!\tr1, r0, r2\n\tjump.ne\t@.BB0_34\n\tld.1\t64, r4\n\tadd\tr4, r0, stack-[7]\n\tadd\t@CPI0_17[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tadd\t32, r0, r2\n\tst.1\tr1, r2\n\tadd\tstack-[6], r0, r1\n\tld.1\tr1, r3\n\tadd\tr3, r0, stack-[6]\n\tadd\t36, r4, r1\n\tst.1\tr1, r3\n\tadd\t68, r4, r2\n\tadd\tstack-[1], r0, r1\n\tnear_call\tr0, @copy_memory_to_memory_with_cleanup, @DEFAULT_UNWIND\n\tadd\tstack-[6], r0, r1\n\tadd\t31, r1, r1\n\tand\tstack-[3], r1, r1\n\tadd\t68, r1, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tjump\t@.BB0_35\n.BB0_40:\n\tsub.s!\t@CPI0_5[0], r3, r1\n\tadd\tstack-[3], r0, r4\n\tjump.gt\t@.BB0_2\n\tadd\t63, r3, r1\n\tand\tr1, r4, r4\n\tld.1\t64, r1\n\tadd\tr1, r4, r4\n\tsub!\tr4, r1, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r4, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r4\n\tand\t31, r3, r4\n\tst.1.inc\tr1, r3, r9\n\tptr.add\tstack[@ptr_return_data], r0, r5\n\tshr.s!\t5, r3, r3\n\tjump.eq\t@.BB0_81\n\tadd\tr0, r0, r6\n.BB0_45:\n\tshl.s\t5, r6, r7\n\tadd\tr9, r7, r8\n\tptr.add\tr5, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r3, r7\n\tjump.lt\t@.BB0_45\n.BB0_81:\n\tadd\tr9, r0, stack-[2]\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_31\n\tshl.s\t5, r3, r3\n\tptr.add\tr5, r3, r5\n\tadd\tstack-[2], r3, r3\n\tshl.s\t3, r4, r4\n\tld.1\tr3, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr5, r5\n\tsub\t256, r4, r4\n\tshr\tr5, r4, r5\n\tshl\tr5, r4, r4\n\tor\tr4, r6, r4\n\tst.1\tr3, r4\n\tjump\t@.BB0_31\n.BB0_36:\n\tsub!\tr1, r0, r1\n\tadd\tstack-[7], r0, r2\n\tjump.ne\t@.BB0_26\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tst.2\t4, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_20\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_26\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_16[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t29, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_17[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_18[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_20:\n\trevert\n.BB0_34:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[2], r0, r4\n.BB0_35:\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.ge\tr2, r0, r4\n\tshl.s\t64, r4, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\ncopy_memory_to_memory_with_cleanup:\n.func_begin1:\n\tsub!\tr3, r0, r4\n\tjump.eq\t@.BB1_3\n\tadd\tr0, r0, r4\n.BB1_2:\n\tadd\tr4, r2, r5\n\tadd\tr4, r1, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tadd\t32, r4, r4\n\tsub!\tr4, r3, r5\n\tjump.lt\t@.BB1_2\n.BB1_3:\n\tadd\tr3, r2, r1\n\tst.1\tr1, r0\n\tret\n.func_end1:\n\n__cxa_throw:\n\trevert\n\n__farcall:\n.func_begin2:\n.tmp0:\n\tfar_call\tr1, r2, @.BB3_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB3_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end2:\n\n__staticcall:\n.func_begin3:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB4_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB4_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end3:\n\n__delegatecall:\n.func_begin4:\n.tmp6:\n\tfar_call.delegate\tr1, r2, @.BB5_2\n.tmp7:\n\tadd\t1, r0, r2\n\tret\n.BB5_2:\n.tmp8:\n\tadd\tr0, r0, r2\n\tret\n.func_end4:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.p2align\t5\nptr_return_data:\n.cell\t0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell -18446744073709551457\nCPI0_2:\n\t.cell -18446744073709551489\nCPI0_3:\n\t.cell 8589934560\nCPI0_4:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_5:\n\t.cell 18446744073709551615\nCPI0_6:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_7:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_8:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_9:\n\t.cell 24440054405305269366569402256811496959409073762505157381672968839269610695612\nCPI0_10:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_11:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_12:\n\t.cell -30536698362301869620703524882028299911890425965968411027149867401609008632517\nCPI0_13:\n\t.cell 18446744073709551519\nCPI0_14:\n\t.cell 14654901866877395549149391597484105336708473837108585137082493300548441210880\nCPI0_15:\n\t.cell 29577713123142787666065354962605974352286555015652805685687967870311454567532\nCPI0_16:\n\t.cell 29577713123142787666064487680123823951345158729797978021083438401868913442816\nCPI0_17:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_18:\n\t.cell 7922816251426433759354395033600\nCPI0_19:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_20:\n\t.cell 50411903926665684337970802942352511357568373430877458990420567558264874598400\nCPI0_21:\n\t.cell 31354931755624933654031447922210259146857421806447843296373930569683382247534\nCPI0_22:\n\t.cell 10458117451882892562347801444352\nCPI0_23:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\nCPI0_24:\n\t.cell 2852213850513516153367582212096\n","bytecode":{"object":"00020000000000020007000000000002000000000301001900000060033002700000008b0330019700010000003103550000008008000039000000400080043f00000001022001900000002e0000c13d000000000431034f0000009402000041000000000202041a0000008f02200197000000000503004b000000370000c13d0000000001000414000000040320008c000000ba0000c13d00000000030000310000001f0230018f00000005013002720000001f0000613d00000000050000190000000506500210000000000764034f000000000707043b00000000007604350000000105500039000000000615004b000000180000413d000000000502004b000001080000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000414034f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000210435000001080000013d0000008c023000410000008d0220009c0000006e0000213d000000a20100004100000000001004350000004101000039000000040010043f000000a30100004100000227000104300000001f0630018f0000000505300272000000420000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000857004b0000003b0000413d000000000706004b000000500000613d00000003066002100000000505500210000000000705043300000000076701cf000000000767022f000000000151034f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000000001000414000000040520008c000000e10000c13d00000000030000310000001f0230018f00000005013002720000005f0000613d00000000050000190000000506500210000000000764034f000000000707043b00000000007604350000000105500039000000000615004b000000580000413d000000000502004b000001080000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000414034f000000000404043b0000010002200089000000000424022f00000000022401cf000000000252019f0000000000210435000001080000013d0000009f023000390000008e02200197000000400020043f0000001f0230018f00000005043002720000007d0000613d00000000050000190000000506500210000000000761034f000000000707043b000000800660003900000000007604350000000105500039000000000645004b000000750000413d000000000502004b0000008c0000613d0000000504400210000000000141034f00000003022002100000008004400039000000000504043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001404350000003f0130008c000000b80000a13d000000800700043d0000008f0a7001970000008f0170009c000000b80000213d000000a00200043d000000900120009c000000b80000213d0000001f012000390000009104000041000000000531004b000000000500001900000000050480190000009101100197000000000601004b0000000004008019000000910110009c000000000405c019000000000104004b000000b80000c13d00000080012000390000000001010433000000900410009c000000310000213d0000003f04100039000000200900008a000000000494016f000000400b00043d00000000044b00190000000005b4004b00000000050000190000000105004039000000900640009c000000310000213d0000000105500190000000310000c13d0000008003300039000000400040043f00000000061b0436000000a0022000390000000004210019000000000334004b0000010f0000a13d000000000100001900000227000104300000008b030000410000008b0410009c0000000001038019000000c001100210022502200000040f0001000000010355000000000301001900000060033002700000001f0430018f0000008b0030019d0000008b033001970000000505300272000000cf0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000000c80000413d000000000604004b000000dd0000613d00000003044002100000000505500210000000000605043300000000064601cf000000000646022f000000000151034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000000101200190000001080000c13d000000600130021000000227000104300000008b040000410000008b0510009c0000000001048019000000c0011002100000006003300210000000000131019f022502200000040f0001000000010355000000000301001900000060033002700000001f0430018f0000008b0030019d0000008b033001970000000505300272000000f80000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000000f10000413d000000000604004b000001060000613d00000003044002100000000505500210000000000605043300000000064601cf000000000646022f000000000151034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000001012001900000010d0000613d0000008b010000410000008b0230009c00000000030180190000006001300210000002260001042e0000006001300210000002270001043000050000000b001d00060000000a001d000300000009001d000200000008001d000000000301004b0000011d0000613d000000000300001900000000046300190000000005230019000000000505043300000000005404350000002003300039000000000413004b000001160000413d000400000006001d0000000001160019000000000001043500000092010000410000000000100439000700000007001d00000004007004430000008b0100004100000000020004140000008b0320009c0000000002018019000000c00120021000000093011001c700008002020000390225021b0000040f0000000102200190000001fd0000613d000000000101043b000000000101004b000001460000c13d000000400100043d00000064021000390000009f0300004100000000003204350000004402100039000000a003000041000000000032043500000024021000390000002d0300003900000000003204350000009c0200004100000000002104350000000402100039000000200300003900000000003204350000008b020000410000008b0310009c00000000010280190000004001100210000000a1011001c700000227000104300000009401000041000000000201041a00000095022001970000000605000029000000000252019f000000000021041b0000008b0100004100000000020004140000008b0320009c0000000002018019000000c00120021000000096011001c70000800d0200003900000002030000390000009704000041022502160000040f0000000101200190000000070200002900000005050000290000000407000029000000b80000613d0000000001050433000000000101004b000001630000c13d0000002001000039000001000010044300000120000004430000009e01000041000002260001042e000000400400043d000000980140009c000000310000213d0000006001400039000000400010043f0000004001400039000000990300004100000000003104350000002701000039000600000004001d00000000031404360000009a01000041000100000003001d000000000013043500000000060504330000000001000414000000040320008c000001780000c13d000000010200003900000000030000310000018a0000013d0000008b030000410000008b0470009c000000000703801900000040047002100000008b0560009c00000000060380190000006005600210000000000545019f0000008b0410009c0000000001038019000000c001100210000000000115019f022502200000040f000000010220018f000100000001035500000060011002700000008b0010019d0000008b031001970000006001000039000000000403004b000001aa0000c13d0000000001010433000000000202004b000001d80000c13d000000000201004b000001fe0000c13d000000400400043d000700000004001d0000009c01000041000000000014043500000004014000390000002002000039000000000021043500000006010000290000000003010433000600000003001d0000002401400039000000000031043500000044024000390000000101000029022502080000040f00000006010000290000001f01100039000000030110017f00000044011000390000008b020000410000008b0310009c00000000010280190000000704000029000002020000013d000000900130009c0000000304000029000000310000213d0000003f01300039000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000000900640009c000000310000213d0000000105500190000000310000c13d000000400040043f0000001f0430018f000000000931043600000001050003670000000503300272000001c70000613d000000000600001900000005076002100000000008790019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000001bf0000413d000200000009001d000000000604004b0000018d0000613d0000000503300210000000000535034f00000002033000290000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000018d0000013d000000000101004b00000007020000290000015e0000c13d0000009201000041000000000010043900000004002004430000008b0100004100000000020004140000008b0320009c0000000002018019000000c00120021000000093011001c700008002020000390225021b0000040f0000000102200190000001fd0000613d000000000101043b000000000101004b0000015e0000c13d000000400100043d00000044021000390000009b03000041000000000032043500000024021000390000001d0300003900000000003204350000009c0200004100000000002104350000000402100039000000200300003900000000003204350000008b020000410000008b0310009c000000000102801900000040011002100000009d011001c70000022700010430000000000001042f0000008b020000410000008b0310009c000000000102801900000002040000290000008b0340009c000000000402801900000040024002100000006001100210000000000121019f0000022700010430000000000403004b000002120000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b0000020b0000413d00000000012300190000000000010435000000000001042d000000000001042f00000219002104210000000102000039000000000001042d0000000002000019000000000001042d0000021e002104230000000102000039000000000001042d0000000002000019000000000001042d00000223002104250000000102000039000000000001042d0000000002000019000000000001042d0000022500000432000002260001042e0000022700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009fffffffffffffffffffffffffffffffffffffffffffffffff000000000000007f00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b000000000000000000000000000000000000000000000000ffffffffffffff9f206661696c656400000000000000000000000000000000000000000000000000416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000002000000000000000000000000000000400000010000000000000000006f74206120636f6e747261637400000000000000000000000000000000000000455243313936373a206e657720696d706c656d656e746174696f6e206973206e00000000000000000000000000000000000000840000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000cc28bc51883240d7ff37feb1fc014d125103bc452a04f0976179ba22db08d339"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"ERC1967Proxy_936\" {\n code {\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _1 := 64\n mstore(_1, memoryguard(0x80))\n let programSize := datasize(\"ERC1967Proxy_936\")\n let argSize := sub(codesize(), programSize)\n let memoryDataOffset := allocate_memory(argSize)\n codecopy(memoryDataOffset, programSize, argSize)\n let _2 := add(memoryDataOffset, argSize)\n if slt(sub(_2, memoryDataOffset), _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let value := mload(memoryDataOffset)\n let _3 := and(value, sub(shl(160, 1), 1))\n if iszero(eq(value, _3))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _4 := 32\n let offset := mload(add(memoryDataOffset, _4))\n let _5 := sub(shl(64, 1), 1)\n if gt(offset, _5)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _6 := add(memoryDataOffset, offset)\n if iszero(slt(add(_6, 0x1f), _2))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _7 := mload(_6)\n let array := allocate_memory(array_allocation_size_bytes(_7))\n mstore(array, _7)\n let dst := add(array, _4)\n if gt(add(add(_6, _7), _4), _2)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n copy_memory_to_memory_with_cleanup(add(_6, _4), dst, _7)\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(value))\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n {\n let memPtr := mload(_1)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), _4)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _8 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n sstore(_8, or(and(sload(_8), not(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ sub(shl(160, 1), 1))), /** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _3))\n /// @src -1:-1:-1\n let _9 := 0\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ _9, _9, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _3)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _10 := iszero(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ array))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_10)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _10\n {\n expr := /** @src -1:-1:-1 */ _9\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let memPtr_1 := mload(_1)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, _5), lt(newFreePtr, memPtr_1))\n {\n mstore(/** @src -1:-1:-1 */ _9, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _9, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 0x24)\n }\n mstore(_1, newFreePtr)\n mstore(memPtr_1, 39)\n mstore(add(memPtr_1, _4), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, _1), \" failed\")\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), value, dst, mload(array), /** @src -1:-1:-1 */ _9, _9)\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let data := /** @src -1:-1:-1 */ _9\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _11 := returndatasize()\n let memPtr_2 := allocate_memory(array_allocation_size_bytes(_11))\n mstore(memPtr_2, _11)\n data := memPtr_2\n returndatacopy(add(memPtr_2, _4), /** @src -1:-1:-1 */ _9, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ returndatasize())\n }\n /// @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\"\n pop(fun_verifyCallResultFromTarget(value, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ memPtr_1))\n }\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n let _12 := mload(_1)\n let _13 := datasize(\"ERC1967Proxy_936_deployed\")\n codecopy(_12, dataoffset(\"ERC1967Proxy_936_deployed\"), _13)\n return(_12, _13)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ shl(229, 4594637))\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 32)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 36), length)\n copy_memory_to_memory_with_cleanup(add(var_errorMessage_mpos, 32), add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 68), length)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_target))\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ERC1967Proxy_936_deployed\" {\n code {\n {\n /// @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\"\n mstore(64, 128)\n if iszero(calldatasize())\n {\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let value := and(sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), sub(shl(160, 1), 1))\n /// @src -1:-1:-1\n let _1 := 0\n /// @src 0:23291:24000 \"assembly {...\"\n calldatacopy(/** @src -1:-1:-1 */ _1, _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize())\n /// @src 0:23291:24000 \"assembly {...\"\n let usr$result := delegatecall(gas(), value, /** @src -1:-1:-1 */ _1, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize(), /** @src -1:-1:-1 */ _1, _1)\n /// @src 0:23291:24000 \"assembly {...\"\n returndatacopy(/** @src -1:-1:-1 */ _1, _1, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n switch usr$result\n case 0 {\n revert(/** @src -1:-1:-1 */ _1, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n default {\n return(/** @src -1:-1:-1 */ _1, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let value_1 := and(sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), sub(shl(160, 1), 1))\n /// @src -1:-1:-1\n let _2 := 0\n /// @src 0:23291:24000 \"assembly {...\"\n calldatacopy(/** @src -1:-1:-1 */ _2, _2, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize())\n /// @src 0:23291:24000 \"assembly {...\"\n let usr$result_1 := delegatecall(gas(), value_1, /** @src -1:-1:-1 */ _2, /** @src 0:25882:26593 \"contract ERC1967Proxy is Proxy, ERC1967Upgrade {...\" */ calldatasize(), /** @src -1:-1:-1 */ _2, _2)\n /// @src 0:23291:24000 \"assembly {...\"\n returndatacopy(/** @src -1:-1:-1 */ _2, _2, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n switch usr$result_1\n case 0 {\n revert(/** @src -1:-1:-1 */ _2, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n default {\n return(/** @src -1:-1:-1 */ _2, /** @src 0:23291:24000 \"assembly {...\" */ returndatasize())\n }\n }\n }\n data \".metadata\" hex\"a2646970667358221220fb523ac7004433b3005bf3bb54b3b0e4b3f023eacac776a1a94605a6b8b0f8c964736f6c63430008150033\"\n }\n}\n","hash":"010000a5ba54bf9917189fc16916c66103e2cddb802cbac01438467b73e85a83","factoryDependencies":{}},"ERC1967Upgrade":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"delegatecall\",\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"IBeacon":{"abi":[{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IBeacon\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"implementation()":"5c60da1b"}},"irOptimized":""},"IERC1822Proxiable":{"abi":[{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"proxiableUUID()":"52d1902d"}},"irOptimized":""},"IMintableERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IMintableERC20\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","mint(address,uint256)":"40c10f19","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb"}},"irOptimized":""},"IPublicLock":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLockManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"cancelAndRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"expirationDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"expireAndRefundFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"extend","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeTrialLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasRefundValue","outputs":[{"internalType":"uint256","name":"_gasRefundValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getCancelAndRefundValue","outputs":[{"internalType":"uint256","name":"refund","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getHasValidKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"getTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"grantKeyExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_expirationTimestamps","type":"uint256[]"},{"internalType":"address[]","name":"_keyManagers","type":"address[]"}],"name":"grantKeys","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_lockCreator","type":"address"},{"internalType":"uint256","name":"_expirationDuration","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"string","name":"_lockName","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isLockManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"isOwner","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"isRenewable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isValidKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"keyExpirationTimestampFor","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"keyManagerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"lendKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxKeysPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNumberOfKeys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenIdFrom","type":"uint256"},{"internalType":"uint256","name":"_tokenIdTo","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mergeKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfOwners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyCancelHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyExtendHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyGrantHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyPurchaseHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onKeyTransferHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onTokenURIHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onValidKeyHook","outputs":[{"internalType":"address","name":"hookAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"address[]","name":"_referrers","type":"address[]"},{"internalType":"address[]","name":"_keyManagers","type":"address[]"},{"internalType":"bytes[]","name":"_data","type":"bytes[]"}],"name":"purchase","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"purchasePriceFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"referrerFees","outputs":[{"internalType":"uint256","name":"referrerFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundPenaltyBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"renewMembershipFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceLockManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"schemaVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_onKeyPurchaseHook","type":"address"},{"internalType":"address","name":"_onKeyCancelHook","type":"address"},{"internalType":"address","name":"_onValidKeyHook","type":"address"},{"internalType":"address","name":"_onTokenURIHook","type":"address"},{"internalType":"address","name":"_onKeyTransferHook","type":"address"},{"internalType":"address","name":"_onKeyExtendHook","type":"address"},{"internalType":"address","name":"_onKeyGrantHook","type":"address"}],"name":"setEventHooks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasRefundValue","type":"uint256"}],"name":"setGasRefundValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_keyManager","type":"address"}],"name":"setKeyManagerOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_lockName","type":"string"},{"internalType":"string","name":"_lockSymbol","type":"string"},{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setLockMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_feeBasisPoint","type":"uint256"}],"name":"setReferrerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_timeShared","type":"uint256"}],"name":"shareKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_keyOwner","type":"address"}],"name":"totalKeys","outputs":[{"internalType":"uint256","name":"numberOfKeys","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"_totalKeysCreated","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFeeBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unlendKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockProtocol","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"updateKeyPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newExpirationDuration","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"uint256","name":"_maxKeysPerAcccount","type":"uint256"}],"name":"updateLockConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeTrialLength","type":"uint256"},{"internalType":"uint256","name":"_refundPenaltyBasisPoints","type":"uint256"}],"name":"updateRefundPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateSchemaVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFeeBasisPoints","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addLockManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"cancelAndRefund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expirationDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"expireAndRefundFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"extend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeTrialLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasRefundValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasRefundValue\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getCancelAndRefundValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"refund\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"getHasValidKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"getTransferFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"grantKeyExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_expirationTimestamps\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"_keyManagers\",\"type\":\"address[]\"}],\"name\":\"grantKeys\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lockCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isLockManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isOwner\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"referrer\",\"type\":\"address\"}],\"name\":\"isRenewable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"isValidKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"keyExpirationTimestampFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"keyManagerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keyPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"lendKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxKeysPerAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNumberOfKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenIdFrom\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokenIdTo\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mergeKeys\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"numberOfOwners\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyCancelHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyExtendHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyGrantHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyPurchaseHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onKeyTransferHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onTokenURIHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onValidKeyHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"hookAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"_recipients\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_referrers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_keyManagers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_data\",\"type\":\"bytes[]\"}],\"name\":\"purchase\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"purchasePriceFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"referrerFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"referrerFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"refundPenaltyBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"renewMembershipFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceLockManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"schemaVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_onKeyPurchaseHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyCancelHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onValidKeyHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onTokenURIHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyTransferHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyExtendHook\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_onKeyGrantHook\",\"type\":\"address\"}],\"name\":\"setEventHooks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasRefundValue\",\"type\":\"uint256\"}],\"name\":\"setGasRefundValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_keyManager\",\"type\":\"address\"}],\"name\":\"setKeyManagerOf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_lockSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_baseTokenURI\",\"type\":\"string\"}],\"name\":\"setLockMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_feeBasisPoint\",\"type\":\"uint256\"}],\"name\":\"setReferrerFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeShared\",\"type\":\"uint256\"}],\"name\":\"shareKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keyOwner\",\"type\":\"address\"}],\"name\":\"totalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeysCreated\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferFeeBasisPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"unlendKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockProtocol\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"}],\"name\":\"updateKeyPricing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newExpirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxKeysPerAcccount\",\"type\":\"uint256\"}],\"name\":\"updateLockConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_freeTrialLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_refundPenaltyBasisPoints\",\"type\":\"uint256\"}],\"name\":\"updateRefundPenalty\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateSchemaVersion\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_transferFeeBasisPoints\",\"type\":\"uint256\"}],\"name\":\"updateTransferFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"balanceOf(address)\":{\"returns\":{\"balance\":\"The number of valid keys owned by `_keyOwner`\"}},\"burn(uint256)\":{\"params\":{\"_tokenId\":\"the id of token to burn\"}},\"cancelAndRefund(uint256)\":{\"details\":\"allows the key manager to expire a given tokenId and send a refund to the keyOwner based on the amount of time remaining.\",\"params\":{\"_tokenId\":\"The id of the key to cancel.\"}},\"expireAndRefundFor(uint256,uint256)\":{\"details\":\"Invoked by a Lock manager to expire the user's key and perform a refund and cancellation of the keyThrows if called by other than a Lock managerThrows if _keyOwner does not have a valid key\",\"params\":{\"_amount\":\"The amount to refund to the key-owner\",\"_tokenId\":\"The key id we wish to refund to\"}},\"extend(uint256,uint256,address,bytes)\":{\"details\":\"Extend functionThrows if lock is disabled or key does not exist for _recipient. Throws if _recipient == address(0).\",\"params\":{\"_data\":\"arbitrary data populated by the front-end which initiated the sale\",\"_referrer\":\"address of the user making the referral\",\"_tokenId\":\"the id of the key to extend\",\"_value\":\"the number of tokens to pay for this purchase >= the current keyPrice - any applicable discount (_value is ignored when using ETH)\"}},\"gasRefundValue()\":{\"details\":\"Returns the value/price to be refunded to the sender on purchase\"},\"getApproved(uint256)\":{\"details\":\"Throws if `_tokenId` is not a valid NFT.\",\"params\":{\"_tokenId\":\"The NFT to find the approved address for\"},\"returns\":{\"operator\":\"The approved address for this NFT, or the zero address if there is none\"}},\"getCancelAndRefundValue(uint256)\":{\"details\":\"Determines how much of a refund a key owner would receive if they issued\",\"params\":{\"_tokenId\":\"the id of the token to get the refund value for.\"},\"returns\":{\"refund\":\"the amount of tokens refunded\"}},\"getHasValidKey(address)\":{\"params\":{\"_user\":\"The address of the key owner\"}},\"getTransferFee(uint256,uint256)\":{\"details\":\"Throws if _tokenId does not have a valid key\",\"params\":{\"_time\":\"The amount of time to calculate the fee for.\",\"_tokenId\":\"The id of the key check the transfer fee for.\"},\"returns\":{\"_0\":\"The transfer fee in seconds.\"}},\"grantKeyExtension(uint256,uint256)\":{\"details\":\"set `_duration` to 0 to use the default duration of the lock\",\"params\":{\"_duration\":\"The duration in secondes to add ot the key\",\"_tokenId\":\"The id of the token to extend\"}},\"grantKeys(address[],uint256[],address[])\":{\"details\":\"Throws if called by other than a Lock manager\",\"params\":{\"_expirationTimestamps\":\"An array of expiration Timestamps for the keys being granted\",\"_recipients\":\"An array of receiving addresses\"},\"returns\":{\"_0\":\"the ids of the granted tokens\"}},\"isApprovedForAll(address,address)\":{\"details\":\"Tells whether an operator is approved by a given keyManager\",\"params\":{\"_operator\":\"operator address which you want to query the approval of\",\"_owner\":\"owner address which you want to query the approval of\"},\"returns\":{\"_0\":\"bool whether the given operator is approved by the given owner\"}},\"isRenewable(uint256,address)\":{\"details\":\"helper to check if a key is currently renewable it will revert if the pricing or duration of the lock have been modified unfavorably since the key was bought(price increase or duration decrease). It will also revert if a lock is not renewable or if the key is not ready for renewal yet (at least 90% expired).\",\"params\":{\"referrer\":\"the address where to send the referrer fee\",\"tokenId\":\"the id of the token to check\"},\"returns\":{\"_0\":\"true if the terms has changed\"}},\"isValidKey(uint256)\":{\"params\":{\"_tokenId\":\"the id of the key to check validity\"}},\"keyExpirationTimestampFor(uint256)\":{\"details\":\"Returns the key's ExpirationTimestamp field for a given owner.Returns 0 if the owner has never owned a key for this lock\",\"params\":{\"_tokenId\":\"the id of the key\"}},\"lendKey(address,address,uint256)\":{\"params\":{\"from\":\"the owner of token to transfer\",\"to\":\"the address that will receive the token\",\"tokenId\":\"the id of the token\"}},\"maxKeysPerAddress()\":{\"returns\":{\"_0\":\"the maximum number of key allowed for a single address\"}},\"mergeKeys(uint256,uint256,uint256)\":{\"params\":{\"_amount\":\"the amount of time to transfer (in seconds)\",\"_tokenIdFrom\":\"the id of the token to substract time from\",\"_tokenIdTo\":\"the id of the destination token to add time\"}},\"migrate(bytes)\":{\"details\":\"when all record schemas are sucessfully upgraded, this function will update the `schemaVersion` variable to the latest/current lock version\",\"params\":{\"_calldata\":\"an ABI-encoded representation of the params (v10: the number of records to migrate as `uint`)\"}},\"onKeyCancelHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onKeyExtendHook()\":{\"returns\":{\"hookAddress\":\"the address ok the hook\"}},\"onKeyGrantHook()\":{\"returns\":{\"hookAddress\":\"the address ok the hook\"}},\"onKeyPurchaseHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onKeyTransferHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onTokenURIHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"onValidKeyHook()\":{\"returns\":{\"hookAddress\":\"address of the hook\"}},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the NFT specified by `tokenId`.\"},\"publicLockVersion()\":{\"returns\":{\"_0\":\"The current version number.\"}},\"purchase(uint256[],address[],address[],address[],bytes[])\":{\"details\":\"Purchase functionSetting _value to keyPrice exactly doubles as a security feature. That way if the lock owner increases the price while my transaction is pending I can't be charged more than I expected (only applicable to ERC-20 when more than keyPrice is approved for spending).\",\"params\":{\"_data\":\"array of arbitrary data populated by the front-end which initiated the sale\",\"_keyManagers\":\"optional array of addresses to grant managing rights to a specific address on creation\",\"_recipients\":\"array of addresses of the recipients of the purchased key\",\"_referrers\":\"array of addresses of the users making the referral\",\"_values\":\"array of tokens amount to pay for this purchase >= the current keyPrice - any applicable discount (_values is ignored when using ETH)\"},\"returns\":{\"tokenIds\":\"the ids of the created tokens\"}},\"purchasePriceFor(address,address,bytes)\":{\"details\":\"this considers any discount from Unlock or the OnKeyPurchase hook.\"},\"referrerFees(address)\":{\"params\":{\"_referrer\":\"the address of the referrer\"},\"returns\":{\"referrerFee\":\"the percentage of the keyPrice to be sent to the referrer (in basis points)\"}},\"renewMembershipFor(uint256,address)\":{\"params\":{\"_referrer\":\"the address of the person to be granted UDT\",\"_tokenId\":\"the ID fo the token to renew\"}},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Transfers a specific NFT (`tokenId`) from one account (`from`) to another (`to`). Requirements: - `from`, `to` cannot be zero. - `tokenId` must be owned by `from`. - If the caller is not `from`, it must be have been allowed to move this NFT by either {approve} or {setApprovalForAll}.\"},\"schemaVersion()\":{\"details\":\"will return 0 if no ;igration has ever been run\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Sets or unsets the approval of a given operator An operator is allowed to transfer all tokens of the sender on their behalf\",\"params\":{\"_approved\":\"representing the status of the approval to be set\",\"_operator\":\"operator address to set the approval\"}},\"setEventHooks(address,address,address,address,address,address,address)\":{\"params\":{\"_onKeyCancelHook\":\"Hook called when the internal `_cancelAndRefund` function is called\",\"_onKeyExtendHook\":\"Hook called when a key is extended or renewed\",\"_onKeyGrantHook\":\"Hook called when a key is granted\",\"_onKeyPurchaseHook\":\"Hook called when the `purchase` function is called\",\"_onKeyTransferHook\":\"Hook called when a key is transfered\",\"_onTokenURIHook\":\"Hook called to generate a data URI used for NFT metadata\",\"_onValidKeyHook\":\"Hook called to determine if the contract should overide the status for a given address\"}},\"setGasRefundValue(uint256)\":{\"details\":\"Set the value to be refunded to the sender on purchase\",\"params\":{\"_gasRefundValue\":\"price in wei or token in smallest price unit\"}},\"setKeyManagerOf(uint256,address)\":{\"params\":{\"_keyManager\":\"The address to assign the rights to for the given key\",\"_tokenId\":\"The id of the key to assign rights for\"}},\"setLockMetadata(string,string,string)\":{\"params\":{\"_baseTokenURI\":\"the baseTokenURI for this Lock\",\"_lockName\":\"a descriptive name for this Lock.\",\"_lockSymbol\":\"a Symbol for this Lock (default to KEY).\"}},\"setReferrerFee(address,uint256)\":{\"details\":\"To send a fixed percentage of the key price to all referrers, sett a percentage to `address(0)`\",\"params\":{\"_feeBasisPoint\":\"the percentage of the price to be used for this specific referrer (in basis points)\",\"_referrer\":\"the address of the referrer\"}},\"shareKey(address,uint256,uint256)\":{\"details\":\"Throws if key is not valid.Throws if `_to` is the zero addressEmit Transfer event\",\"params\":{\"_timeShared\":\"The amount of time shared checks if `_to` is a smart contract (code size > 0). If so, it calls `onERC721Received` on `_to` and throws if the return value is not `bytes4(keccak256('onERC721Received(address,address,uint,bytes)'))`.\",\"_to\":\"The recipient of the shared key\",\"_tokenId\":\"the key to share\"}},\"symbol()\":{\"details\":\"Gets the token symbol\",\"returns\":{\"_0\":\"string representing the token symbol\"}},\"tokenURI(uint256)\":{\"details\":\"Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC 3986. The URI may point to a JSON file that conforms to the \\\"ERC721 Metadata JSON Schema\\\". https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md\",\"params\":{\"_tokenId\":\"The tokenID we're inquiring about\"},\"returns\":{\"_0\":\"String representing the URI for the requested token\"}},\"totalKeys(address)\":{\"params\":{\"_keyOwner\":\"address for which we are retrieving the total number of keys\"},\"returns\":{\"numberOfKeys\":\"total number of keys owned by the address\"}},\"totalSupply()\":{\"returns\":{\"_totalKeysCreated\":\"the total number of keys, valid or not\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Requirements: if the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. The key manager will be reset to address zero after the transfer\",\"params\":{\"from\":\"the owner of token to transfer\",\"to\":\"the address that will receive the token\",\"tokenId\":\"the id of the token\"}},\"unlendKey(address,uint256)\":{\"details\":\"Only the key manager of the token can call this function\",\"params\":{\"_recipient\":\"the address that will receive the token ownership\",\"_tokenId\":\"the id of the token\"}},\"updateKeyPricing(uint256,address)\":{\"details\":\"Throws if called by other than a Lock managerThrows if lock has been disabledThrows if _tokenAddress is not a valid token\",\"params\":{\"_keyPrice\":\"The new price to set for keys\",\"_tokenAddress\":\"The address of the erc20 token to use for pricing the keys, or 0 to use ETH\"}},\"updateLockConfig(uint256,uint256,uint256)\":{\"details\":\"_maxNumberOfKeys Can't be smaller than the existing supply\",\"params\":{\"_maxKeysPerAcccount\":\"the maximum amount of key a single user can own\",\"_maxNumberOfKeys\":\"uint the maximum number of keys\",\"_newExpirationDuration\":\"the new amount of time for each key purchased or type(uint).max for a non-expiring key\"}},\"updateRefundPenalty(uint256,uint256)\":{\"details\":\"Throws if called by other than a Lock manager\",\"params\":{\"_freeTrialLength\":\"The new duration of free trials for this lock\",\"_refundPenaltyBasisPoints\":\"The new refund penaly in basis-points(bps)\"}},\"updateTransferFee(uint256)\":{\"details\":\"Throws if called by other than a Lock manager\",\"params\":{\"_transferFeeBasisPoints\":\"The new transfer fee in basis-points(bps). Ex: 200 bps = 2%\"}},\"withdraw(address,address,uint256)\":{\"details\":\"Called by lock manager to withdraw all funds from the lock\",\"params\":{\"_amount\":\"specifies the max amount to withdraw, which may be reduced when considering the available balance. Set to 0 or MAX_UINT to withdraw everything. -- however be wary of draining funds as it breaks the `cancelAndRefund` and `expireAndRefundFor` use cases.\",\"_recipient\":\"specifies the address that will receive the tokens\",\"_tokenAddress\":\"specifies the token address to withdraw or 0 for ETH. This is usually the same as `tokenAddress` in MixinFunds.\"}}},\"title\":\"The PublicLock Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"balanceOf(address)\":{\"notice\":\"In the specific case of a Lock, `balanceOf` returns only the tokens with a valid expiration timerange\"},\"burn(uint256)\":{\"notice\":\"Deactivate an existing keythe key will be expired and ownership records will be destroyed\"},\"cancelAndRefund(uint256)\":{\"notice\":\"cancel is enabled with a 10% penalty by default on all Locks.\"},\"gasRefundValue()\":{\"notice\":\"_gasRefundValue price in wei or token in smallest price unit\"},\"getApproved(uint256)\":{\"notice\":\"Get the approved address for a single NFT\"},\"getCancelAndRefundValue(uint256)\":{\"notice\":\"Due to the time required to mine a tx, the actual refund amount will be lower than what the user reads from this call.\"},\"getHasValidKey(address)\":{\"notice\":\"Checks if the user has a non-expired key.\"},\"getRoleAdmin(bytes32)\":{\"notice\":\"Innherited from Open Zeppelin AccessControl.sol\"},\"getTransferFee(uint256,uint256)\":{\"notice\":\"Determines how much of a fee would need to be paid in order to transfer to another account. This is pro-rated so the fee goes down overtime.\"},\"grantKeyExtension(uint256,uint256)\":{\"notice\":\"Allows the Lock owner to extend an existing keys with no charge.\"},\"grantKeys(address[],uint256[],address[])\":{\"notice\":\"Allows a Lock manager to give a collection of users a key with no charge. Each key may be assigned a different expiration date.\"},\"initialize(address,uint256,address,uint256,uint256,string)\":{\"notice\":\"Functions\"},\"isValidKey(uint256)\":{\"notice\":\"Check if a certain key is validthis makes use of the onValidKeyHook if it is set\"},\"lendKey(address,address,uint256)\":{\"notice\":\"Lending a key allows you to transfer the token while retaining the ownerships right by setting yourself as a key manager first.This function can only be called by 1) the key owner when no key manager is set or 2) the key manager. After calling the function, the `_recipent` will be the new owner, and the sender of the tx will become the key manager.\"},\"mergeKeys(uint256,uint256,uint256)\":{\"notice\":\"Merge existing keys\"},\"migrate(bytes)\":{\"notice\":\"Migrate data from the previous single owner => key mapping to the new data structure w multiple tokens.\"},\"name()\":{\"notice\":\"A descriptive name for a collection of NFTs in this contract\"},\"numberOfOwners()\":{\"notice\":\"Public function which returns the total number of unique owners (both expired and valid). This may be larger than totalSupply.\"},\"onKeyCancelHook()\":{\"notice\":\"Returns the address of the `onKeyCancelHook` hook.\"},\"onKeyExtendHook()\":{\"notice\":\"Returns the address of the `onKeyExtendHook` hook.\"},\"onKeyGrantHook()\":{\"notice\":\"Returns the address of the `onKeyGrantHook` hook.\"},\"onKeyPurchaseHook()\":{\"notice\":\"Returns the address of the `onKeyPurchaseHook` hook.\"},\"onKeyTransferHook()\":{\"notice\":\"Returns the address of the `onKeyTransferHook` hook.\"},\"onTokenURIHook()\":{\"notice\":\"Returns the address of the `onTokenURIHook` hook.\"},\"onValidKeyHook()\":{\"notice\":\"Returns the address of the `onValidKeyHook` hook.\"},\"owner()\":{\"notice\":\"`owner()` is provided as an helper to mimick the `Ownable` contract ABI. The `Ownable` logic is used by many 3rd party services to determine contract ownership - e.g. who is allowed to edit metadata on Opensea.This logic is NOT used internally by the Unlock Protocol and is made available only as a convenience helper.\"},\"publicLockVersion()\":{\"notice\":\"The version number of the current implementation on this network.\"},\"purchase(uint256[],address[],address[],address[],bytes[])\":{\"notice\":\"when called for an existing and non-expired key, the `_keyManager` param will be ignored\"},\"purchasePriceFor(address,address,bytes)\":{\"notice\":\"returns the minimum price paid for a purchase with these params.\"},\"referrerFees(address)\":{\"notice\":\"Returns the percentage of the keyPrice to be sent to the referrer (in basis points)\"},\"renewMembershipFor(uint256,address)\":{\"notice\":\"Renew a given tokenonly works for non-free, expiring, ERC20 locks\"},\"schemaVersion()\":{\"notice\":\"Returns the version number of the data schema currently used by the lockif this is different from `publicLockVersion`, then the ability to purchase, grant or extend keys is disabled.\"},\"setApprovalForAll(address,bool)\":{\"notice\":\"disabled when transfers are disabled\"},\"setEventHooks(address,address,address,address,address,address,address)\":{\"notice\":\"Allows a Lock manager to add or remove an event hook\"},\"setKeyManagerOf(uint256,address)\":{\"notice\":\"Update transfer and cancel rights for a given key\"},\"setLockMetadata(string,string,string)\":{\"notice\":\"Allows the Lock owner to assign\"},\"setReferrerFee(address,uint256)\":{\"notice\":\"Set a specific percentage of the keyPrice to be sent to the referrer while purchasing, extending or renewing a key.\"},\"shareKey(address,uint256,uint256)\":{\"notice\":\"Allows the key owner to safely share their key (parent key) by transferring a portion of the remaining time to a new key (child key).\"},\"supportsInterface(bytes4)\":{\"notice\":\"From ERC165.sol\"},\"tokenURI(uint256)\":{\"notice\":\"A distinct Uniform Resource Identifier (URI) for a given asset.\"},\"totalKeys(address)\":{\"notice\":\"Returns the number of keys owned by `_keyOwner` (expired or not)\"},\"totalSupply()\":{\"notice\":\"Returns the total number of keys, including non-valid ones\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"an ERC721-like function to transfer a token from one account to another.\"},\"unlendKey(address,uint256)\":{\"notice\":\"Unlend is called when you have lent a key and want to claim its full ownership back.\"},\"updateKeyPricing(uint256,address)\":{\"notice\":\"A function which lets a Lock manager of the lock to change the price for future purchases.\"},\"updateLockConfig(uint256,uint256,uint256)\":{\"notice\":\"Update the main key properties for the entire lock: - default duration of each key - the maximum number of keys the lock can edit - the maximum number of keys a single address can holdkeys previously bought are unaffected by this changes in expiration duration (i.e. existing keys timestamps are not recalculated/updated)\"},\"updateRefundPenalty(uint256,uint256)\":{\"notice\":\"Allow a Lock manager to change the refund penalty.\"},\"updateSchemaVersion()\":{\"notice\":\"Set the schema version to the latestonly lock manager call call this\"},\"updateTransferFee(uint256)\":{\"notice\":\"Allow a Lock manager to change the transfer fee.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IPublicLock\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","addLockManager(address)":"d2503485","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(uint256)":"42966c68","cancelAndRefund(uint256)":"d32bfb6c","expirationDuration()":"11a4c03a","expireAndRefundFor(uint256,uint256)":"558b71e9","extend(uint256,uint256,address,bytes)":"d813cc19","freeTrialLength()":"a375cb05","gasRefundValue()":"6207a8da","getApproved(uint256)":"081812fc","getCancelAndRefundValue(uint256)":"92ac98a5","getHasValidKey(address)":"6d8ea5b4","getRoleAdmin(bytes32)":"248a9ca3","getTransferFee(uint256,uint256)":"b1a3b25d","grantKeyExtension(uint256,uint256)":"4cd38c1d","grantKeys(address[],uint256[],address[])":"81a3c943","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,uint256,address,uint256,uint256,string)":"6eadde43","isApprovedForAll(address,address)":"e985e9c5","isLockManager(address)":"aae4b8f7","isOwner(address)":"2f54bf6e","isRenewable(uint256,address)":"50878a47","isValidKey(uint256)":"a98d3623","keyExpirationTimestampFor(uint256)":"54b249fb","keyManagerOf(uint256)":"4d025fed","keyPrice()":"10e56973","lendKey(address,address,uint256)":"0c2db8d1","maxKeysPerAddress()":"d52e4a10","maxNumberOfKeys()":"74b6c106","mergeKeys(uint256,uint256,uint256)":"068208cd","migrate(bytes)":"8932a90d","name()":"06fdde03","numberOfOwners()":"93fd1844","onKeyCancelHook()":"217751bc","onKeyExtendHook()":"c907c3ec","onKeyGrantHook()":"b129694e","onKeyPurchaseHook()":"2d33dd5b","onKeyTransferHook()":"389f07e8","onTokenURIHook()":"7ec2a724","onValidKeyHook()":"26e9ca07","owner()":"8da5cb5b","ownerOf(uint256)":"6352211e","publicLockVersion()":"d1bbd49c","purchase(uint256[],address[],address[],address[],bytes[])":"33818997","purchasePriceFor(address,address,bytes)":"097ba333","referrerFees(address)":"c23135dd","refundPenaltyBasisPoints()":"56e0d51f","renewMembershipFor(uint256,address)":"8505fe95","renounceLockManager()":"f0ba6040","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","safeTransferFrom(address,address,uint256)":"42842e0e","safeTransferFrom(address,address,uint256,bytes)":"b88d4fde","schemaVersion()":"4e2ce6d3","setApprovalForAll(address,bool)":"a22cb465","setEventHooks(address,address,address,address,address,address,address)":"74cac47d","setGasRefundValue(uint256)":"f5766b39","setKeyManagerOf(uint256,address)":"b11d7ec1","setLockMetadata(string,string,string)":"d1b8759b","setOwner(address)":"13af4035","setReferrerFee(address,uint256)":"debe2b0d","shareKey(address,uint256,uint256)":"f12c6b6e","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","tokenAddress()":"9d76ea58","tokenByIndex(uint256)":"4f6ccce7","tokenOfOwnerByIndex(address,uint256)":"2f745c59","tokenURI(uint256)":"c87b56dd","totalKeys(address)":"812eecd4","totalSupply()":"18160ddd","transferFeeBasisPoints()":"183767da","transferFrom(address,address,uint256)":"23b872dd","unlendKey(address,uint256)":"407dc589","unlockProtocol()":"0f15023b","updateKeyPricing(uint256,address)":"a2e4cd2e","updateLockConfig(uint256,uint256,uint256)":"282478df","updateRefundPenalty(uint256,uint256)":"39f46986","updateSchemaVersion()":"f32e8b24","updateTransferFee(uint256)":"8577a6d5","withdraw(address,address,uint256)":"d9caed12"}},"irOptimized":""},"IUniswapOracleV3":{"abi":[{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"consult","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"updateAndConsult","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"PERIOD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"consult\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"update\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenOut\",\"type\":\"address\"}],\"name\":\"updateAndConsult\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IUniswapOracleV3\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"PERIOD()":"b4d1d795","consult(address,uint256,address)":"8c86f1e4","factory()":"c45a0155","update(address,address)":"c640752d","updateAndConsult(address,uint256,address)":"c1e553e7"}},"irOptimized":""},"IUnlock":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"__initializeOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"impl","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"addLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_purchaser","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"}],"name":"computeAvailableDiscountFor","outputs":[{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_udt","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_estimatedGasForPurchase","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_URI","type":"string"},{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"configUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirationDuration","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"string","name":"_lockName","type":"string"},{"internalType":"bytes12","name":"","type":"bytes12"}],"name":"createLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createUpgradeableLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint16","name":"_lockVersion","type":"uint16"}],"name":"createUpgradeableLockAtVersion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"estimatedGasForPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grossNetworkProduct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_unlockOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"bool","name":"deployed","type":"bool"},{"internalType":"uint256","name":"totalSales","type":"uint256"},{"internalType":"uint256","name":"yieldedDiscountTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLockUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyAdminAddress","outputs":[{"internalType":"address","name":"_proxyAdminAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"publicLockImpls","outputs":[{"internalType":"address","name":"_implAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockLatestVersion","outputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_impl","type":"address"}],"name":"publicLockVersions","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discount","type":"uint256"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"recordConsumedDiscount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"recordKeyPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lock","type":"address"}],"name":"removeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_grossNetworkProduct","type":"uint256"},{"internalType":"uint256","name":"_totalDiscountGranted","type":"uint256"}],"name":"resetTrackedValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_publicLockAddress","type":"address"}],"name":"setLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_oracleAddress","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDiscountGranted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"udt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapOracles","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"lockAddress","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"upgradeLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"__initializeOwnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"addLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_purchaser\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"}],\"name\":\"computeAvailableDiscountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"discount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_udt\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_estimatedGasForPurchase\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_URI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"name\":\"configUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"},{\"internalType\":\"bytes12\",\"name\":\"\",\"type\":\"bytes12\"}],\"name\":\"createLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createUpgradeableLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"_lockVersion\",\"type\":\"uint16\"}],\"name\":\"createUpgradeableLockAtVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimatedGasForPurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"grossNetworkProduct\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unlockOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"locks\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"deployed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalSales\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"yieldedDiscountTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postLockUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyAdminAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_proxyAdminAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"publicLockImpls\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_implAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockLatestVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_impl\",\"type\":\"address\"}],\"name\":\"publicLockVersions\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_discount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_tokens\",\"type\":\"uint256\"}],\"name\":\"recordConsumedDiscount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"recordKeyPurchase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lock\",\"type\":\"address\"}],\"name\":\"removeLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_grossNetworkProduct\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalDiscountGranted\",\"type\":\"uint256\"}],\"name\":\"resetTrackedValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_publicLockAddress\",\"type\":\"address\"}],\"name\":\"setLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"}],\"name\":\"setProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDiscountGranted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"udt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"uniswapOracles\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"lockAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"upgradeLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLockTemplate(address,uint16)\":{\"details\":\"This is used to upgrade conytract per version number\"},\"computeAvailableDiscountFor(address,uint256)\":{\"details\":\"[DEPRECATED] Kept for backwards compatibility This function returns the discount available for a user, when purchasing a a key from a lock. This does not modify the state. It returns both the discount and the number of tokens consumed to grant that discount.\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"details\":\"internally call `createUpgradeableLock`\",\"params\":{\"_expirationDuration\":\"the duration of the lock (pass 0 for unlimited duration)\",\"_keyPrice\":\"the price of each key\",\"_lockName\":\"the name of the lock param _salt [deprec] -- kept only for backwards copatibility This may be implemented as a sequence ID or with RNG. It's used with `create2` to know the lock's address before the transaction is mined.\",\"_maxNumberOfKeys\":\"the maximum nimbers of keys to be edited\",\"_tokenAddress\":\"set to the ERC20 token address, or 0 for ETH.\"}},\"createUpgradeableLock(bytes)\":{\"details\":\"this call is passed as encoded function - for instance: bytes memory data = abi.encodeWithSignature( 'initialize(address,uint256,address,uint256,uint256,string)', msg.sender, _expirationDuration, _tokenAddress, _keyPrice, _maxNumberOfKeys, _lockName );\",\"params\":{\"data\":\"bytes containing the call to initialize the lock template\"},\"returns\":{\"_0\":\"address of the create lock\"}},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"params\":{\"_lockVersion\":\"the version of the lock to use\",\"data\":\"bytes containing the call to initialize the lock template (refer to createUpgradeableLock for more details)\"}},\"getAdmin()\":{\"details\":\"this reads the address directly from storage, at the slot `_ADMIN_SLOT` defined by Open Zeppelin's EIP1967 Proxy implementation which corresponds to the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1\"},\"getGlobalBaseTokenURI()\":{\"details\":\"Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\"},\"getGlobalTokenSymbol()\":{\"details\":\"Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\"},\"initializeProxyAdmin()\":{\"details\":\"deploy a ProxyAdmin contract used to upgrade locks\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"networkBaseFee()\":{\"details\":\"this helper can be wrapped in try/catch statement to avoid revert in networks where EIP-1559 is not implemented\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"postLockUpgrade()\":{\"details\":\"The `msg.sender` will be the upgraded lock\"},\"protocolFee()\":{\"returns\":{\"_0\":\"the protocol fee in basic point\"}},\"proxyAdminAddress()\":{\"returns\":{\"_proxyAdminAddress\":\"the address of the ProxyAdmin instance\"}},\"publicLockImpls(uint16)\":{\"params\":{\"_version\":\"the number of the version of the template\"},\"returns\":{\"_implAddress\":\"address of the lock templates\"}},\"publicLockLatestVersion()\":{\"returns\":{\"_version\":\"the version number of the latest template (used to deploy contracts)\"}},\"publicLockVersions(address)\":{\"params\":{\"_impl\":\"the address of the deployed template contract (PublicLock)\"},\"returns\":{\"_0\":\"number of the version corresponding to this address\"}},\"recordConsumedDiscount(uint256,uint256)\":{\"details\":\"[DEPRECATED] Kept for backwards compatibility This function will keep track of consumed discounts by a given user. It will also grant discount tokens to the creator who is granting the discount based on the amount of discount and compensation rate. This function is invoked by a previously deployed lock only.\"},\"removeLock(address)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"lock\":\"address of the lock to remove\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setLockTemplate(address)\":{\"details\":\"This will initialize the template and revokeOwnership.\"},\"setOracle(address,address)\":{\"details\":\"This will also call update to ensure at least one datapoint has been recorded.\"},\"setProtocolFee(uint256)\":{\"params\":{\"_protocolFee\":\"fee (in basis points)\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferTokens(address,address,uint256)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"amount\":\"the amount of tokens to transfer\",\"to\":\"the address to transfer the tokens to\",\"token\":\"the address of the token to transfer (pass the 0x0 address for the base currency)\"}},\"upgradeLock(address,uint16)\":{\"details\":\"only available for publicLockVersion > 10 (proxyAdmin /required)\",\"params\":{\"lockAddress\":\"the existing lock address\",\"version\":\"the version number you are targeting Likely implemented with OpenZeppelin TransparentProxy contract\"}}},\"title\":\"The Unlock Interface*\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLockTemplate(address,uint16)\":{\"notice\":\"Add a PublicLock template to be used for future calls to `createLock`.\"},\"computeAvailableDiscountFor(address,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"configUnlock(address,address,uint256,string,string,uint256)\":{\"notice\":\"Allows the owner to update configuration variables\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"notice\":\"Create lock (legacy) This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLock(bytes)\":{\"notice\":\"Create lock (default) This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"notice\":\"Create an upgradeable lock using a specific PublicLock version\"},\"getAdmin()\":{\"notice\":\"Returns the ProxyAdmin contract address that manage upgrades for the current Unlock contract.\"},\"networkBaseFee()\":{\"notice\":\"Helper to get the network mining basefee as introduced in EIP-1559\"},\"postLockUpgrade()\":{\"notice\":\"Call executed by a lock after its version upgrade triggred by `upgradeLock` - PublicLock v12 > v13 (mainnet): migrate an existing Lock to another instance of the Unlock contract\"},\"protocolFee()\":{\"notice\":\"The fee (in basis points) collected by the protocol on each purchase / extension / renewal of a key\"},\"proxyAdminAddress()\":{\"notice\":\"Retrieve the contract address of the proxy admin that manages the locks\"},\"publicLockImpls(uint16)\":{\"notice\":\"Match lock templates addresses with version numbers\"},\"publicLockLatestVersion()\":{\"notice\":\"Retrive the latest existing lock template version\"},\"publicLockVersions(address)\":{\"notice\":\"Match version numbers with lock templates addresses\"},\"recordConsumedDiscount(uint256,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"recordKeyPurchase(uint256,address)\":{\"notice\":\"This function keeps track of the added GDP, as well as grants of discount tokens to the referrer, if applicable. The number of discount tokens granted is based on the value of the referal, the current growth rate and the lock's discount token distribution rate This function is invoked by a previously deployed lock only.\"},\"removeLock(address)\":{\"notice\":\"Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens. The lock will still be able to sell its memberships.\"},\"setLockTemplate(address)\":{\"notice\":\"Upgrade the PublicLock template used for future calls to `createLock`.\"},\"setOracle(address,address)\":{\"notice\":\"allows the owner to set the oracle address to use for value conversions setting the _oracleAddress to address(0) removes support for the token\"},\"setProtocolFee(uint256)\":{\"notice\":\"Set the fee collected by the protocol\"},\"transferTokens(address,address,uint256)\":{\"notice\":\"Functions which transfers tokens held by the contract It handles both ERC20 and the base currency.\"},\"upgradeLock(address,uint16)\":{\"notice\":\"Upgrade a lock to a specific version\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"IUnlock\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"__initializeOwnable(address)":"b0ca0c83","addLockTemplate(address,uint16)":"caeee3a3","chainId()":"9a8a0592","computeAvailableDiscountFor(address,uint256)":"0cb175e3","configUnlock(address,address,uint256,string,string,uint256)":"7d8fb641","createLock(uint256,address,uint256,uint256,string,bytes12)":"42d92106","createUpgradeableLock(bytes)":"4452c2b2","createUpgradeableLockAtVersion(bytes,uint16)":"487a8a76","estimatedGasForPurchase()":"743bbc2f","getAdmin()":"6e9960c3","getGlobalBaseTokenURI()":"7ff94bb2","getGlobalTokenSymbol()":"35a750de","globalBaseTokenURI()":"a998e9fb","globalTokenSymbol()":"cec41052","grossNetworkProduct()":"d6e9e803","initialize(address)":"c4d66de8","initializeProxyAdmin()":"c7d7d0c9","isOwner()":"8f32d59b","locks(address)":"5de9a137","networkBaseFee()":"ba5ea0d5","owner()":"8da5cb5b","postLockUpgrade()":"ed9674bd","protocolFee()":"b0e21e8a","proxyAdminAddress()":"5979e755","publicLockAddress()":"f8328991","publicLockImpls(uint16)":"666018a5","publicLockLatestVersion()":"cd93b532","publicLockVersions(address)":"25772ad9","recordConsumedDiscount(uint256,uint256)":"36524663","recordKeyPurchase(uint256,address)":"939d9f1f","removeLock(address)":"4a387bef","renounceOwnership()":"715018a6","resetTrackedValue(uint256,uint256)":"963a9478","setLockTemplate(address)":"ef67fde6","setOracle(address,address)":"5c38eb3a","setProtocolFee(uint256)":"787dce3d","totalDiscountGranted()":"a082eb0e","transferOwnership(address)":"f2fde38b","transferTokens(address,address,uint256)":"a64b6e5f","udt()":"262d0a85","uniswapOracles(address)":"6bced5a2","unlockVersion()":"4220bd46","upgradeLock(address,uint16)":"ccf54648","weth()":"3fc8cef3"}},"irOptimized":""},"Ownable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Ownable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":27,"contract":"contracts/past-versions/UnlockV12.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"irOptimized":""},"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Proxy\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"ProxyAdmin":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"ProxyAdmin\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[{"astId":27,"contract":"contracts/past-versions/UnlockV12.sol:ProxyAdmin","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:ProxyAdmin\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[3]\n\tptr.add\tr1, r0, r3\n\tadd\t128, r0, r9\n\tst.1\t64, r9\n\tadd\tr3, r0, r1\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, r4\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_1\n\tsub.s!\t4, r4, r1\n\tjump.lt\t@.BB0_2\n\tptr.add\tr3, r4, r1\n\tld\tr3, r2\n\tshr.s\t224, r2, r2\n\tsub.s!\t@CPI0_6[0], r2, r5\n\tjump.gt\t@.BB0_12\n\tsub.s!\t@CPI0_12[0], r2, r5\n\tjump.gt\t@.BB0_10\n\tsub.s!\t@CPI0_15[0], r2, r5\n\tjump.eq\t@.BB0_17\n\tsub.s!\t@CPI0_16[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r2\n\tcontext.caller\tr5\n\tsub!\tr2, r5, r2\n\tjump.ne\t@.BB0_37\n\tand\t@CPI0_1[0], r1, r1\n\tsstore\tr0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_2[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_4[0], r0, r4\n\tadd\tr0, r0, r6\n.BB0_39:\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_1:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsload\tr0, r2\n\tand\t@CPI0_1[0], r2, r1\n\tcontext.caller\tr6\n\tor\tr1, r6, r1\n\tsstore\tr0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr3\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t192, r3, r1\n\tor\t@CPI0_2[0], r1, r1\n\tand\t@CPI0_3[0], r2, r5\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_4[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_5[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_12:\n\tsub.s!\t@CPI0_7[0], r2, r5\n\tjump.gt\t@.BB0_15\n\tsub.s!\t@CPI0_10[0], r2, r1\n\tjump.eq\t@.BB0_60\n\tsub.s!\t@CPI0_11[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r1\n\tsub.s!\t64, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r4\n\tsub.s!\t@CPI0_3[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r3, r1\n\tld\tr1, r3\n\tsub.s!\t@CPI0_3[0], r3, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_37\n\tadd\tr3, r0, stack-[2]\n\tadd\t@CPI0_25[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr4, r0, stack-[3]\n\tst.2\t4, r4\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_26[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_47\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[3], r0, r2\n\tadd\tstack-[2], r0, r3\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r5\n\tadd\t@CPI0_27[0], r0, r1\n\tst.1\tr5, r1\n\tadd\t4, r5, r1\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.eq\t@.BB0_105\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r5, r3\n\tadd.lt\tr5, r0, r4\n\tshl.s\t64, r4, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_28[0], r1, r1\n\tadd\tr5, r0, stack-[3]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[3], r0, r5\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_100\n.BB0_105:\n\tsub.s!\t@CPI0_19[0], r5, r1\n\tjump.gt\t@.BB0_25\n\tjump\t@.BB0_57\n.BB0_10:\n\tsub.s!\t@CPI0_13[0], r2, r1\n\tjump.eq\t@.BB0_41\n\tsub.s!\t@CPI0_14[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tst.1\t128, r1\n\tadd\t@CPI0_33[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_15:\n\tsub.s!\t@CPI0_8[0], r2, r5\n\tjump.eq\t@.BB0_107\n\tsub.s!\t@CPI0_9[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_3[0], r2, r3\n\tjump.gt\t@.BB0_2\n\tadd\t@CPI0_17[0], r0, r3\n\tst.1\t128, r3\n\tcontext.gas_left\tr3\n\tsub.s!\t4, r2, r4\n\tjump.ne\t@.BB0_119\n\tadd\tstack[@returndatasize], r0, r4\n\tadd\tr0, r0, r2\n\tjump\t@.BB0_120\n.BB0_17:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_3[0], r2, r3\n\tjump.gt\t@.BB0_2\n\tadd\t@CPI0_36[0], r0, r3\n\tst.1\t128, r3\n\tcontext.gas_left\tr3\n\tsub.s!\t4, r2, r4\n\tjump.ne\t@.BB0_22\n\tadd\tstack[@returndatasize], r0, r5\n\tadd\tr0, r0, r2\n\tjump\t@.BB0_23\n.BB0_60:\n\tsub.s\t4, r4, r1\n\tsub.s!\t96, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r8\n\tsub.s!\t@CPI0_3[0], r8, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r3, r1\n\tld\tr1, r9\n\tsub.s!\t@CPI0_3[0], r9, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t68, r3, r1\n\tld\tr1, r2\n\tsub.s!\t@CPI0_19[0], r2, r1\n\tjump.gt\t@.BB0_2\n\tadd\t35, r2, r1\n\tadd\t@CPI0_29[0], r0, r5\n\tsub!\tr1, r4, r6\n\tadd\tr0, r0, r6\n\tadd.ge\tr5, r0, r6\n\tand\t@CPI0_29[0], r1, r1\n\tsub!\tr1, r0, r7\n\tadd.ge\tr0, r0, r5\n\tsub.s!\t@CPI0_29[0], r1, r1\n\tadd.ne\tr6, r0, r5\n\tsub!\tr5, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t4, r2, r5\n\tptr.add\tr3, r5, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_19[0], r1, r6\n\tjump.gt\t@.BB0_25\n\tadd\t191, r1, r6\n\tsub.s\t32, r0, r10\n\tand\tr6, r10, r6\n\tsub.s!\t@CPI0_19[0], r6, r7\n\tjump.gt\t@.BB0_25\n\tst.1\t64, r6\n\tst.1\t128, r1\n\tadd\tr2, r1, r2\n\tadd\t36, r2, r2\n\tsub!\tr2, r4, r2\n\tjump.gt\t@.BB0_2\n\tadd\t32, r5, r2\n\tptr.add\tr3, r2, r2\n\tand\t31, r1, r3\n\tshr.s!\t5, r1, r4\n\tjump.eq\t@.BB0_133\n\tadd\tr0, r0, r5\n.BB0_70:\n\tshl.s\t5, r5, r6\n\tptr.add\tr2, r6, r7\n\tld\tr7, r7\n\tadd\t160, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r4, r6\n\tjump.lt\t@.BB0_70\n.BB0_133:\n\tsub!\tr3, r0, r5\n\tjump.eq\t@.BB0_72\n\tshl.s\t5, r4, r4\n\tptr.add\tr2, r4, r2\n\tshl.s\t3, r3, r3\n\tadd\t160, r4, r4\n\tld.1\tr4, r5\n\tshl\tr5, r3, r5\n\tshr\tr5, r3, r5\n\tld\tr2, r2\n\tsub\t256, r3, r3\n\tshr\tr2, r3, r2\n\tshl\tr2, r3, r2\n\tor\tr2, r5, r2\n\tst.1\tr4, r2\n.BB0_72:\n\tadd\tr10, r0, stack-[2]\n\tadd\tr9, r0, stack-[3]\n\tadd\t160, r1, r1\n\tst.1\tr1, r0\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_73\n\tadd\t@CPI0_25[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr8, r0, stack-[1]\n\tst.2\t4, r8\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_26[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_47\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[3], r0, r3\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r4\n\tadd\t36, r4, r1\n\tadd\t64, r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_32[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tst.1\tr1, r3\n\tadd\t68, r4, r2\n\tld.1\t128, r1\n\tst.1\tr2, r1\n\tadd\tr4, r0, stack-[3]\n\tadd\t100, r4, r2\n\tsub!\tr1, r0, r3\n\tjump.eq\t@.BB0_79\n\tadd\tr0, r0, r3\n.BB0_78:\n\tadd\tr3, r2, r4\n\tadd\t160, r3, r5\n\tld.1\tr5, r5\n\tst.1\tr4, r5\n\tadd\t32, r3, r3\n\tsub!\tr3, r1, r4\n\tjump.lt\t@.BB0_78\n.BB0_79:\n\tadd\tr1, r2, r2\n\tst.1\tr2, r0\n\tcontext.get_context_u128\tr3\n\tcontext.gas_left\tr2\n\tadd\tstack-[1], r0, r4\n\tsub.s!\t4, r4, r4\n\tjump.eq\t@.BB0_89\n\tadd\t31, r1, r1\n\tand\tstack-[2], r1, r1\n\tadd\t@CPI0_0[0], r0, r4\n\tadd\tstack-[3], r0, r6\n\tsub.s!\t@CPI0_0[0], r6, r5\n\tadd\tr4, r0, r5\n\tadd.lt\tr6, r0, r5\n\tshl.s\t64, r5, r5\n\tadd\t100, r1, r1\n\tsub.s!\t@CPI0_0[0], r1, r6\n\tadd.ge\tr4, r0, r1\n\tshl.s\t96, r1, r1\n\tor\tr1, r5, r1\n\tsub.s!\t@CPI0_0[0], r2, r5\n\tadd.ge\tr4, r0, r2\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tsub!\tr3, r0, r2\n\tjump.ne\t@.BB0_83\n\tadd\tstack-[1], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tjump\t@.BB0_81\n.BB0_41:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r1\n\tsub.s!\t64, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r4\n\tsub.s!\t@CPI0_3[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r3, r1\n\tld\tr1, r3\n\tsub.s!\t@CPI0_3[0], r3, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_37\n\tadd\tr3, r0, stack-[2]\n\tadd\t@CPI0_25[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr4, r0, stack-[3]\n\tst.2\t4, r4\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_26[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_47\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[3], r0, r2\n\tadd\tstack-[2], r0, r3\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r5\n\tadd\t@CPI0_34[0], r0, r1\n\tst.1\tr5, r1\n\tadd\t4, r5, r1\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.eq\t@.BB0_56\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r5, r3\n\tadd.lt\tr5, r0, r4\n\tshl.s\t64, r4, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_28[0], r1, r1\n\tadd\tr5, r0, stack-[3]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[3], r0, r5\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_51\n.BB0_56:\n\tsub.s!\t@CPI0_19[0], r5, r1\n\tjump.gt\t@.BB0_25\n.BB0_57:\n\tst.1\t64, r5\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_107:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r4, r1\n\tsub.s!\t32, r1, r1\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r3, r1\n\tld\tr1, r6\n\tsub.s!\t@CPI0_3[0], r6, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand\t@CPI0_3[0], r1, r2\n\tcontext.caller\tr5\n\tsub!\tr2, r5, r2\n\tjump.ne\t@.BB0_37\n\tsub!\tr6, r0, r2\n\tjump.ne\t@.BB0_113\n\tadd\t@CPI0_21[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t38, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_22[0], r0, r1\n\tst.1\t196, r1\n\tadd\t@CPI0_23[0], r0, r1\n\tst.1\t228, r1\n\tadd\t@CPI0_24[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_37:\n\tadd\t@CPI0_21[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_30[0], r0, r1\n\tst.1\t196, r1\n\tadd\t@CPI0_35[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_119:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t192, r3, r1\n\tor\t@CPI0_18[0], r1, r1\n\tadd\tr9, r0, stack-[3]\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[3], r0, r9\n\txor\t1, r2, r2\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r4\n.BB0_120:\n\tadd\t96, r0, r3\n\tsub!\tr4, r0, r5\n\tjump.ne\t@.BB0_121\n.BB0_128:\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_2\n\tld.1\tr3, r1\n\tadd\tr1, r9, r2\n\tadd\tr9, r0, r1\n\tjump\t@.BB0_34\n.BB0_22:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t192, r3, r1\n\tor\t@CPI0_18[0], r1, r1\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\txor\t1, r2, r2\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r5\n.BB0_23:\n\tadd\t96, r0, r4\n\tadd\t128, r0, r3\n\tsub!\tr5, r0, r6\n\tjump.ne\t@.BB0_24\n.BB0_32:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_33\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_121:\n\tsub.s!\t@CPI0_19[0], r4, r3\n\tjump.gt\t@.BB0_25\n\tadd\t63, r4, r3\n\tsub.s\t32, r0, r5\n\tand\tr3, r5, r5\n\tld.1\t64, r3\n\tadd\tr3, r5, r5\n\tsub!\tr5, r3, r6\n\tadd\t0, r0, r6\n\tadd.lt\t1, r0, r6\n\tsub.s!\t@CPI0_19[0], r5, r7\n\tjump.gt\t@.BB0_25\n\tand!\t1, r6, r6\n\tjump.ne\t@.BB0_25\n\tst.1\t64, r5\n\tand\t31, r4, r5\n\tst.1.inc\tr3, r4, r9\n\tshr.s!\t5, r4, r4\n\tjump.eq\t@.BB0_135\n\tadd\tr0, r0, r6\n.BB0_126:\n\tshl.s\t5, r6, r7\n\tadd\tr9, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r4, r7\n\tjump.lt\t@.BB0_126\n.BB0_135:\n\tsub!\tr5, r0, r6\n\tjump.eq\t@.BB0_128\n\tshl.s\t5, r4, r4\n\tptr.add\tr1, r4, r1\n\tadd\tr9, r4, r4\n\tshl.s\t3, r5, r5\n\tld.1\tr4, r6\n\tshl\tr6, r5, r6\n\tshr\tr6, r5, r6\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r6, r1\n\tst.1\tr4, r1\n\tjump\t@.BB0_128\n.BB0_24:\n\tsub.s!\t@CPI0_37[0], r5, r3\n\tjump.lt\t@.BB0_26\n.BB0_25:\n\tadd\t@CPI0_38[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI0_28[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_33:\n\tld.1\tr4, r1\n\tadd\tr1, r3, r2\n\tadd\tr3, r0, r1\n.BB0_34:\n\tnear_call\tr0, @abi_decode_address_payable_fromMemory, @DEFAULT_UNWIND\n\tand\t@CPI0_3[0], r1, r1\n\tld.1\t64, r2\n\tst.1\tr2, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tor\t@CPI0_20[0], r1, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_47:\n\trevert\n.BB0_113:\n\tand\t@CPI0_1[0], r1, r1\n\tor\tr1, r6, r1\n\tsstore\tr0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_2[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_4[0], r0, r4\n\tjump\t@.BB0_39\n.BB0_26:\n\tadd\t63, r5, r3\n\tsub.s\t32, r0, r4\n\tand\tr3, r4, r3\n\tld.1\t64, r4\n\tadd\tr4, r3, r3\n\tsub!\tr3, r4, r6\n\tadd\t0, r0, r6\n\tadd.lt\t1, r0, r6\n\tsub.s!\t@CPI0_19[0], r3, r7\n\tjump.gt\t@.BB0_25\n\tand!\t1, r6, r6\n\tjump.ne\t@.BB0_25\n\tst.1\t64, r3\n\tand\t31, r5, r6\n\tst.1.inc\tr4, r5, r3\n\tshr.s!\t5, r5, r5\n\tjump.eq\t@.BB0_130\n\tadd\tr0, r0, r7\n.BB0_30:\n\tshl.s\t5, r7, r8\n\tadd\tr3, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r5, r8\n\tjump.lt\t@.BB0_30\n.BB0_130:\n\tsub!\tr6, r0, r7\n\tjump.eq\t@.BB0_32\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r6, r6\n\tld.1\tr5, r7\n\tshl\tr7, r6, r7\n\tshr\tr7, r6, r7\n\tld\tr1, r1\n\tsub\t256, r6, r6\n\tshr\tr1, r6, r1\n\tshl\tr1, r6, r1\n\tor\tr1, r7, r1\n\tst.1\tr5, r1\n\tjump\t@.BB0_32\n.BB0_100:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_134\n\tadd\tr0, r0, r6\n.BB0_102:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_102\n.BB0_134:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_104\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_104:\n\tjump\t@.BB0_55\n.BB0_73:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_30[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_21[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t36, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t4, r1, r2\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_31[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_51:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_131\n\tadd\tr0, r0, r6\n.BB0_53:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_53\n.BB0_131:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_55\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_55:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tshl.s\t96, r3, r2\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_83:\n\tor\t@CPI0_2[0], r1, r1\n\tadd\t32777, r0, r2\n\tadd\tstack-[1], r0, r4\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n.BB0_81:\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_84\n.BB0_89:\n\tadd\tstack-[3], r0, r1\n\tsub.s!\t@CPI0_19[0], r1, r1\n\tjump.gt\t@.BB0_25\n\tadd\tstack-[3], r0, r1\n\tst.1\t64, r1\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_84:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_132\n\tadd\tr0, r0, r6\n.BB0_86:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_86\n.BB0_132:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_88\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_88:\n\tjump\t@.BB0_55\n.func_end0:\n\nabi_decode_address_payable_fromMemory:\n.func_begin1:\n\tsub\tr2, r1, r2\n\tadd\t@CPI1_0[0], r0, r3\n\tsub.s!\t31, r2, r4\n\tadd\tr0, r0, r4\n\tadd.gt\tr3, r0, r4\n\tand\t@CPI1_0[0], r2, r2\n\tsub!\tr2, r0, r5\n\tadd.ge\tr0, r0, r3\n\tsub.s!\t@CPI1_0[0], r2, r2\n\tadd.ne\tr4, r0, r3\n\tsub!\tr3, r0, r2\n\tjump.eq\t@.BB1_1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI1_1[0], r1, r2\n\tjump.gt\t@.BB1_1\n\tret\n.BB1_1:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end1:\n\n__cxa_throw:\n\trevert\n\n__farcall:\n.func_begin2:\n.tmp0:\n\tfar_call\tr1, r2, @.BB3_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB3_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end2:\n\n__staticcall:\n.func_begin3:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB4_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB4_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end3:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_2:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_3:\nCPI1_1:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_4:\n\t.cell -52524777015005588113349992707137368332388074750292320778649315033004770043936\nCPI0_5:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_6:\n\t.cell 2518900892\nCPI0_7:\n\t.cell 4076725130\nCPI0_8:\n\t.cell 4076725131\nCPI0_9:\n\t.cell 4088913581\nCPI0_10:\n\t.cell 2518900893\nCPI0_11:\n\t.cell 2577960644\nCPI0_12:\n\t.cell 2130650973\nCPI0_13:\n\t.cell 2130650974\nCPI0_14:\n\t.cell 2376452955\nCPI0_15:\n\t.cell 541990010\nCPI0_16:\n\t.cell 1901074598\nCPI0_17:\n\t.cell -3474254564581621626188260025310941719202095730505663504633513953338824065024\nCPI0_18:\n\t.cell 316912652418240591808998408192\nCPI0_19:\n\t.cell 18446744073709551615\nCPI0_20:\n\t.cell 2535301200456458802993406410752\nCPI0_21:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_22:\n\t.cell 35943731656364841964517558219894961445653631979235167635064085396828900499553\nCPI0_23:\n\t.cell 45408759099000846574684193736602357774271237157169010951590501707763511459840\nCPI0_24:\n\t.cell 10458117454244075803782624051200\nCPI0_25:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_26:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_27:\n\t.cell 24583578074543180268843569895713186669491495773330943018694496374928902717440\nCPI0_28:\n\t.cell 2852213850513516153367582212096\nCPI0_29:\nCPI1_0:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_30:\n\t.cell 35943731656364841964516503116990081338611484598491072354577564874054038349170\nCPI0_31:\n\t.cell 7922816251426433759354395033600\nCPI0_32:\n\t.cell 35787394285270172926002399276345764320359862283067404231778073799726653767680\nCPI0_33:\n\t.cell 2535301202817642044428229017600\nCPI0_34:\n\t.cell -51040281588262172729994757417671590548574929652371291425639197795456095617024\nCPI0_35:\n\t.cell 7922816253787617000789217640448\nCPI0_36:\n\t.cell 41783904696501392981958754530355920803367001723273469674524225868246137438208\nCPI0_37:\n\t.cell 18446744073709551616\nCPI0_38:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\n","bytecode":{"object":"00010000000000020003000000000002000000000301034f0000008009000039000000400090043f00000000010300190000006001100270000000c4041001970000000101200190000000300000c13d000000040140008c000001f20000413d000000000143034f000000000203043b000000e002200270000000ca0520009c0000004a0000213d000000d00520009c000000940000213d000000d30520009c000000b60000613d000000d40120009c000001f20000c13d0000000001000416000000000101004b000001f20000c13d000000000100041a000000c7021001970000000005000411000000000252004b000001c20000c13d000000c501100197000000000010041b000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000c6011001c70000800d020000390000000303000039000000c8040000410000000006000019030a03000000040f0000000101200190000001f20000613d00000000010000190000030b0001042e0000000001000416000000000101004b000001f20000c13d000000000200041a000000c5012001970000000006000411000000000161019f000000000010041b000000c4010000410000000003000414000000c40430009c0000000003018019000000c001300210000000c6011001c7000000c7052001970000800d020000390000000303000039000000c804000041030a03000000040f0000000101200190000001f20000613d000000200100003900000100001004430000012000000443000000c9010000410000030b0001042e000000cb0520009c000000a00000213d000000ce0120009c000000c80000613d000000cf0120009c000001f20000c13d0000000001000416000000000101004b000001f20000c13d000000040140008a000000400110008c000001f20000413d0000000401300370000000000401043b000000c70140009c000001f20000213d0000002401300370000000000301043b000000c70130009c000001f20000213d000000000100041a000000c7011001970000000002000411000000000121004b000001c20000c13d000200000003001d000000dd010000410000000000100439000300000004001d0000000400400443000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000de011001c70000800202000039030a03050000040f0000000102200190000002350000613d000000000101043b000000000101004b00000003020000290000000203000029000001f20000613d000000400500043d000000df010000410000000000150435000000040150003900000000003104350000000001000414000000040320008c000000910000613d000000c404000041000000c40310009c0000000001048019000000c40350009c00000000040540190000004003400210000000c001100210000000000131019f000000e0011001c7000300000005001d030a03000000040f000000030500002900000000030100190000006003300270000000c40030019d000000c40330019700000001022001900000026d0000613d000000d70150009c000002220000213d000001a20000013d000000d10120009c0000015f0000613d000000d20120009c000001f20000c13d0000000001000416000000000101004b000001f20000c13d000000000100041a000000c701100197000000800010043f000000e5010000410000030b0001042e000000cc0520009c000001a50000613d000000cd0220009c000001f20000c13d0000000002000416000000000202004b000001f20000c13d000000040240008a000000200220008c000001f20000413d0000000402300370000000000202043b000000c70320009c000001f20000213d000000d503000041000000800030043f0000000003000414000000040420008c000001cb0000c13d00000000040000310000000002000019000001d80000013d0000000002000416000000000202004b000001f20000c13d000000040240008a000000200220008c000001f20000413d0000000402300370000000000202043b000000c70320009c000001f20000213d000000e803000041000000800030043f0000000003000414000000040420008c000001e10000c13d00000000050000310000000002000019000001ec0000013d000000040140008a000000600110008c000001f20000413d0000000401300370000000000801043b000000c70180009c000001f20000213d0000002401300370000000000901043b000000c70190009c000001f20000213d0000004401300370000000000201043b000000d70120009c000001f20000213d0000002301200039000000e105000041000000000641004b00000000060000190000000006058019000000e101100197000000000701004b0000000005008019000000e10110009c000000000506c019000000000105004b000001f20000c13d0000000405200039000000000153034f000000000101043b000000d70610009c000002220000213d000000bf06100039000000200a00008a0000000006a6016f000000d70760009c000002220000213d000000400060043f000000800010043f00000000021200190000002402200039000000000242004b000001f20000213d0000002002500039000000000223034f0000001f0310018f0000000504100272000001010000613d00000000050000190000000506500210000000000762034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000000f90000413d000000000503004b000001100000613d0000000504400210000000000242034f0000000303300210000000a004400039000000000504043300000000053501cf000000000535022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000252019f000000000024043500020000000a001d000300000009001d000000a0011000390000000000010435000000000100041a000000c7011001970000000002000411000000000121004b0000028a0000c13d000000dd010000410000000000100439000100000008001d0000000400800443000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000de011001c70000800202000039030a03050000040f0000000102200190000002350000613d000000000101043b000000000101004b0000000303000029000001f20000613d000000400400043d000000240140003900000040020000390000000000210435000000e4010000410000000000140435000000040140003900000000003104350000004402400039000000800100043d0000000000120435000300000004001d0000006402400039000000000301004b000001420000613d00000000030000190000000004230019000000a005300039000000000505043300000000005404350000002003300039000000000413004b0000013b0000413d00000000022100190000000000020435000000000300041600000000020004140000000104000029000000040440008c000002c90000613d0000001f01100039000000020110017f000000c4040000410000000306000029000000c40560009c0000000005040019000000000506401900000040055002100000006401100039000000c40610009c00000000010480190000006001100210000000000151019f000000c40520009c0000000002048019000000c002200210000000000112019f000000000203004b000002be0000c13d0000000102000029030a03000000040f000002c30000013d0000000001000416000000000101004b000001f20000c13d000000040140008a000000400110008c000001f20000413d0000000401300370000000000401043b000000c70140009c000001f20000213d0000002401300370000000000301043b000000c70130009c000001f20000213d000000000100041a000000c7011001970000000002000411000000000121004b000001c20000c13d000200000003001d000000dd010000410000000000100439000300000004001d0000000400400443000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000de011001c70000800202000039030a03050000040f0000000102200190000002350000613d000000000101043b000000000101004b00000003020000290000000203000029000001f20000613d000000400500043d000000e6010000410000000000150435000000040150003900000000003104350000000001000414000000040320008c000001a00000613d000000c404000041000000c40310009c0000000001048019000000c40350009c00000000040540190000004003400210000000c001100210000000000131019f000000e0011001c7000300000005001d030a03000000040f000000030500002900000000030100190000006003300270000000c40030019d000000c40330019700000001022001900000029b0000613d000000d70150009c000002220000213d000000400050043f00000000010000190000030b0001042e0000000001000416000000000101004b000001f20000c13d000000040140008a000000200110008c000001f20000413d0000000401300370000000000601043b000000c70160009c000001f20000213d000000000100041a000000c7021001970000000005000411000000000252004b000001c20000c13d000000000206004b000002360000c13d000000d901000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f000000da01000041000000c40010043f000000db01000041000000e40010043f000000dc010000410000030c00010430000000d901000041000000800010043f0000002001000039000000840010043f000000a40010043f000000e201000041000000c40010043f000000e7010000410000030c00010430000000c401000041000000c40430009c0000000003018019000000c001300210000000d6011001c7000300000009001d030a03050000040f0000000309000029000000010220015f00000000030100190000006003300270000000c40030019d000000c4043001970000006003000039000000000504004b000001f40000c13d0000000101200190000001f20000c13d0000000001030433000000000291001900000000010900190000022b0000013d000000c401000041000000c40430009c0000000003018019000000c001300210000000d6011001c7030a03050000040f000000010220015f00000000030100190000006003300270000000c40030019d000000c40530019700000060040000390000008003000039000000000605004b000002200000c13d0000000101200190000002280000613d00000000010000190000030c00010430000000d70340009c000002220000213d0000003f03400039000000200500008a000000000553016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000000d70750009c000002220000213d0000000106600190000002220000c13d000000400050043f0000001f0540018f00000000094304360000000504400272000002100000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000746004b000002080000413d000000000605004b000001db0000613d0000000504400210000000000141034f00000000044900190000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000001db0000013d000000e90350009c000002430000413d000000ea0100004100000000001004350000004101000039000000040010043f000000e0010000410000030c00010430000000000104043300000000023100190000000001030019030a02ed0000040f000000c701100197000000400200043d0000000000120435000000c401000041000000c40320009c00000000020180190000004001200210000000d8011001c70000030b0001042e000000000001042f000000c501100197000000000161019f000000000010041b000000c4010000410000000002000414000000c40320009c0000000002018019000000c001200210000000c6011001c70000800d020000390000000303000039000000c8040000410000002b0000013d0000003f03500039000000200400008a000000000343016f000000400400043d0000000003340019000000000643004b00000000060000190000000106004039000000d70730009c000002220000213d0000000106600190000002220000c13d000000400030043f0000001f0650018f000000000354043600000005055002720000025d0000613d000000000700001900000005087002100000000009830019000000000881034f000000000808043b00000000008904350000000107700039000000000857004b000002550000413d000000000706004b000001f00000613d0000000505500210000000000151034f00000000055300190000000306600210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000001f00000013d000000400200043d0000001f0430018f00000005053002720000027a0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000002720000413d000000000604004b000002890000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000002b70000013d000000400100043d0000004402100039000000e2030000410000000000320435000000d902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000000c402000041000000c40310009c00000000010280190000004001100210000000e3011001c70000030c00010430000000400200043d0000001f0430018f0000000505300272000002a80000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000002a00000413d000000000604004b000002b70000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000000c401000041000000c40420009c000000000201801900000040012002100000006002300210000000000121019f0000030c00010430000000c6011001c7000080090200003900000001040000290000000005000019030a03000000040f00000000030100190000006003300270000000c40030019d000000c4033001970000000102200190000002d00000613d0000000301000029000000d70110009c000002220000213d0000000301000029000000400010043f00000000010000190000030b0001042e000000400200043d0000001f0430018f0000000505300272000002dd0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000002d50000413d000000000604004b000002ec0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000002b70000013d0000000002120049000000e1030000410000001f0420008c00000000040000190000000004032019000000e102200197000000000502004b0000000003008019000000e10220009c000000000304c019000000000203004b000002fd0000613d0000000001010433000000c70210009c000002fd0000213d000000000001042d00000000010000190000030c00010430000000000001042f00000303002104210000000102000039000000000001042d0000000002000019000000000001042d00000308002104230000000102000039000000000001042d0000000002000019000000000001042d0000030a000004320000030b0001042e0000030c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009623609c00000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f3b7dead000000000000000000000000000000000000000000000000000000009623609d0000000000000000000000000000000000000000000000000000000099a88ec4000000000000000000000000000000000000000000000000000000007eff275d000000000000000000000000000000000000000000000000000000007eff275e000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000204e1c7a00000000000000000000000000000000000000000000000000000000715018a6f851a440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000002000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000003659cfe600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000080000000000000000000000000000000000000000000000000000000000000004f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000000000000000000640000000000000000000000004f1ef2860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000008f2839700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000008000000000000000005c60da1b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dcae279dc42dc12764932de58667e0eb4e4113a6557107e4fec32063c180b99"},"methodIdentifiers":{"changeProxyAdmin(address,address)":"7eff275e","getProxyAdmin(address)":"f3b7dead","getProxyImplementation(address)":"204e1c7a","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","upgrade(address,address)":"99a88ec4","upgradeAndCall(address,address,bytes)":"9623609d"}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"ProxyAdmin_1215\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := sload(/** @src 0:3363:3369 \"_owner\" */ 0x00)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n sstore(/** @src 0:3363:3369 \"_owner\" */ 0x00, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ or(and(_2, not(sub(shl(160, 1), 1))), /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:3363:3369 \"_owner\" */ 0x00, 0x00, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_2, sub(shl(160, 1), 1)), /** @src 0:835:845 \"msg.sender\" */ caller())\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _3 := datasize(\"ProxyAdmin_1215_deployed\")\n codecopy(_1, dataoffset(\"ProxyAdmin_1215_deployed\"), _3)\n return(_1, _3)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ProxyAdmin_1215_deployed\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n let _2 := 64\n mstore(_2, _1)\n let _3 := 4\n if iszero(lt(calldatasize(), _3))\n {\n let _4 := 0\n switch shr(224, calldataload(_4))\n case 0x204e1c7a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _5 := sub(shl(160, 1), 1)\n let _6 := and(abi_decode_contract_TransparentUpgradeableProxy(), _5)\n mstore(_1, shl(224, 0x5c60da1b))\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component := staticcall(gas(), _6, _1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component_mpos := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component) { revert(_4, _4) }\n let _7 := and(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ expr_component_mpos)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _5)\n let memPos := mload(_2)\n mstore(memPos, _7)\n return(memPos, 32)\n }\n case 0x715018a6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _8 := sload(_4)\n sstore(_4, and(_8, shl(160, 0xffffffffffffffffffffffff)))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, _4, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_8, sub(shl(160, 1), 1)), _4)\n return(_4, _4)\n }\n case 0x7eff275e {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _9 := sub(shl(160, 1), 1)\n let _10 := and(/** @src 0:33410:33427 \"proxy.changeAdmin\" */ value0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _9)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(extcodesize(_10))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _11 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n mstore(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(228, 0x08f28397))\n mstore(/** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ add(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1, _9))\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _12 := call(gas(), _10, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(_12)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos := mload(_2)\n returndatacopy(pos, _4, returndatasize())\n revert(pos, returndatasize())\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if _12\n {\n finalize_allocation_3427(_11)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n _4 := _4\n }\n return(_4, _4)\n }\n case 0x8da5cb5b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value := and(sload(_4), sub(shl(160, 1), 1))\n let memPos_1 := mload(_2)\n mstore(memPos_1, value)\n return(memPos_1, 32)\n }\n case 0x9623609d {\n if slt(add(calldatasize(), not(3)), 96) { revert(_4, _4) }\n let value0_1 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_1 := abi_decode_address()\n let offset := calldataload(68)\n if gt(offset, 0xffffffffffffffff) { revert(_4, _4) }\n if iszero(slt(add(offset, 35), calldatasize())) { revert(_4, _4) }\n let _13 := calldataload(add(_3, offset))\n let _14 := array_allocation_size_bytes(_13)\n let memPtr := mload(_2)\n finalize_allocation(memPtr, _14)\n mstore(memPtr, _13)\n let _15 := 32\n if gt(add(add(offset, _13), 36), calldatasize()) { revert(_4, _4) }\n calldatacopy(add(memPtr, _15), add(offset, 36), _13)\n mstore(add(add(memPtr, _13), _15), _4)\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _16 := sub(shl(160, 1), 1)\n let _17 := and(/** @src 0:34191:34213 \"proxy.upgradeToAndCall\" */ value0_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _16)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(extcodesize(_17))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _18 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n mstore(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x278f7943))\n mstore(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ add(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_1, _16))\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36), _2)\n let length := mload(memPtr)\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 68), length)\n let i := _4\n for { } lt(i, length) { i := add(i, _15) }\n {\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ i), 100), mload(add(add(memPtr, i), _15)))\n }\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ length), 100), _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _19 := call(gas(), _17, /** @src 0:34221:34230 \"msg.value\" */ callvalue(), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, add(sub(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(add(length, 0x1f), not(31))), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 100), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(_19)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_1 := mload(_2)\n returndatacopy(pos_1, _4, returndatasize())\n revert(pos_1, returndatasize())\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if _19\n {\n finalize_allocation_3427(_18)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0x99a88ec4 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_2 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_2 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _20 := sub(shl(160, 1), 1)\n let _21 := and(/** @src 0:33750:33765 \"proxy.upgradeTo\" */ value0_2, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _20)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(extcodesize(_21))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _22 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n mstore(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x1b2ce7f3))\n mstore(/** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ add(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_2, _20))\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _23 := call(gas(), _21, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(_23)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_2 := mload(_2)\n returndatacopy(pos_2, _4, returndatasize())\n revert(pos_2, returndatasize())\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if _23\n {\n finalize_allocation_3427(_22)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0xf2fde38b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_3 := abi_decode_contract_TransparentUpgradeableProxy()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _24 := sub(shl(160, 1), 1)\n let _25 := and(/** @src 0:3027:3049 \"newOwner != address(0)\" */ value0_3, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _24)\n if /** @src 0:3027:3049 \"newOwner != address(0)\" */ iszero(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _25)\n {\n let memPtr_1 := mload(_2)\n mstore(memPtr_1, shl(229, 4594637))\n mstore(add(memPtr_1, _3), 32)\n mstore(add(memPtr_1, 36), 38)\n mstore(add(memPtr_1, 68), \"Ownable: new owner is the zero a\")\n mstore(add(memPtr_1, 100), \"ddress\")\n revert(memPtr_1, 132)\n }\n let _26 := sload(0)\n sstore(0, or(and(_26, shl(160, 0xffffffffffffffffffffffff)), _25))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 0, 0, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_26, _24), /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ _25)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n return(_4, _4)\n }\n case 0xf3b7dead {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _27 := sub(shl(160, 1), 1)\n let _28 := and(abi_decode_contract_TransparentUpgradeableProxy(), _27)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let _29 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n mstore(_29, shl(230, 0x03e14691))\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_1 := staticcall(gas(), _28, _29, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_mpos_1 := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component_1) { revert(_4, _4) }\n let _30 := and(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ expr_component_mpos_1)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _27)\n let memPos_2 := mload(_2)\n mstore(memPos_2, _30)\n return(memPos_2, 32)\n }\n }\n revert(0, 0)\n }\n function abi_decode_contract_TransparentUpgradeableProxy() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_address() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function finalize_allocation_3427(memPtr)\n {\n if gt(memPtr, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, memPtr)\n }\n function finalize_allocation(memPtr, size)\n {\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 74 @src 0:2259:2383 \"function _checkOwner() internal view virtual {...\"\n function fun_checkOwner()\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let value := and(sload(/** @src 0:2183:2189 \"_owner\" */ 0x00), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ sub(shl(160, 1), 1))\n if iszero(/** @src 0:2318:2341 \"owner() == _msgSender()\" */ eq(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ value, /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 32)\n mstore(add(memPtr, 68), \"Ownable: caller is not the owner\")\n revert(memPtr, 100)\n }\n }\n function extract_returndata() -> data\n {\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let _2 := array_allocation_size_bytes(_1)\n let memPtr := mload(64)\n finalize_allocation(memPtr, _2)\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, 0x20), /** @src -1:-1:-1 */ 0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ returndatasize())\n }\n }\n function abi_decode_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1))))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n value0 := value\n }\n }\n data \".metadata\" hex\"a26469706673582212200c357892ee89f46df6d61d0354d7a1306c19bb275746744c0a9d77ef5644b92664736f6c63430008150033\"\n }\n}\n","hash":"010000ed89a9abe7f27c522a89d1c165b742f032da6ae4b42f62bfda768e4bf9","factoryDependencies":{}},"StorageSlot":{"abi":[],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"StorageSlot\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:StorageSlot\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_0[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\n","bytecode":{"object":"00000001012001900000000c0000613d0000008001000039000000400010043f0000000001000416000000000101004b0000000c0000c13d00000020010000390000010000100443000001200000044300000005010000410000000f0001042e000000000100001900000010000104300000000e000004320000000f0001042e00000010000104300000000000000000000000000000000000000000000000000000000200000000000000000000000000000040000001000000000000000000841f6f3273e8cfd552f742cde8a54ff7b30af1ec387cdb6f6c9489115943c019"},"methodIdentifiers":{}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"StorageSlot_538\" {\n code {\n {\n /// @src 0:14899:16178 \"library StorageSlot {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"StorageSlot_538_deployed\")\n codecopy(_1, dataoffset(\"StorageSlot_538_deployed\"), _2)\n setimmutable(_1, \"library_deploy_address\", address())\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"StorageSlot_538_deployed\" {\n code {\n {\n /// @src 0:14899:16178 \"library StorageSlot {...\"\n revert(0, 0)\n }\n }\n data \".metadata\" hex\"a264697066735822122010e1f6cdf942a3ff1b39a3e68c89efd61742209cbed50b532de25e0757ccd1cc64736f6c63430008150033\"\n }\n}\n","hash":"01000007dca37a1ddacb11d9f8c949567a6b8894baf98b5edee2f0686a32dfee","factoryDependencies":{}},"TransparentUpgradeableProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[],"types":null},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:TransparentUpgradeableProxy\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[8]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r4\n\tptr.add\tr1, r4, stack[@ptr_return_data]\n\tadd\t128, r0, r8\n\tst.1\t64, r8\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_1\n\tptr.add\tr1, r4, r3\n\tsub.s!\t4, r4, r2\n\tjump.lt\t@.BB0_59\n\tld\tr1, r2\n\tshr.s\t224, r2, r2\n\tsub.s!\t@CPI0_21[0], r2, r5\n\tjump.le\t@.BB0_54\n\tsub.s!\t@CPI0_22[0], r2, r5\n\tjump.eq\t@.BB0_161\n\tsub.s!\t@CPI0_23[0], r2, r5\n\tjump.eq\t@.BB0_180\n\tsub.s!\t@CPI0_24[0], r2, r2\n\tjump.ne\t@.BB0_236\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r5\n\tjump.ne\t@.BB0_205\n\tjump\t@.BB0_179\n.BB0_1:\n\tadd\t@CPI0_1[0], r4, r2\n\tsub.s!\t@CPI0_2[0], r2, r2\n\tjump.gt\t@.BB0_3\n.BB0_2:\n\tadd\t@CPI0_35[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI0_36[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_59:\n\tsub!\tr4, r0, r2\n\tjump.ne\t@.BB0_236\n\tadd\t@CPI0_17[0], r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_4[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.eq\t@.BB0_223\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tcontext.gas_left\tr1\n\tand\t@CPI0_4[0], r2, r2\n\tsub.s!\t4, r2, r4\n\tjump.ne\t@.BB0_229\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_271\n\tadd\tr0, r0, r5\n.BB0_227:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_227\n.BB0_271:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_235\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_235\n.BB0_3:\n\tadd\t159, r4, r2\n\tand\t@CPI0_3[0], r2, r2\n\tst.1\t64, r2\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r3\n\tjump.eq\t@.BB0_277\n\tadd\tr0, r0, r5\n.BB0_5:\n\tshl.s\t5, r5, r6\n\tptr.add\tr1, r6, r7\n\tld\tr7, r7\n\tadd\t128, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r3, r6\n\tjump.lt\t@.BB0_5\n.BB0_277:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_7\n\tshl.s\t5, r3, r3\n\tptr.add\tr1, r3, r1\n\tshl.s\t3, r2, r2\n\tadd\t128, r3, r3\n\tld.1\tr3, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tld\tr1, r1\n\tsub\t256, r2, r2\n\tshr\tr1, r2, r1\n\tshl\tr1, r2, r1\n\tor\tr1, r5, r1\n\tst.1\tr3, r1\n.BB0_7:\n\tsub.s!\t95, r4, r1\n\tjump.le\t@.BB0_8\n\tld.1\t128, r9\n\tsub.s!\t@CPI0_4[0], r9, r1\n\tjump.gt\t@.BB0_8\n\tld.1\t160, r7\n\tsub.s!\t@CPI0_4[0], r7, r1\n\tjump.gt\t@.BB0_8\n\tld.1\t192, r2\n\tsub.s!\t@CPI0_5[0], r2, r1\n\tjump.gt\t@.BB0_8\n\tadd\t31, r2, r1\n\tadd\t@CPI0_6[0], r0, r3\n\tsub!\tr1, r4, r5\n\tadd\tr0, r0, r5\n\tadd.ge\tr3, r0, r5\n\tand\t@CPI0_6[0], r1, r1\n\tsub!\tr1, r0, r6\n\tadd.ge\tr0, r0, r3\n\tsub.s!\t@CPI0_6[0], r1, r1\n\tadd.ne\tr5, r0, r3\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_8\n\tadd\t128, r2, r1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI0_5[0], r1, r3\n\tjump.gt\t@.BB0_2\n\tadd\t63, r1, r3\n\tsub.s\t32, r0, r10\n\tand\tr3, r10, r3\n\tld.1\t64, r11\n\tadd\tr11, r3, r3\n\tsub!\tr3, r11, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r3, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tadd\t128, r4, r4\n\tst.1\t64, r3\n\tst.1.inc\tr11, r1, r6\n\tadd\t160, r2, r2\n\tadd\tr1, r2, r3\n\tsub!\tr3, r4, r3\n\tjump.gt\t@.BB0_8\n\tadd\tr11, r0, stack-[6]\n\tadd\tr10, r0, stack-[5]\n\tadd\tr7, r0, stack-[7]\n\tadd\tr8, r0, stack-[3]\n\tsub!\tr1, r0, r3\n\tjump.eq\t@.BB0_20\n\tadd\tr0, r0, r3\n.BB0_19:\n\tadd\tr3, r6, r4\n\tadd\tr3, r2, r5\n\tld.1\tr5, r5\n\tst.1\tr4, r5\n\tadd\t32, r3, r3\n\tsub!\tr3, r1, r4\n\tjump.lt\t@.BB0_19\n.BB0_20:\n\tadd\tr6, r0, stack-[4]\n\tadd\tr6, r1, r1\n\tst.1\tr1, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr9, r0, stack-[8]\n\tst.2\t4, r9\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_23\n\tadd\tstack-[8], r0, r1\n\tand\t@CPI0_4[0], r1, r5\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tor\tr2, r5, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r3\n\tand!\t1, r2, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tstack-[6], r0, r5\n\tjump.eq\t@.BB0_8\n\tld.1\tr5, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_27\n.BB0_28:\n\tadd\t@CPI0_17[0], r0, r1\n\tsload\tr1, r3\n\tand\t@CPI0_4[0], r2, r4\n\tld.1\t64, r1\n\tadd\t32, r1, r2\n\tadd\tr4, r0, stack-[8]\n\tst.1\tr2, r4\n\tadd\tr3, r0, stack-[7]\n\tand\t@CPI0_4[0], r3, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r2\n\tcontext.gas_left\tr3\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_18[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_19[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tsub!\tstack-[8], r0, r1\n\tjump.eq\t@.BB0_50\n\tadd\tstack-[7], r0, r1\n\tand\t@CPI0_10[0], r1, r1\n\tor\tstack-[8], r1, r1\n\tadd\t@CPI0_17[0], r0, r2\n\tsstore\tr2, r1\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_20[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_54:\n\tsub.s!\t@CPI0_25[0], r2, r5\n\tjump.eq\t@.BB0_60\n\tsub.s!\t@CPI0_26[0], r2, r2\n\tjump.ne\t@.BB0_236\n\tsub.s\t4, r4, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_8\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r9\n\tsub.s!\t@CPI0_4[0], r9, r2\n\tjump.gt\t@.BB0_8\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_5[0], r6, r2\n\tjump.gt\t@.BB0_8\n\tadd\t35, r6, r2\n\tadd\t@CPI0_6[0], r0, r5\n\tsub!\tr2, r4, r7\n\tadd\tr0, r0, r7\n\tadd.ge\tr5, r0, r7\n\tand\t@CPI0_6[0], r2, r2\n\tsub!\tr2, r0, r8\n\tadd.ge\tr0, r0, r5\n\tsub.s!\t@CPI0_6[0], r2, r2\n\tadd.ne\tr7, r0, r5\n\tsub!\tr5, r0, r2\n\tjump.ne\t@.BB0_8\n\tadd\t4, r6, r5\n\tptr.add\tr1, r5, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_5[0], r2, r7\n\tjump.gt\t@.BB0_8\n\tadd\tr6, r2, r6\n\tadd\t36, r6, r6\n\tsub!\tr6, r4, r6\n\tjump.gt\t@.BB0_8\n\tadd\t@CPI0_17[0], r0, r6\n\tsload\tr6, r6\n\tand\t@CPI0_4[0], r6, r6\n\tcontext.caller\tr7\n\tsub!\tr7, r6, r6\n\tjump.ne\t@.BB0_115\n\tadd\t191, r2, r3\n\tsub.s\t32, r0, r6\n\tand\tr3, r6, r3\n\tsub.s!\t@CPI0_5[0], r3, r4\n\tjump.gt\t@.BB0_2\n\tadd\tr6, r0, stack-[7]\n\tst.1\t64, r3\n\tadd\t32, r5, r3\n\tptr.add\tr1, r3, r1\n\tand\t31, r2, r3\n\tst.1\t128, r2\n\tshr.s!\t5, r2, r4\n\tjump.eq\t@.BB0_258\n\tadd\tr0, r0, r5\n.BB0_134:\n\tshl.s\t5, r5, r6\n\tptr.add\tr1, r6, r7\n\tld\tr7, r7\n\tadd\t160, r6, r6\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r4, r6\n\tjump.lt\t@.BB0_134\n.BB0_258:\n\tsub!\tr3, r0, r5\n\tjump.eq\t@.BB0_136\n\tshl.s\t5, r4, r4\n\tptr.add\tr1, r4, r1\n\tshl.s\t3, r3, r3\n\tadd\t160, r4, r4\n\tld.1\tr4, r5\n\tshl\tr5, r3, r5\n\tshr\tr5, r3, r5\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r5, r1\n\tst.1\tr4, r1\n.BB0_136:\n\tadd\t160, r2, r1\n\tst.1\tr1, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr9, r0, stack-[8]\n\tst.2\t4, r9\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_23\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tor\tstack-[8], r2, r2\n\tadd\tstack-[8], r0, r5\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r3\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tld.1\t64, r1\n\tadd\tr1, r0, stack-[6]\n\tsub.s!\t@CPI0_13[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\tstack-[6], r0, r4\n\tadd\t96, r4, r1\n\tst.1\t64, r1\n\tadd\t64, r4, r1\n\tadd\t@CPI0_14[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t32, r4, r1\n\tadd\t@CPI0_15[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t39, r0, r1\n\tst.1\tr4, r1\n\tld.1\t128, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r3, r3\n\tjump.ne\t@.BB0_141\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r4\n\tjump\t@.BB0_143\n.BB0_236:\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r2\n\tjump.ne\t@.BB0_237\n.BB0_223:\n\tadd\t@CPI0_16[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t66, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_39[0], r0, r1\n\tst.1\t196, r1\n\tadd\t@CPI0_40[0], r0, r1\n\tst.1\t228, r1\n\tadd\t@CPI0_41[0], r0, r1\n\tst.1\t260, r1\n\tadd\t@CPI0_42[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_237:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_275\n\tadd\tr0, r0, r7\n.BB0_239:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_239\n.BB0_275:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_241\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_241:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_246\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_273\n\tadd\tr0, r0, r5\n.BB0_244:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_244\n.BB0_273:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_252\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_252\n.BB0_161:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tadd\t@CPI0_17[0], r0, r5\n\tsload\tr5, r5\n\tand\t@CPI0_4[0], r5, r5\n\tcontext.caller\tr6\n\tsub!\tr6, r5, r5\n\tjump.ne\t@.BB0_163\n.BB0_179:\n\tst.1\t128, r2\n\tadd\t@CPI0_27[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_180:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_8\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_4[0], r6, r2\n\tjump.gt\t@.BB0_8\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r7\n\tand\t@CPI0_4[0], r7, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r5\n\tjump.ne\t@.BB0_184\n\tadd\tr7, r0, stack-[7]\n\tst.1\t128, r2\n\tst.1\t160, r6\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_28[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_19[0], r0, r4\n\tadd\tr6, r0, stack-[8]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r3\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_202\n.BB0_50:\n\tld.1\t64, r1\n\tadd\t100, r1, r2\n\tadd\t@CPI0_29[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tadd\t@CPI0_30[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t38, r0, r3\n\tjump\t@.BB0_24\n.BB0_60:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_8\n\tsub.s\t4, r4, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_8\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_4[0], r6, r2\n\tjump.le\t@.BB0_63\n.BB0_8:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_246:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_274\n\tadd\tr0, r0, r6\n.BB0_248:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_248\n.BB0_274:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_250\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_250:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_251\n.BB0_252:\n\tjump\t@.BB0_80\n.BB0_229:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_272\n\tadd\tr0, r0, r6\n.BB0_231:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_231\n.BB0_272:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_233\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_233:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_234\n.BB0_235:\n.BB0_80:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r4, r2\n\tadd.ge\tr1, r0, r4\n\tshl.s\t96, r4, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_251:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_234:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_205:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_270\n\tadd\tr0, r0, r7\n.BB0_207:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_207\n.BB0_270:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_209\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_209:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_214\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_268\n\tadd\tr0, r0, r5\n.BB0_212:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_212\n.BB0_268:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_220\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_220\n.BB0_163:\n\tand\t31, r4, r6\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_264\n\tadd\tr0, r0, r7\n.BB0_165:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r5, r8\n\tjump.lt\t@.BB0_165\n.BB0_264:\n\tsub!\tr6, r0, r7\n\tjump.eq\t@.BB0_167\n\tshl.s\t3, r6, r6\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r7\n\tshl\tr7, r6, r7\n\tshr\tr7, r6, r7\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r6, r6\n\tshr\tr1, r6, r1\n\tshl\tr1, r6, r1\n\tor\tr1, r7, r1\n\tst.1\tr5, r1\n.BB0_167:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_172\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_262\n\tadd\tr0, r0, r5\n.BB0_170:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_170\n.BB0_262:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_178\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_178\n.BB0_63:\n\tadd\t@CPI0_17[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tcontext.caller\tr5\n\tsub!\tr5, r2, r2\n\tjump.ne\t@.BB0_65\n\tadd\t160, r0, r1\n\tst.1\t64, r1\n\tst.1\t128, r0\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tr6, r0, stack-[8]\n\tst.2\t4, r6\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_83\n.BB0_23:\n\tld.1\t64, r1\n\tadd\t100, r1, r2\n\tadd\t@CPI0_37[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tadd\t@CPI0_38[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t45, r0, r3\n.BB0_24:\n\tst.1\tr2, r3\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_31[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_184:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_267\n\tadd\tr0, r0, r7\n.BB0_186:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_186\n.BB0_267:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_188\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_188:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_193\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_265\n\tadd\tr0, r0, r5\n.BB0_191:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_191\n.BB0_265:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_199\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_199\n.BB0_214:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_269\n\tadd\tr0, r0, r6\n.BB0_216:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_216\n.BB0_269:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_218\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_218:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_219\n.BB0_220:\n\tjump\t@.BB0_80\n.BB0_172:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_263\n\tadd\tr0, r0, r6\n.BB0_174:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_174\n.BB0_263:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_176\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_176:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_177\n.BB0_178:\n\tjump\t@.BB0_80\n.BB0_65:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_256\n\tadd\tr0, r0, r7\n.BB0_67:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_67\n.BB0_256:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_69\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_69:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_74\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_254\n\tadd\tr0, r0, r5\n.BB0_72:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_72\n.BB0_254:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_80\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_80\n.BB0_193:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_266\n\tadd\tr0, r0, r6\n.BB0_195:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_195\n.BB0_266:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_197\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_197:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_198\n.BB0_199:\n\tjump\t@.BB0_80\n.BB0_219:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_177:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_74:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_255\n\tadd\tr0, r0, r6\n.BB0_76:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_76\n.BB0_255:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_78\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_78:\n\tand!\t1, r2, r1\n\tjump.ne\t@.BB0_80\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_202:\n\tadd\tstack-[7], r0, r1\n\tand\t@CPI0_10[0], r1, r1\n\tor\tr1, r3, r1\n\tadd\t@CPI0_17[0], r0, r2\n\tsstore\tr2, r1\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_83:\n\tadd\t@CPI0_9[0], r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_10[0], r2, r2\n\tor\tstack-[8], r2, r2\n\tadd\tstack-[8], r0, r5\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_11[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t2, r0, r3\n\tadd\t@CPI0_12[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[8], r0, r5\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_8\n\tld.1\t128, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_85\n.BB0_64:\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_198:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_115:\n\tand\t31, r4, r5\n\tadd\t@CPI0_9[0], r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_4[0], r2, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_261\n\tadd\tr0, r0, r7\n.BB0_117:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_117\n.BB0_261:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_119\n\tshl.s\t3, r5, r5\n\tshl.s\t5, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tptr.add\tr1, r6, r1\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_119:\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r5\n\tjump.ne\t@.BB0_124\n\tadd\tstack[@returndatasize], r0, r4\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r1\n\tjump.eq\t@.BB0_259\n\tadd\tr0, r0, r5\n.BB0_122:\n\tshl.s\t5, r5, r6\n\tptr.add\tr3, r6, r7\n\tld\tr7, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tsub!\tr5, r1, r6\n\tjump.lt\t@.BB0_122\n.BB0_259:\n\tsub!\tr2, r0, r5\n\tjump.eq\t@.BB0_130\n\tshl.s\t3, r2, r2\n\tshl.s\t5, r1, r1\n\tld.1\tr1, r5\n\tshl\tr5, r2, r5\n\tshr\tr5, r2, r5\n\tptr.add\tr3, r1, r3\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r5, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_130\n.BB0_85:\n\tld.1\t64, r3\n\tsub.s!\t@CPI0_13[0], r3, r1\n\tjump.gt\t@.BB0_2\n\tadd\t96, r3, r1\n\tst.1\t64, r1\n\tadd\t64, r3, r1\n\tadd\t@CPI0_14[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t32, r3, r1\n\tadd\t@CPI0_15[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t39, r0, r1\n\tadd\tr3, r0, stack-[7]\n\tst.1\tr3, r1\n\tld.1\t128, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r5, r3\n\tjump.ne\t@.BB0_87\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r4\n\tjump\t@.BB0_89\n.BB0_124:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r5\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tshl.s\t96, r4, r3\n\tor\tr1, r3, r1\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r4\n\tand\t31, r4, r3\n\tand\t@CPI0_0[0], r4, stack[@returndatasize]\n\tand\t@CPI0_0[0], r4, r4\n\tshr.s!\t5, r4, r5\n\tjump.eq\t@.BB0_260\n\tadd\tr0, r0, r6\n.BB0_126:\n\tshl.s\t5, r6, r7\n\tptr.add\tr1, r7, r8\n\tld\tr8, r8\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_126\n.BB0_260:\n\tsub!\tr3, r0, r6\n\tjump.eq\t@.BB0_128\n\tshl.s\t3, r3, r3\n\tshl.s\t5, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r3, r6\n\tshr\tr6, r3, r6\n\tptr.add\tr1, r5, r1\n\tld\tr1, r1\n\tsub\t256, r3, r3\n\tshr\tr1, r3, r1\n\tshl\tr1, r3, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_128:\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_129\n.BB0_130:\n\tjump\t@.BB0_80\n.BB0_129:\n\tshl.s\t96, r4, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_27:\n\tld.1\t64, r4\n\tsub.s!\t@CPI0_13[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tadd\t96, r4, r1\n\tst.1\t64, r1\n\tadd\t64, r4, r1\n\tadd\t@CPI0_14[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t39, r0, r1\n\tadd\tr4, r0, stack-[2]\n\tst.1.inc\tr4, r1, r2\n\tadd\t@CPI0_15[0], r0, r1\n\tadd\tr2, r0, stack-[1]\n\tst.1\tr2, r1\n\tld.1\tr5, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r3, r3\n\tjump.ne\t@.BB0_31\n\tadd\t1, r0, r2\n\tadd\tstack[@returndatasize], r0, r3\n\tjump\t@.BB0_32\n.BB0_87:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_32[0], r1, r1\n\tadd\tr5, r0, r2\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r4\n.BB0_89:\n\tadd\t96, r0, r3\n\tadd\t128, r0, r1\n\tsub!\tr4, r0, r5\n\tjump.ne\t@.BB0_101\n.BB0_90:\n\tld.1\tr3, r3\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_98\n\tsub!\tr3, r0, r2\n\tjump.ne\t@.BB0_97\n\tld.1\t64, r1\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\tstack-[7], r0, r7\n\tld.1\tr7, r2\n\tadd\t36, r1, r3\n\tst.1\tr3, r2\n\tadd\t68, r1, r3\n\tsub!\tr2, r0, r4\n\tjump.eq\t@.BB0_95\n\tadd\tr0, r0, r4\n.BB0_94:\n\tadd\tr4, r3, r5\n\tadd\t32, r4, r4\n\tadd\tr4, r7, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tsub!\tr4, r2, r5\n\tjump.lt\t@.BB0_94\n.BB0_95:\n\tadd\t31, r2, r4\n\tsub.s\t32, r0, r5\n.BB0_96:\n\tand\tr4, r5, r4\n\tadd\tr2, r3, r2\n\tst.1\tr2, r0\n\tadd\t68, r4, r2\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_101:\n\tsub.s!\t@CPI0_5[0], r4, r1\n\tjump.gt\t@.BB0_2\n\tadd\t63, r4, r1\n\tsub.s\t32, r0, r3\n\tand\tr1, r3, r1\n\tld.1\t64, r3\n\tadd\tr3, r1, r1\n\tsub!\tr1, r3, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r1, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r1\n\tand\t31, r4, r5\n\tst.1.inc\tr3, r4, r1\n\tptr.add\tstack[@ptr_return_data], r0, r6\n\tshr.s!\t5, r4, r4\n\tjump.eq\t@.BB0_253\n\tadd\tr0, r0, r7\n.BB0_106:\n\tshl.s\t5, r7, r8\n\tadd\tr1, r8, r9\n\tptr.add\tr6, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r4, r8\n\tjump.lt\t@.BB0_106\n.BB0_253:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_90\n\tshl.s\t5, r4, r4\n\tptr.add\tr6, r4, r6\n\tadd\tr1, r4, r4\n\tshl.s\t3, r5, r5\n\tld.1\tr4, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tld\tr6, r6\n\tsub\t256, r5, r5\n\tshr\tr6, r5, r6\n\tshl\tr6, r5, r5\n\tor\tr5, r7, r5\n\tst.1\tr4, r5\n\tjump\t@.BB0_90\n.BB0_98:\n\tsub!\tr3, r0, r1\n\tadd\tstack-[8], r0, r2\n\tjump.ne\t@.BB0_64\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tst.2\t4, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n.BB0_100:\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_41\n\tjump\t@.BB0_64\n.BB0_31:\n\tadd\t@CPI0_0[0], r0, r3\n\tadd\tstack-[4], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.ge\tr3, r0, r5\n\tshl.s\t64, r5, r4\n\tsub.s!\t@CPI0_0[0], r2, r5\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tor\tr2, r4, r2\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\tr2, r1, r1\n\tadd\tstack-[8], r0, r2\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r3\n.BB0_32:\n\tadd\t96, r0, r1\n\tsub!\tr3, r0, r4\n\tjump.ne\t@.BB0_42\n.BB0_33:\n\tld.1\tr1, r1\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_38\n\tsub!\tr1, r0, r2\n\tjump.ne\t@.BB0_36\n\tld.1\t64, r4\n\tadd\tr4, r0, stack-[8]\n\tadd\t@CPI0_16[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tadd\t32, r0, r2\n\tst.1\tr1, r2\n\tadd\tstack-[2], r0, r1\n\tld.1\tr1, r3\n\tadd\tr3, r0, stack-[7]\n\tadd\t36, r4, r1\n\tst.1\tr1, r3\n\tadd\t68, r4, r2\n\tadd\tstack-[1], r0, r1\n\tnear_call\tr0, @copy_memory_to_memory_with_cleanup, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r1\n\tadd\t31, r1, r1\n\tand\tstack-[5], r1, r1\n\tadd\t68, r1, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[8], r0, r4\n\tjump\t@.BB0_37\n.BB0_42:\n\tsub.s!\t@CPI0_5[0], r3, r1\n\tadd\tstack-[5], r0, r4\n\tjump.gt\t@.BB0_2\n\tadd\t63, r3, r1\n\tand\tr1, r4, r4\n\tld.1\t64, r1\n\tadd\tr1, r4, r4\n\tsub!\tr4, r1, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r4, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r4\n\tand\t31, r3, r4\n\tst.1.inc\tr1, r3, r9\n\tptr.add\tstack[@ptr_return_data], r0, r5\n\tshr.s!\t5, r3, r3\n\tjump.eq\t@.BB0_276\n\tadd\tr0, r0, r6\n.BB0_47:\n\tshl.s\t5, r6, r7\n\tadd\tr9, r7, r8\n\tptr.add\tr5, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r3, r7\n\tjump.lt\t@.BB0_47\n.BB0_276:\n\tadd\tr9, r0, stack-[3]\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_33\n\tshl.s\t5, r3, r3\n\tptr.add\tr5, r3, r5\n\tadd\tstack-[3], r3, r3\n\tshl.s\t3, r4, r4\n\tld.1\tr3, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr5, r5\n\tsub\t256, r4, r4\n\tshr\tr5, r4, r5\n\tshl\tr5, r4, r4\n\tor\tr4, r6, r4\n\tst.1\tr3, r4\n\tjump\t@.BB0_33\n.BB0_38:\n\tsub!\tr1, r0, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tstack-[8], r0, r3\n\tjump.ne\t@.BB0_28\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tst.2\t4, r3\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tadd\tstack-[7], r0, r2\n\tjump.ne\t@.BB0_28\n.BB0_41:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_33[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t29, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_34[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_141:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_32[0], r1, r1\n\tadd\tstack-[8], r0, r2\n\tnear_call\tr0, @__delegatecall, @DEFAULT_UNWIND\n\tand\t1, r2, r2\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tshr.s\t96, r1, r1\n\tand\t@CPI0_0[0], r1, stack[@returndatasize]\n\tand\t@CPI0_0[0], r1, r4\n.BB0_143:\n\tadd\t96, r0, r3\n\tadd\t128, r0, r1\n\tsub!\tr4, r0, r5\n\tjump.ne\t@.BB0_154\n.BB0_144:\n\tld.1\tr3, r3\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_151\n\tsub!\tr3, r0, r2\n\tjump.ne\t@.BB0_150\n\tld.1\t64, r1\n\tadd\t@CPI0_16[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\tstack-[6], r0, r7\n\tld.1\tr7, r2\n\tadd\t36, r1, r3\n\tst.1\tr3, r2\n\tadd\t68, r1, r3\n\tsub!\tr2, r0, r4\n\tjump.eq\t@.BB0_149\n\tadd\tr0, r0, r4\n.BB0_148:\n\tadd\tr4, r3, r5\n\tadd\t32, r4, r4\n\tadd\tr4, r7, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tsub!\tr4, r2, r5\n\tjump.lt\t@.BB0_148\n.BB0_149:\n\tadd\t31, r2, r4\n\tadd\tstack-[7], r0, r5\n\tjump\t@.BB0_96\n.BB0_154:\n\tsub.s!\t@CPI0_5[0], r4, r1\n\tadd\tstack-[7], r0, r3\n\tjump.gt\t@.BB0_2\n\tadd\t63, r4, r1\n\tand\tr1, r3, r1\n\tld.1\t64, r3\n\tadd\tr3, r1, r1\n\tsub!\tr1, r3, r5\n\tadd\t0, r0, r5\n\tadd.lt\t1, r0, r5\n\tsub.s!\t@CPI0_5[0], r1, r6\n\tjump.gt\t@.BB0_2\n\tand!\t1, r5, r5\n\tjump.ne\t@.BB0_2\n\tst.1\t64, r1\n\tand\t31, r4, r5\n\tst.1.inc\tr3, r4, r1\n\tptr.add\tstack[@ptr_return_data], r0, r6\n\tshr.s!\t5, r4, r4\n\tjump.eq\t@.BB0_257\n\tadd\tr0, r0, r7\n.BB0_159:\n\tshl.s\t5, r7, r8\n\tadd\tr1, r8, r9\n\tptr.add\tr6, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r4, r8\n\tjump.lt\t@.BB0_159\n.BB0_257:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_144\n\tshl.s\t5, r4, r4\n\tptr.add\tr6, r4, r6\n\tadd\tr1, r4, r4\n\tshl.s\t3, r5, r5\n\tld.1\tr4, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tld\tr6, r6\n\tsub\t256, r5, r5\n\tshr\tr6, r5, r6\n\tshl\tr6, r5, r5\n\tor\tr5, r7, r5\n\tst.1\tr4, r5\n\tjump\t@.BB0_144\n.BB0_36:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[3], r0, r4\n.BB0_37:\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.ge\tr2, r0, r4\n\tshl.s\t64, r4, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_151:\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_64\n\tadd\t@CPI0_7[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_8[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_21\n\tjump\t@.BB0_100\n.BB0_21:\n\trevert\n.BB0_150:\n.BB0_97:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t96, r3, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end0:\n\ncopy_memory_to_memory_with_cleanup:\n.func_begin1:\n\tsub!\tr3, r0, r4\n\tjump.eq\t@.BB1_3\n\tadd\tr0, r0, r4\n.BB1_2:\n\tadd\tr4, r2, r5\n\tadd\tr4, r1, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tadd\t32, r4, r4\n\tsub!\tr4, r3, r5\n\tjump.lt\t@.BB1_2\n.BB1_3:\n\tadd\tr3, r2, r1\n\tst.1\tr1, r0\n\tret\n.func_end1:\n\n__cxa_throw:\n\trevert\n\n__farcall:\n.func_begin2:\n.tmp0:\n\tfar_call\tr1, r2, @.BB3_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB3_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end2:\n\n__staticcall:\n.func_begin3:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB4_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB4_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end3:\n\n__delegatecall:\n.func_begin4:\n.tmp6:\n\tfar_call.delegate\tr1, r2, @.BB5_2\n.tmp7:\n\tadd\t1, r0, r2\n\tret\n.BB5_2:\n.tmp8:\n\tadd\tr0, r0, r2\n\tret\n.func_end4:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.p2align\t5\nptr_return_data:\n.cell\t0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell -18446744073709551457\nCPI0_2:\n\t.cell -18446744073709551489\nCPI0_3:\n\t.cell 8589934560\nCPI0_4:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_5:\n\t.cell 18446744073709551615\nCPI0_6:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_7:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_8:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_9:\n\t.cell 24440054405305269366569402256811496959409073762505157381672968839269610695612\nCPI0_10:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_11:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_12:\n\t.cell -30536698362301869620703524882028299911890425965968411027149867401609008632517\nCPI0_13:\n\t.cell 18446744073709551519\nCPI0_14:\n\t.cell 14654901866877395549149391597484105336708473837108585137082493300548441210880\nCPI0_15:\n\t.cell 29577713123142787666065354962605974352286555015652805685687967870311454567532\nCPI0_16:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_17:\n\t.cell -33836616157800148473937241991990060311975165975819281289460902511640494382845\nCPI0_18:\n\t.cell 904625697166532776746648320380374280103671760270919307471179981048634146816\nCPI0_19:\n\t.cell 57168638331561637060830620937878871246875502369269713186874178039217247582607\nCPI0_20:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_21:\n\t.cell 1549851162\nCPI0_22:\n\t.cell 1549851163\nCPI0_23:\n\t.cell 2401778032\nCPI0_24:\n\t.cell 4166100032\nCPI0_25:\n\t.cell 911855590\nCPI0_26:\n\t.cell 1327428230\nCPI0_27:\n\t.cell 2535301202817642044428229017600\nCPI0_28:\n\t.cell 904625697166532776746648320380374280103671760270919309832363222483456753664\nCPI0_29:\n\t.cell 45408759099000846574684193736602357774271237157169010951590501707763511459840\nCPI0_30:\n\t.cell 31354931755624933654031447922210079955860470560114867000114460986147043483745\nCPI0_31:\n\t.cell 10458117451882892562347801444352\nCPI0_32:\n\t.cell 2951479051793528258560\nCPI0_33:\n\t.cell 29577713123142787666064487680123823951345158729797978021083438401868913442816\nCPI0_34:\n\t.cell 7922816251426433759354395033600\nCPI0_35:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\nCPI0_36:\n\t.cell 2852213850513516153367582212096\nCPI0_37:\n\t.cell 50411903926665684337970802942352511357568373430877458990420567558264874598400\nCPI0_38:\n\t.cell 31354931755624933654031447922210259146857421806447843296373930569683382247534\nCPI0_39:\n\t.cell 38196372293526028768745537377834664526780728754846428360608283209572903117933\nCPI0_40:\n\t.cell 47687425813547131531374693542026864319719216742175721048342195994864927208039\nCPI0_41:\n\t.cell 45888551966424197807937402689295079693071411769653575580334356259971920822272\nCPI0_42:\n\t.cell 12993418654700534606776030461952\n","bytecode":{"object":"0002000000000002000800000000000200000000030100190000006003300270000001a30430019700010000004103550000008008000039000000400080043f0000000102200190000000210000c13d000000000341034f000000040240008c0000002a0000413d000000000201043b000000e002200270000001b80520009c000001000000a13d000001b90520009c000001d90000613d000001ba0520009c000001e80000613d000001bb0220009c0000018b0000c13d0000000002000416000000000202004b0000021f0000c13d000001b402000041000000000202041a000001a7022001970000000005000411000000000525004b000002770000c13d000001e50000013d000001a402400041000001a50220009c000000530000213d000001c60100004100000000001004350000004101000039000000040010043f000001c7010000410000068800010430000000000204004b0000018b0000c13d000001b401000041000000000101041a000001a7011001970000000002000411000000000112004b000001910000613d000001ac01000041000000000201041a0000000001000414000001a702200197000000040420008c000002490000c13d00000000040000310000001f0240018f0000000501400272000000440000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b0000003d0000413d000000000502004b0000026e0000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f00000000002104350000026e0000013d0000009f02400039000001a602200197000000400020043f0000001f0240018f0000000503400272000000620000613d00000000050000190000000506500210000000000761034f000000000707043b000000800660003900000000007604350000000105500039000000000635004b0000005a0000413d000000000502004b000000710000613d0000000503300210000000000131034f00000003022002100000008003300039000000000503043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001304350000005f0140008c0000021f0000a13d000000800900043d000001a70190009c0000021f0000213d000000a00700043d000001a70170009c0000021f0000213d000000c00200043d000001a80120009c0000021f0000213d0000001f01200039000001a903000041000000000541004b00000000050000190000000005038019000001a901100197000000000601004b0000000003008019000001a90110009c000000000305c019000000000103004b0000021f0000c13d00000080012000390000000001010433000001a80310009c000000240000213d0000003f03100039000000200a00008a0000000003a3016f000000400b00043d00000000033b00190000000005b3004b00000000050000190000000105004039000001a80630009c000000240000213d0000000105500190000000240000c13d0000008004400039000000400030043f00000000061b0436000000a0022000390000000003210019000000000343004b0000021f0000213d00060000000b001d00050000000a001d000700000007001d000300000008001d000000000301004b000000ad0000613d000000000300001900000000046300190000000005230019000000000505043300000000005404350000002003300039000000000413004b000000a60000413d000400000006001d00000000011600190000000000010435000001aa010000410000000000100439000800000009001d0000000400900443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000003020000613d0000000801000029000001a705100197000001ac01000041000000000201041a000001ad02200197000000000252019f000000000021041b000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ae011001c70000800d020000390000000203000039000001af04000041068606770000040f00000008030000290000000101200190000000070200002900000006050000290000021f0000613d0000000001050433000000000101004b000004ca0000c13d000001b401000041000000000301041a000001a704200197000000400100043d0000002002100039000800000004001d0000000000420435000700000003001d000001a7023001970000000000210435000001a3020000410000000003000414000001a30430009c0000000003028019000001a30410009c00000000010280190000004001100210000000c002300210000000000112019f000001b5011001c70000800d020000390000000103000039000001b604000041068606770000040f00000001012001900000021f0000613d000000080100006b0000020b0000613d0000000701000029000001ad0110019700000008011001af000001b402000041000000000012041b000000200100003900000100001004430000012000000443000001b701000041000006870001042e000001bc0520009c000002150000613d000001bd0220009c0000018b0000c13d000000040240008a000000400220008c0000021f0000413d0000000402100370000000000902043b000001a70290009c0000021f0000213d0000002402100370000000000602043b000001a80260009c0000021f0000213d0000002302600039000001a905000041000000000742004b00000000070000190000000007058019000001a902200197000000000802004b0000000005008019000001a90220009c000000000507c019000000000205004b0000021f0000c13d0000000405600039000000000251034f000000000202043b000001a80720009c0000021f0000213d00000000062600190000002406600039000000000646004b0000021f0000213d000001b406000041000000000606041a000001a7066001970000000007000411000000000667004b000004510000c13d000000bf03200039000000200600008a000000000363016f000001a80430009c000000240000213d000700000006001d000000400030043f0000002003500039000000000131034f0000001f0320018f000000800020043f0000000504200272000001400000613d00000000050000190000000506500210000000000761034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001380000413d000000000503004b0000014f0000613d0000000504400210000000000141034f0000000303300210000000a004400039000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000000a0012000390000000000010435000001aa010000410000000000100439000800000009001d0000000400900443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000003020000613d000001ac01000041000000000201041a000001ad0220019700000008022001af0000000805000029000000000021041b000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ae011001c70000800d020000390000000203000039000001af04000041068606770000040f000000080300002900000001012001900000021f0000613d000000400100043d000600000001001d000001b00110009c000000240000213d00000006040000290000006001400039000000400010043f0000004001400039000001b10200004100000000002104350000002001400039000001b202000041000000000021043500000027010000390000000000140435000000800200043d0000000001000414000000040330008c000005e60000c13d00000001020000390000000004000031000005f60000013d000001b402000041000000000202041a000001a7022001970000000005000411000000000225004b0000019f0000c13d000001b301000041000000800010043f0000002001000039000000840010043f0000004201000039000000a40010043f000001ca01000041000000c40010043f000001cb01000041000000e40010043f000001cc01000041000001040010043f000001cd0100004100000688000104300000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000001ad0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b000001a60000413d000000000705004b000001bb0000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000002210000c13d00000000040000310000001f0240018f0000000501400272000001ca0000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000001c30000413d000000000502004b000002480000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000002480000013d0000000002000416000000000202004b0000021f0000c13d000001ac02000041000000000202041a000001a702200197000001b405000041000000000505041a000001a7055001970000000006000411000000000556004b000002b10000c13d000000800020043f000001be01000041000006870001042e0000000002000416000000000202004b0000021f0000c13d000000040240008a000000200220008c0000021f0000413d0000000402100370000000000602043b000001a70260009c0000021f0000213d000001b402000041000000000702041a000001a7027001970000000005000411000000000525004b000003170000c13d000700000007001d000000800020043f000000a00060043f000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001bf011001c70000800d020000390000000103000039000001b604000041000800000006001d068606770000040f000000080300002900000001012001900000021f0000613d000000000103004b000004300000c13d000000400100043d0000006402100039000001c00300004100000000003204350000004402100039000001c1030000410000000000320435000000240210003900000026030000390000030b0000013d0000000002000416000000000202004b0000021f0000c13d000000040240008a000000200220008c0000021f0000413d0000000402100370000000000602043b000001a70260009c000002e80000a13d00000000010000190000068800010430000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000002380000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000002310000413d000000000603004b000002460000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000002730000613d0000026e0000013d000001a303000041000001a30410009c0000000001038019000000c001100210068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a30440019700000005054002720000025e0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000002570000413d000000000603004b0000026c0000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000002750000613d000001a301000041000001a30240009c00000000040180190000006001400210000006870001042e00000060014002100000068800010430000000600140021000000688000104300000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000002850000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b0000027e0000413d000000000705004b000002930000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000003510000c13d00000000040000310000001f0240018f0000000501400272000002a20000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b0000029b0000413d000000000502004b000003780000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000003780000013d0000001f0640018f0000000505400272000002bc0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000857004b000002b50000413d000000000706004b000002ca0000613d00000003066002100000000505500210000000000705043300000000076701cf000000000767022f000000000151034f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f00000000001504350000000001000414000000040520008c000003790000c13d00000000040000310000001f0240018f0000000501400272000002d90000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000002d20000413d000000000502004b000003a00000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000003a00000013d000001b402000041000000000202041a000001a7022001970000000005000411000000000225004b000003a10000c13d000000a001000039000000400010043f000000800000043f000001aa010000410000000000100439000800000006001d0000000400600443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000004370000c13d000000400100043d0000006402100039000001c80300004100000000003204350000004402100039000001c903000041000000000032043500000024021000390000002d030000390000000000320435000001b3020000410000000000210435000000040210003900000020030000390000000000320435000001a302000041000001a30310009c00000000010280190000004001100210000001c2011001c700000688000104300000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000003250000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b0000031e0000413d000000000705004b000003330000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000003db0000c13d00000000040000310000001f0240018f0000000501400272000003420000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b0000033b0000413d000000000502004b000004020000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000004020000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000003680000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000003610000413d000000000603004b000003760000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000004030000613d0000026e0000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000003900000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000003890000413d000000000603004b0000039e0000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000004050000613d0000026e0000013d0000001f0540018f000001ac02000041000000000202041a000001a7022001970000000506400272000003af0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b000003a80000413d000000000705004b000003bd0000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000004070000c13d00000000040000310000001f0240018f0000000501400272000003cc0000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000003c50000413d000000000502004b0000026e0000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f00000000002104350000026e0000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000003f20000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000003eb0000413d000000000603004b000004000000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f000000000015043500000001012001900000044f0000613d0000026e0000013d0000006001400210000006880001043000000060014002100000068800010430000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a30440019700000005054002720000041e0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000004170000413d000000000603004b0000042c0000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f000000000015043500000001012001900000026e0000c13d000000600140021000000688000104300000000701000029000001ad01100197000000000131019f000001b402000041000000000012041b0000000001000019000006870001042e000001ac01000041000000000201041a000001ad0220019700000008022001af0000000805000029000000000021041b000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ae011001c70000800d020000390000000203000039000001af04000041068606770000040f000000080500002900000001012001900000021f0000613d000000800100043d000000000101004b0000048b0000c13d0000000001000019000006870001042e000000600140021000000688000104300000001f0540018f000001ac02000041000000000202041a000001a70220019700000005064002720000045f0000613d00000000070000190000000508700210000000000981034f000000000909043b00000000009804350000000107700039000000000867004b000004580000413d000000000705004b0000046d0000613d00000003055002100000000506600210000000000706043300000000075701cf000000000757022f000000000161034f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f00000000001604350000000001000414000000040520008c000004a00000c13d00000000040000310000001f0240018f00000005014002720000047c0000613d00000000050000190000000506500210000000000763034f000000000707043b00000000007604350000000105500039000000000615004b000004750000413d000000000502004b000004c70000613d00000003022002100000000501100210000000000501043300000000052501cf000000000525022f000000000313034f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000210435000004c70000013d000000400300043d000001b00130009c000000240000213d0000006001300039000000400010043f0000004001300039000001b10200004100000000002104350000002001300039000001b20200004100000000002104350000002701000039000700000003001d0000000000130435000000800200043d0000000001000414000000040350008c000004df0000c13d00000001020000390000000004000031000004ef0000013d000001a303000041000001a30510009c0000000001038019000000c0011002100000006003400210000000000131019f068606810000040f0001000000010355000000000301001900000060043002700000001f0340018f000001a30040019d000001a3044001970000000505400272000004b70000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000756004b000004b00000413d000000000603004b000004c50000613d00000003033002100000000505500210000000000605043300000000063601cf000000000636022f000000000151034f000000000101043b0000010003300089000000000131022f00000000013101cf000000000161019f00000000001504350000000101200190000004c80000613d0000026e0000013d00000060014002100000068800010430000000400400043d000001b00140009c000000240000213d0000006001400039000000400010043f0000004001400039000001b10200004100000000002104350000002701000039000200000004001d0000000002140436000001b201000041000100000002001d000000000012043500000000020504330000000001000414000000040330008c0000055d0000c13d00000001020000390000000003000031000005710000013d000001a303000041000001a30410009c0000000001038019000001a30420009c00000000020380190000006002200210000000c001100210000000000121019f000001c3011001c70000000002050019068606810000040f000000010220018f00010000000103550000006001100270000001a30010019d000001a30410019700000060030000390000008001000039000000000504004b0000051c0000c13d0000000003030433000000000202004b000005490000c13d000000000203004b000006600000c13d000000400100043d000001b302000041000000000021043500000004021000390000002003000039000000000032043500000007070000290000000002070433000000240310003900000000002304350000004403100039000000000402004b0000050d0000613d000000000400001900000000053400190000002004400039000000000674001900000000060604330000000000650435000000000524004b000005060000413d0000001f04200039000000200500008a000000000454016f000000000232001900000000000204350000004402400039000001a303000041000001a30420009c0000000002038019000001a30410009c000000000103801900000040011002100000006002200210000000000112019f0000068800010430000001a80140009c000000240000213d0000003f01400039000000200300008a000000000131016f000000400300043d0000000001130019000000000531004b00000000050000190000000105004039000001a80610009c000000240000213d0000000105500190000000240000c13d000000400010043f0000001f0540018f000000000143043600000001060003670000000504400272000005390000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000005310000413d000000000705004b000004f30000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000004f30000013d000000000103004b00000008020000290000044d0000c13d000001aa0100004100000000001004390000000400200443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b000005d40000613d0000044d0000013d000001a3030000410000000405000029000001a30450009c00000000050380190000004004500210000001a30520009c00000000020380190000006002200210000000000242019f000001a30410009c0000000001038019000000c001100210000000000112019f0000000802000029068606810000040f000000010220018f00010000000103550000006001100270000001a30010019d000001a3031001970000006001000039000000000403004b000005910000c13d0000000001010433000000000202004b000005bf0000c13d000000000201004b000006440000c13d000000400400043d000800000004001d000001b301000041000000000014043500000004014000390000002002000039000000000021043500000002010000290000000003010433000700000003001d0000002401400039000000000031043500000044024000390000000101000029068606690000040f00000007010000290000001f01100039000000050110017f0000004401100039000001a302000041000001a30310009c00000000010280190000000804000029000006480000013d000001a80130009c0000000504000029000000240000213d0000003f01300039000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000001a80640009c000000240000213d0000000105500190000000240000c13d000000400040043f0000001f0430018f000000000931043600000001050003670000000503300272000005ae0000613d000000000600001900000005076002100000000008790019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005a60000413d000300000009001d000000000604004b000005740000613d0000000503300210000000000535034f00000003033000290000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f0000000000430435000005740000013d000000000101004b00000007020000290000000803000029000000da0000c13d000001aa0100004100000000001004390000000400300443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000000000101043b000000000101004b0000000702000029000000da0000c13d000000400100043d0000004402100039000001c403000041000000000032043500000024021000390000001d030000390000000000320435000001b3020000410000000000210435000000040210003900000020030000390000000000320435000001a302000041000001a30310009c00000000010280190000004001100210000001c5011001c70000068800010430000001a303000041000001a30410009c0000000001038019000001a30420009c00000000020380190000006002200210000000c001100210000000000121019f000001c3011001c70000000802000029068606810000040f000000010220018f00010000000103550000006001100270000001a30010019d000001a30410019700000060030000390000008001000039000000000504004b000006170000c13d0000000003030433000000000202004b0000064e0000c13d000000000203004b000006600000c13d000000400100043d000001b302000041000000000021043500000004021000390000002003000039000000000032043500000006070000290000000002070433000000240310003900000000002304350000004403100039000000000402004b000006140000613d000000000400001900000000053400190000002004400039000000000674001900000000060604330000000000650435000000000524004b0000060d0000413d0000001f0420003900000007050000290000050f0000013d000001a80140009c0000000703000029000000240000213d0000003f01400039000000000131016f000000400300043d0000000001130019000000000531004b00000000050000190000000105004039000001a80610009c000000240000213d0000000105500190000000240000c13d000000400010043f0000001f0540018f000000000143043600000001060003670000000504400272000006340000613d000000000700001900000005087002100000000009810019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b0000062c0000413d000000000705004b000005fa0000613d0000000504400210000000000646034f00000000044100190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000005fa0000013d000001a302000041000001a30310009c00000000010280190000000304000029000001a30340009c000000000402801900000040024002100000006001100210000000000121019f0000068800010430000000000103004b0000044d0000c13d000001aa01000041000000000010043900000008010000290000000400100443000001a3010000410000000002000414000001a30320009c0000000002018019000000c001200210000001ab011001c700008002020000390686067c0000040f00000001022001900000065f0000613d000005590000013d000000000001042f000001a302000041000001a30430009c0000000003028019000001a30410009c000000000102801900000040011002100000006002300210000000000112019f0000068800010430000000000403004b000006730000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b0000066c0000413d00000000012300190000000000010435000000000001042d000000000001042f0000067a002104210000000102000039000000000001042d0000000002000019000000000001042d0000067f002104230000000102000039000000000001042d0000000002000019000000000001042d00000684002104250000000102000039000000000001042d0000000002000019000000000001042d0000068600000432000006870001042e000006880001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009fffffffffffffffffffffffffffffffffffffffffffffffff000000000000007f00000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b000000000000000000000000000000000000000000000000ffffffffffffff9f206661696c656400000000000000000000000000000000000000000000000000416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c08c379a000000000000000000000000000000000000000000000000000000000b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610302000000000000000000000000000000000000400000000000000000000000007e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000005c60da1a000000000000000000000000000000000000000000000000000000005c60da1b000000000000000000000000000000000000000000000000000000008f28397000000000000000000000000000000000000000000000000000000000f851a440000000000000000000000000000000000000000000000000000000003659cfe6000000000000000000000000000000000000000000000000000000004f1ef286000000000000000000000000000000000000002000000080000000000000000002000000000000000000000000000000000000400000008000000000000000006464726573730000000000000000000000000000000000000000000000000000455243313936373a206e65772061646d696e20697320746865207a65726f206100000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000000000000000000000000000000000000000000640000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000006f74206120636f6e747261637400000000000000000000000000000000000000455243313936373a206e657720696d706c656d656e746174696f6e206973206e5472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267657400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000800000000000000000e0d31e021922ed1788ee674023ff2e07dfe2487b8edc14267fc9d81329885ab9"},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"TransparentUpgradeableProxy_1082\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := 64\n mstore(_1, memoryguard(0x80))\n let programSize := datasize(\"TransparentUpgradeableProxy_1082\")\n let argSize := sub(codesize(), programSize)\n let memoryDataOffset := allocate_memory(argSize)\n codecopy(memoryDataOffset, programSize, argSize)\n let _2 := add(memoryDataOffset, argSize)\n if slt(sub(_2, memoryDataOffset), 96)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address_fromMemory(memoryDataOffset)\n let _3 := 32\n let value1 := abi_decode_address_fromMemory(add(memoryDataOffset, _3))\n let offset := mload(add(memoryDataOffset, _1))\n let _4 := sub(shl(64, 1), 1)\n if gt(offset, _4)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _5 := add(memoryDataOffset, offset)\n if iszero(slt(add(_5, 0x1f), _2))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _6 := mload(_5)\n let array := allocate_memory(array_allocation_size_bytes(_6))\n mstore(array, _6)\n let dst := add(array, _3)\n if gt(add(add(_5, _6), _3), _2)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n copy_memory_to_memory_with_cleanup(add(_5, _3), dst, _6)\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(value0))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(_1)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), _3)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _7 := sub(shl(160, 1), 1)\n let _8 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7)\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _9 := not(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _10 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n sstore(_10, or(and(sload(_10), _9), _8))\n /// @src -1:-1:-1\n let _11 := 0\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ _11, _11, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _8)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _12 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ array))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_12)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _12\n {\n expr := /** @src -1:-1:-1 */ _11\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr_1 := mload(_1)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, _4), lt(newFreePtr, memPtr_1))\n {\n mstore(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0x24)\n }\n mstore(_1, newFreePtr)\n mstore(memPtr_1, 39)\n mstore(add(memPtr_1, _3), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, _1), \" failed\")\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), value0, dst, mload(array), /** @src -1:-1:-1 */ _11, _11)\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let data := /** @src -1:-1:-1 */ _11\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _13 := returndatasize()\n let memPtr_2 := allocate_memory(array_allocation_size_bytes(_13))\n mstore(memPtr_2, _13)\n data := memPtr_2\n returndatacopy(add(memPtr_2, _3), /** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\"\n pop(fun_verifyCallResultFromTarget(value0, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ memPtr_1))\n }\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _14 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n let _15 := sload(_14)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _16 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(_1)\n mstore(_16, and(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _15, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7))\n let _17 := and(value1, _7)\n mstore(add(_16, _3), _17)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_16, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _17)\n {\n let memPtr_3 := mload(_1)\n mstore(memPtr_3, shl(229, 4594637))\n mstore(add(memPtr_3, 4), _3)\n mstore(add(memPtr_3, 36), 38)\n mstore(add(memPtr_3, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr_3, 100), \"ddress\")\n revert(memPtr_3, 132)\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _14, /** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ or(and(_15, _9), _17))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _18 := mload(_1)\n let _19 := datasize(\"TransparentUpgradeableProxy_1082_deployed\")\n codecopy(_18, dataoffset(\"TransparentUpgradeableProxy_1082_deployed\"), _19)\n return(_18, _19)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 32)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n copy_memory_to_memory_with_cleanup(add(var_errorMessage_mpos, 32), add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68), length)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_target))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"TransparentUpgradeableProxy_1082_deployed\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n mstore(64, 128)\n if iszero(lt(calldatasize(), 4))\n {\n let _1 := 0\n switch shr(224, calldataload(_1))\n case 0x3659cfe6 {\n if callvalue() { revert(_1, _1) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_1, _1) }\n let value0 := abi_decode_address()\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr := allocate_memory_5122()\n mstore(memPtr, _1)\n /// @src 0:30541:30546 \"false\"\n fun_upgradeToAndCall(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ memPtr)\n }\n return(_1, _1)\n }\n case 0x4f1ef286 {\n external_fun_upgradeToAndCall()\n }\n case 0x5c60da1b { external_fun_implementation() }\n case 0x8f283970 { external_fun_changeAdmin() }\n case 0xf851a440 { external_fun_admin() }\n }\n if iszero(calldatasize())\n {\n /// @src 0:24748:24806 \"fallback() external payable virtual {...\"\n fun_fallback()\n }\n fun_fallback()\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function abi_decode_address() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function external_fun_upgradeToAndCall()\n {\n if slt(add(calldatasize(), not(3)), 64)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let offset := calldataload(36)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if iszero(slt(add(offset, 35), calldatasize()))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let length := calldataload(add(4, offset))\n if gt(length, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if gt(add(add(offset, length), 36), calldatasize())\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let array := allocate_memory(array_allocation_size_string(length))\n mstore(array, length)\n calldatacopy(add(array, 32), add(offset, 36), length)\n mstore(add(add(array, length), 32), /** @src -1:-1:-1 */ 0)\n /// @src 0:31029:31077 \"_upgradeToAndCall(newImplementation, data, true)\"\n fun_upgradeToAndCall_3349(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ array)\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_implementation()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29919:29942 \"address implementation_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n function external_fun_changeAdmin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 32)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let _1 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _2 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _3 := sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _4 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n mstore(_4, and(_3, _1))\n let _5 := and(value0, _1)\n mstore(add(_4, 32), _5)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_4, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 64, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _5)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 38)\n mstore(add(memPtr, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr, 100), \"ddress\")\n revert(memPtr, 132)\n }\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(_3, shl(160, 0xffffffffffffffffffffffff)), _5))\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_admin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29380:29394 \"address admin_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _3 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n /// @ast-id 880 @src 0:24461:24561 \"function _fallback() internal virtual {...\"\n function fun_fallback()\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := sub(shl(160, 1), 1)\n if /** @src 0:31409:31434 \"msg.sender != _getAdmin()\" */ eq(/** @src 0:31409:31419 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 66)\n mstore(add(memPtr, 68), \"TransparentUpgradeableProxy: adm\")\n mstore(add(memPtr, 100), \"in cannot fallback to proxy targ\")\n mstore(add(memPtr, 132), \"et\")\n revert(memPtr, 164)\n }\n let _2 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1)\n /// @src 0:23291:24000 \"assembly {...\"\n let _3 := 0\n calldatacopy(_3, _3, calldatasize())\n let usr$result := delegatecall(gas(), _2, _3, calldatasize(), _3, _3)\n returndatacopy(_3, _3, returndatasize())\n switch usr$result\n case 0 { revert(_3, returndatasize()) }\n default { return(_3, returndatasize()) }\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_5122() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 32)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_string(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall_3349(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:31072:31076 \"true\" */ 0x01\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n function copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398() -> memPtr\n {\n let memPtr_1 := mload(64)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr_1, 39)\n memPtr := memPtr_1\n mstore(add(memPtr_1, 32), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, 64), \" failed\")\n }\n /// @ast-id 395 @src 0:11503:11810 \"function functionDelegateCall(...\"\n function fun_functionDelegateCall(var_target, var_data_mpos, var_errorMessage_373_mpos) -> var_376_mpos\n {\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), var_target, add(var_data_mpos, 0x20), mload(var_data_mpos), 0, 0)\n let data := 0\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let memPtr := allocate_memory(array_allocation_size_string(_1))\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ 0x20), 0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11723:11805 \"return...\"\n var_376_mpos := /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ fun_verifyCallResultFromTarget(var_target, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ var_errorMessage_373_mpos)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function require_helper_stringliteral_cc2e(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n let _2 := 32\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n let i := /** @src 0:13281:13282 \"0\" */ 0x00\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n for { } lt(i, length) { i := add(i, _2) }\n {\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ i), 68), mload(add(add(var_errorMessage_mpos, i), _2)))\n }\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ length), 68), /** @src 0:13281:13282 \"0\" */ 0x00)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:12474:12534 \"require(isContract(target), \\\"Address: call to non-contract\\\")\"\n require_helper_stringliteral_cc2e(/** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(/** @src 0:12482:12500 \"isContract(target)\" */ var_target))))\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n data \".metadata\" hex\"a2646970667358221220d8a26ce07e9604f1b4fef919eed2c5ade04b5f04093830e7e2d20653d83fa26f64736f6c63430008150033\"\n }\n}\n","hash":"010001cfcb8d4a4136647d024e21a6ed4207383d3ffddf7dfb8aac303d71d949","factoryDependencies":{}},"Unlock":{"abi":[{"inputs":[],"name":"Unlock__ALREADY_DEPLOYED","type":"error"},{"inputs":[],"name":"Unlock__INVALID_AMOUNT","type":"error"},{"inputs":[],"name":"Unlock__MANAGER_ONLY","type":"error"},{"inputs":[{"internalType":"address","name":"lockAddress","type":"address"}],"name":"Unlock__MISSING_LOCK","type":"error"},{"inputs":[],"name":"Unlock__MISSING_LOCK_TEMPLATE","type":"error"},{"inputs":[],"name":"Unlock__MISSING_PROXY_ADMIN","type":"error"},{"inputs":[],"name":"Unlock__MISSING_TEMPLATE","type":"error"},{"inputs":[],"name":"Unlock__VERSION_TOO_HIGH","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"udt","type":"address"},{"indexed":false,"internalType":"address","name":"weth","type":"address"},{"indexed":false,"internalType":"uint256","name":"estimatedGasForPurchase","type":"uint256"},{"indexed":false,"internalType":"string","name":"globalTokenSymbol","type":"string"},{"indexed":false,"internalType":"string","name":"globalTokenURI","type":"string"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"ConfigUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"grossNetworkProduct","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_valueInETH","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"lockAddress","type":"address"}],"name":"GNPChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lockAddress","type":"address"},{"indexed":false,"internalType":"uint16","name":"version","type":"uint16"}],"name":"LockUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lockOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newLockAddress","type":"address"}],"name":"NewLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"grossNetworkProduct","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalDiscountGranted","type":"uint256"}],"name":"ResetTrackedValue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"publicLockAddress","type":"address"}],"name":"SetLockTemplate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"impl","type":"address"},{"indexed":true,"internalType":"uint16","name":"version","type":"uint16"}],"name":"UnlockTemplateAdded","type":"event"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"__initializeOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"impl","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"addLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"computeAvailableDiscountFor","outputs":[{"internalType":"uint256","name":"discount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_udt","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint256","name":"_estimatedGasForPurchase","type":"uint256"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_URI","type":"string"},{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"configUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirationDuration","type":"uint256"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_keyPrice","type":"uint256"},{"internalType":"uint256","name":"_maxNumberOfKeys","type":"uint256"},{"internalType":"string","name":"_lockName","type":"string"},{"internalType":"bytes12","name":"","type":"bytes12"}],"name":"createLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createUpgradeableLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint16","name":"_lockVersion","type":"uint16"}],"name":"createUpgradeableLockAtVersion","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"estimatedGasForPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalBaseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalTokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grossNetworkProduct","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_unlockOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"locks","outputs":[{"internalType":"bool","name":"deployed","type":"bool"},{"internalType":"uint256","name":"totalSales","type":"uint256"},{"internalType":"uint256","name":"yieldedDiscountTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLockUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyAdminAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"}],"name":"publicLockImpls","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLockLatestVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_impl","type":"address"}],"name":"publicLockVersions","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"recordConsumedDiscount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"recordKeyPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lock","type":"address"}],"name":"removeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_grossNetworkProduct","type":"uint256"},{"internalType":"uint256","name":"_totalDiscountGranted","type":"uint256"}],"name":"resetTrackedValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_publicLockAddress","type":"address"}],"name":"setLockTemplate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_oracleAddress","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protocolFee","type":"uint256"}],"name":"setProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDiscountGranted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"udt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapOracles","outputs":[{"internalType":"contract IUniswapOracleV3","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockVersion","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"lockAddress","type":"address"},{"internalType":"uint16","name":"version","type":"uint16"}],"name":"upgradeLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"metadata":{"optimizer_settings":"M3B3","solc_metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Unlock__ALREADY_DEPLOYED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__INVALID_AMOUNT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MANAGER_ONLY\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lockAddress\",\"type\":\"address\"}],\"name\":\"Unlock__MISSING_LOCK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MISSING_LOCK_TEMPLATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MISSING_PROXY_ADMIN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__MISSING_TEMPLATE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unlock__VERSION_TOO_HIGH\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"udt\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"estimatedGasForPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"globalTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"globalTokenURI\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"ConfigUnlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"grossNetworkProduct\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_valueInETH\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lockAddress\",\"type\":\"address\"}],\"name\":\"GNPChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lockAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"LockUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"lockOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newLockAddress\",\"type\":\"address\"}],\"name\":\"NewLock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"grossNetworkProduct\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDiscountGranted\",\"type\":\"uint256\"}],\"name\":\"ResetTrackedValue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"publicLockAddress\",\"type\":\"address\"}],\"name\":\"SetLockTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"UnlockTemplateAdded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"__initializeOwnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"addLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"computeAvailableDiscountFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"discount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_udt\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_estimatedGasForPurchase\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_URI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_chainId\",\"type\":\"uint256\"}],\"name\":\"configUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_expirationDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_keyPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxNumberOfKeys\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_lockName\",\"type\":\"string\"},{\"internalType\":\"bytes12\",\"name\":\"\",\"type\":\"bytes12\"}],\"name\":\"createLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"createUpgradeableLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"_lockVersion\",\"type\":\"uint16\"}],\"name\":\"createUpgradeableLockAtVersion\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"estimatedGasForPurchase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalBaseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"grossNetworkProduct\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unlockOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"locks\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"deployed\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"totalSales\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"yieldedDiscountTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postLockUpgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxyAdminAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_version\",\"type\":\"uint16\"}],\"name\":\"publicLockImpls\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"publicLockLatestVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_impl\",\"type\":\"address\"}],\"name\":\"publicLockVersions\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"recordConsumedDiscount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_referrer\",\"type\":\"address\"}],\"name\":\"recordKeyPurchase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lock\",\"type\":\"address\"}],\"name\":\"removeLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_grossNetworkProduct\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_totalDiscountGranted\",\"type\":\"uint256\"}],\"name\":\"resetTrackedValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_publicLockAddress\",\"type\":\"address\"}],\"name\":\"setLockTemplate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_oracleAddress\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"}],\"name\":\"setProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalDiscountGranted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"udt\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"uniswapOracles\",\"outputs\":[{\"internalType\":\"contract IUniswapOracleV3\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlockVersion\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"lockAddress\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"}],\"name\":\"upgradeLock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Must list the direct base contracts in the order from \\u201cmost base-like\\u201d to \\u201cmost derived\\u201d. https://solidity.readthedocs.io/en/latest/contracts.html#multiple-inheritance-and-linearization\",\"kind\":\"dev\",\"methods\":{\"__initializeOwnable(address)\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"addLockTemplate(address,uint16)\":{\"details\":\"Registers a new PublicLock template immplementation The template is identified by a version number Once registered, the template can be used to upgrade an existing LockThis will initialize the template and revokeOwnership.\"},\"computeAvailableDiscountFor(address,uint256)\":{\"details\":\"[DEPRECATED] Kept for backwards compatibility\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"details\":\"internally call `createUpgradeableLock`\",\"params\":{\"_expirationDuration\":\"the duration of the lock (pass type(uint).max for unlimited duration)\",\"_keyPrice\":\"the price of each key\",\"_lockName\":\"the name of the lock param _salt [deprec] -- kept only for backwards copatibility This may be implemented as a sequence ID or with RNG. It's used with `create2` to know the lock's address before the transaction is mined.\",\"_maxNumberOfKeys\":\"the maximum nimbers of keys to be edited\",\"_tokenAddress\":\"set to the ERC20 token address, or 0 for ETH.\"}},\"createUpgradeableLock(bytes)\":{\"details\":\"this call is passed as encoded function - for instance: bytes memory data = abi.encodeWithSignature( 'initialize(address,uint256,address,uint256,uint256,string)', msg.sender, _expirationDuration, _tokenAddress, _keyPrice, _maxNumberOfKeys, _lockName );\",\"params\":{\"data\":\"bytes containing the call to initialize the lock template\"},\"returns\":{\"_0\":\"address of the create lock\"}},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"params\":{\"_lockVersion\":\"the version of the lock to use\",\"data\":\"bytes containing the call to initialize the lock template (refer to createUpgradeableLock for more details)\"}},\"getGlobalBaseTokenURI()\":{\"details\":\"Redundant with globalBaseTokenURI() for backwards compatibility with v3 & v4 locks.\"},\"getGlobalTokenSymbol()\":{\"details\":\"Redundant with globalTokenSymbol() for backwards compatibility with v3 & v4 locks.\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"networkBaseFee()\":{\"details\":\"this helper can be wrapped in try/catch statement to avoid revert in networks where EIP-1559 is not implemented\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"publicLockImpls(uint16)\":{\"details\":\"Helper to get the address of a template based on its version number\"},\"publicLockVersions(address)\":{\"details\":\"Helper to get the version number of a template from his address\"},\"recordConsumedDiscount(uint256,uint256)\":{\"details\":\"[DEPRECATED] only Kept for backwards compatibility\"},\"removeLock(address)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"lock\":\"address of the lock to remove\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setOracle(address,address)\":{\"details\":\"This will also call update to ensure at least one datapoint has been recorded.\"},\"setProtocolFee(uint256)\":{\"params\":{\"_protocolFee\":\"fee in basic point\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferTokens(address,address,uint256)\":{\"details\":\"This function is onlyOwner\",\"params\":{\"amount\":\"the amount of tokens to transfer\",\"to\":\"the address to transfer the tokens to\",\"token\":\"the address of the token to transfer (pass the 0x0 address for the base currency)\"}},\"upgradeLock(address,uint16)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade a Lock template implementation\",\"params\":{\"lockAddress\":\"the address of the lock to be upgraded\",\"version\":\"the version number of the template\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeAvailableDiscountFor(address,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"configUnlock(address,address,uint256,string,string,uint256)\":{\"notice\":\"Allows the owner to update configuration variables\"},\"createLock(uint256,address,uint256,uint256,string,bytes12)\":{\"notice\":\"Create lock (legacy) This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLock(bytes)\":{\"notice\":\"Create upgradeable lock This deploys a lock for a creator. It also keeps track of the deployed lock.\"},\"createUpgradeableLockAtVersion(bytes,uint16)\":{\"notice\":\"Create an upgradeable lock using a specific PublicLock version\"},\"networkBaseFee()\":{\"notice\":\"Helper to get the network mining basefee as introduced in EIP-1559\"},\"recordConsumedDiscount(uint256,uint256)\":{\"notice\":\"[DEPRECATED] Call to this function has been removed from PublicLock > v9.\"},\"recordKeyPurchase(uint256,address)\":{\"notice\":\"This function keeps track of the added GDP, as well as grants of discount tokens to the referrer, if applicable. The number of discount tokens granted is based on the value of the referal, the current growth rate and the lock's discount token distribution rate This function is invoked by a previously deployed lock only.\"},\"removeLock(address)\":{\"notice\":\"Removes a lock from the list of locks. This will prevent the lock from being able to receive governance tokens. The lock will still be able to sell its memberships.\"},\"setLockTemplate(address)\":{\"notice\":\"Set the default PublicLock template to use when creating locks\"},\"setOracle(address,address)\":{\"notice\":\"allows the owner to set the oracle address to use for value conversions setting the _oracleAddress to address(0) removes support for the token\"},\"setProtocolFee(uint256)\":{\"notice\":\"Set the fee used by the protocol\"},\"transferTokens(address,address,uint256)\":{\"notice\":\"Functions which transfers tokens held by the contract It handles both ERC20 and the base currency.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"Unlock\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","zk_version":"1.3.18"},"storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2654,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":2663,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":2783,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"______gap","offset":0,"slot":"52","type":"t_array(t_uint256)50_storage"},{"astId":2813,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"grossNetworkProduct","offset":0,"slot":"102","type":"t_uint256"},{"astId":2815,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"totalDiscountGranted","offset":0,"slot":"103","type":"t_uint256"},{"astId":2820,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"locks","offset":0,"slot":"104","type":"t_mapping(t_address,t_struct(LockBalances)2798_storage)"},{"astId":2822,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"globalBaseTokenURI","offset":0,"slot":"105","type":"t_string_storage"},{"astId":2824,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"globalTokenSymbol","offset":0,"slot":"106","type":"t_string_storage"},{"astId":2826,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"publicLockAddress","offset":0,"slot":"107","type":"t_address"},{"astId":2831,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"uniswapOracles","offset":0,"slot":"108","type":"t_mapping(t_address,t_contract(IUniswapOracleV3)1948)"},{"astId":2833,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"weth","offset":0,"slot":"109","type":"t_address"},{"astId":2835,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"udt","offset":0,"slot":"110","type":"t_address"},{"astId":2837,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"estimatedGasForPurchase","offset":0,"slot":"111","type":"t_uint256"},{"astId":2839,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"chainId","offset":0,"slot":"112","type":"t_uint256"},{"astId":2841,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"proxyAdminAddress","offset":0,"slot":"113","type":"t_address"},{"astId":2844,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"proxyAdmin","offset":0,"slot":"114","type":"t_contract(ProxyAdmin)1215"},{"astId":2848,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"_publicLockVersions","offset":0,"slot":"115","type":"t_mapping(t_address,t_uint16)"},{"astId":2852,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"_publicLockImpls","offset":0,"slot":"116","type":"t_mapping(t_uint16,t_address)"},{"astId":2854,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"publicLockLatestVersion","offset":0,"slot":"117","type":"t_uint16"},{"astId":2856,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"protocolFee","offset":0,"slot":"118","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IUniswapOracleV3)1948":{"encoding":"inplace","label":"contract IUniswapOracleV3","numberOfBytes":"20"},"t_contract(ProxyAdmin)1215":{"encoding":"inplace","label":"contract ProxyAdmin","numberOfBytes":"20"},"t_mapping(t_address,t_contract(IUniswapOracleV3)1948)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract IUniswapOracleV3)","numberOfBytes":"32","value":"t_contract(IUniswapOracleV3)1948"},"t_mapping(t_address,t_struct(LockBalances)2798_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct Unlock.LockBalances)","numberOfBytes":"32","value":"t_struct(LockBalances)2798_storage"},"t_mapping(t_address,t_uint16)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint16)","numberOfBytes":"32","value":"t_uint16"},"t_mapping(t_uint16,t_address)":{"encoding":"mapping","key":"t_uint16","label":"mapping(uint16 => address)","numberOfBytes":"32","value":"t_address"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(LockBalances)2798_storage":{"encoding":"inplace","label":"struct Unlock.LockBalances","members":[{"astId":2793,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"deployed","offset":0,"slot":"0","type":"t_bool"},{"astId":2795,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"totalSales","offset":0,"slot":"1","type":"t_uint256"},{"astId":2797,"contract":"contracts/past-versions/UnlockV12.sol:Unlock","label":"yieldedDiscountTokens","offset":0,"slot":"2","type":"t_uint256"}],"numberOfBytes":"96"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"evm":{"legacyAssembly":null,"assembly":"\t.text\n\t.file\t\"UnlockV12.sol:Unlock\"\n\t.globl\t__entry\n__entry:\n.func_begin0:\n\tnop\tstack+=[12]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r3, stack[@ptr_return_data]\n\tptr.add\tr1, r0, stack[@ptr_calldata]\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_1\n\tadd\t128, r0, r2\n\tst.1\t64, r2\n\tsub.s!\t4, r3, r2\n\tjump.lt\t@.BB0_64\n\tld\tr1, r2\n\tshr.s\t224, r2, r2\n\tsub.s!\t@CPI0_4[0], r2, r4\n\tjump.gt\t@.BB0_35\n\tsub.s!\t@CPI0_34[0], r2, r4\n\tjump.gt\t@.BB0_21\n\tsub.s!\t@CPI0_49[0], r2, r4\n\tjump.le\t@.BB0_8\n\tsub.s!\t@CPI0_50[0], r2, r4\n\tjump.gt\t@.BB0_18\n\tsub.s!\t@CPI0_54[0], r2, r4\n\tjump.eq\t@.BB0_81\n\tsub.s!\t@CPI0_55[0], r2, r4\n\tjump.eq\t@.BB0_83\n\tsub.s!\t@CPI0_56[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t192, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r5\n\tsub.s!\t@CPI0_63[0], r5, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t132, r1, r2\n\tld\tr2, r4\n\tsub.s!\t@CPI0_78[0], r4, r2\n\tjump.gt\t@.BB0_2\n\tadd\t35, r4, r2\n\tadd\t@CPI0_127[0], r0, r6\n\tsub!\tr2, r3, r7\n\tadd\tr0, r0, r7\n\tadd.ge\tr6, r0, r7\n\tand\t@CPI0_127[0], r2, r2\n\tsub!\tr2, r0, r8\n\tadd.ge\tr0, r0, r6\n\tsub.s!\t@CPI0_127[0], r2, r2\n\tadd.ne\tr7, r0, r6\n\tsub!\tr6, r0, r2\n\tjump.ne\t@.BB0_2\n\tadd\t4, r4, r2\n\tptr.add\tr1, r2, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_78[0], r2, r6\n\tjump.gt\t@.BB0_2\n\tadd\t36, r4, r4\n\tadd\tr2, r4, r6\n\tsub!\tr6, r3, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t164, r1, r3\n\tld\tr3, r3\n\tand\t@CPI0_65[0], r3, r6\n\tsub!\tr3, r6, r3\n\tjump.ne\t@.BB0_2\n\tadd\t@CPI0_102[0], r0, r3\n\tst.1\t160, r3\n\tcontext.caller\tr3\n\tst.1\t164, r3\n\tptr.add.s\t4, r1, r3\n\tld\tr3, r3\n\tst.1\t196, r3\n\tst.1\t228, r5\n\tptr.add.s\t68, r1, r3\n\tld\tr3, r3\n\tst.1\t260, r3\n\tptr.add.s\t100, r1, r1\n\tld\tr1, r1\n\tst.1\t292, r1\n\tadd\t192, r0, r1\n\tst.1\t324, r1\n\tadd\t356, r0, r3\n\tadd\tr4, r0, r1\n\tnear_call\tr0, @abi_encode_string_calldata, @DEFAULT_UNWIND\n\tsub.s\t160, r1, r2\n\tst.1\t128, r2\n\tsub.s\t128, r1, r2\n\tadd\t128, r0, r1\n\tadd\tr1, r0, stack-[9]\n\tnear_call\tr0, @finalize_allocation, @DEFAULT_UNWIND\n\tadd\t117, r0, r1\n\tsload\tr1, r1\n\tand\t65535, r1, r2\n\tadd\tstack-[9], r0, r1\n\tjump\t@.BB0_114\n.BB0_1:\n\tadd\t128, r0, r1\n\tst.1\t64, r1\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32, r0, r1\n\tst.2\t256, r1\n\tst.2\t288, r0\n\tadd\t@CPI0_1[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_64:\n\tsub!\tr3, r0, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_2[0], r0, r1\n.BB0_471:\n\tst.1\t128, r1\n\tadd\t@CPI0_3[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_35:\n\tsub.s!\t@CPI0_5[0], r2, r4\n\tjump.gt\t@.BB0_50\n\tsub.s!\t@CPI0_20[0], r2, r4\n\tjump.le\t@.BB0_37\n\tsub.s!\t@CPI0_21[0], r2, r4\n\tjump.gt\t@.BB0_47\n\tsub.s!\t@CPI0_25[0], r2, r4\n\tjump.eq\t@.BB0_390\n\tsub.s!\t@CPI0_26[0], r2, r4\n\tjump.eq\t@.BB0_392\n\tsub.s!\t@CPI0_27[0], r2, r1\n\tjump.eq\t@.BB0_223\n\tjump\t@.BB0_2\n.BB0_21:\n\tsub.s!\t@CPI0_35[0], r2, r4\n\tjump.le\t@.BB0_22\n\tsub.s!\t@CPI0_36[0], r2, r4\n\tjump.gt\t@.BB0_32\n\tsub.s!\t@CPI0_40[0], r2, r1\n\tjump.eq\t@.BB0_156\n\tsub.s!\t@CPI0_41[0], r2, r1\n\tjump.eq\t@.BB0_158\n\tsub.s!\t@CPI0_42[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t111, r0, r1\n\tjump\t@.BB0_164\n.BB0_50:\n\tsub.s!\t@CPI0_6[0], r2, r4\n\tjump.le\t@.BB0_51\n\tsub.s!\t@CPI0_7[0], r2, r4\n\tjump.gt\t@.BB0_61\n\tsub.s!\t@CPI0_11[0], r2, r1\n\tjump.eq\t@.BB0_76\n\tsub.s!\t@CPI0_12[0], r2, r1\n\tjump.eq\t@.BB0_570\n\tsub.s!\t@CPI0_13[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tcontext.caller\tr1\n\tadd\tr1, r0, stack-[9]\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tadd\tr1, r0, stack-[8]\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t255, r1, r1\n\tjump.ne\t@.BB0_133\n\tld.1\t64, r10\n\tadd\t@CPI0_77[0], r0, r1\n\tst.1\tr10, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_578\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_588\n.BB0_8:\n\tsub.s!\t@CPI0_57[0], r2, r4\n\tjump.le\t@.BB0_9\n\tsub.s!\t@CPI0_58[0], r2, r1\n\tjump.eq\t@.BB0_73\n\tsub.s!\t@CPI0_59[0], r2, r1\n\tjump.eq\t@.BB0_76\n\tsub.s!\t@CPI0_60[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\tr3, r0, r1\n\tnear_call\tr0, @abi_decode_uint256t_uint256, @DEFAULT_UNWIND\n\tcontext.caller\tr1\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tsload\tr1, r1\n\tand\t255, r1, r1\n\tnear_call\tr0, @require_helper_stringliteral_2f7a, @DEFAULT_UNWIND\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_37:\n\tsub.s!\t@CPI0_28[0], r2, r4\n\tjump.le\t@.BB0_38\n\tsub.s!\t@CPI0_29[0], r2, r4\n\tjump.eq\t@.BB0_229\n\tsub.s!\t@CPI0_30[0], r2, r4\n\tjump.eq\t@.BB0_384\n\tsub.s!\t@CPI0_31[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t112, r0, r1\n\tjump\t@.BB0_164\n.BB0_22:\n\tsub.s!\t@CPI0_43[0], r2, r4\n\tjump.le\t@.BB0_23\n\tsub.s!\t@CPI0_44[0], r2, r4\n\tjump.eq\t@.BB0_143\n\tsub.s!\t@CPI0_45[0], r2, r4\n\tjump.eq\t@.BB0_147\n\tsub.s!\t@CPI0_46[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tjump\t@.BB0_151\n.BB0_51:\n\tsub.s!\t@CPI0_14[0], r2, r4\n\tjump.le\t@.BB0_52\n\tsub.s!\t@CPI0_15[0], r2, r4\n\tjump.eq\t@.BB0_473\n\tsub.s!\t@CPI0_16[0], r2, r4\n\tjump.eq\t@.BB0_501\n\tsub.s!\t@CPI0_17[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t117, r0, r1\n\tjump\t@.BB0_569\n.BB0_18:\n\tsub.s!\t@CPI0_51[0], r2, r4\n\tjump.eq\t@.BB0_95\n\tsub.s!\t@CPI0_52[0], r2, r4\n\tjump.eq\t@.BB0_99\n\tsub.s!\t@CPI0_53[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.eq\t1, r0, r1\n\tnear_call\tr0, @require_helper_stringliteral_ed52, @DEFAULT_UNWIND\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tsstore\tr1, r0\n\tadd\t1, r1, r2\n\tsstore\tr2, r0\n\tadd\t2, r1, r1\n\tsstore\tr1, r0\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_47:\n\tsub.s!\t@CPI0_22[0], r2, r4\n\tjump.eq\t@.BB0_423\n\tsub.s!\t@CPI0_23[0], r2, r1\n\tjump.eq\t@.BB0_435\n\tsub.s!\t@CPI0_24[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t32779, r0, r1\n\tadd\t4, r0, r3\n\tcontext.sp\tr4\n\tsub.s\t12, r4, r4\n\tmul\t32, r4, r4, r0\n\tadd\t@CPI0_112[0], r0, r2\n\tnear_call\tr0, @__system_request, @DEFAULT_UNWIND\n\tjump\t@.BB0_85\n.BB0_32:\n\tsub.s!\t@CPI0_37[0], r2, r4\n\tjump.eq\t@.BB0_165\n\tsub.s!\t@CPI0_38[0], r2, r4\n\tjump.eq\t@.BB0_168\n\tsub.s!\t@CPI0_39[0], r2, r1\n\tjump.ne\t@.BB0_2\n.BB0_223:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tnear_call\tr0, @copy_array_from_storage_to_memory_string_27022, @DEFAULT_UNWIND\n\tjump\t@.BB0_78\n.BB0_61:\n\tsub.s!\t@CPI0_8[0], r2, r4\n\tjump.eq\t@.BB0_629\n\tsub.s!\t@CPI0_9[0], r2, r4\n\tjump.eq\t@.BB0_638\n\tsub.s!\t@CPI0_10[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t107, r0, r1\n\tjump\t@.BB0_75\n.BB0_9:\n\tsub.s!\t@CPI0_61[0], r2, r4\n\tjump.eq\t@.BB0_65\n\tsub.s!\t@CPI0_62[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t115, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n.BB0_569:\n\tsload\tr1, r1\n\tand\t65535, r1, r1\n\tjump\t@.BB0_85\n.BB0_38:\n\tsub.s!\t@CPI0_32[0], r2, r1\n\tjump.eq\t@.BB0_225\n\tsub.s!\t@CPI0_33[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.eq\t1, r0, r1\n\tjump\t@.BB0_85\n.BB0_23:\n\tsub.s!\t@CPI0_47[0], r2, r4\n\tjump.eq\t@.BB0_119\n\tsub.s!\t@CPI0_48[0], r2, r2\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tadd\tr2, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r2, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tor\tstack-[8], r2, r2\n\tsstore\tr1, r2\n\tsub!\tstack-[8], r0, r1\n\tjump.eq\t@.BB0_133\n\tadd\t109, r0, r1\n\tsload\tr1, r1\n\tadd\tr1, r0, stack-[7]\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r3\n\tand\t@CPI0_63[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r2\n\tadd\t36, r2, r1\n\tst.1\tr1, r3\n\tadd\t@CPI0_137[0], r0, r1\n\tst.1\tr2, r1\n\tadd\tr2, r0, stack-[7]\n\tadd\t4, r2, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[8], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_141\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_93[0], r1, r1\n\tadd\tstack-[8], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_136\n.BB0_141:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r1\n\tst.1\t64, r1\n\tjump\t@.BB0_133\n.BB0_52:\n\tsub.s!\t@CPI0_18[0], r2, r4\n\tjump.eq\t@.BB0_439\n\tsub.s!\t@CPI0_19[0], r2, r1\n\tjump.ne\t@.BB0_2\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\t113, r0, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r1\n\tjump.ne\t@.BB0_470\n\tnear_call\tr0, @fun_deployProxyAdmin, @DEFAULT_UNWIND\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_76:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tnear_call\tr0, @copy_array_from_storage_to_memory_string, @DEFAULT_UNWIND\n.BB0_78:\n\tadd\t32, r0, r2\n\tld.1\t64, r3\n\tadd\tr3, r0, stack-[9]\n\tst.1.inc\tr3, r2, r2\n\tnear_call\tr0, @abi_encode_string, @DEFAULT_UNWIND\n\tadd\tstack-[9], r0, r4\n\tsub\tr1, r4, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.ge\tr2, r0, r4\n\tshl.s\t64, r4, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_83:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t12, r0, r1\n\tjump\t@.BB0_85\n.BB0_392:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t96, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_63[0], r2, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r3\n\tld\tr3, r4\n\tsub.s!\t@CPI0_63[0], r4, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t68, r1, r1\n\tld\tr1, r3\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr5\n\tsub!\tr5, r1, r1\n\tjump.ne\t@.BB0_126\n\tsub!\tr2, r0, r1\n\tjump.ne\t@.BB0_408\n\tsub.s!\t4, r4, r1\n\tjump.eq\t@.BB0_133\n\tadd\t@CPI0_116[0], r0, r1\n\tsub!\tr3, r0, r2\n\tadd.ne\tr0, r0, r1\n\tjump.ne\t@.BB0_402\n\tadd\tr4, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tjump\t@.BB0_400\n.BB0_158:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_63[0], r2, r5\n\tcontext.caller\tr3\n\tsub!\tr3, r5, r3\n\tjump.ne\t@.BB0_126\n\tand\t@CPI0_65[0], r2, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tadd\tr0, r0, r6\n\tjump\t@.BB0_161\n.BB0_570:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t102, r0, r1\n\tjump\t@.BB0_164\n.BB0_99:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r4\n\tsub.s!\t@CPI0_78[0], r4, r2\n\tjump.gt\t@.BB0_2\n\tadd\t35, r4, r2\n\tsub!\tr2, r3, r2\n\tjump.ge\t@.BB0_2\n\tadd\t4, r4, r5\n\tptr.add\tr1, r5, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_138[0], r2, r6\n\tjump.ge\t@.BB0_104\n\tadd\t191, r2, r6\n\tsub.s\t32, r0, r7\n\tand\tr6, r7, r6\n\tsub.s!\t@CPI0_78[0], r6, r7\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r6\n\tst.1\t128, r2\n\tadd\tr4, r2, r4\n\tadd\t36, r4, r4\n\tsub!\tr4, r3, r3\n\tjump.gt\t@.BB0_2\n\tadd\t32, r5, r3\n\tptr.add\tr1, r3, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB0_649\n\tadd\tr0, r0, r6\n.BB0_110:\n\tshl.s\t5, r6, r7\n\tptr.add\tr3, r7, r8\n\tld\tr8, r8\n\tadd\t160, r7, r7\n\tst.1\tr7, r8\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_110\n.BB0_649:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_112\n\tshl.s\t5, r5, r5\n\tptr.add\tr3, r5, r3\n\tshl.s\t3, r4, r4\n\tadd\t160, r5, r5\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr3, r3\n\tsub\t256, r4, r4\n\tshr\tr3, r4, r3\n\tshl\tr3, r4, r3\n\tor\tr3, r6, r3\n\tst.1\tr5, r3\n.BB0_112:\n\tadd\t160, r2, r2\n\tst.1\tr2, r0\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r2\n\tsub.s!\t65535, r2, r1\n\tjump.gt\t@.BB0_2\n\tadd\t128, r0, r1\n\tjump\t@.BB0_114\n.BB0_435:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t118, r0, r1\n\tjump\t@.BB0_164\n.BB0_168:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t192, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r5\n\tsub.s!\t@CPI0_63[0], r5, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r6\n\tsub.s!\t@CPI0_63[0], r6, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t68, r1, r2\n\tld\tr2, r7\n\tptr.add.s\t100, r1, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_78[0], r2, r4\n\tjump.gt\t@.BB0_2\n\tadd\t35, r2, r4\n\tadd\t@CPI0_127[0], r0, r8\n\tsub!\tr4, r3, r9\n\tadd\tr0, r0, r9\n\tadd.ge\tr8, r0, r9\n\tand\t@CPI0_127[0], r4, r4\n\tsub!\tr4, r0, r10\n\tadd.ge\tr0, r0, r8\n\tsub.s!\t@CPI0_127[0], r4, r4\n\tadd.ne\tr9, r0, r8\n\tsub!\tr8, r0, r4\n\tjump.ne\t@.BB0_2\n\tadd\t4, r2, r4\n\tptr.add\tr1, r4, r4\n\tld\tr4, r4\n\tsub.s!\t@CPI0_78[0], r4, r8\n\tjump.gt\t@.BB0_2\n\tadd\t36, r2, r8\n\tadd\tr4, r8, r2\n\tsub!\tr2, r3, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t132, r1, r2\n\tld\tr2, r9\n\tsub.s!\t@CPI0_78[0], r9, r2\n\tjump.gt\t@.BB0_2\n\tadd\t35, r9, r2\n\tadd\t@CPI0_127[0], r0, r10\n\tsub!\tr2, r3, r11\n\tadd\tr0, r0, r11\n\tadd.ge\tr10, r0, r11\n\tand\t@CPI0_127[0], r2, r2\n\tsub!\tr2, r0, r12\n\tadd.ge\tr0, r0, r10\n\tsub.s!\t@CPI0_127[0], r2, r2\n\tadd.ne\tr11, r0, r10\n\tsub!\tr10, r0, r2\n\tjump.ne\t@.BB0_2\n\tadd\t4, r9, r2\n\tptr.add\tr1, r2, r2\n\tld\tr2, r2\n\tsub.s!\t@CPI0_78[0], r2, r10\n\tjump.gt\t@.BB0_2\n\tadd\t36, r9, r9\n\tadd\tr2, r9, r10\n\tsub!\tr10, r3, r3\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t164, r1, r3\n\tld\tr3, r3\n\tadd\t51, r0, r10\n\tsload\tr10, r10\n\tand\t@CPI0_63[0], r10, r10\n\tcontext.caller\tr11\n\tsub!\tr11, r10, r10\n\tjump.ne\t@.BB0_126\n\tadd\t110, r0, r10\n\tsload\tr10, r11\n\tand\t@CPI0_65[0], r11, r11\n\tor\tr11, r5, r11\n\tsstore\tr10, r11\n\tadd\t109, r0, r10\n\tsload\tr10, r11\n\tand\t@CPI0_65[0], r11, r11\n\tor\tr11, r6, r11\n\tsstore\tr10, r11\n\tadd\t111, r0, r10\n\tsstore\tr10, r7\n\tadd\t106, r0, r10\n\tsload\tr10, r11\n\tand!\t1, r11, r12\n\tshr.s\t1, r11, r13\n\tand\t127, r13, r11\n\tadd.ne\tr13, r0, r11\n\tsub.s!\t31, r11, r13\n\tadd\t0, r0, r13\n\tadd.gt\t1, r0, r13\n\tand\t1, r13, r13\n\tsub!\tr12, r13, r12\n\tjump.ne\t@.BB0_182\n\tsub.s!\t32, r11, r12\n\tjump.lt\t@.BB0_186\n\tadd\t31, r4, r12\n\tshr.s\t5, r12, r12\n\tadd\t@CPI0_130[0], r12, r13\n\tadd\t@CPI0_130[0], r0, r12\n\tsub.s!\t32, r4, r14\n\tadd.ge\tr13, r0, r12\n\tst.1\t0, r10\n\tadd\t31, r11, r11\n\tshr.s\t5, r11, r11\n\tadd\t@CPI0_130[0], r11, r11\n\tsub!\tr12, r11, r13\n\tjump.ge\t@.BB0_186\n.BB0_187:\n\tsstore\tr12, r0\n\tadd\t1, r12, r12\n\tsub!\tr12, r11, r13\n\tjump.lt\t@.BB0_187\n.BB0_186:\n\tsub.s!\t31, r4, r11\n\tjump.le\t@.BB0_195\n\tst.1\t0, r10\n\tsub.s\t32, r0, r11\n\tand!\tr4, r11, r13\n\tadd\t@CPI0_130[0], r0, r11\n\tadd\tr0, r0, r12\n\tjump.eq\t@.BB0_192\n\tadd\t@CPI0_130[0], r0, r11\n\tadd\tr0, r0, r12\n.BB0_190:\n\tadd\tr12, r8, r14\n\tptr.add\tr1, r14, r14\n\tld\tr14, r14\n\tsstore\tr11, r14\n\tadd\t1, r11, r11\n\tadd\t32, r12, r12\n\tsub!\tr12, r13, r14\n\tjump.lt\t@.BB0_190\n.BB0_192:\n\tsub!\tr13, r4, r13\n\tjump.ge\t@.BB0_194\n\tshl.s\t3, r4, r13\n\tand\t248, r13, r13\n\tsub.s\t1, r0, r14\n\tshr\tr14, r13, r13\n\txor\tr13, r14, r13\n\tadd\tr12, r8, r12\n\tptr.add\tr1, r12, r12\n\tld\tr12, r12\n\tand\tr12, r13, r12\n\tsstore\tr11, r12\n.BB0_194:\n\tshl.s\t1, r4, r11\n\tor\t1, r11, r11\n\tjump\t@.BB0_198\n.BB0_638:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r6\n\tsub.s!\t@CPI0_63[0], r6, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_63[0], r2, r5\n\tcontext.caller\tr3\n\tsub!\tr3, r5, r3\n\tjump.ne\t@.BB0_126\n\tsub!\tr6, r0, r3\n\tjump.ne\t@.BB0_644\n\tadd\t@CPI0_68[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t13, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_69[0], r0, r1\n\tjump\t@.BB0_127\n.BB0_65:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tst.1\t128, r0\n\tst.1\t160, r0\n\tadd\t@CPI0_139[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_225:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t51, r0, r1\n\tjump\t@.BB0_75\n.BB0_119:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t113, r0, r1\n\tjump\t@.BB0_75\n.BB0_439:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand!\t65280, r1, stack-[8]\n\tjump.ne\t@.BB0_446\n\tand!\t255, r1, r2\n\tjump.ne\t@.BB0_429\n\tand\t@CPI0_72[0], r1, r1\n\tor\t257, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_448\n.BB0_384:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tadd\t51, r0, r2\n\tsload\tr2, r2\n\tand\t@CPI0_63[0], r2, r2\n\tcontext.caller\tr3\n\tsub!\tr3, r2, r2\n\tjump.ne\t@.BB0_126\n\tptr.add.s\t36, r1, r2\n\tld\tr2, r2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\t102, r0, r3\n\tsstore\tr3, r1\n\tadd\t103, r0, r3\n\tsstore\tr3, r2\n\tst.1\t128, r1\n\tst.1\t160, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_117[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_118[0], r0, r4\n.BB0_161:\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n.BB0_133:\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_147:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t65535, r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t116, r0, r1\n.BB0_151:\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tjump\t@.BB0_75\n.BB0_501:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tand\t@CPI0_63[0], r2, stack-[9]\n\tsub.s!\t@CPI0_63[0], r2, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t65535, r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t113, r0, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r1\n\tjump.ne\t@.BB0_507\n\tadd\t@CPI0_101[0], r0, r1\n\tjump\t@.BB0_471\n.BB0_81:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t109, r0, r1\n\tjump\t@.BB0_75\n.BB0_390:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t103, r0, r1\n.BB0_164:\n\tsload\tr1, r1\n\tjump\t@.BB0_85\n.BB0_156:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t@CPI0_134[0], r0, r1\n\tjump\t@.BB0_75\n.BB0_95:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tadd\t4, r1, r1\n\tadd\tr3, r0, r2\n\tnear_call\tr0, @abi_decode_bytes, @DEFAULT_UNWIND\n\tadd\t117, r0, r2\n\tsload\tr2, r2\n\tand\t65535, r2, r2\n.BB0_114:\n\tnear_call\tr0, @fun_createUpgradeableLockAtVersion, @DEFAULT_UNWIND\n\tand\t@CPI0_63[0], r1, r1\n\tld.1\t64, r2\n\tst.1\tr2, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tor\t@CPI0_98[0], r1, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_423:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tsload\tr0, r1\n\tand!\t65280, r1, stack-[8]\n\tjump.ne\t@.BB0_430\n\tand!\t255, r1, r2\n\tjump.ne\t@.BB0_429\n\tand\t@CPI0_72[0], r1, r1\n\tor\t257, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_432\n.BB0_165:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r1\n\tsub.s!\t32, r1, r1\n\tjump.lt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.eq\t1, r0, r1\n\tnear_call\tr0, @require_helper_stringliteral_ed52, @DEFAULT_UNWIND\n\tadd\t4, r0, r1\n\tptr.add\tstack[@ptr_calldata], r1, r1\n\tld\tr1, r1\n\tadd\t118, r0, r2\n\tsstore\tr2, r1\n\tadd\tr0, r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_629:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t115, r0, r1\n\tadd\tr1, r0, stack-[8]\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t65535, r1, r1\n\tjump.ne\t@.BB0_636\n\tld.1\t64, r1\n\tadd\t@CPI0_75[0], r0, r2\n.BB0_544:\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n.BB0_540:\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_76[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_73:\n\tcontext.get_context_u128\tr1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_2\n\tadd\t110, r0, r1\n.BB0_75:\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n.BB0_85:\n\tst.1\t128, r1\n\tadd\t@CPI0_64[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_229:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tadd\tr2, r0, stack-[9]\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tcontext.caller\tr1\n\tadd\tr1, r0, stack-[7]\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tadd\tr1, r0, stack-[6]\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t255, r1, r1\n\tjump.ne\t@.BB0_236\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_129[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t10, r0, r3\n\tjump\t@.BB0_235\n.BB0_143:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t32, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r1\n\tld\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tst.1\t0, r1\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t64, r0, r2\n\tadd\tr0, r0, r1\n\tnear_call\tr0, @__sha3, @DEFAULT_UNWIND\n\tadd\t2, r1, r2\n\tsload\tr2, r2\n\tadd\t1, r1, r3\n\tsload\tr3, r3\n\tsload\tr1, r1\n\tand!\t255, r1, r1\n\tadd\t0, r0, r1\n\tadd.ne\t1, r0, r1\n\tst.1\t128, r1\n\tst.1\t160, r3\n\tst.1\t192, r2\n\tadd\t@CPI0_135[0], r0, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_473:\n\tcontext.get_context_u128\tr2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_2\n\tsub.s\t4, r3, r2\n\tsub.s!\t64, r2, r2\n\tjump.lt\t@.BB0_2\n\tptr.add.s\t4, r1, r2\n\tld\tr2, r2\n\tadd\tr2, r0, stack-[9]\n\tsub.s!\t@CPI0_63[0], r2, r2\n\tjump.gt\t@.BB0_2\n\tptr.add.s\t36, r1, r1\n\tld\tr1, r1\n\tadd\tr1, r0, stack-[8]\n\tsub.s!\t65535, r1, r1\n\tjump.gt\t@.BB0_2\n\tadd\t51, r0, r1\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tcontext.caller\tr2\n\tsub!\tr2, r1, r1\n\tjump.ne\t@.BB0_126\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[9], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r4\n\tadd\t164, r4, r1\n\tadd\t192, r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_102[0], r0, r1\n\tst.1\tr4, r1\n\tadd\t4, r4, r1\n\tcontext.this\tr2\n\tst.1\tr1, r2\n\tadd\t196, r4, r1\n\tst.1\tr1, r0\n\tadd\t132, r4, r1\n\tst.1\tr1, r0\n\tadd\t100, r4, r1\n\tst.1\tr1, r0\n\tadd\t68, r4, r1\n\tst.1\tr1, r0\n\tadd\t36, r4, r1\n\tst.1\tr1, r0\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_487\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_103[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tadd\tr4, r0, stack-[7]\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r4\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_482\n.BB0_487:\n\tadd\tr4, r0, r2\n\tsub.s!\t@CPI0_78[0], r4, r1\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r2\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[9], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r2\n\tadd\t@CPI0_104[0], r0, r1\n\tadd\tr2, r0, stack-[7]\n\tst.1\tr2, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_497\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_492\n.BB0_497:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r1\n\tst.1\t64, r1\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\t115, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tand\t@CPI0_72[0], r2, r2\n\tadd\tstack-[8], r0, r3\n\tor\tr2, r3, r2\n\tsstore\tr1, r2\n\tst.1\t0, r3\n\tadd\t116, r0, r1\n\tst.1\t32, r1\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\t@CPI0_0[0], r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r5\n\tor\tr2, r5, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_105[0], r0, r4\n\tadd\tstack-[8], r0, r6\n\tjump\t@.BB0_161\n.BB0_126:\n\tadd\t@CPI0_68[0], r0, r1\n\tst.1\t128, r1\n\tadd\t32, r0, r1\n\tst.1\t132, r1\n\tadd\t10, r0, r1\n\tst.1\t164, r1\n\tadd\t@CPI0_136[0], r0, r1\n.BB0_127:\n\tst.1\t196, r1\n\tadd\t@CPI0_70[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_470:\n\tadd\t@CPI0_106[0], r0, r1\n\tjump\t@.BB0_471\n.BB0_446:\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tcontext.this\tr1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_429\n\tsload\tr0, r1\n.BB0_448:\n\tand!\t65280, r1, stack-[7]\n\tjump.ne\t@.BB0_451\n\tand!\t255, r1, r2\n\tjump.ne\t@.BB0_429\n\tand\t@CPI0_72[0], r1, r1\n\tor\t257, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_453\n.BB0_430:\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tcontext.this\tr1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_429\n.BB0_432:\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r6\n\tor\tr2, r6, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n.BB0_433:\n\tsub!\tstack-[8], r0, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_107[0], r0, r1\n\tsload\tr0, r2\n\tand\tr2, r1, r1\n\tsstore\tr0, r1\n\tjump\t@.BB0_133\n.BB0_578:\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r10, r3\n\tadd.lt\tr10, r0, r4\n\tshl.s\t64, r4, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tr10, r0, stack-[7]\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_685\n\tadd\tr0, r0, r7\n.BB0_580:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_580\n.BB0_685:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_582\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tr10, r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_582:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_583\n.BB0_588:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tr2, r10, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r3\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tld.1\tr10, r1\n\tsub.s!\t65535, r1, r2\n\tjump.gt\t@.BB0_2\n\tsub.s!\t13, r1, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_79[0], r0, r1\n\tst.2\t0, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_80[0], r1, r1\n\tadd\t32779, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub.s!\t1, r1, r1\n\tjump.ne\t@.BB0_133\n\tld.1\t64, r2\n\tadd\t@CPI0_81[0], r0, r1\n\tadd\tr2, r0, stack-[7]\n\tst.1\tr2, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_597\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_607\n.BB0_644:\n\tand\t@CPI0_65[0], r2, r2\n\tor\tr2, r6, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tjump\t@.BB0_161\n.BB0_507:\n\tadd\t@CPI0_87[0], r0, r1\n\tst.1\t128, r1\n\tcontext.caller\tr1\n\tst.1\t132, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_509\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_519\n.BB0_236:\n\tsub!\tstack-[9], r0, r1\n\tjump.eq\t@.BB0_133\n\tld.1\t64, r10\n\tadd\t@CPI0_119[0], r0, r1\n\tst.1\tr10, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[7], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_239\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_249\n.BB0_451:\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tcontext.this\tr1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_429\n.BB0_453:\n\tadd\t51, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r6\n\tor\tr2, r6, r2\n\tsstore\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tadd\t@CPI0_67[0], r0, r4\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tsub!\tstack-[7], r0, r1\n\tjump.ne\t@.BB0_456\n\tadd\t@CPI0_107[0], r0, r1\n\tsload\tr0, r2\n\tand\tr2, r1, r1\n\tsstore\tr0, r1\n.BB0_456:\n\tld.1\t64, r1\n\tsub.s!\t@CPI0_108[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tadd\t36, r1, r2\n\tadd\t@CPI0_109[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tcontext.gas_left\tr3\n\tadd\t96, r0, r4\n\tst.1\tr2, r4\n\tadd\t@CPI0_110[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t100, r1, r2\n\tst.1\tr2, r0\n\tadd\t4, r1, r2\n\tst.1\tr2, r0\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r2\n\tor\tr1, r2, r1\n\tor\t@CPI0_111[0], r1, r1\n\tadd\t32774, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_458\n\tld\tr1, r1\n\tsub!\tr1, r0, r2\n\tjump.ne\t@.BB0_466\n\tptr.add\tstack[@ptr_return_data], r0, r1\n\tadd\tstack[@returndatasize], r0, r2\n\tjump\t@.BB0_461\n.BB0_429:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI0_113[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t19, r0, r3\n.BB0_235:\n\tst.1\tr2, r3\n\tadd\t@CPI0_68[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_96[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_583:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_684\n\tadd\tr0, r0, r6\n.BB0_585:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_585\n.BB0_684:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_587\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_587:\n\tjump\t@.BB0_140\n.BB0_408:\n\tadd\t@CPI0_114[0], r0, r1\n\tst.1\t128, r1\n\tst.1\t132, r4\n\tst.1\t164, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_410\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_420\n.BB0_509:\n\tadd\t@CPI0_0[0], r0, r4\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_88[0], r1, r1\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_679\n\tadd\tr0, r0, r7\n.BB0_511:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tadd\t128, r8, r8\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_511\n.BB0_679:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_513\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tshl.s\t3, r5, r5\n\tadd\t128, r6, r6\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_513:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_514\n.BB0_519:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tor\t128, r1, r2\n\tadd\tr2, r0, stack-[7]\n\tst.1\t64, r2\n\tsub.s!\t32, r4, r2\n\tjump.lt\t@.BB0_2\n\tld.1\t128, r2\n\tsub!\tr2, r0, r3\n\tadd\t0, r0, r3\n\tadd.ne\t1, r0, r3\n\tsub!\tr2, r3, r3\n\tjump.ne\t@.BB0_2\n\tsub!\tr2, r0, r2\n\tjump.ne\t@.BB0_523\n\tadd\t@CPI0_100[0], r0, r1\n\tadd\tstack-[7], r0, r2\n\tst.1\tr2, r1\n\tshl.s\t64, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_636:\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tadd\t117, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI0_72[0], r3, r3\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand\t65535, r1, r1\n\tor\tr3, r1, r1\n\tsstore\tr2, r1\n\tadd\t107, r0, r1\n\tsload\tr1, r2\n\tand\t@CPI0_65[0], r2, r2\n\tadd\tstack-[9], r0, r3\n\tor\tr2, r3, r2\n\tsstore\tr1, r2\n\tld.1\t64, r1\n\tst.1\tr1, r3\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd\t@CPI0_0[0], r0, r4\n\tadd.ge\tr4, r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_73[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_74[0], r0, r4\n\tjump\t@.BB0_161\n.BB0_410:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_115[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_670\n\tadd\tr0, r0, r7\n.BB0_412:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tadd\t128, r8, r8\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_412\n.BB0_670:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_414\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tshl.s\t3, r5, r5\n\tadd\t128, r6, r6\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_414:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_415\n.BB0_420:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tor\t128, r1, r1\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r1\n\tjump.lt\t@.BB0_2\n\tld.1\t128, r1\n.BB0_422:\n\tsub!\tr1, r0, r2\n\tadd\t0, r0, r2\n\tadd.ne\t1, r0, r2\n\tsub!\tr1, r2, r1\n\tjump.ne\t@.BB0_2\n\tjump\t@.BB0_133\n.BB0_514:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_678\n\tadd\tr0, r0, r6\n.BB0_516:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_516\n.BB0_678:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_518\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_518:\n\tjump\t@.BB0_140\n.BB0_239:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tsub.s!\t@CPI0_0[0], r10, r3\n\tadd.lt\tr10, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[7], r0, r2\n\tadd\tr10, r0, stack-[5]\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[5], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_667\n\tadd\tr0, r0, r7\n.BB0_241:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_241\n.BB0_667:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_243\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tr10, r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_243:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_244\n.BB0_249:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tr10, r0, r5\n\tadd\tr2, r10, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r4\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r1\n\tjump.lt\t@.BB0_2\n\tld.1\tr5, r1\n\tadd\tr1, r0, stack-[5]\n\tsub.s!\t@CPI0_63[0], r1, r1\n\tjump.gt\t@.BB0_2\n\tsub!\tstack-[5], r0, r1\n\tadd\tstack-[9], r0, stack-[4]\n\tjump.eq\t@.BB0_255\n\tadd\t109, r0, r1\n\tadd\tr1, r0, stack-[3]\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tsub!\tstack-[5], r1, r1\n\tadd\tstack-[9], r0, stack-[4]\n\tjump.ne\t@.BB0_258\n.BB0_255:\n\tadd\t102, r0, r1\n\tadd\tr1, r0, stack-[3]\n\tsload\tr1, r2\n\tadd\tstack-[4], r2, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_256\n\tadd\tstack-[3], r0, r2\n\tsstore\tr2, r1\n\tld.1\t64, r2\n\tadd\t128, r2, r3\n\tadd\tstack-[7], r0, r4\n\tst.1\tr3, r4\n\tadd\t96, r2, r3\n\tadd\tstack-[9], r0, r4\n\tst.1\tr3, r4\n\tadd\t64, r2, r3\n\tadd\tstack-[5], r0, r4\n\tst.1\tr3, r4\n\tadd\t32, r2, r3\n\tadd\tstack-[4], r0, r4\n\tst.1\tr3, r4\n\tst.1\tr2, r1\n\tadd\t@CPI0_0[0], r0, r4\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_121[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_122[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tadd\tstack-[7], r0, r1\n\tst.1\t0, r1\n\tadd\tstack-[6], r0, r1\n\tst.1\t32, r1\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\t@CPI0_0[0], r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tadd\t1, r1, r1\n\tsload\tr1, r2\n\tadd!\tstack-[4], r2, r2\n\tjump.of\t@.BB0_256\n\tsstore\tr1, r2\n\tsub!\tstack-[8], r0, r1\n\tjump.eq\t@.BB0_133\n\tld.1\t64, r2\n\tadd\t@CPI0_77[0], r0, r1\n\tadd\tr2, r0, stack-[9]\n\tst.1\tr2, r1\n\tcontext.gas_left\tr1\n\tadd\tstack-[7], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_282\n\tadd\tstack[@returndatasize], r0, r4\n\tsub.s!\t32, r4, r1\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_292\n.BB0_402:\n\tor\t@CPI0_66[0], r1, r1\n\tadd\t32777, r0, r2\n\tadd\tr0, r0, r5\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n.BB0_400:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_133\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_668\n\tadd\tr0, r0, r6\n.BB0_405:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_405\n.BB0_668:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_407\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_407:\n\tjump\t@.BB0_140\n.BB0_415:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_669\n\tadd\tr0, r0, r6\n.BB0_417:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_417\n.BB0_669:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_419\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_419:\n\tjump\t@.BB0_140\n.BB0_244:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_666\n\tadd\tr0, r0, r6\n.BB0_246:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_246\n.BB0_666:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_248\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_248:\n\tjump\t@.BB0_140\n.BB0_523:\n\tadd\t@CPI0_77[0], r0, r2\n\tadd\tstack-[7], r0, r3\n\tst.1\tr3, r2\n\tcontext.gas_left\tr2\n\tadd\tstack-[9], r0, r3\n\tsub.s!\t4, r3, r3\n\tjump.ne\t@.BB0_525\n\tadd\tstack-[7], r1, r1\n\tst.1\t64, r1\n.BB0_536:\n\tadd\tstack-[7], r0, r2\n\tld.1\tr2, r2\n\tsub.s!\t65535, r2, r3\n\tjump.gt\t@.BB0_2\n\tsub.s!\t65535, r2, r3\n\tjump.ne\t@.BB0_538\n.BB0_256:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t17, r0, r1\n\tjump\t@.BB0_105\n.BB0_458:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r2\n\tshr.s\t96, r2, r2\n\tand\t@CPI0_0[0], r2, stack[@returndatasize]\n\tand\t@CPI0_0[0], r2, r2\n.BB0_461:\n\tld.1\t64, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB0_671\n\tadd\tr0, r0, r6\n.BB0_463:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_463\n.BB0_671:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_465\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_465:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t96, r2, r1\n\tshl.s\t64, r3, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_482:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_673\n\tadd\tr0, r0, r6\n.BB0_484:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_484\n.BB0_673:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_486\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_486:\n\tjump\t@.BB0_140\n.BB0_525:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tadd\tstack-[7], r0, r2\n\tshl.s\t64, r2, r2\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_677\n\tadd\tr0, r0, r7\n.BB0_527:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_527\n.BB0_677:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_529\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[7], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_529:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_530\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[7], r1, r1\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r2\n\tjump.lt\t@.BB0_2\n\tjump\t@.BB0_536\n.BB0_466:\n\tand\t@CPI0_63[0], r1, r1\n\tadd\t114, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI0_65[0], r3, r3\n\tor\tr3, r1, r3\n\tsstore\tr2, r3\n\tadd\t113, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI0_65[0], r3, r3\n\tor\tr3, r1, r1\n\tsstore\tr2, r1\n\tjump\t@.BB0_433\n.BB0_530:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_676\n\tadd\tr0, r0, r6\n.BB0_532:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_532\n.BB0_676:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_534\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_534:\n\tjump\t@.BB0_140\n.BB0_136:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_650\n\tadd\tr0, r0, r6\n.BB0_138:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_138\n.BB0_650:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_140\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n\tjump\t@.BB0_140\n.BB0_538:\n\tadd\t1, r2, r2\n\tsub!\tstack-[8], r2, r2\n\tjump.ne\t@.BB0_539\n\tadd\tstack-[8], r0, r1\n\tst.1\t0, r1\n\tadd\t116, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, stack-[7]\n\tjump.ne\t@.BB0_545\n\tld.1\t64, r1\n\tadd\t@CPI0_99[0], r0, r2\n\tjump\t@.BB0_544\n.BB0_597:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[7], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_683\n\tadd\tr0, r0, r7\n.BB0_599:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_599\n.BB0_683:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_601\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[7], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_601:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_602\n.BB0_607:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[7], r1, r2\n\tsub!\tr2, r1, r1\n\tadd\t0, r0, r1\n\tadd.lt\t1, r0, r1\n\tadd\tr2, r0, stack-[6]\n\tsub.s!\t@CPI0_78[0], r2, r2\n\tjump.gt\t@.BB0_104\n\tand!\t1, r1, r1\n\tjump.ne\t@.BB0_104\n\tadd\tstack-[6], r0, r1\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[7], r0, r1\n\tld.1\tr1, r1\n\tsub.s!\t@CPI0_63[0], r1, r2\n\tjump.gt\t@.BB0_2\n\tsub.s!\t@CPI0_82[0], r1, r1\n\tjump.ne\t@.BB0_133\n\tadd\t@CPI0_83[0], r0, r1\n\tadd\tstack-[6], r0, r4\n\tst.1.inc\tr4, r1, r1\n\tadd\tr1, r0, stack-[7]\n\tadd\t4, r4, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_84[0], r1, r1\n\tadd\t@CPI0_82[0], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[6], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t96, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t96, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_681\n\tadd\tr0, r0, r7\n.BB0_613:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_613\n.BB0_681:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_615\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[6], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_615:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_616\n\tadd\t31, r4, r1\n\tand\t224, r1, r1\n\tadd\tstack-[6], r1, r1\n\tadd\tr1, r0, stack-[5]\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[5], r0, r1\n\tst.1\t64, r1\n\tsub.s!\t96, r3, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[6], r0, r1\n\tld.1\tr1, r1\n\tsub!\tr1, r0, r2\n\tadd\t0, r0, r2\n\tadd.ne\t1, r0, r2\n\tsub!\tr1, r2, r2\n\tjump.ne\t@.BB0_2\n\tsub!\tr1, r0, r1\n\tjump.ne\t@.BB0_626\n\tadd\t@CPI0_86[0], r0, r1\n\tadd\tstack-[5], r0, r3\n\tst.1\tr3, r1\n\tadd\t4, r3, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r2\n\tadd.ge\tr1, r0, r3\n\tshl.s\t64, r3, r1\n\tor\t@CPI0_84[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_258:\n\tadd\tstack-[5], r0, r1\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r2\n\tadd\tr0, r0, stack-[4]\n\tjump.eq\t@.BB0_255\n\tadd\tstack-[3], r0, r1\n\tsload\tr1, r1\n\tld.1\t64, r5\n\tadd\t36, r5, r3\n\tadd\tstack-[9], r0, r4\n\tst.1\tr3, r4\n\tand\t@CPI0_63[0], r1, r1\n\tadd\t68, r5, r3\n\tst.1\tr3, r1\n\tadd\t@CPI0_120[0], r0, r1\n\tst.1\tr5, r1\n\tadd\tr5, r0, stack-[4]\n\tadd\t4, r5, r1\n\tadd\tstack-[5], r0, r3\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_262\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_272\n.BB0_539:\n\tadd\t@CPI0_89[0], r0, r2\n\tst.1\tr1, r2\n\tjump\t@.BB0_540\n.BB0_602:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_682\n\tadd\tr0, r0, r6\n.BB0_604:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_604\n.BB0_682:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_606\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_606:\n\tjump\t@.BB0_140\n.BB0_492:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_672\n\tadd\tr0, r0, r6\n.BB0_494:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_494\n.BB0_672:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_496\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_496:\n.BB0_140:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tshl.s\t96, r3, r2\n\tor\tr1, r2, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_195:\n\tsub!\tr4, r0, r11\n\tadd\tr0, r0, r11\n\tjump.eq\t@.BB0_197\n\tptr.add\tr1, r8, r11\n\tld\tr11, r11\n.BB0_197:\n\tshl.s\t3, r4, r12\n\tsub.s\t1, r0, r13\n\tshr\tr13, r12, r12\n\txor\tr12, r13, r12\n\tand\tr11, r12, r11\n\tshl.s\t1, r4, r12\n\tor\tr11, r12, r11\n.BB0_198:\n\tsstore\tr10, r11\n\tadd\t105, r0, r12\n\tsload\tr12, r10\n\tand!\t1, r10, r11\n\tshr.s\t1, r10, r13\n\tand\t127, r13, r11\n\tadd.ne\tr13, r0, r11\n\tsub.s!\t31, r11, r13\n\tadd\t0, r0, r13\n\tadd.gt\t1, r0, r13\n\txor\tr10, r13, r10\n\tand!\t1, r10, r10\n\tjump.eq\t@.BB0_199\n.BB0_182:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t34, r0, r1\n\tjump\t@.BB0_105\n.BB0_199:\n\tsub.s!\t32, r11, r10\n\tadd\t31, r2, stack-[9]\n\tjump.lt\t@.BB0_202\n\tadd\tstack-[9], r0, r10\n\tshr.s\t5, r10, r13\n\tadd\t@CPI0_131[0], r13, r14\n\tadd\t@CPI0_131[0], r0, r13\n\tsub.s!\t32, r2, r15\n\tadd.ge\tr14, r0, r13\n\tst.1\t0, r12\n\tadd\t31, r11, r11\n\tshr.s\t5, r11, r11\n\tadd\t@CPI0_131[0], r11, r11\n\tsub!\tr13, r11, r14\n\tjump.ge\t@.BB0_202\n.BB0_203:\n\tsstore\tr13, r0\n\tadd\t1, r13, r13\n\tsub!\tr13, r11, r14\n\tjump.lt\t@.BB0_203\n.BB0_202:\n\tsub.s!\t31, r2, r11\n\tptr.add\tr1, r9, r11\n\tjump.le\t@.BB0_220\n\tst.1\t0, r12\n\tsub.s\t32, r0, r13\n\tand!\tr2, r13, r15\n\tadd\t@CPI0_131[0], r0, r13\n\tadd\tr0, r0, r14\n\tjump.eq\t@.BB0_217\n\tadd\t@CPI0_131[0], r0, r13\n\tadd\tr0, r0, r14\n.BB0_215:\n\tadd\tr14, r9, r10\n\tptr.add\tr1, r10, r10\n\tld\tr10, r10\n\tsstore\tr13, r10\n\tadd\t1, r13, r13\n\tadd\t32, r14, r14\n\tsub!\tr14, r15, r10\n\tjump.lt\t@.BB0_215\n.BB0_217:\n\tsub!\tr15, r2, r10\n\tjump.ge\t@.BB0_219\n\tshl.s\t3, r2, r10\n\tand\t248, r10, r10\n\tsub.s\t1, r0, r15\n\tshr\tr15, r10, r10\n\txor\tr10, r15, r10\n\tadd\tr14, r9, r9\n\tptr.add\tr1, r9, r9\n\tld\tr9, r9\n\tand\tr9, r10, r9\n\tsstore\tr13, r9\n.BB0_219:\n\tshl.s\t1, r2, r9\n\tor\t1, r9, r9\n\tjump\t@.BB0_204\n.BB0_220:\n\tsub!\tr2, r0, r9\n\tadd\tr0, r0, r9\n\tjump.eq\t@.BB0_222\n\tld\tr11, r9\n.BB0_222:\n\tshl.s\t3, r2, r10\n\tsub.s\t1, r0, r13\n\tshr\tr13, r10, r10\n\txor\tr10, r13, r10\n\tand\tr9, r10, r9\n\tshl.s\t1, r2, r10\n\tor\tr9, r10, r9\n.BB0_204:\n\tsstore\tr12, r9\n\tadd\t112, r0, r9\n\tsstore\tr9, r3\n\tst.1\t128, r5\n\tst.1\t160, r6\n\tst.1\t192, r7\n\tadd\t192, r0, r5\n\tst.1\t224, r5\n\tptr.add\tr1, r8, r1\n\tand\t31, r4, r5\n\tst.1\t320, r4\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_652\n\tadd\tr0, r0, r7\n.BB0_206:\n\tshl.s\t5, r7, r8\n\tptr.add\tr1, r8, r9\n\tld\tr9, r9\n\tadd\t352, r8, r8\n\tst.1\tr8, r9\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_206\n.BB0_652:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_208\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r1\n\tshl.s\t3, r5, r5\n\tadd\t352, r6, r6\n\tld.1\tr6, r7\n\tshl\tr7, r5, r7\n\tshr\tr7, r5, r7\n\tld\tr1, r1\n\tsub\t256, r5, r5\n\tshr\tr1, r5, r1\n\tshl\tr1, r5, r1\n\tor\tr1, r7, r1\n\tst.1\tr6, r1\n.BB0_208:\n\tadd\t352, r4, r1\n\tst.1\tr1, r0\n\tadd\t383, r4, r1\n\tsub.s\t32, r0, r4\n\tand\tr1, r4, r1\n\tsub.s\t128, r1, r5\n\tst.1\t256, r5\n\tand\t31, r2, r6\n\tst.1.inc\tr1, r2, r5\n\tshr.s!\t5, r2, r7\n\tjump.eq\t@.BB0_651\n\tadd\tr0, r0, r8\n.BB0_210:\n\tshl.s\t5, r8, r9\n\tadd\tr5, r9, r12\n\tptr.add\tr11, r9, r9\n\tld\tr9, r9\n\tst.1\tr12, r9\n\tadd\t1, r8, r8\n\tsub!\tr8, r7, r9\n\tjump.lt\t@.BB0_210\n.BB0_651:\n\tsub!\tr6, r0, r8\n\tjump.eq\t@.BB0_212\n\tshl.s\t5, r7, r7\n\tptr.add\tr11, r7, r8\n\tadd\tr5, r7, r7\n\tshl.s\t3, r6, r6\n\tld.1\tr7, r9\n\tshl\tr9, r6, r9\n\tshr\tr9, r6, r9\n\tld\tr8, r8\n\tsub\t256, r6, r6\n\tshr\tr8, r6, r8\n\tshl\tr8, r6, r6\n\tor\tr6, r9, r6\n\tst.1\tr7, r6\n.BB0_212:\n\tadd\tr2, r5, r2\n\tst.1\tr2, r0\n\tst.1\t288, r3\n\tand\tstack-[9], r4, r2\n\tadd\tr1, r2, r1\n\tsub.s\t96, r1, r1\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tcontext.gas_left\tr3\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tshl.s\t192, r3, r2\n\tshl.s\t96, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_132[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_133[0], r0, r4\n\tjump\t@.BB0_161\n.BB0_545:\n\tadd\t114, r0, r1\n\tsload\tr1, r1\n\tadd\t@CPI0_90[0], r0, r2\n\tst.2\t0, r2\n\tand\t@CPI0_63[0], r1, r1\n\tadd\tr1, r0, stack-[6]\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r2\n\tadd\t36, r2, r1\n\tadd\tstack-[7], r0, r3\n\tst.1\tr1, r3\n\tadd\t@CPI0_92[0], r0, r1\n\tst.1\tr2, r1\n\tadd\tr2, r0, stack-[7]\n\tadd\t4, r2, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[6], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_554\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_93[0], r1, r1\n\tadd\tstack-[6], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_549\n.BB0_554:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r1\n\tst.1\t64, r1\n\tadd\t@CPI0_90[0], r0, r1\n\tst.2\t0, r1\n\tadd\tstack-[9], r0, r1\n\tst.2\t4, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_91[0], r1, r1\n\tadd\t32770, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_131\n\tld\tr1, r1\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r3\n\tadd\t68, r3, r1\n\tadd\t@CPI0_94[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t36, r3, r1\n\tadd\t2, r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI0_95[0], r0, r1\n\tst.1.inc\tr3, r1, r1\n\tadd\tr1, r0, stack-[6]\n\tadd\tr3, r0, stack-[7]\n\tadd\t4, r3, r1\n\tadd\t32, r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[9], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.eq\t@.BB0_564\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[7], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_96[0], r1, r1\n\tadd\tstack-[9], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, stack[@returndatasize]\n\tand\t@CPI0_0[0], r3, r3\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_559\n.BB0_564:\n\tadd\tstack-[7], r0, r1\n\tsub.s!\t@CPI0_78[0], r1, r1\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[7], r0, r3\n\tst.1\t64, r3\n\tadd\tstack-[8], r0, r1\n\tadd\tstack-[6], r0, r2\n\tst.1\tr2, r1\n\tadd\tstack-[9], r0, r1\n\tst.1\tr3, r1\n\tadd\t@CPI0_0[0], r0, r4\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\tr4, r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r2\n\tadd.ge\tr4, r0, r3\n\tshl.s\t64, r3, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t1, r0, r3\n\tadd\t@CPI0_97[0], r0, r4\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_2\n\tld.1\t64, r1\n\tadd\tstack-[9], r0, r2\n\tst.1\tr1, r2\n\tsub.s!\t@CPI0_0[0], r1, r2\n\tadd.ge\t@CPI0_0[0], r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI0_98[0], r1, r1\n\tret.ok.to_label\tr1, @DEFAULT_FAR_RETURN\n.BB0_131:\n\trevert\n.BB0_262:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tadd\tstack-[4], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.lt\tr5, r0, r3\n\tshl.s\t64, r3, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_96[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[4], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_665\n\tadd\tr0, r0, r7\n.BB0_264:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_264\n.BB0_665:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_266\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[4], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_266:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_267\n.BB0_272:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tstack-[4], r2, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r4\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r3, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[4], r0, r1\n\tld.1\tr1, r1\n\tadd\tr1, r0, stack-[4]\n\tjump\t@.BB0_255\n.BB0_267:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_664\n\tadd\tr0, r0, r6\n.BB0_269:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_269\n.BB0_664:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_271\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_271:\n\tjump\t@.BB0_140\n.BB0_282:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[9], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[7], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[9], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_663\n\tadd\tr0, r0, r7\n.BB0_284:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_284\n.BB0_663:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_286\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[9], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_286:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_287\n.BB0_292:\n\tadd\t31, r4, r1\n\tand\t96, r1, r2\n\tadd\tstack-[9], r2, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI0_78[0], r1, r3\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[9], r0, r1\n\tld.1\tr1, r1\n\tsub.s!\t65535, r1, r2\n\tjump.gt\t@.BB0_2\n\tsub.s!\t13, r1, r1\n\tjump.lt\t@.BB0_133\n\tadd\t110, r0, r1\n\tadd\tr1, r0, stack-[7]\n\tsload\tr1, r1\n\tand\t@CPI0_63[0], r1, r1\n\tadd\tr1, r0, stack-[9]\n\tst.1\t0, r1\n\tadd\t108, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI0_63[0], r1, r2\n\tjump.eq\t@.BB0_133\n\tadd\t109, r0, r1\n\tsload\tr1, r1\n\tld.1\t64, r5\n\tadd\t36, r5, r3\n\tadd\t@CPI0_123[0], r0, r4\n\tst.1\tr3, r4\n\tand\t@CPI0_63[0], r1, r1\n\tadd\t68, r5, r3\n\tst.1\tr3, r1\n\tadd\t@CPI0_120[0], r0, r1\n\tst.1\tr5, r1\n\tadd\tr5, r0, stack-[6]\n\tadd\t4, r5, r1\n\tadd\tstack-[9], r0, r3\n\tst.1\tr1, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t4, r2, r3\n\tjump.ne\t@.BB0_300\n\tadd\tstack[@returndatasize], r0, r3\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_310\n.BB0_616:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_680\n\tadd\tr0, r0, r6\n.BB0_618:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_618\n.BB0_680:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_620\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_620:\n\tjump\t@.BB0_140\n.BB0_287:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_662\n\tadd\tr0, r0, r6\n.BB0_289:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_289\n.BB0_662:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_291\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_291:\n\tjump\t@.BB0_140\n.BB0_549:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_675\n\tadd\tr0, r0, r6\n.BB0_551:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_551\n.BB0_675:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_553\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_553:\n\tjump\t@.BB0_140\n.BB0_626:\n\tadd\tstack-[6], r0, r1\n\tadd\t64, r1, r1\n\tld.1\tr1, r2\n\tadd\tstack-[7], r0, r1\n\tld.1\tr1, r1\n\tadd\tstack-[5], r0, r3\n\tsub.s!\t@CPI0_85[0], r3, r3\n\tjump.le\t@.BB0_627\n.BB0_104:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n.BB0_105:\n\tst.1\t4, r1\n\tadd\t@CPI0_84[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_627:\n\tadd\tstack-[5], r0, r4\n\tadd\t96, r4, r3\n\tst.1\t64, r3\n\tadd\t64, r4, r3\n\tadd\tr3, r0, stack-[7]\n\tst.1\tr3, r2\n\tadd\t1, r0, r2\n\tst.1.inc\tr4, r2, r2\n\tadd\tr2, r0, stack-[6]\n\tst.1\tr2, r1\n\tadd\tstack-[9], r0, r1\n\tst.1\t0, r1\n\tadd\tstack-[8], r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI0_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI0_71[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_2\n\tld\tr1, r1\n\tsload\tr1, r2\n\tsub.s\t256, r0, r3\n\tand\tr2, r3, r2\n\tadd\tstack-[5], r0, r3\n\tld.1\tr3, r3\n\tsub!\tr3, r0, r3\n\tor.ne\t1, r2, r2\n\tsstore\tr1, r2\n\tadd\tstack-[6], r0, r2\n\tld.1\tr2, r2\n\tadd\t1, r1, r3\n\tsstore\tr3, r2\n\tadd\t2, r1, r1\n\tadd\tstack-[7], r0, r2\n\tld.1\tr2, r2\n\tsstore\tr1, r2\n\tjump\t@.BB0_133\n.BB0_559:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_674\n\tadd\tr0, r0, r6\n.BB0_561:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_561\n.BB0_674:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_563\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_563:\n\tjump\t@.BB0_140\n.BB0_300:\n\tadd\t@CPI0_0[0], r0, r3\n\tsub.s!\t@CPI0_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tadd\tstack-[6], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.lt\tr5, r0, r3\n\tshl.s\t64, r3, r3\n\tshl.s\t192, r1, r1\n\tor\tr1, r3, r1\n\tor\t@CPI0_96[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tstack-[6], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_661\n\tadd\tr0, r0, r7\n.BB0_302:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_302\n.BB0_661:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_304\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[6], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_304:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_305\n.BB0_310:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[6], r1, r5\n\tsub!\tr5, r1, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tadd\tr5, r0, stack-[5]\n\tsub.s!\t@CPI0_78[0], r5, r5\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tadd\tstack-[5], r0, r2\n\tst.1\t64, r2\n\tsub.s!\t32, r3, r2\n\tjump.ge\t@.BB0_313\n.BB0_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB0_305:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_660\n\tadd\tr0, r0, r6\n.BB0_307:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_307\n.BB0_660:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_309\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_309:\n\tjump\t@.BB0_140\n.BB0_313:\n\tadd\tstack-[6], r0, r2\n\tld.1\tr2, r2\n\tadd\tr2, r0, stack-[1]\n\tadd\tstack-[7], r0, r2\n\tsload\tr2, r5\n\tadd\t@CPI0_124[0], r0, r2\n\tadd\tstack-[5], r0, r6\n\tst.1\tr6, r2\n\tadd\t4, r6, r2\n\tcontext.this\tr6\n\tadd\tr6, r0, stack-[2]\n\tst.1\tr2, r6\n\tcontext.gas_left\tr2\n\tand\t@CPI0_63[0], r5, r5\n\tadd\tr5, r0, stack-[6]\n\tsub.s!\t4, r5, r5\n\tjump.eq\t@.BB0_325\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tadd\tstack-[5], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_84[0], r1, r1\n\tadd\tstack-[6], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tstack-[5], r0, r10\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_659\n\tadd\tr0, r0, r7\n.BB0_316:\n\tshl.s\t5, r7, r8\n\tadd\tr10, r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_316\n.BB0_659:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_318\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[5], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_318:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_320\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n.BB0_325:\n\tadd\tstack-[5], r1, r2\n\tadd\tr2, r0, stack-[9]\n\tsub.s!\t@CPI0_78[0], r2, r2\n\tjump.gt\t@.BB0_104\n\tadd\tstack-[9], r0, r2\n\tst.1\t64, r2\n\tsub.s!\t32, r4, r2\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[5], r0, r2\n\tld.1\tr2, r2\n\tadd\tr2, r0, stack-[5]\n\tadd\t@CPI0_125[0], r0, r2\n\tadd\tstack-[9], r0, r4\n\tst.1\tr4, r2\n\tcontext.gas_left\tr2\n\tadd\tstack-[2], r0, r4\n\tsub.s!\t4, r4, r4\n\tjump.ne\t@.BB0_328\n\tadd\tstack-[9], r1, r1\n\tadd\t0, r0, stack-[10]\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r1\n\tcontext.sp\tr1\n\tsub.s\t10, r1, r1\n\tmul\t32, r1, r1, r0\n\tjump\t@.BB0_341\n.BB0_320:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_658\n\tadd\tr0, r0, r6\n.BB0_322:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_322\n.BB0_658:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_324\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_324:\n\tjump\t@.BB0_140\n.BB0_328:\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tadd\tstack-[9], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI0_76[0], r1, r1\n\tadd\tstack-[2], r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_657\n\tadd\tr0, r0, r7\n.BB0_330:\n\tshl.s\t5, r7, r8\n\tadd\tstack-[9], r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_330\n.BB0_657:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_332\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[9], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_332:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\t100, r0, r5\n\tadd\t0, r0, stack-[11]\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB0_337\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[9], r1, r1\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r1\n\tcontext.sp\tr1\n\tsub.s\t11, r1, r1\n\tmul\t32, r1, r1, r0\n\tsub.s!\t32, r3, r2\n\tjump.lt\t@.BB0_2\n.BB0_341:\n\tadd\tstack-[9], r0, r2\n\tld.1\tr2, r5\n\tshr.s\t5, r1, r1\n\tadd\tr5, r0, stack[r1]\n\tsub!\tr5, r0, r1\n\tjump.ne\t@.BB0_337\n\tadd\t100, r0, r5\n.BB0_337:\n\tadd\t111, r0, r1\n\tsload\tr1, r4\n\tsub!\tr4, r0, r1\n\tadd\tr0, r0, r1\n\tjump.eq\t@.BB0_343\n\tmul\tr4, r5, r2, r1\n\tdiv\tr2, r4, r1, r4\n\tsub!\tr1, r5, r1\n\tjump.ne\t@.BB0_256\n\tsub!\tr2, r0, r1\n\tadd\tr0, r0, r1\n\tjump.eq\t@.BB0_343\n\tmul\t@CPI0_126[0], r2, r1, r4\n\tdiv\tr1, r2, r2, r4\n\tsub.s!\t@CPI0_126[0], r2, r2\n\tjump.ne\t@.BB0_256\n.BB0_343:\n\tsub!\tstack-[1], r0, r2\n\tjump.ne\t@.BB0_345\n.BB0_344:\n\tadd\t@CPI0_128[0], r0, r1\n\tst.1\t0, r1\n\tadd\t18, r0, r1\n\tjump\t@.BB0_105\n.BB0_345:\n\tadd\tstack-[5], r0, r5\n\tmul\tstack-[4], r5, r2, r4\n\tsub!\tr5, r0, r4\n\tjump.ne\t@.BB0_346\n\tadd\t@CPI0_127[0], r0, r4\n\tadd\tstack-[4], r0, r6\n\tsub!\tr6, r0, r5\n\tadd\tr0, r0, r5\n\tadd.lt\tr4, r0, r5\n\tand\t@CPI0_127[0], r6, r6\n\tsub!\tr6, r0, r7\n\tadd.le\tr0, r0, r4\n\tsub.s!\t@CPI0_127[0], r6, r6\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r4\n\tjump.ne\t@.BB0_256\n\tjump\t@.BB0_349\n.BB0_346:\n\tadd\t@CPI0_127[0], r0, r4\n\tadd\tstack-[4], r0, r6\n\tsub!\tr6, r0, r5\n\tadd\tr0, r0, r5\n\tadd.lt\tr4, r0, r5\n\tand\t@CPI0_127[0], r6, r6\n\tsub!\tr6, r0, r7\n\tadd.le\tr0, r0, r4\n\tsub.s!\t@CPI0_127[0], r6, r6\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r4\n\tjump.ne\t@.BB0_256\n\tdiv.s\tstack-[5], r2, r4, r5\n\tsub.s!\tstack-[4], r4, r4\n\tjump.ne\t@.BB0_256\n.BB0_349:\n\tadd\tstack-[3], r0, r4\n\tsload\tr4, r4\n\tsub!\tr4, r0, r5\n\tjump.eq\t@.BB0_344\n\tadd\tstack-[4], r0, r5\n\tshl.s\t1, r5, r5\n\tdiv\tr5, r4, r5, r6\n\tsub.s\t3, r0, r6\n\tsub!\tr5, r6, r6\n\tjump.gt\t@.BB0_256\n\tdiv.s\t100, r1, r1, r6\n\tdiv.s\tstack-[1], r1, r1, r6\n\tadd\t2, r5, r5\n\tdiv\tr2, r5, r2, r5\n\tdiv\tr2, r4, r2, r4\n\tsub!\tr1, r2, r4\n\tadd.ge\tr2, r0, r1\n\tsub!\tr1, r0, r2\n\tjump.eq\t@.BB0_133\n\tsub!\tstack-[5], r1, r2\n\tjump.le\t@.BB0_133\n\tdiv.s\t5, r1, stack-[5], r2\n\tsub.s\tstack-[5], r1, r1\n\tld.1\t64, r4\n\tadd\t36, r4, r2\n\tst.1\tr2, r1\n\tadd\t@CPI0_114[0], r0, r1\n\tst.1\tr4, r1\n\tadd\tr4, r0, stack-[9]\n\tadd\t4, r4, r1\n\tadd\tstack-[8], r0, r2\n\tst.1\tr1, r2\n\tcontext.gas_left\tr1\n\tadd\tstack-[6], r0, r2\n\tsub.s!\t4, r2, r2\n\tjump.ne\t@.BB0_355\n\tsub.s!\t32, r3, r1\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tjump\t@.BB0_365\n.BB0_355:\n\tadd\t@CPI0_0[0], r0, r2\n\tsub.s!\t@CPI0_0[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tadd\tstack-[9], r0, r4\n\tsub.s!\t@CPI0_0[0], r4, r3\n\tadd.lt\tr4, r0, r2\n\tshl.s\t64, r2, r2\n\tshl.s\t192, r1, r1\n\tor\tr1, r2, r1\n\tor\t@CPI0_93[0], r1, r1\n\tadd\tstack-[6], r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_656\n\tadd\tr0, r0, r7\n.BB0_357:\n\tshl.s\t5, r7, r8\n\tadd\tstack-[9], r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_357\n.BB0_656:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_359\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[9], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_359:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_360\n.BB0_365:\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n\tadd\tstack-[9], r1, r5\n\tsub!\tr5, r1, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tadd\tr5, r0, stack-[8]\n\tsub.s!\t@CPI0_78[0], r5, r5\n\tjump.gt\t@.BB0_104\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB0_104\n\tadd\tstack-[8], r0, r2\n\tst.1\t64, r2\n\tsub.s!\t32, r3, r2\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[9], r0, r2\n\tld.1\tr2, r2\n\tsub!\tr2, r0, r3\n\tadd\t0, r0, r3\n\tadd.ne\t1, r0, r3\n\tsub!\tr2, r3, r2\n\tjump.ne\t@.BB0_2\n\tadd\tstack-[7], r0, r2\n\tsload\tr2, r2\n\tadd\t51, r0, r3\n\tsload\tr3, r3\n\tadd\tstack-[8], r0, r6\n\tadd\t36, r6, r5\n\tadd\tstack-[5], r0, r7\n\tst.1\tr5, r7\n\tadd\t@CPI0_114[0], r0, r5\n\tst.1\tr6, r5\n\tadd\t4, r6, r5\n\tand\t@CPI0_63[0], r3, r3\n\tst.1\tr5, r3\n\tcontext.gas_left\tr3\n\tand\t@CPI0_63[0], r2, r2\n\tsub.s!\t4, r2, r5\n\tjump.eq\t@.BB0_381\n\tadd\t@CPI0_0[0], r0, r1\n\tsub.s!\t@CPI0_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tadd\tstack-[8], r0, r5\n\tsub.s!\t@CPI0_0[0], r5, r4\n\tadd.lt\tr5, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r3\n\tor\tr3, r1, r1\n\tor\t@CPI0_93[0], r1, r1\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tadd\tr1, r0, r3\n\tshr.s\t96, r3, r3\n\tand\t@CPI0_0[0], r3, r3\n\tsub.s!\t32, r3, r4\n\tadd\tr3, r0, r4\n\tadd.ge\t32, r0, r4\n\tand\t31, r4, r5\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB0_654\n\tadd\tr0, r0, r7\n.BB0_372:\n\tshl.s\t5, r7, r8\n\tadd\tstack-[8], r8, r9\n\tptr.add\tr1, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB0_372\n.BB0_654:\n\tsub!\tr5, r0, r7\n\tjump.eq\t@.BB0_374\n\tshl.s\t5, r6, r6\n\tptr.add\tr1, r6, r7\n\tadd\tstack-[8], r6, r6\n\tshl.s\t3, r5, r5\n\tld.1\tr6, r8\n\tshl\tr8, r5, r8\n\tshr\tr8, r5, r8\n\tld\tr7, r7\n\tsub\t256, r5, r5\n\tshr\tr7, r5, r7\n\tshl\tr7, r5, r5\n\tor\tr5, r8, r5\n\tst.1\tr6, r5\n.BB0_374:\n\tadd\tr3, r0, stack[@returndatasize]\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB0_376\n\tadd\t31, r4, r1\n\tand\t96, r1, r1\n.BB0_381:\n\tadd\tstack-[8], r1, r1\n\tsub.s!\t@CPI0_78[0], r1, r2\n\tjump.gt\t@.BB0_104\n\tst.1\t64, r1\n\tsub.s!\t32, r4, r1\n\tjump.lt\t@.BB0_2\n\tadd\tstack-[8], r0, r1\n\tld.1\tr1, r1\n\tjump\t@.BB0_422\n.BB0_360:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_655\n\tadd\tr0, r0, r6\n.BB0_362:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_362\n.BB0_655:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_364\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_364:\n\tjump\t@.BB0_140\n.BB0_376:\n\tld.1\t64, r2\n\tand\t31, r3, r4\n\tshr.s!\t5, r3, r5\n\tjump.eq\t@.BB0_653\n\tadd\tr0, r0, r6\n.BB0_378:\n\tshl.s\t5, r6, r7\n\tadd\tr2, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB0_378\n.BB0_653:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB0_380\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr2, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB0_380:\n\tjump\t@.BB0_140\n.func_end0:\n\nabi_encode_string:\n.func_begin1:\n\tld.1\tr1, r3\n\tst.1.inc\tr2, r3, r2\n\tsub!\tr3, r0, r4\n\tjump.eq\t@.BB1_3\n\tadd\tr0, r0, r4\n.BB1_2:\n\tadd\tr2, r4, r5\n\tadd\t32, r4, r4\n\tadd\tr4, r1, r6\n\tld.1\tr6, r6\n\tst.1\tr5, r6\n\tsub!\tr4, r3, r5\n\tjump.lt\t@.BB1_2\n.BB1_3:\n\tadd\tr2, r3, r1\n\tst.1\tr1, r0\n\tadd\t31, r3, r1\n\tsub.s\t32, r0, r3\n\tand\tr1, r3, r1\n\tadd\tr2, r1, r1\n\tret\n.func_end1:\n\nabi_decode_uint256t_uint256:\n.func_begin2:\n\tsub.s\t4, r1, r1\n\tadd\t@CPI2_0[0], r0, r2\n\tsub.s!\t63, r1, r3\n\tadd\tr0, r0, r3\n\tadd.gt\tr2, r0, r3\n\tand\t@CPI2_0[0], r1, r1\n\tsub!\tr1, r0, r4\n\tadd.ge\tr0, r0, r2\n\tsub.s!\t@CPI2_0[0], r1, r1\n\tadd.ne\tr3, r0, r2\n\tsub!\tr2, r0, r1\n\tjump.eq\t@.BB2_1\n\tret\n.BB2_1:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end2:\n\nfinalize_allocation:\n.func_begin3:\n\tadd\t31, r2, r2\n\tsub.s\t32, r0, r3\n\tand\tr2, r3, r2\n\tadd\tr2, r1, r1\n\tsub!\tr1, r2, r2\n\tadd\t0, r0, r2\n\tadd.lt\t1, r0, r2\n\tsub.s!\t@CPI3_0[0], r1, r3\n\tjump.gt\t@.BB3_2\n\tand!\t1, r2, r2\n\tjump.ne\t@.BB3_2\n\tst.1\t64, r1\n\tret\n.BB3_2:\n\tadd\t@CPI3_1[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI3_2[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end3:\n\nabi_decode_bytes:\n.func_begin4:\n\tadd\tr1, r0, r3\n\tadd\t31, r3, r1\n\tadd\t@CPI4_0[0], r0, r4\n\tsub!\tr1, r2, r5\n\tadd\tr0, r0, r5\n\tadd.lt\tr4, r0, r5\n\tand\t@CPI4_0[0], r2, r6\n\tand\t@CPI4_0[0], r1, r1\n\tsub!\tr1, r6, r7\n\tadd.le\tr0, r0, r4\n\txor\tr1, r6, r1\n\tsub.s!\t@CPI4_0[0], r1, r1\n\tadd.ne\tr5, r0, r4\n\tsub!\tr4, r0, r1\n\tjump.eq\t@.BB4_1\n\tptr.add\tstack[@ptr_calldata], r0, r6\n\tptr.add\tr6, r3, r1\n\tld\tr1, r4\n\tsub.s!\t@CPI4_1[0], r4, r1\n\tjump.ge\t@.BB4_3\n\tadd\t63, r4, r1\n\tsub.s\t32, r0, r5\n\tand\tr1, r5, r5\n\tld.1\t64, r1\n\tadd\tr1, r5, r5\n\tsub!\tr5, r1, r7\n\tadd\t0, r0, r7\n\tadd.lt\t1, r0, r7\n\tsub.s!\t@CPI4_2[0], r5, r8\n\tjump.gt\t@.BB4_3\n\tand!\t1, r7, r7\n\tjump.ne\t@.BB4_3\n\tst.1\t64, r5\n\tst.1.inc\tr1, r4, r5\n\tadd\t32, r3, r3\n\tadd\tr3, r4, r7\n\tsub!\tr7, r2, r2\n\tjump.gt\t@.BB4_1\n\tptr.add\tr6, r3, r3\n\tand\t31, r4, r2\n\tshr.s!\t5, r4, r6\n\tjump.eq\t@.BB4_12\n\tadd\tr0, r0, r7\n.BB4_9:\n\tshl.s\t5, r7, r8\n\tadd\tr5, r8, r9\n\tptr.add\tr3, r8, r8\n\tld\tr8, r8\n\tst.1\tr9, r8\n\tadd\t1, r7, r7\n\tsub!\tr7, r6, r8\n\tjump.lt\t@.BB4_9\n.BB4_12:\n\tsub!\tr2, r0, r7\n\tjump.eq\t@.BB4_11\n\tshl.s\t5, r6, r6\n\tptr.add\tr3, r6, r3\n\tadd\tr5, r6, r6\n\tshl.s\t3, r2, r2\n\tld.1\tr6, r7\n\tshl\tr7, r2, r7\n\tshr\tr7, r2, r7\n\tld\tr3, r3\n\tsub\t256, r2, r2\n\tshr\tr3, r2, r3\n\tshl\tr3, r2, r2\n\tor\tr2, r7, r2\n\tst.1\tr6, r2\n.BB4_11:\n\tadd\tr5, r4, r2\n\tst.1\tr2, r0\n\tret\n.BB4_3:\n\tadd\t@CPI4_3[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI4_4[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB4_1:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end4:\n\ncopy_array_from_storage_to_memory_string:\n.func_begin5:\n\tadd\t106, r0, r5\n\tsload\tr5, r4\n\tand!\t1, r4, r6\n\tshr.s\t1, r4, r1\n\tand\t127, r1, r2\n\tadd.ne\tr1, r0, r2\n\tsub.s!\t31, r2, r1\n\tadd\t0, r0, r1\n\tadd.gt\t1, r0, r1\n\tand\t1, r1, r1\n\tsub!\tr6, r1, r1\n\tjump.ne\t@.BB5_1\n\tld.1\t64, r1\n\tst.1.inc\tr1, r2, r3\n\tsub!\tr6, r0, r6\n\tjump.eq\t@.BB5_8\n\tst.1\t0, r5\n\tsub!\tr2, r0, r4\n\tadd\tr0, r0, r4\n\tjump.eq\t@.BB5_4\n\tadd\t@CPI5_0[0], r0, r5\n\tadd\tr0, r0, r4\n.BB5_11:\n\tadd\tr3, r4, r6\n\tsload\tr5, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tadd\t32, r4, r4\n\tsub!\tr4, r2, r6\n\tjump.lt\t@.BB5_11\n\tjump\t@.BB5_4\n.BB5_8:\n\tsub.s\t256, r0, r5\n\tand\tr4, r5, r4\n\tst.1\tr3, r4\n\tsub!\tr2, r0, r2\n\tadd\t32, r0, r4\n\tadd.eq\t0, r0, r4\n.BB5_4:\n\tadd\t63, r4, r2\n\tsub.s\t32, r0, r3\n\tand\tr2, r3, r3\n\tadd\tr3, r1, r2\n\tsub!\tr2, r3, r3\n\tadd\t0, r0, r3\n\tadd.lt\t1, r0, r3\n\tsub.s!\t@CPI5_1[0], r2, r4\n\tjump.gt\t@.BB5_6\n\tand!\t1, r3, r3\n\tjump.ne\t@.BB5_6\n\tst.1\t64, r2\n\tret\n.BB5_1:\n\tadd\t@CPI5_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t34, r0, r1\n\tjump\t@.BB5_2\n.BB5_6:\n\tadd\t@CPI5_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n.BB5_2:\n\tst.1\t4, r1\n\tadd\t@CPI5_3[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end5:\n\ncopy_array_from_storage_to_memory_string_27022:\n.func_begin6:\n\tadd\t105, r0, r5\n\tsload\tr5, r4\n\tand!\t1, r4, r6\n\tshr.s\t1, r4, r1\n\tand\t127, r1, r2\n\tadd.ne\tr1, r0, r2\n\tsub.s!\t31, r2, r1\n\tadd\t0, r0, r1\n\tadd.gt\t1, r0, r1\n\tand\t1, r1, r1\n\tsub!\tr6, r1, r1\n\tjump.ne\t@.BB6_1\n\tld.1\t64, r1\n\tst.1.inc\tr1, r2, r3\n\tsub!\tr6, r0, r6\n\tjump.eq\t@.BB6_8\n\tst.1\t0, r5\n\tsub!\tr2, r0, r4\n\tadd\tr0, r0, r4\n\tjump.eq\t@.BB6_4\n\tadd\t@CPI6_0[0], r0, r5\n\tadd\tr0, r0, r4\n.BB6_11:\n\tadd\tr3, r4, r6\n\tsload\tr5, r7\n\tst.1\tr6, r7\n\tadd\t1, r5, r5\n\tadd\t32, r4, r4\n\tsub!\tr4, r2, r6\n\tjump.lt\t@.BB6_11\n\tjump\t@.BB6_4\n.BB6_8:\n\tsub.s\t256, r0, r5\n\tand\tr4, r5, r4\n\tst.1\tr3, r4\n\tsub!\tr2, r0, r2\n\tadd\t32, r0, r4\n\tadd.eq\t0, r0, r4\n.BB6_4:\n\tadd\t63, r4, r2\n\tsub.s\t32, r0, r3\n\tand\tr2, r3, r3\n\tadd\tr3, r1, r2\n\tsub!\tr2, r3, r3\n\tadd\t0, r0, r3\n\tadd.lt\t1, r0, r3\n\tsub.s!\t@CPI6_1[0], r2, r4\n\tjump.gt\t@.BB6_6\n\tand!\t1, r3, r3\n\tjump.ne\t@.BB6_6\n\tst.1\t64, r2\n\tret\n.BB6_1:\n\tadd\t@CPI6_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t34, r0, r1\n\tjump\t@.BB6_2\n.BB6_6:\n\tadd\t@CPI6_2[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n.BB6_2:\n\tst.1\t4, r1\n\tadd\t@CPI6_3[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end6:\n\nrequire_helper_stringliteral_ed52:\n.func_begin7:\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB7_1\n\tret\n.BB7_1:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI7_0[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t10, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI7_1[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI7_2[0], r0, r2\n\tsub.s!\t@CPI7_2[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI7_3[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end7:\n\nfun_deployProxyAdmin:\n.func_begin8:\n\tld.1\t64, r1\n\tsub.s!\t@CPI8_0[0], r1, r2\n\tjump.ge\t@.BB8_1\n\tadd\t36, r1, r2\n\tadd\t@CPI8_1[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t68, r1, r2\n\tcontext.gas_left\tr3\n\tadd\t96, r0, r4\n\tst.1\tr2, r4\n\tadd\t@CPI8_2[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t100, r1, r2\n\tst.1\tr2, r0\n\tadd\t4, r1, r2\n\tst.1\tr2, r0\n\tadd\t@CPI8_3[0], r0, r2\n\tsub.s!\t@CPI8_3[0], r3, r4\n\tadd.ge\tr2, r0, r3\n\tsub.s!\t@CPI8_3[0], r1, r4\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tshl.s\t192, r3, r2\n\tor\tr1, r2, r1\n\tor\t@CPI8_4[0], r1, r1\n\tadd\t32774, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB8_3\n\tld\tr1, r1\n\tsub!\tr1, r0, r2\n\tjump.eq\t@.BB8_5\n\tand\t@CPI8_5[0], r1, r1\n\tadd\t114, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI8_6[0], r3, r3\n\tor\tr3, r1, r3\n\tsstore\tr2, r3\n\tadd\t113, r0, r2\n\tsload\tr2, r3\n\tand\t@CPI8_6[0], r3, r3\n\tor\tr3, r1, r1\n\tsstore\tr2, r1\n\tret\n.BB8_1:\n\tadd\t@CPI8_7[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI8_8[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB8_3:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r2\n\tshr.s\t96, r2, r2\n\tand\t@CPI8_3[0], r2, stack[@returndatasize]\n\tand\t@CPI8_3[0], r2, r2\n\tjump\t@.BB8_6\n.BB8_5:\n\tptr.add\tstack[@ptr_return_data], r0, r1\n\tadd\tstack[@returndatasize], r0, r2\n.BB8_6:\n\tld.1\t64, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB8_12\n\tadd\tr0, r0, r6\n.BB8_8:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB8_8\n.BB8_12:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB8_10\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB8_10:\n\tadd\t@CPI8_3[0], r0, r1\n\tsub.s!\t@CPI8_3[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI8_3[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t64, r3, r1\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end8:\n\nabi_encode_string_calldata:\n.func_begin9:\n\tand\t31, r2, r4\n\tst.1.inc\tr3, r2, r3\n\tptr.add\tstack[@ptr_calldata], r1, r1\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB9_5\n\tadd\tr0, r0, r6\n.BB9_2:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB9_2\n.BB9_5:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB9_4\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB9_4:\n\tadd\tr3, r2, r1\n\tst.1\tr1, r0\n\tadd\t31, r2, r1\n\tsub.s\t32, r0, r2\n\tand\tr1, r2, r1\n\tadd\tr3, r1, r1\n\tret\n.func_end9:\n\nfun_createUpgradeableLockAtVersion:\n.func_begin10:\n\tnop\tstack+=[4]\n\tadd\tr1, r0, stack-[4]\n\tadd\t113, r0, r1\n\tsload\tr1, r1\n\tand!\t@CPI10_0[0], r1, stack-[3]\n\tjump.eq\t@.BB10_1\n\tand\t65535, r2, r1\n\tst.1\t0, r1\n\tadd\t116, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI10_1[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI10_1[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t192, r2, r1\n\tor\t@CPI10_2[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB10_3\n\tld.1\t64, r2\n\tld\tr1, r1\n\tsload\tr1, r1\n\tand!\t@CPI10_0[0], r1, r3\n\tjump.eq\t@.BB10_5\n\tsub.s!\t@CPI10_3[0], r2, r1\n\tadd\tstack-[4], r0, r8\n\tjump.ge\t@.BB10_7\n\tadd\t196, r2, r4\n\tadd\t96, r0, r1\n\tst.1\tr4, r1\n\tadd\t164, r2, r4\n\tadd\tstack-[3], r0, r5\n\tst.1\tr4, r5\n\tadd\t132, r2, r4\n\tst.1\tr4, r3\n\tadd\t36, r2, r3\n\tadd\t@CPI10_4[0], r0, r4\n\tst.1\tr3, r4\n\tld.1\tr8, r3\n\tadd\t228, r2, r4\n\tst.1\tr4, r3\n\tadd\t260, r2, r4\n\tsub!\tr3, r0, r5\n\tjump.eq\t@.BB10_12\n\tadd\tr0, r0, r5\n.BB10_10:\n\tadd\tr5, r4, r6\n\tadd\t32, r5, r5\n\tadd\tr5, r8, r7\n\tld.1\tr7, r7\n\tst.1\tr6, r7\n\tsub!\tr5, r3, r6\n\tjump.lt\t@.BB10_10\n.BB10_12:\n\tadd\tr3, r4, r4\n\tst.1\tr4, r0\n\tadd\t31, r3, r3\n\tsub.s\t32, r0, r4\n\tand\tr3, r4, r3\n\tadd\t128, r3, r4\n\tadd\t100, r2, r5\n\tcontext.gas_left\tr6\n\tst.1\tr5, r4\n\tadd\t68, r2, r4\n\tst.1\tr4, r1\n\tadd\t@CPI10_5[0], r0, r1\n\tst.1\tr2, r1\n\tadd\t4, r2, r1\n\tst.1\tr1, r0\n\tadd\t@CPI10_1[0], r0, r1\n\tsub.s!\t@CPI10_1[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r2\n\tadd\t260, r3, r3\n\tsub.s!\t@CPI10_1[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t96, r3, r3\n\tor\tr3, r2, r2\n\tsub.s!\t@CPI10_1[0], r6, r3\n\tadd.ge\tr1, r0, r6\n\tshl.s\t192, r6, r1\n\tor\tr1, r2, r1\n\tor\t@CPI10_6[0], r1, r1\n\tadd\t32774, r0, r2\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB10_11\n\tld\tr1, r1\n\tsub!\tr1, r0, r2\n\tjump.eq\t@.BB10_14\n\tand\t@CPI10_0[0], r1, r2\n\tld.1\t64, r3\n\tsub.s!\t@CPI10_7[0], r3, r1\n\tjump.gt\t@.BB10_7\n\tadd\t96, r3, r1\n\tst.1\t64, r1\n\tadd\t1, r0, r1\n\tst.1.inc\tr3, r1, r4\n\tadd\tr3, r0, stack-[3]\n\tadd\t64, r3, r1\n\tadd\tr1, r0, stack-[2]\n\tst.1\tr1, r0\n\tadd\tr4, r0, stack-[1]\n\tst.1\tr4, r0\n\tadd\tr2, r0, stack-[4]\n\tst.1\t0, r2\n\tadd\t104, r0, r1\n\tst.1\t32, r1\n\tadd\t@CPI10_1[0], r0, r3\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI10_1[0], r1, r2\n\tadd.ge\tr3, r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI10_2[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB10_3\n\tld\tr1, r1\n\tsload\tr1, r2\n\tsub.s\t256, r0, r3\n\tand\tr2, r3, r2\n\tadd\tstack-[3], r0, r3\n\tld.1\tr3, r3\n\tsub!\tr3, r0, r3\n\tor.ne\t1, r2, r2\n\tsstore\tr1, r2\n\tadd\tstack-[1], r0, r2\n\tld.1\tr2, r2\n\tadd\t1, r1, r3\n\tsstore\tr3, r2\n\tadd\t2, r1, r1\n\tadd\tstack-[2], r0, r2\n\tld.1\tr2, r2\n\tsstore\tr1, r2\n\tcontext.gas_left\tr1\n\tsub.s!\t@CPI10_1[0], r1, r2\n\tadd.ge\t@CPI10_1[0], r0, r1\n\tshl.s\t192, r1, r1\n\tor\t@CPI10_6[0], r1, r1\n\tadd\t32781, r0, r2\n\tadd\t3, r0, r3\n\tcontext.caller\tr5\n\tadd\t@CPI10_8[0], r0, r4\n\tadd\tstack-[4], r0, r6\n\tnear_call\tr0, @__farcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r1\n\tjump.eq\t@.BB10_3\n\tadd\tstack-[4], r0, r1\n\tret\n.BB10_3:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_7:\n\tadd\t@CPI10_9[0], r0, r1\n\tst.1\t0, r1\n\tadd\t65, r0, r1\n\tst.1\t4, r1\n\tadd\t@CPI10_10[0], r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_1:\n\tld.1\t64, r1\n\tadd\t@CPI10_13[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t@CPI10_1[0], r0, r2\n\tsub.s!\t@CPI10_1[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI10_12[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_5:\n\tadd\t@CPI10_11[0], r0, r1\n\tst.1\tr2, r1\n\tadd\t@CPI10_1[0], r0, r1\n\tsub.s!\t@CPI10_1[0], r2, r3\n\tadd.ge\tr1, r0, r2\n\tshl.s\t64, r2, r1\n\tor\t@CPI10_12[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.BB10_11:\n\tptr.add\tr1, r0, stack[@ptr_return_data]\n\tadd\tr1, r0, r2\n\tshr.s\t96, r2, r2\n\tand\t@CPI10_1[0], r2, stack[@returndatasize]\n\tand\t@CPI10_1[0], r2, r2\n\tjump\t@.BB10_18\n.BB10_14:\n\tptr.add\tstack[@ptr_return_data], r0, r1\n\tadd\tstack[@returndatasize], r0, r2\n.BB10_18:\n\tld.1\t64, r3\n\tand\t31, r2, r4\n\tshr.s!\t5, r2, r5\n\tjump.eq\t@.BB10_24\n\tadd\tr0, r0, r6\n.BB10_20:\n\tshl.s\t5, r6, r7\n\tadd\tr3, r7, r8\n\tptr.add\tr1, r7, r7\n\tld\tr7, r7\n\tst.1\tr8, r7\n\tadd\t1, r6, r6\n\tsub!\tr6, r5, r7\n\tjump.lt\t@.BB10_20\n.BB10_24:\n\tsub!\tr4, r0, r6\n\tjump.eq\t@.BB10_22\n\tshl.s\t5, r5, r5\n\tptr.add\tr1, r5, r1\n\tadd\tr3, r5, r5\n\tshl.s\t3, r4, r4\n\tld.1\tr5, r6\n\tshl\tr6, r4, r6\n\tshr\tr6, r4, r6\n\tld\tr1, r1\n\tsub\t256, r4, r4\n\tshr\tr1, r4, r1\n\tshl\tr1, r4, r1\n\tor\tr1, r6, r1\n\tst.1\tr5, r1\n.BB10_22:\n\tadd\t@CPI10_1[0], r0, r1\n\tsub.s!\t@CPI10_1[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI10_1[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t64, r3, r1\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end10:\n\nrequire_helper_stringliteral_2f7a:\n.func_begin11:\n\tsub!\tr1, r0, r1\n\tjump.eq\t@.BB11_1\n\tret\n.BB11_1:\n\tld.1\t64, r1\n\tadd\t68, r1, r2\n\tadd\t@CPI11_0[0], r0, r3\n\tst.1\tr2, r3\n\tadd\t36, r1, r2\n\tadd\t10, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI11_1[0], r0, r2\n\tst.1\tr1, r2\n\tadd\t4, r1, r2\n\tadd\t32, r0, r3\n\tst.1\tr2, r3\n\tadd\t@CPI11_2[0], r0, r2\n\tsub.s!\t@CPI11_2[0], r1, r3\n\tadd.ge\tr2, r0, r1\n\tshl.s\t64, r1, r1\n\tor\t@CPI11_3[0], r1, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end11:\n\n__cxa_throw:\n\trevert\n\n__sha3:\n.func_begin12:\n\tadd\t@CPI13_0[0], r0, r3\n\tsub.s!\t@CPI13_0[0], r1, r4\n\tadd.ge\tr3, r0, r1\n\tshl.s\t64, r1, r1\n\tsub.s!\t@CPI13_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t96, r2, r2\n\tor\tr2, r1, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI13_0[0], r2, r4\n\tadd.ge\tr3, r0, r2\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI13_1[0], r1, r1\n\tadd\t32784, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB13_2\n\tld\tr1, r1\n\tret\n.BB13_2:\n\tadd\tr0, r0, r1\n\tret.revert.to_label\tr1, @DEFAULT_FAR_REVERT\n.func_end12:\n\n__system_request:\n.func_begin13:\n\tadd\tr1, r0, r5\n\tst.2\t0, r2\n\tsub.s!\t4, r3, r1\n\tjump.le\t@.BB14_3\n\tshr.s\t5, r4, r1\n\tadd\tstack[r1], r0, r1\n\tst.2\t4, r1\n.BB14_3:\n\tadd\t@CPI14_0[0], r0, r1\n\tcontext.gas_left\tr2\n\tsub.s!\t@CPI14_0[0], r2, r4\n\tadd.ge\tr1, r0, r2\n\tsub.s!\t@CPI14_0[0], r3, r4\n\tadd.ge\tr1, r0, r3\n\tshl.s\t96, r3, r1\n\tshl.s\t192, r2, r2\n\tor\tr2, r1, r1\n\tor\t@CPI14_1[0], r1, r1\n\tadd\tr5, r0, r2\n\tnear_call\tr0, @__staticcall, @DEFAULT_UNWIND\n\tand!\t1, r2, r2\n\tjump.eq\t@.BB14_4\n\tld\tr1, r1\n\tret\n.BB14_4:\n\trevert\n.func_end13:\n\n__farcall:\n.func_begin14:\n.tmp0:\n\tfar_call\tr1, r2, @.BB15_2\n.tmp1:\n\tadd\t1, r0, r2\n\tret\n.BB15_2:\n.tmp2:\n\tadd\tr0, r0, r2\n\tret\n.func_end14:\n\n__staticcall:\n.func_begin15:\n.tmp3:\n\tfar_call.static\tr1, r2, @.BB16_2\n.tmp4:\n\tadd\t1, r0, r2\n\tret\n.BB16_2:\n.tmp5:\n\tadd\tr0, r0, r2\n\tret\n.func_end15:\n\n\t.data\n\t.p2align\t5\nreturndatasize:\n\t.cell 0\n\n\t.p2align\t5\nptr_calldata:\n.cell\t0\n\n\t.p2align\t5\nptr_return_data:\n.cell\t0\n\n\t.note.GNU-stack\n\t.rodata\nCPI0_0:\nCPI7_2:\nCPI8_3:\nCPI10_1:\nCPI11_2:\nCPI13_0:\nCPI14_0:\n\t.cell 4294967295\nCPI0_1:\n\t.cell 53919893334301279589334030174039261352344891250716429051063678533632\nCPI0_2:\n\t.cell 1890269700620599958563283095811294385051394744042009698940098529013530624\nCPI0_3:\n\t.cell 316912652418240591808998408192\nCPI0_4:\n\t.cell 2376452954\nCPI0_5:\n\t.cell 3302387175\nCPI0_6:\n\t.cell 3468955729\nCPI0_7:\n\t.cell 4016569829\nCPI0_8:\n\t.cell 4016569830\nCPI0_9:\n\t.cell 4076725131\nCPI0_10:\n\t.cell 4164061585\nCPI0_11:\n\t.cell 3468955730\nCPI0_12:\n\t.cell 3605653507\nCPI0_13:\n\t.cell 3986060477\nCPI0_14:\n\t.cell 3404653474\nCPI0_15:\n\t.cell 3404653475\nCPI0_16:\n\t.cell 3438626376\nCPI0_17:\n\t.cell 3449009458\nCPI0_18:\n\t.cell 3302387176\nCPI0_19:\n\t.cell 3352809673\nCPI0_20:\n\t.cell 2692934413\nCPI0_21:\n\t.cell 2966031490\nCPI0_22:\n\t.cell 2966031491\nCPI0_23:\n\t.cell 2967608970\nCPI0_24:\n\t.cell 3126763733\nCPI0_25:\n\t.cell 2692934414\nCPI0_26:\n\t.cell 2789961311\nCPI0_27:\n\t.cell 2845370875\nCPI0_28:\n\t.cell 2476580638\nCPI0_29:\n\t.cell 2476580639\nCPI0_30:\n\t.cell 2520421496\nCPI0_31:\n\t.cell 2592736658\nCPI0_32:\n\t.cell 2376452955\nCPI0_33:\n\t.cell 2402473371\nCPI0_34:\n\t.cell 1501161300\nCPI0_35:\n\t.cell 1855545538\nCPI0_36:\n\t.cell 2021510716\nCPI0_37:\n\t.cell 2021510717\nCPI0_38:\n\t.cell 2106570305\nCPI0_39:\n\t.cell 2147044274\nCPI0_40:\n\t.cell 1855545539\nCPI0_41:\n\t.cell 1901074598\nCPI0_42:\n\t.cell 1950071855\nCPI0_43:\n\t.cell 1575592246\nCPI0_44:\n\t.cell 1575592247\nCPI0_45:\n\t.cell 1717573797\nCPI0_46:\n\t.cell 1808717218\nCPI0_47:\n\t.cell 1501161301\nCPI0_48:\n\t.cell 1547234106\nCPI0_49:\n\t.cell 1070124786\nCPI0_50:\n\t.cell 1146274481\nCPI0_51:\n\t.cell 1146274482\nCPI0_52:\n\t.cell 1215990390\nCPI0_53:\n\t.cell 1245215727\nCPI0_54:\n\t.cell 1070124787\nCPI0_55:\n\t.cell 1109441862\nCPI0_56:\n\t.cell 1121526022\nCPI0_57:\n\t.cell 640486020\nCPI0_58:\n\t.cell 640486021\nCPI0_59:\n\t.cell 900157662\nCPI0_60:\n\t.cell 911361635\nCPI0_61:\n\t.cell 212956643\nCPI0_62:\n\t.cell 628566745\nCPI0_63:\nCPI8_5:\nCPI10_0:\n\t.cell 1461501637330902918203684832716283019655932542975\nCPI0_64:\n\t.cell 2535301202817642044428229017600\nCPI0_65:\nCPI8_6:\n\t.cell -1461501637330902918203684832716283019655932542976\nCPI0_66:\nCPI10_6:\nCPI13_1:\n\t.cell 904625697166532776746648320380374280103671755200316906558262375061821325312\nCPI0_67:\n\t.cell -52524777015005588113349992707137368332388074750292320778649315033004770043936\nCPI0_68:\nCPI7_1:\nCPI11_1:\n\t.cell 3963877391197344453575983046348115674221700746820753546331534351508065746944\nCPI0_69:\n\t.cell 33157247328247392177276036206420639287987967339789334254430219359175892271104\nCPI0_70:\n\t.cell 7922816253787617000789217640448\nCPI0_71:\nCPI10_2:\n\t.cell 904625697166532776746648320380374280103671760270919307471179981048634146816\nCPI0_72:\n\t.cell -65536\nCPI0_73:\n\t.cell 904625697166532776746648320380374280103671757735618107014721178055227736064\nCPI0_74:\n\t.cell 36025156505492517438805714562748948800260801740279915897280979504007541324833\nCPI0_75:\nCPI10_11:\n\t.cell -37114117605592496347325697673092623924536044454442039357710132896650628169728\nCPI0_76:\nCPI10_12:\n\t.cell 316912650057057350374175801344\nCPI0_77:\n\t.cell -20926836106322762708891414760002713515518242035995076520671423947012436918272\nCPI0_78:\nCPI3_0:\nCPI4_2:\nCPI5_1:\nCPI6_1:\n\t.cell 18446744073709551615\nCPI0_79:\n\t.cell -45892047197499416867505091379861151366373029554911521591129889233172042914037\nCPI0_80:\n\t.cell 904625751086426111047927909714404454142933102791518401696464687643217625088\nCPI0_81:\n\t.cell 6821811911238888839536434405234023077819029972646230067974408253352257257472\nCPI0_82:\n\t.cell 350122553345285754288357488426466034265801612563\nCPI0_83:\n\t.cell 42477882948296037641567020917740160426186072043374218044168402312374467428352\nCPI0_84:\nCPI3_2:\nCPI4_4:\nCPI5_3:\nCPI6_3:\nCPI8_8:\nCPI10_10:\n\t.cell 2852213850513516153367582212096\nCPI0_85:\nCPI10_7:\n\t.cell 18446744073709551519\nCPI0_86:\n\t.cell -56908243873390551813086563957040102425272639719699074826629612523392138739712\nCPI0_87:\n\t.cell -38494787266956801523015968668355323156317191752700434140906003176714689052672\nCPI0_88:\n\t.cell 2852213852874699394802404818944\nCPI0_89:\n\t.cell 25207609688308035943776965525799681906214888099527464661956486340892000518144\nCPI0_90:\n\t.cell 10867283408178898638301172343726954674910073630256871736220740970449699113859\nCPI0_91:\n\t.cell 904625751086426111047927909714404454142933105326819602152923490636624035840\nCPI0_92:\n\t.cell -46290407765062878413499179029397064721218218007786861689943043099119249784832\nCPI0_93:\n\t.cell 5387515050969974956360988622848\nCPI0_94:\n\t.cell 21923038379770192761469555389218132944387420192432680032372889745638826180608\nCPI0_95:\n\t.cell -53735719882557866721708016383183202791820432244875900703955266285172982546432\nCPI0_96:\nCPI7_3:\nCPI11_3:\n\t.cell 7922816251426433759354395033600\nCPI0_97:\n\t.cell 42735507531937456931511469666945626389827086867131878990913717139551033032030\nCPI0_98:\n\t.cell 2535301200456458802993406410752\nCPI0_99:\n\t.cell -18700892153741470206840701859395200761893992252319677534854976532327455260672\nCPI0_100:\n\t.cell -42149906165508016613000565465756512467465000513030630428843995723983321300992\nCPI0_101:\nCPI10_13:\n\t.cell -56670185441443771625949750229794542298893231190750776613456814118809962020864\nCPI0_102:\n\t.cell 50061611880371377414337244847040546638905800530057410076493070815543366254592\nCPI0_103:\n\t.cell 18064021053252268971328020676608\nCPI0_104:\n\t.cell -6907707730197604136906152632653067233185663617545098726549545854097602641920\nCPI0_105:\n\t.cell -20161477289955489877637036844001228409087517651143040526947360274373148850360\nCPI0_106:\n\t.cell -584628842912415000354295947526363435904951430508645920363682606475561140224\nCPI0_107:\n\t.cell -65281\nCPI0_108:\n\t.cell 18446744073709551483\nCPI0_109:\nCPI8_1:\n\t.cell 452319252588209271575910507515635480975787381224214229762002700242646879225\nCPI0_110:\nCPI8_2:\nCPI10_5:\n\t.cell -45094662312588414058508742492242807367897819822786606328124609013070528553987\nCPI0_111:\nCPI8_4:\n\t.cell 904625697166532776746648320380374280103671765658434358441154937409622769664\nCPI0_112:\n\t.cell 50182626877236202919511659493747656258103580868824622380046315770105312814518\nCPI0_113:\n\t.cell 29535183345145645464477851197593903596241110250713156662292127721300527415296\nCPI0_114:\n\t.cell -39341301877480157781710804024396230103289065588583741745104145964028735258624\nCPI0_115:\n\t.cell 5387515053331158197795811229696\nCPI0_116:\n\t.cell 14437333991389365756822315673377632757035417522267279379660800\nCPI0_117:\n\t.cell 904625697166532776746648320380374280103671760270919309832363222483456753664\nCPI0_118:\n\t.cell 55713793741244277608309276122367187087222996717614018578921075799306736261563\nCPI0_119:\n\t.cell -44568866674979067396885701090171761998580735943016166783551351666021555503104\nCPI0_120:\n\t.cell -28090522410217068727452697311494607388493927424200414066219095369906818908160\nCPI0_121:\n\t.cell 904625697166532776746648320380374280103671767876822908840556390028853379072\nCPI0_122:\n\t.cell 26829431991052184924179753388315071223040590805488744152318084421056796552119\nCPI0_123:\n\t.cell 1000000000000000000\nCPI0_124:\n\t.cell 50942633119752846454219349998365661925608737367104304655302372697894809501696\nCPI0_125:\n\t.cell -31494705754855352465859595423231087603887002283557474284484987665297449156608\nCPI0_126:\n\t.cell 125000000000000000000\nCPI0_127:\nCPI2_0:\nCPI4_0:\n\t.cell -57896044618658097711785492504343953926634992332820282019728792003956564819968\nCPI0_128:\nCPI3_1:\nCPI4_3:\nCPI5_2:\nCPI6_2:\nCPI8_7:\nCPI10_9:\n\t.cell 35408467139433450592217433187231851964531694900788300625387963629091585785856\nCPI0_129:\nCPI11_0:\n\t.cell 35871056051324427784075185478792451971914311706789223069900028630809205276672\nCPI0_130:\nCPI5_0:\n\t.cell 7887053984229333715756243741084912719879447020693965939365260134600710199889\nCPI0_131:\nCPI6_0:\n\t.cell 57762096780731528330405058414938765910932439953606620384872163540286326260488\nCPI0_132:\n\t.cell 904625697166532776746648320380374280103671755200316908919445616496643932160\nCPI0_133:\n\t.cell -42852773073754312208884282459163052021579535870294477440851470759412745519513\nCPI0_134:\n\t.cell -33836616157800148473937241991990060311975165975819281289460902511640494382845\nCPI0_135:\n\t.cell 7605903603730559650415041839104\nCPI0_136:\nCPI7_0:\n\t.cell 35871056051325674836898434191605331488235603392957484300597738840229016502272\nCPI0_137:\n\t.cell -26120258288163459410817549624531742010132204837987907727317110414913445036032\nCPI0_138:\nCPI4_1:\n\t.cell 18446744073709551616\nCPI0_139:\n\t.cell 5070602403274100847421635428352\nCPI8_0:\nCPI10_3:\n\t.cell 18446744073709551484\nCPI10_4:\n\t.cell 452325352475091846242819484956123856763730907249538198437149772942287165769\nCPI10_8:\n\t.cell 454954966949675225254850943970014343149630866565406483258717838262022863847\nCPI14_1:\n\t.cell 904625751086426111047927909714404454142933102474605751639407337269041823744\n","bytecode":{"object":"0003000000000002000c000000000002000000000301001900000060033002700000048a03300197000200000031035500010000000103550000000102200190000000630000c13d0000008002000039000000400020043f000000040230008c0000006d0000413d000000000201043b000000e0022002700000048e0420009c000000760000213d000004ac0420009c000000830000213d000004bb0420009c000000be0000a13d000004bc0420009c000001060000213d000004c00420009c000003bb0000613d000004c10420009c0000020d0000613d000004c20220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000c00220008c00000d5f0000413d0000002402100370000000000502043b000004c90250009c00000d5f0000213d0000008402100370000000000402043b000004d80240009c00000d5f0000213d00000023024000390000050906000041000000000732004b000000000700001900000000070680190000050902200197000000000802004b0000000006008019000005090220009c000000000607c019000000000206004b00000d5f0000c13d0000000402400039000000000221034f000000000202043b000004d80620009c00000d5f0000213d00000024044000390000000006420019000000000336004b00000d5f0000213d000000a403100370000000000303043b000004cb06300197000000000363004b00000d5f0000c13d000004f003000041000000a00030043f0000000003000411000000a40030043f0000000403100370000000000303043b000000c40030043f000000e40050043f0000004403100370000000000303043b000001040030043f0000006401100370000000000101043b000001240010043f000000c001000039000001440010043f00000164030000390000000001040019122410d70000040f000000a00210008a000000800020043f000000800210008a0000008001000039000900000001001d12240f8d0000040f0000007501000039000000000101041a0000ffff0210018f0000000901000029000003db0000013d0000008001000039000000400010043f0000000001000416000000000101004b00000d5f0000c13d0000002001000039000001000010044300000120000004430000048b01000041000012250001042e000000000103004b00000d5f0000c13d0000000001000416000000000101004b000003920000c13d0000048c01000041000000800010043f0000048d0100004100001226000104300000048f0420009c000000920000213d0000049e0420009c000000d70000a13d0000049f0420009c0000012d0000213d000004a30420009c000003c00000613d000004a40420009c000002120000613d000004a50120009c000001440000613d00000d5f0000013d000004ad0420009c000000e40000a13d000004ae0420009c0000013e0000213d000004b20120009c000003c60000613d000004b30120009c000002330000613d000004b40120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000006f01000039000003c40000013d000004900420009c000000f90000a13d000004910420009c000001490000213d000004950120009c000001f90000613d000004960120009c000002490000613d000004970120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000000001000411000900000001001d00000000001004350000006801000039000800000001001d000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000000ff01100190000003920000c13d000000400a00043d000004d70100004100000000001a043500000000010004140000000902000029000000040320008c000005930000c13d0000000004000031000000200140008c0000002004008039000005c40000013d000004c30420009c000001540000a13d000004c40120009c0000043b0000613d000004c50120009c000001f90000613d000004c60120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d000000000103001912240f7e0000040f000000000100041100000000001004350000006801000039000000200010043f00000040020000390000000001000019122411ec0000040f000000000101041a000000ff0110018f122411d60000040f0000000001000019000012250001042e000004a60420009c0000016b0000a13d000004a70420009c000004440000613d000004a80420009c000003700000613d000004a90120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000007001000039000003c40000013d000004b50420009c0000017a0000a13d000004b60420009c0000046d0000613d000004b70420009c000003940000613d000004b80220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004c90210009c00000d5f0000213d00000000001004350000006c01000039000003a00000013d000004980420009c000001e50000a13d000004990420009c0000048a0000613d0000049a0420009c000003a50000613d0000049b0120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000007501000039000001680000013d000004bd0420009c000003cb0000613d000004be0420009c0000024e0000613d000004bf0220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b00000000010000190000000101006039122410630000040f000000090100002900000000001004350000006801000039000000200010043f00000040020000390000000001000019122411ec0000040f000000000001041b0000000102100039000000000002041b0000000201100039000000000001041b0000000001000019000012250001042e000004a00420009c000003e50000613d000004a10120009c000002900000613d000004a20120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000800b01000039000000040300003900000000040004150000000c0440008a00000020044000c9000004fa02000041122412020000040f000004410000013d000004af0420009c000003f90000613d000004b00420009c000002950000613d000004b10120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d122410280000040f000001fd0000013d000004920420009c0000040e0000613d000004930420009c0000032a0000613d000004940120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000006b010000390000043f0000013d000004c70420009c000003440000613d000004c80220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004c90210009c00000d5f0000213d00000000001004350000007301000039000000200010043f00000040020000390000000001000019122411ec0000040f000000000101041a0000ffff0110018f000004410000013d000004aa0120009c000003520000613d000004ab0120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b00000000010000190000000101006039000004410000013d000004b90420009c000003570000613d000004ba0220009c00000d5f0000c13d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000900000002001d000004c90220009c00000d5f0000213d0000002401100370000000000101043b000800000001001d000004c90110009c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d000000090100002900000000001004350000006c01000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000004cb0220019700000008022001af000000000021041b000000080100006b000003920000613d0000006d01000039000000000101041a000700000001001d000004e4010000410000000000100439000000080100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f0000000703000029000004c903300197000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400200043d0000002401200039000000000031043500000513010000410000000000120435000700000002001d00000004012000390000000902000029000000000021043500000000010004140000000802000029000000040220008c000001df0000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004e7011001c700000008020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a0330019700020000000103550000000102200190000009150000613d0000000701000029000004d80110009c00000cd20000213d0000000701000029000000400010043f000003920000013d0000049c0420009c0000035c0000613d0000049d0120009c00000d5f0000c13d0000000001000416000000000101004b00000d5f0000c13d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d0000007101000039000000000101041a000004c9011001980000054c0000c13d122410780000040f0000000001000019000012250001042e0000000001000416000000000101004b00000d5f0000c13d12240fed0000040f0000002002000039000000400300043d000900000003001d000000000223043612240f6b0000040f000000090400002900000000014100490000048a020000410000048a0310009c00000000010280190000048a0340009c000000000402801900000040024002100000006001100210000000000121019f000012250001042e0000000001000416000000000101004b00000d5f0000c13d0000000c01000039000004410000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000600220008c00000d5f0000413d0000000402100370000000000202043b000004c90320009c00000d5f0000213d0000002403100370000000000403043b000004c90340009c00000d5f0000213d0000004401100370000000000301043b0000003301000039000000000101041a000004c9011001970000000005000411000000000115004b000005420000c13d000000000102004b000006940000c13d000000040140008c000003920000613d000004fe01000041000000000203004b000000000100c019000007f90000c13d00000000020400191224121a0000040f000007fd0000013d0000000001000416000000000101004b00000d5f0000c13d0000003301000039000000000201041a000004c9052001970000000003000411000000000353004b000005420000c13d000004cb02200197000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd0400004100000000060000190000038f0000013d0000000001000416000000000101004b00000d5f0000c13d0000006601000039000003c40000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000402043b000004d80240009c00000d5f0000213d0000002302400039000000000232004b00000d5f0000813d0000000405400039000000000251034f000000000202043b000005140620009c00000cd20000813d000000bf06200039000000200700008a000000000676016f000004d80760009c00000cd20000213d000000400060043f000000800020043f00000000042400190000002404400039000000000334004b00000d5f0000213d0000002003500039000000000331034f0000001f0420018f0000000505200272000002790000613d00000000060000190000000507600210000000000873034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000002710000413d000000000604004b000002880000613d0000000505500210000000000353034f0000000304400210000000a005500039000000000605043300000000064601cf000000000646022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000363019f0000000000350435000000a00220003900000000000204350000002401100370000000000201043b0000ffff0120008c00000d5f0000213d0000008001000039000003db0000013d0000000001000416000000000101004b00000d5f0000c13d0000007601000039000003c40000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000c00220008c00000d5f0000413d0000000402100370000000000502043b000004c90250009c00000d5f0000213d0000002402100370000000000602043b000004c90260009c00000d5f0000213d0000004402100370000000000702043b0000006402100370000000000202043b000004d80420009c00000d5f0000213d00000023042000390000050908000041000000000934004b000000000900001900000000090880190000050904400197000000000a04004b0000000008008019000005090440009c000000000809c019000000000408004b00000d5f0000c13d0000000404200039000000000441034f000000000404043b000004d80840009c00000d5f0000213d00000024082000390000000002840019000000000232004b00000d5f0000213d0000008402100370000000000902043b000004d80290009c00000d5f0000213d0000002302900039000005090a000041000000000b32004b000000000b000019000000000b0a80190000050902200197000000000c02004b000000000a008019000005090220009c000000000a0bc01900000000020a004b00000d5f0000c13d0000000402900039000000000221034f000000000202043b000004d80a20009c00000d5f0000213d0000002409900039000000000a92001900000000033a004b00000d5f0000213d000000a403100370000000000303043b000000330a000039000000000a0a041a000004c90aa00197000000000b000411000000000aab004b000005420000c13d0000006e0a000039000000000b0a041a000004cb0bb00197000000000b5b019f0000000000ba041b0000006d0a000039000000000b0a041a000004cb0bb00197000000000b6b019f0000000000ba041b0000006f0a00003900000000007a041b0000006a0a000039000000000b0a041a000000010cb00190000000010db002700000007f0bd0018f000000000b0dc0190000001f0db0008c000000000d000019000000010d002039000000010dd0018f000000000cdc004b00000a6f0000c13d000000200cb0008c000003090000413d0000001f0c400039000000050cc002700000050c0dc000410000050c0c000041000000200e40008c000000000c0d80190000000000a004350000001f0bb00039000000050bb002700000050c0bb00041000000000dbc004b000003090000813d00000000000c041b000000010cc00039000000000dbc004b000003050000413d0000001f0b40008c00000a560000a13d0000000000a00435000000200b00008a000000000db401700000050c0b000041000000000c0000190000031b0000613d0000050c0b000041000000000c000019000000000e8c0019000000000ee1034f000000000e0e043b0000000000eb041b000000010bb00039000000200cc00039000000000edc004b000003130000413d000000000d4d004b000003270000813d000000030d400210000000f80dd0018f000000010e00008a000000000dde022f000000000ded013f000000000c8c0019000000000cc1034f000000000c0c043b000000000cdc016f0000000000cb041b000000010b400210000000010bb001bf00000a620000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000601043b000004c90160009c00000d5f0000213d0000003301000039000000000201041a000004c9052001970000000003000411000000000353004b000005420000c13d000000000306004b000005f10000c13d000004ce01000041000000800010043f0000002001000039000000840010043f0000000d01000039000000a40010043f000004cf01000041000005490000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000401100370000000000101043b000004c90110009c00000d5f0000213d000000800000043f000000a00000043f0000051501000041000012250001042e0000000001000416000000000101004b00000d5f0000c13d00000033010000390000043f0000013d0000000001000416000000000101004b00000d5f0000c13d00000071010000390000043f0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d000000000100041a0008ff00001001940000054e0000c13d000000ff02100190000006650000c13d000004d20110019700000101011001bf000000000010041b000005600000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000003302000039000000000202041a000004c9022001970000000003000411000000000223004b000005420000c13d0000002402100370000000000202043b0000000401100370000000000101043b0000006603000039000000000013041b0000006703000039000000000023041b000000800010043f000000a00020043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004ff011001c70000800d02000039000000010300003900000500040000411224121a0000040f000000010120019000000d5f0000613d0000000001000019000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b0000ffff0210008c00000d5f0000213d00000000001004350000007401000039000000200010043f00000040020000390000000001000019122411ec0000040f0000043f0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000904c90020019b000004c90220009c00000d5f0000213d0000002401100370000000000101043b000800000001001d0000ffff0110008c00000d5f0000213d0000007101000039000000000101041a000004c901100198000005fe0000c13d000004ef01000041000000730000013d0000000001000416000000000101004b00000d5f0000c13d0000006d010000390000043f0000013d0000000001000416000000000101004b00000d5f0000c13d0000006701000039000000000101041a000004410000013d0000000001000416000000000101004b00000d5f0000c13d00000510010000410000043f0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004d80210009c00000d5f0000213d0000000401100039000000000203001912240fa00000040f0000007502000039000000000202041a0000ffff0220018f122410fb0000040f000004c901100197000000400200043d00000000001204350000048a010000410000048a0320009c00000000020180190000004001200210000004ec011001c7000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d000000000100041a0008ff0000100194000005680000c13d000000ff02100190000006650000c13d000004d20110019700000101011001bf000000000010041b000005790000013d0000000001000416000000000101004b00000d5f0000c13d000000040130008a000000200110008c00000d5f0000413d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b00000000010000190000000101006039122410630000040f00000004010000390000000101100367000000000101043b0000007602000039000000000012041b0000000001000019000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000900000001001d000004c90110009c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d000000090100002900000000001004350000007301000039000800000001001d000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a0000ffff01100190000006e00000c13d000000400100043d000004d50200004100000000002104350000048a020000410000048a0310009c00000000010280190000004001100210000004d6011001c700001226000104300000000001000416000000000101004b00000d5f0000c13d0000006e01000039000000000101041a000004c901100197000000800010043f000004ca01000041000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000900000002001d0000002401100370000000000101043b000800000001001d000004c90110009c00000d5f0000213d0000000001000411000700000001001d00000000001004350000006801000039000600000001001d000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000000ff011001900000060a0000c13d000000400100043d00000044021000390000050b03000041000000000032043500000024021000390000000a030000390000066b0000013d0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000200220008c00000d5f0000413d0000000401100370000000000101043b000004c90210009c00000d5f0000213d00000000001004350000006801000039000000200010043f00000040020000390000000001000019122411ec0000040f0000000202100039000000000202041a0000000103100039000000000303041a000000000101041a000000ff011001900000000001000019000000010100c039000000800010043f000000a00030043f000000c00020043f0000051101000041000012250001042e0000000002000416000000000202004b00000d5f0000c13d000000040230008a000000400220008c00000d5f0000413d0000000402100370000000000202043b000900000002001d000004c90220009c00000d5f0000213d0000002401100370000000000101043b000800000001001d0000ffff0110008c00000d5f0000213d0000003301000039000000000101041a000004c9011001970000000002000411000000000112004b000005420000c13d000004e4010000410000000000100439000000090100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400400043d000000a401400039000000c0020000390000000000210435000004f0010000410000000000140435000000040140003900000000020004100000000000210435000000c40140003900000000000104350000008401400039000000000001043500000064014000390000000000010435000000440140003900000000000104350000002401400039000000000001043500000000010004140000000902000029000000040220008c000004dc0000613d0000048a020000410000048a0310009c00000000010280190000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004f1011001c70000000902000029000700000004001d1224121a0000040f0000000704000029000000000301001900000060033002700000048a0030019d0000048a0330019700020000000103550000000102200190000008980000613d0000000002040019000004d80140009c00000cd20000213d000000400020043f000004e4010000410000000000100439000000090100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400200043d000004f201000041000700000002001d000000000012043500000000010004140000000902000029000000040220008c0000050c0000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004d6011001c700000009020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a033001970002000000010355000000010220019000000a330000613d0000000701000029000004d80110009c00000cd20000213d0000000701000029000000400010043f000000090100002900000000001004350000007301000039000000200010043f0000048a0300004100000000010004140000048a0210009c0000000001038019000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000004d2022001970000000803000029000000000232019f000000000021041b00000000003004350000007401000039000000200010043f00000000010004140000048a0210009c0000048a01008041000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000004cb022001970000000905000029000000000252019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004f30400004100000008060000290000038f0000013d000004ce01000041000000800010043f0000002001000039000000840010043f0000000a01000039000000a40010043f0000051201000041000000c40010043f000004d0010000410000122600010430000004f401000041000000730000013d000004e4010000410000000000100439000000000100041000000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b000006650000c13d000000000100041a0007ff0000100194000006180000c13d000000ff02100190000006650000c13d000004d20110019700000101011001bf000000000010041b000006290000013d000004e4010000410000000000100439000000000100041000000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b000006650000c13d0000003301000039000000000201041a000004cb022001970000000906000029000000000262019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd0400004100000000050000191224121a0000040f000000010120019000000d5f0000613d000000080100006b000003920000c13d000004f501000041000000000200041a000000000112016f000000000010041b000003920000013d0000048a040000410000048a0310009c00000000010480190000048a03a0009c00000000040a40190000004003400210000000c001100210000000000131019f000004d6011001c700070000000a001d1224121f0000040f000000070a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000005b10000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000005a90000413d000000000705004b000005c00000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000006770000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000004d80310009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200140008c00000d5f0000413d00000000010a04330000ffff0210008c00000d5f0000213d0000000d0110008c000003920000c13d000004d90100004100000000001004390000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004da011001c70000800b020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000010110008c000003920000c13d000000400200043d000004db01000041000700000002001d000000000012043500000000010004140000000902000029000000040220008c0000094a0000c13d0000000004000031000000200140008c00000020040080390000097c0000013d000004cb02200197000000000262019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd040000410000038f0000013d000004e101000041000000800010043f0000000001000411000000840010043f00000000010004140000000902000029000000040320008c000006a00000c13d0000000004000031000000200140008c0000002004008039000006cb0000013d000000090100006b000003920000613d000000400a00043d000005010100004100000000001a043500000000010004140000000702000029000000040220008c000007610000c13d0000000003000031000000200130008c00000000040300190000002004008039000007930000013d000004e4010000410000000000100439000000000100041000000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b000006650000c13d0000003301000039000000000201041a000004cb022001970000000906000029000000000262019f000000000021041b0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004cc011001c70000800d020000390000000303000039000004cd0400004100000000050000191224121a0000040f000000010120019000000d5f0000613d000000070100006b000006420000c13d000004f501000041000000000200041a000000000112016f000000000010041b000000400100043d000004f60210009c00000cd20000213d0000002402100039000004f70300004100000000003204350000004402100039000000000300041400000060040000390000000000420435000004f802000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000048a020000410000048a0430009c00000000030280190000048a0410009c00000000010280190000004001100210000000c002300210000000000121019f000004f9011001c700008006020000391224121a0000040f00000001022001900000086e0000613d000000000101043b000000000201004b000008ec0000c13d00000002010003670000000002000031000008730000013d000000400100043d0000004402100039000004fb030000410000000000320435000000240210003900000013030000390000000000320435000004ce0200004100000000002104350000000402100039000000200300003900000000003204350000048a020000410000048a0310009c00000000010280190000004001100210000004ea011001c70000122600010430000000400200043d0000001f0430018f0000000505300272000006840000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000067c0000413d000000000604004b000006930000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000004fc01000041000000800010043f000000840040043f000000a40030043f0000000001000414000000040320008c0000070c0000c13d0000000003000031000000200130008c00000000040300190000002004008039000007370000013d0000048a040000410000048a0310009c0000000001048019000000c001100210000004e2011001c71224121f0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000006b80000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000006b00000413d000000000705004b000006c70000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000007440000613d0000001f01400039000000600110018f00000080021001bf000700000002001d000000400020043f000000200240008c00000d5f0000413d000000800200043d000000000302004b0000000003000019000000010300c039000000000332004b00000d5f0000c13d000000000202004b0000085b0000c13d000004ee01000041000000070200002900000000001204350000004001200210000004d6011001c70000122600010430000000090100002900000000001004350000000801000029000000200010043f0000048a0300004100000000010004140000048a0210009c0000000001038019000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d0000007502000039000000000302041a000004d203300197000000000101043b000000000101041a0000ffff0110018f000000000113019f000000000012041b0000006b01000039000000000201041a000004cb022001970000000903000029000000000232019f000000000021041b000000400100043d000000000031043500000000020004140000048a0320009c0000048a0400004100000000020480190000048a0310009c00000000010480190000004001100210000000c002200210000000000112019f000004d3011001c70000800d020000390000000103000039000004d4040000410000038f0000013d0000048a030000410000048a0410009c0000000001038019000000c001100210000004fd011001c71224121a0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000007240000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000071c0000413d000000000705004b000007330000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000008210000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c00000d5f0000413d000000800100043d000000000201004b0000000002000019000000010200c039000000000121004b00000d5f0000c13d000003920000013d000000400200043d0000001f0430018f0000000505300272000007510000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000007490000413d000000000604004b000007600000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a020000410000048a0310009c00000000010280190000048a03a0009c00000000020a40190000004002200210000000c001100210000000000121019f000004d6011001c7000000070200002900050000000a001d1224121f0000040f000000050a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000007800000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000007780000413d000000000705004b0000078f0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f000200000001035500000001022001900000083e0000613d0000001f01400039000000600210018f00000000050a00190000000001a20019000000000221004b00000000020000190000000102004039000004d80410009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200130008c00000d5f0000413d0000000001050433000500000001001d000004c90110009c00000d5f0000213d000000050100006b000400090000002d000007af0000613d0000006d01000039000300000001001d000000000101041a000004c901100197000000050110006b000400090000002d000009e90000c13d0000006601000039000300000001001d000000000201041a0000000401200029000000000221004b0000000002000019000000010200403900000001022001900000086a0000c13d0000000302000029000000000012041b000000400200043d00000080032000390000000704000029000000000043043500000060032000390000000904000029000000000043043500000040032000390000000504000029000000000043043500000020032000390000000404000029000000000043043500000000001204350000048a0400004100000000010004140000048a0310009c00000000010480190000048a0320009c00000000020480190000004002200210000000c001100210000000000121019f00000503011001c70000800d02000039000000010300003900000504040000411224121a0000040f000000010120019000000d5f0000613d000000070100002900000000001004350000000601000029000000200010043f00000000010004140000048a0210009c0000048a01008041000000c001100210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b0000000101100039000000000201041a000000040220002a0000086a0000413d000000000021041b000000080100006b000003920000613d000000400200043d000004d701000041000900000002001d000000000012043500000000010004140000000702000029000000040220008c00000c010000c13d0000000004000031000000200140008c000000200400803900000c330000013d000004cc011001c7000080090200003900000000050000191224121a0000040f0002000000010355000000000301001900000060033002700000048a0030019d0000048a033001970000000102200190000003920000c13d000000400200043d0000001f0430018f0000000505300272000008110000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008090000413d000000000604004b000008200000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f00000005053002720000082e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008260000413d000000000604004b0000083d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f00000005053002720000084b0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008430000413d000000000604004b0000085a0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000004d7020000410000000703000029000000000023043500000000020004140000000903000029000000040330008c000008b50000c13d0000000701100029000000400010043f000000070200002900000000020204330000ffff0320008c00000d5f0000213d0000ffff0320008c000009320000c13d0000050a010000410000000000100435000000110100003900000cd50000013d0002000000010355000000000201001900000060022002700000048a0020019d0000048a02200197000000400300043d0000001f0420018f0000000505200272000008800000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008780000413d000000000604004b0000088f0000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0430009c00000000030180190000048a0420009c000000000201801900000060012002100000004002300210000000000112019f0000122600010430000000400200043d0000001f0430018f0000000505300272000008a50000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000089d0000413d000000000604004b000008b40000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a010000410000048a0320009c0000000002018019000000c00120021000000007020000290000004002200210000000000121019f000004d6011001c700000009020000291224121f0000040f000000070a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000008d20000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000008ca0000413d000000000705004b000008e10000613d0000000506600210000000000761034f00000007066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000000102200190000008f80000613d0000001f01400039000000600110018f0000000701100029000000400010043f000000200230008c00000d5f0000413d000008640000013d000004c9011001970000007202000039000000000302041a000004cb03300197000000000313019f000000000032041b0000007102000039000000000302041a000004cb03300197000000000113019f000000000012041b0000058c0000013d000000400200043d0000001f0430018f0000000505300272000009050000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000008fd0000413d000000000604004b000009140000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f0000000505300272000009220000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b0000091a0000413d000000000604004b00000a4f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000000102200039000000080220006b00000a130000c13d000000080100002900000000001004350000007401000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000704c90010019c00000b0f0000c13d000000400100043d000004ed02000041000004340000013d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004d6011001c700000009020000291224121f0000040f000000070a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f0000000506400272000009690000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000009610000413d000000000705004b000009780000613d0000000506600210000000000761034f00000007066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000a160000613d0000001f01400039000000600110018f0000000702100029000000000112004b00000000010000190000000101004039000600000002001d000004d80220009c00000cd20000213d000000010110019000000cd20000c13d0000000601000029000000400010043f000000200140008c00000d5f0000413d00000007010000290000000001010433000004c90210009c00000d5f0000213d000004dc0110009c000003920000c13d000004dd0100004100000006040000290000000001140436000700000001001d0000000401400039000000090200002900000000002104350000048a0100004100000000020004140000048a0320009c00000000020180190000048a0340009c00000000010440190000004001100210000000c002200210000000000112019f000004de011001c7000004dc020000411224121f0000040f000000060a000029000000000301001900000060033002700000048a03300197000000600430008c000000000403001900000060040080390000001f0540018f0000000506400272000009b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000009af0000413d000000000705004b000009c60000613d0000000506600210000000000761034f00000006066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000c730000613d0000001f01400039000000e00110018f0000000601100029000500000001001d000004d80110009c00000cd20000213d0000000501000029000000400010043f000000600130008c00000d5f0000413d00000006010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b00000d5f0000c13d000000000101004b00000cca0000c13d000004e001000041000000050300002900000000001304350000000401300039000000090200002900000000002104350000048a010000410000048a0230009c00000000030180190000004001300210000004de011001c70000122600010430000000050100002900000000001004350000006c01000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000004c902100198000400000000001d000007af0000613d0000000301000029000000000101041a000000400500043d000000240350003900000009040000290000000000430435000004c9011001970000004403500039000000000013043500000502010000410000000000150435000400000005001d0000000401500039000000050300002900000000003104350000000001000414000000040320008c00000ba20000c13d0000000003000031000000200130008c0000000004030019000000200400803900000bd30000013d000004e3020000410000000000210435000004380000013d000000400200043d0000001f0430018f000000050530027200000a230000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000a1b0000413d000000000604004b00000a320000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000a400000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000a380000413d000000000604004b00000a4f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0420009c000000000201801900000040012002100000006002300210000000000121019f0000122600010430000000000b04004b000000000b00001900000a5b0000613d000000000b81034f000000000b0b043b000000030c400210000000010d00008a000000000ccd022f000000000cdc013f000000000bcb016f000000010c400210000000000bcb019f0000000000ba041b000000690c000039000000000a0c041a000000010ba00190000000010da002700000007f0bd0018f000000000b0dc0190000001f0db0008c000000000d000019000000010d002039000000000ada013f000000010aa0019000000a730000613d0000050a010000410000000000100435000000220100003900000cd50000013d000000200ab0008c0009001f0020003d00000a860000413d000000090a000029000000050da002700000050d0ed000410000050d0d000041000000200f20008c000000000d0e80190000000000c004350000001f0bb00039000000050bb002700000050d0bb00041000000000ebd004b00000a860000813d00000000000d041b000000010dd00039000000000ebd004b00000a820000413d0000001f0b20008c000000000b91034f00000aa80000a13d0000000000c00435000000200d00008a000000000fd201700000050d0d000041000000000e00001900000a990000613d0000050d0d000041000000000e000019000000000a9e0019000000000aa1034f000000000a0a043b0000000000ad041b000000010dd00039000000200ee00039000000000afe004b00000a910000413d000000000a2f004b00000aa50000813d000000030a200210000000f80aa0018f000000010f00008a000000000aaf022f000000000afa013f00000000099e0019000000000991034f000000000909043b0000000009a9016f00000000009d041b000000010920021000000001099001bf00000ab30000013d000000000902004b000000000900001900000aac0000613d00000000090b043b000000030a200210000000010d00008a000000000aad022f000000000ada013f0000000009a9016f000000010a2002100000000009a9019f00000000009c041b0000007009000039000000000039041b000000800050043f000000a00060043f000000c00070043f000000c005000039000000e00050043f000000000181034f0000001f0540018f000001400040043f000000050640027200000ac90000613d00000000070000190000000508700210000000000981034f000000000909043b000001600880003900000000009804350000000107700039000000000867004b00000ac10000413d000000000705004b00000ad80000613d0000000506600210000000000161034f00000003055002100000016006600039000000000706043300000000075701cf000000000757022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000171019f0000000000160435000001600140003900000000000104350000017f01400039000000200400008a000000000141016f000000800510008a000001000050043f0000001f0620018f0000000005210436000000050720027200000aec0000613d00000000080000190000000509800210000000000c95001900000000099b034f000000000909043b00000000009c04350000000108800039000000000978004b00000ae40000413d000000000806004b00000afb0000613d000000050770021000000000087b034f00000000077500190000000306600210000000000907043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f000000000067043500000000025200190000000000020435000001200030043f000000090240017f0000000001210019000000600110008a0000048a020000410000048a0310009c000000000102801900000000030004140000048a0430009c0000000003028019000000c0023002100000006001100210000000000121019f0000050e011001c70000800d0200003900000001030000390000050f040000410000038f0000013d0000007201000039000000000101041a000004e4020000410000000000200439000004c901100197000600000001001d00000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400200043d000000240120003900000007030000290000000000310435000004e6010000410000000000120435000700000002001d00000004012000390000000902000029000000000021043500000000010004140000000602000029000000040220008c00000b440000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004e7011001c700000006020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a033001970002000000010355000000010220019000000cad0000613d0000000701000029000004d80110009c00000cd20000213d0000000701000029000000400010043f000004e4010000410000000000100439000000090100002900000004001004430000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004e5011001c700008002020000391224121f0000040f000000010220019000000ba10000613d000000000101043b000000000101004b00000d5f0000613d000000400300043d0000004401300039000004e8020000410000000000210435000000240130003900000002020000390000000000210435000004e9010000410000000001130436000600000001001d000700000003001d00000004013000390000002002000039000000000021043500000000010004140000000902000029000000040220008c00000b7f0000613d0000048a020000410000048a0310009c000000000102801900000007040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004ea011001c700000009020000291224121a0000040f000000000301001900000060033002700000048a0030019d0000048a033001970002000000010355000000010220019000000d020000613d0000000701000029000004d80110009c00000cd20000213d0000000703000029000000400030043f000000080100002900000006020000290000000000120435000000090100002900000000001304350000048a0400004100000000010004140000048a0210009c00000000010480190000048a0230009c00000000030480190000004002300210000000c001100210000000000121019f000004d1011001c70000800d020000390000000103000039000004eb040000411224121a0000040f000000010120019000000d5f0000613d000000400100043d000000090200002900000000002104350000048a0210009c0000048a010080410000004001100210000004ec011001c7000012250001042e000000000001042f0000048a030000410000048a0410009c000000000103801900000004050000290000048a0450009c00000000030540190000004003300210000000c001100210000000000131019f000004ea011001c71224121a0000040f000000040a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000bc00000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000bb80000413d000000000705004b00000bcf0000613d0000000506600210000000000761034f00000004066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000be40000613d0000001f01400039000000600210018f0000000401200029000000000221004b00000000020000190000000102004039000004d80410009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200130008c00000d5f0000413d00000004010000290000000001010433000400000001001d000007af0000013d000000400200043d0000001f0430018f000000050530027200000bf10000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000be90000413d000000000604004b00000c000000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a020000410000048a0310009c000000000102801900000009040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004d6011001c700000007020000291224121f0000040f000000090a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000c200000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c180000413d000000000705004b00000c2f0000613d0000000506600210000000000761034f00000009066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000c900000613d0000001f01400039000000600210018f0000000901200029000000000221004b00000000020000190000000102004039000004d80310009c00000cd20000213d000000010220019000000cd20000c13d000000400010043f000000200140008c00000d5f0000413d000000090100002900000000010104330000ffff0210008c00000d5f0000213d0000000d0110008c000003920000413d0000006e01000039000700000001001d000000000101041a000004c901100197000900000001001d00000000001004350000006c01000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000101041a000004c902100198000003920000613d0000006d01000039000000000101041a000000400500043d000000240350003900000505040000410000000000430435000004c9011001970000004403500039000000000013043500000502010000410000000000150435000600000005001d0000000401500039000000090300002900000000003104350000000001000414000000040320008c00000d1f0000c13d0000000003000031000000200130008c0000000004030019000000200400803900000d500000013d000000400200043d0000001f0430018f000000050530027200000c800000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000c780000413d000000000604004b00000c8f0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000c9d0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000c950000413d000000000604004b00000cac0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000cba0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000cb20000413d000000000604004b00000cc90000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000060100002900000040011000390000000002010433000000070100002900000000010104330000000503000029000004df0330009c00000cd80000a13d0000050a0100004100000000001004350000004101000039000000040010043f000004de01000041000012260001043000000005040000290000006003400039000000400030043f0000004003400039000700000003001d000000000023043500000001020000390000000002240436000600000002001d0000000000120435000000090100002900000000001004350000000801000029000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f000000010220019000000d5f0000613d000000000101043b000000000201041a000001000300008a000000000232016f00000005030000290000000003030433000000000303004b000000010220c1bf000000000021041b000000060200002900000000020204330000000103100039000000000023041b000000020110003900000007020000290000000002020433000000000021041b000003920000013d000000400200043d0000001f0430018f000000050530027200000d0f0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000d070000413d000000000604004b00000d1e0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a030000410000048a0410009c000000000103801900000006050000290000048a0450009c00000000030540190000004003300210000000c001100210000000000131019f000004ea011001c71224121a0000040f000000060a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000d3d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000d350000413d000000000705004b00000d4c0000613d0000000506600210000000000761034f00000006066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000d610000613d0000001f01400039000000600110018f0000000605100029000000000215004b00000000020000190000000102004039000500000005001d000004d80550009c00000cd20000213d000000010220019000000cd20000c13d0000000502000029000000400020043f000000200230008c00000d7e0000813d00000000010000190000122600010430000000400200043d0000001f0430018f000000050530027200000d6e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000d660000413d000000000604004b00000d7d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d00000006020000290000000002020433000100000002001d0000000702000029000000000502041a00000506020000410000000506000029000000000026043500000004026000390000000006000410000200000006001d00000000006204350000000002000414000004c905500197000600000005001d000000040550008c00000dc30000613d0000048a010000410000048a0320009c000000000201801900000005040000290000048a0340009c00000000010440190000004001100210000000c002200210000000000112019f000004de011001c700000006020000291224121f0000040f000000050a000029000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000dae0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000da60000413d000000000705004b00000dbd0000613d0000000506600210000000000761034f00000005066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000dde0000613d0000001f01400039000000600110018f0000000502100029000900000002001d000004d80220009c00000cd20000213d0000000902000029000000400020043f000000200240008c00000d5f0000413d00000005020000290000000002020433000500000002001d00000507020000410000000904000029000000000024043500000000020004140000000204000029000000040440008c00000dfb0000c13d0000000901100029000a00000000001d000004d80210009c00000cd20000213d000000400010043f00000000010004150000000a0110008a00000020011000c900000e390000013d000000400200043d0000001f0430018f000000050530027200000deb0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000de30000413d000000000604004b00000dfa0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d0000048a010000410000048a0320009c000000000201801900000009040000290000048a0340009c00000000010440190000004001100210000000c002200210000000000112019f000004d6011001c700000002020000291224121f0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000e190000613d000000000700001900000005087002100000000909800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000e110000413d000000000705004b00000e280000613d0000000506600210000000000761034f00000009066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f00020000000103550000006405000039000b00000000001d000000010120019000000e400000613d0000001f01400039000000600110018f0000000901100029000004d80210009c00000cd20000213d000000400010043f00000000010004150000000b0110008a00000020011000c9000000200230008c00000d5f0000413d000000090200002900000000050204330000000501100270000000000105001f000000000105004b00000e400000c13d00000064050000390000006f01000039000000000401041a000000000104004b000000000100001900000e500000613d00000000125400a900000000414200d9000000000151004b0000086a0000c13d000000000102004b000000000100001900000e500000613d00000508412000d100000000422100d9000005080220009c0000086a0000c13d000000010200006b00000e560000c13d0000050a010000410000000000100435000000120100003900000cd50000013d000000050500002900000004425000b9000000000405004b00000e670000c13d00000509040000410000000406000029000000000506004b000000000500001900000000050440190000050906600197000000000706004b000000000400a019000005090660009c000000000405c019000000000404004b0000086a0000c13d00000e760000013d00000509040000410000000406000029000000000506004b000000000500001900000000050440190000050906600197000000000706004b000000000400a019000005090660009c000000000405c019000000000404004b0000086a0000c13d00000005542000fa000000040440006c0000086a0000c13d0000000304000029000000000404041a000000000504004b00000e520000613d0000000405000029000000010550021000000000654500d9000000030600008a000000000665004b0000086a0000213d000000646110011a00000001611000fa000000020550003900000000525200d900000000424200d9000000000421004b0000000001028019000000000201004b000003920000613d000000050210006b000003920000a13d0005000520100122000000050110006a000000400400043d00000024024000390000000000120435000004fc010000410000000000140435000900000004001d00000004014000390000000802000029000000000021043500000000010004140000000602000029000000040220008c00000e9e0000c13d000000200130008c0000000004030019000000200400803900000ecf0000013d0000048a020000410000048a0310009c000000000102801900000009040000290000048a0340009c00000000020440190000004002200210000000c001100210000000000121019f000004e7011001c700000006020000291224121a0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000ebc0000613d000000000700001900000005087002100000000909800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000eb40000413d000000000705004b00000ecb0000613d0000000506600210000000000761034f00000009066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000f310000613d0000001f01400039000000600110018f0000000905100029000000000215004b00000000020000190000000102004039000800000005001d000004d80550009c00000cd20000213d000000010220019000000cd20000c13d0000000802000029000000400020043f000000200230008c00000d5f0000413d00000009020000290000000002020433000000000302004b0000000003000019000000010300c039000000000232004b00000d5f0000c13d0000000702000029000000000202041a0000003303000039000000000303041a0000000806000029000000240560003900000005070000290000000000750435000004fc0500004100000000005604350000000405600039000004c90330019700000000003504350000000003000414000004c902200197000000040520008c00000f280000613d0000048a010000410000048a0430009c000000000301801900000008050000290000048a0450009c00000000010540190000004001100210000000c003300210000000000113019f000004e7011001c71224121a0000040f000000000301001900000060033002700000048a03300197000000200430008c000000000403001900000020040080390000001f0540018f000000050640027200000f130000613d000000000700001900000005087002100000000809800029000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f0b0000413d000000000705004b00000f220000613d0000000506600210000000000761034f00000008066000290000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000000000003001f0002000000010355000000010220019000000f4e0000613d0000001f01400039000000600110018f0000000801100029000004d80210009c00000cd20000213d000000400010043f000000200140008c00000d5f0000413d000000080100002900000000010104330000073e0000013d000000400200043d0000001f0430018f000000050530027200000f3e0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000f360000413d000000000604004b00000f4d0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d000000400200043d0000001f0430018f000000050530027200000f5b0000613d000000000600001900000005076002100000000008720019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00000f530000413d000000000604004b00000f6a0000613d0000000505500210000000000151034f00000000055200190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000a4f0000013d00000000030104330000000002320436000000000403004b00000f770000613d000000000400001900000000054200190000002004400039000000000614001900000000060604330000000000650435000000000534004b00000f700000413d000000000132001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000000040110008a00000509020000410000003f0310008c000000000300001900000000030220190000050901100197000000000401004b0000000002008019000005090110009c000000000203c019000000000102004b00000f8b0000613d000000000001042d000000000100001900001226000104300000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000004d80310009c00000f9a0000213d000000010220019000000f9a0000c13d000000400010043f000000000001042d0000050a0100004100000000001004350000004101000039000000040010043f000004de01000041000012260001043000000000030100190000001f013000390000050904000041000000000521004b0000000005000019000000000504401900000509062001970000050901100197000000000761004b000000000400a019000000000161013f000005090110009c000000000405c019000000000104004b00000feb0000613d0000000106000367000000000136034f000000000401043b000005140140009c00000fe50000813d0000003f01400039000000200500008a000000000551016f000000400100043d0000000005510019000000000715004b00000000070000190000000107004039000004d80850009c00000fe50000213d000000010770019000000fe50000c13d000000400050043f000000000541043600000020033000390000000007430019000000000227004b00000feb0000213d000000000336034f0000001f0240018f000000050640027200000fd30000613d000000000700001900000005087002100000000009850019000000000883034f000000000808043b00000000008904350000000107700039000000000867004b00000fcb0000413d000000000702004b00000fe20000613d0000000506600210000000000363034f00000000066500190000000302200210000000000706043300000000072701cf000000000727022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000272019f000000000026043500000000024500190000000000020435000000000001042d0000050a0100004100000000001004350000004101000039000000040010043f000004de010000410000122600010430000000000100001900001226000104300000006a05000039000000000405041a000000010640019000000001014002700000007f0210018f000000000201c0190000001f0120008c00000000010000190000000101002039000000010110018f000000000116004b0000101e0000c13d000000400100043d0000000003210436000000000606004b0000100b0000613d0000000000500435000000000402004b0000000004000019000010110000613d0000050c0500004100000000040000190000000006430019000000000705041a000000000076043500000001055000390000002004400039000000000624004b000010030000413d000010110000013d000001000500008a000000000454016f0000000000430435000000000202004b000000200400003900000000040060190000003f02400039000000200300008a000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000004d80420009c000010220000213d0000000103300190000010220000c13d000000400020043f000000000001042d0000050a0100004100000000001004350000002201000039000010250000013d0000050a0100004100000000001004350000004101000039000000040010043f000004de0100004100001226000104300000006905000039000000000405041a000000010640019000000001014002700000007f0210018f000000000201c0190000001f0120008c00000000010000190000000101002039000000010110018f000000000116004b000010590000c13d000000400100043d0000000003210436000000000606004b000010460000613d0000000000500435000000000402004b00000000040000190000104c0000613d0000050d0500004100000000040000190000000006430019000000000705041a000000000076043500000001055000390000002004400039000000000624004b0000103e0000413d0000104c0000013d000001000500008a000000000454016f0000000000430435000000000202004b000000200400003900000000040060190000003f02400039000000200300008a000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000004d80420009c0000105d0000213d00000001033001900000105d0000c13d000000400020043f000000000001042d0000050a0100004100000000001004350000002201000039000010600000013d0000050a0100004100000000001004350000004101000039000000040010043f000004de010000410000122600010430000000000101004b000010660000613d000000000001042d000000400100043d00000044021000390000051203000041000000000032043500000024021000390000000a030000390000000000320435000004ce0200004100000000002104350000000402100039000000200300003900000000003204350000048a020000410000048a0310009c00000000010280190000004001100210000004ea011001c70000122600010430000000400100043d000005160210009c000010a40000813d0000002402100039000004f70300004100000000003204350000004402100039000000000300041400000060040000390000000000420435000004f802000041000000000021043500000064021000390000000000020435000000040210003900000000000204350000048a020000410000048a0430009c00000000030280190000048a0410009c00000000010280190000004001100210000000c002300210000000000121019f000004f9011001c700008006020000391224121a0000040f0000000102200190000010aa0000613d000000000101043b000000000201004b000010b00000613d000004c9011001970000007202000039000000000302041a000004cb03300197000000000313019f000000000032041b0000007102000039000000000302041a000004cb03300197000000000113019f000000000012041b000000000001042d0000050a0100004100000000001004350000004101000039000000040010043f000004de0100004100001226000104300002000000010355000000000201001900000060022002700000048a0020019d0000048a02200197000010b20000013d00000002010003670000000002000031000000400300043d0000001f0420018f0000000505200272000010bf0000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010b70000413d000000000604004b000010ce0000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0420009c00000000020180190000048a0430009c000000000301801900000040013002100000006002200210000000000112019f00001226000104300000001f0420018f000000000323043600000001011003670000000505200272000010e50000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000010dd0000413d000000000604004b000010f40000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f0000000000150435000000000123001900000000000104350000001f01200039000000200200008a000000000121016f0000000001130019000000000001042d0004000000000002000400000001001d0000007101000039000000000101041a000304c90010019c000011980000613d0000ffff0120018f00000000001004350000007401000039000000200010043f0000048a0100004100000000020004140000048a0320009c0000000002018019000000c001200210000004d1011001c700008010020000391224121f0000040f0000000102200190000011900000613d000000400200043d000000000101043b000000000101041a000004c903100198000011a10000613d000005160120009c0000000408000029000011920000813d000000c40420003900000060010000390000000000140435000000a40420003900000003050000290000000000540435000000840420003900000000003404350000002403200039000005170400004100000000004304350000000003080433000000e40420003900000000003404350000010404200039000000000503004b000011300000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000635004b000011290000413d000000000443001900000000000404350000001f03300039000000200400008a000000000343016f000000800430003900000064052000390000000006000414000000000045043500000044042000390000000000140435000004f8010000410000000000120435000000040120003900000000000104350000048a010000410000048a0420009c0000000002018019000000400220021000000104033000390000048a0430009c00000000030180190000006003300210000000000223019f0000048a0360009c0000000006018019000000c001600210000000000121019f000004cc011001c700008006020000391224121a0000040f0000000102200190000011a90000613d000000000101043b000000000201004b000011af0000613d000004c902100197000000400300043d000004df0130009c000011920000213d0000006001300039000000400010043f00000001010000390000000004130436000300000003001d0000004001300039000200000001001d0000000000010435000100000004001d0000000000040435000400000002001d00000000002004350000006801000039000000200010043f0000048a0300004100000000010004140000048a0210009c0000000001038019000000c001100210000004d1011001c700008010020000391224121f0000040f0000000102200190000011900000613d000000000101043b000000000201041a000001000300008a000000000232016f00000003030000290000000003030433000000000303004b000000010220c1bf000000000021041b000000010200002900000000020204330000000103100039000000000023041b000000020110003900000002020000290000000002020433000000000021041b00000000010004140000048a0210009c0000048a01008041000000c001100210000004cc011001c70000800d0200003900000003030000390000000005000411000005180400004100000004060000291224121a0000040f0000000101200190000011900000613d0000000401000029000000000001042d000000000100001900001226000104300000050a0100004100000000001004350000004101000039000000040010043f000004de010000410000122600010430000000400100043d000004ef0200004100000000002104350000048a020000410000048a0310009c00000000010280190000004001100210000004d6011001c70000122600010430000004d50100004100000000001204350000048a010000410000048a0320009c00000000020180190000004001200210000004d6011001c700001226000104300002000000010355000000000201001900000060022002700000048a0020019d0000048a02200197000011b10000013d00000002010003670000000002000031000000400300043d0000001f0420018f0000000505200272000011be0000613d000000000600001900000005076002100000000008730019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b000011b60000413d000000000604004b000011cd0000613d0000000505500210000000000151034f00000000055300190000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000048a010000410000048a0420009c00000000020180190000048a0430009c000000000301801900000040013002100000006002200210000000000112019f0000122600010430000000000101004b000011d90000613d000000000001042d000000400100043d00000044021000390000050b03000041000000000032043500000024021000390000000a030000390000000000320435000004ce0200004100000000002104350000000402100039000000200300003900000000003204350000048a020000410000048a0310009c00000000010280190000004001100210000004ea011001c70000122600010430000000000001042f0000048a030000410000048a0410009c000000000103801900000040011002100000048a0420009c00000000020380190000006002200210000000000112019f00000000020004140000048a0420009c0000000002038019000000c002200210000000000112019f000004cc011001c700008010020000391224121f0000040f0000000102200190000012000000613d000000000101043b000000000001042d0000000001000019000012260001043000000000050100190000000000200439000000040130008c000012090000a13d0000000501400270000000000101003100000004001004430000048a0100004100000000020004140000048a0420009c00000000020180190000048a0430009c00000000030180190000006001300210000000c002200210000000000112019f00000519011001c700000000020500191224121f0000040f0000000102200190000012190000613d000000000101043b000000000001042d000000000001042f0000121d002104210000000102000039000000000001042d0000000002000019000000000001042d00001222002104230000000102000039000000000001042d0000000002000019000000000001042d0000122400000432000012250001042e0000122600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000111e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000c4d66de700000000000000000000000000000000000000000000000000000000cec4105100000000000000000000000000000000000000000000000000000000ef67fde500000000000000000000000000000000000000000000000000000000ef67fde600000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f832899100000000000000000000000000000000000000000000000000000000cec4105200000000000000000000000000000000000000000000000000000000d6e9e80300000000000000000000000000000000000000000000000000000000ed9674bd00000000000000000000000000000000000000000000000000000000caeee3a200000000000000000000000000000000000000000000000000000000caeee3a300000000000000000000000000000000000000000000000000000000ccf5464800000000000000000000000000000000000000000000000000000000cd93b53200000000000000000000000000000000000000000000000000000000c4d66de800000000000000000000000000000000000000000000000000000000c7d7d0c900000000000000000000000000000000000000000000000000000000a082eb0d00000000000000000000000000000000000000000000000000000000b0ca0c8200000000000000000000000000000000000000000000000000000000b0ca0c8300000000000000000000000000000000000000000000000000000000b0e21e8a00000000000000000000000000000000000000000000000000000000ba5ea0d500000000000000000000000000000000000000000000000000000000a082eb0e00000000000000000000000000000000000000000000000000000000a64b6e5f00000000000000000000000000000000000000000000000000000000a998e9fb00000000000000000000000000000000000000000000000000000000939d9f1e00000000000000000000000000000000000000000000000000000000939d9f1f00000000000000000000000000000000000000000000000000000000963a9478000000000000000000000000000000000000000000000000000000009a8a0592000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000008f32d59b000000000000000000000000000000000000000000000000000000005979e754000000000000000000000000000000000000000000000000000000006e9960c200000000000000000000000000000000000000000000000000000000787dce3c00000000000000000000000000000000000000000000000000000000787dce3d000000000000000000000000000000000000000000000000000000007d8fb641000000000000000000000000000000000000000000000000000000007ff94bb2000000000000000000000000000000000000000000000000000000006e9960c300000000000000000000000000000000000000000000000000000000715018a600000000000000000000000000000000000000000000000000000000743bbc2f000000000000000000000000000000000000000000000000000000005de9a136000000000000000000000000000000000000000000000000000000005de9a13700000000000000000000000000000000000000000000000000000000666018a5000000000000000000000000000000000000000000000000000000006bced5a2000000000000000000000000000000000000000000000000000000005979e755000000000000000000000000000000000000000000000000000000005c38eb3a000000000000000000000000000000000000000000000000000000003fc8cef2000000000000000000000000000000000000000000000000000000004452c2b1000000000000000000000000000000000000000000000000000000004452c2b200000000000000000000000000000000000000000000000000000000487a8a76000000000000000000000000000000000000000000000000000000004a387bef000000000000000000000000000000000000000000000000000000003fc8cef3000000000000000000000000000000000000000000000000000000004220bd460000000000000000000000000000000000000000000000000000000042d9210600000000000000000000000000000000000000000000000000000000262d0a8400000000000000000000000000000000000000000000000000000000262d0a850000000000000000000000000000000000000000000000000000000035a750de0000000000000000000000000000000000000000000000000000000036524663000000000000000000000000000000000000000000000000000000000cb175e30000000000000000000000000000000000000000000000000000000025772ad9000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000800000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e008c379a000000000000000000000000000000000000000000000000000000000494e56414c49445f4f574e45520000000000000000000000000000000000000000000000000000000000000000000000000000640000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000002000000000000000000000000000000000000200000000000000000000000004fa58418e580e78539e8d3d8d17d94dbaca0927533953c8248f313e6f8927c21adf22763000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000d1bbd49c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff9a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000000f15023b000000000000000000000000000000000000000000000000000000000000000000000000000000003d5409cce1d45233de1d4ebdee74b8e004abdd135de9a137000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f822f134e00000000000000000000000000000000000000000000000000000000aae4b8f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000037bb0061000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000099a88ec400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000030780000000000000000000000000000000000000000000000000000000000008932a90d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000005e7b70a9e6f0b4c7cf2657cf563ce85eed3aebb7731396118d01a195d218fd5e0000000000000000000000000000000000000020000000000000000000000000d6a7ab8e00000000000000000000000000000000000000000000000000000000a2cfffa00000000000000000000000000000000000000000000000000000000082b5cfcc000000000000000000000000000000000000000000000000000000006eadde430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4000000000000000000000000f0ba604000000000000000000000000000000000000000000000000000000000d36d021c4aa145e30eadc73e34284101030d688b9eb9413a4dc3af40ab1d4748feb51c9f00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff000000000000000000000000000000000000000000000000ffffffffffffff7b010000ed89a9abe7f27c522a89d1c165b742f032da6ae4b42f62bfda768e4bf99c4d535bdea7cd8a978f128b93471df48c7dbab89d703809115bdc118c235bfd02000000000000000000000000000000000000840000000000000000000000006ef25c3ab4fb9cba75ff1971e3f261040c39b067df172dd5185087fc5553a5b6414c52454144595f494e495449414c495a454400000000000000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000080000000000000000000000000000008fc00000000000000000000000000000000000000000000000002000000000000000000000000000000000000400000008000000000000000007b2ce3c83b45f79993ff2cbf5651caff2dfe04010b4846e03066b84e3e4059bb9d76ea5800000000000000000000000000000000000000000000000000000000c1e553e70000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000a00000000000000000000000003b50eb9d9b4a8db204f2928c9e572c2865b0d02803493ccb6aa256848323ebb70000000000000000000000000000000000000000000000000de0b6b3a764000070a0823100000000000000000000000000000000000000000000000000000000ba5ea0d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006c6b935b8bbd4000080000000000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000004f4e4c595f4c4f434b5300000000000000000000000000000000000000000000116fea137db6e131133e7f2bab296045d8f41cc5607279db17b218cab0929a517fb4302e8e91f9110a6554c2c0a24601252c2a42c2220ca988efcfe3999143080200000000000000000000000000000000000000000000800000000000000000a14230a1687e9bb8cdc0f3931d27c3a806e88c1c2235ba7756d6911feb35be67b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610300000000000000000000000000000000000000600000008000000000000000004f4e4c595f4f574e455200000000000000000000000000000000000000000000c640752d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7c010001cfcb8d4a4136647d024e21a6ed4207383d3ffddf7dfb8aac303d71d94901017ed19df0c7f8acc436147b234b09664a9fb4797b4fa3fb9e599c2eb67be7020000020000000000000000000000000000000000000000000000000000000089f31d61167d6a7c673447a52c2d21e390b78f5d0de875ce7fd82f55a99efe05"},"methodIdentifiers":{"__initializeOwnable(address)":"b0ca0c83","addLockTemplate(address,uint16)":"caeee3a3","chainId()":"9a8a0592","computeAvailableDiscountFor(address,uint256)":"0cb175e3","configUnlock(address,address,uint256,string,string,uint256)":"7d8fb641","createLock(uint256,address,uint256,uint256,string,bytes12)":"42d92106","createUpgradeableLock(bytes)":"4452c2b2","createUpgradeableLockAtVersion(bytes,uint16)":"487a8a76","estimatedGasForPurchase()":"743bbc2f","getAdmin()":"6e9960c3","getGlobalBaseTokenURI()":"7ff94bb2","getGlobalTokenSymbol()":"35a750de","globalBaseTokenURI()":"a998e9fb","globalTokenSymbol()":"cec41052","grossNetworkProduct()":"d6e9e803","initialize(address)":"c4d66de8","initializeProxyAdmin()":"c7d7d0c9","isOwner()":"8f32d59b","locks(address)":"5de9a137","networkBaseFee()":"ba5ea0d5","owner()":"8da5cb5b","postLockUpgrade()":"ed9674bd","protocolFee()":"b0e21e8a","proxyAdminAddress()":"5979e755","publicLockAddress()":"f8328991","publicLockImpls(uint16)":"666018a5","publicLockLatestVersion()":"cd93b532","publicLockVersions(address)":"25772ad9","recordConsumedDiscount(uint256,uint256)":"36524663","recordKeyPurchase(uint256,address)":"939d9f1f","removeLock(address)":"4a387bef","renounceOwnership()":"715018a6","resetTrackedValue(uint256,uint256)":"963a9478","setLockTemplate(address)":"ef67fde6","setOracle(address,address)":"5c38eb3a","setProtocolFee(uint256)":"787dce3d","totalDiscountGranted()":"a082eb0e","transferOwnership(address)":"f2fde38b","transferTokens(address,address,uint256)":"a64b6e5f","udt()":"262d0a85","uniswapOracles(address)":"6bced5a2","unlockVersion()":"4220bd46","upgradeLock(address,uint16)":"ccf54648","weth()":"3fc8cef3"}},"irOptimized":"/// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\nobject \"Unlock_3993\" {\n code {\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := datasize(\"Unlock_3993_deployed\")\n codecopy(_1, dataoffset(\"Unlock_3993_deployed\"), _2)\n return(_1, _2)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"Unlock_3993_deployed\" {\n code {\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _1 := memoryguard(0x80)\n let _2 := 64\n mstore(_2, _1)\n let _3 := 4\n if iszero(lt(calldatasize(), _3))\n {\n let _4 := 0\n switch shr(224, calldataload(_4))\n case 0x0cb175e3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n pop(abi_decode_address_27006())\n mstore(_1, _4)\n mstore(add(_1, 32), _4)\n return(_1, _2)\n }\n case 0x25772ad9 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n mstore(_4, and(abi_decode_address_27006(), sub(shl(160, 1), 1)))\n mstore(32, /** @src 0:90800:90819 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned := and(sload(keccak256(_4, _2)), 0xffff)\n let memPos := mload(_2)\n mstore(memPos, cleaned)\n return(memPos, 32)\n }\n case 0x262d0a85 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value := and(sload(/** @src 0:88242:88260 \"address public udt\" */ 110), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_1 := mload(_2)\n mstore(memPos_1, value)\n return(memPos_1, 32)\n }\n case 0x35a750de {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let converted := copy_array_from_storage_to_memory_string()\n let memPos_2 := mload(_2)\n mstore(memPos_2, 32)\n return(memPos_2, sub(abi_encode_string(converted, add(memPos_2, 32)), memPos_2))\n }\n case 0x36524663 {\n if callvalue() { revert(_4, _4) }\n let param, param_1 := abi_decode_uint256t_uint256(calldatasize())\n mstore(_4, /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(0x20, /** @src 0:87274:87279 \"locks\" */ 0x68)\n /// @src 0:87266:87315 \"require(locks[msg.sender].deployed, \\\"ONLY_LOCKS\\\")\"\n require_helper_stringliteral_2f7a(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(keccak256(_4, _2)), 0xff))\n return(_4, _4)\n }\n case 0x3fc8cef3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_1 := and(sload(/** @src 0:88158:88177 \"address public weth\" */ 109), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_3 := mload(_2)\n mstore(memPos_3, value_1)\n return(memPos_3, 32)\n }\n case 0x4220bd46 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let memPos_4 := mload(_2)\n mstore(memPos_4, /** @src 0:101468:101470 \"12\" */ 0x0c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(memPos_4, 32)\n }\n case 0x42d92106 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 192) { revert(_4, _4) }\n let value1 := abi_decode_address()\n let offset := calldataload(132)\n if gt(offset, 0xffffffffffffffff) { revert(_4, _4) }\n let value4, value5 := abi_decode_string_calldata(add(_3, offset), calldatasize())\n let value_2 := calldataload(164)\n if iszero(eq(value_2, and(value_2, shl(160, 0xffffffffffffffffffffffff)))) { revert(_4, _4) }\n /// @src 0:92718:92939 \"abi.encodeWithSignature(...\"\n let expr_mpos := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:92718:92939 \"abi.encodeWithSignature(...\"\n mstore(add(expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ shl(224, 0x6eadde43))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ add(expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), /** @src 0:92817:92827 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), calldataload(_3))\n let _5 := sub(shl(160, 1), 1)\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100), and(value1, _5))\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 132), calldataload(68))\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 164), calldataload(100))\n mstore(add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 196), 192)\n /// @src 0:92718:92939 \"abi.encodeWithSignature(...\"\n let _6 := sub(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ abi_encode_string_calldata(value4, value5, add(/** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 228)), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ expr_mpos)\n mstore(expr_mpos, add(_6, not(31)))\n finalize_allocation(expr_mpos, _6)\n /// @src 0:92946:92980 \"return createUpgradeableLock(data)\"\n let var := /** @src 0:93665:93744 \"createUpgradeableLockAtVersion(...\" */ fun_createUpgradeableLockAtVersion(/** @src 0:92953:92980 \"createUpgradeableLock(data)\" */ expr_mpos, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:93715:93738 \"publicLockLatestVersion\" */ 0x75), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff))\n let memPos_5 := mload(_2)\n mstore(memPos_5, and(var, _5))\n return(memPos_5, 32)\n }\n case 0x4452c2b2 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let offset_1 := calldataload(_3)\n if gt(offset_1, 0xffffffffffffffff) { revert(_4, _4) }\n let value0 := abi_decode_bytes(add(_3, offset_1), calldatasize())\n /// @src 0:93750:93764 \"return newLock\"\n let var_1 := /** @src 0:93665:93744 \"createUpgradeableLockAtVersion(...\" */ fun_createUpgradeableLockAtVersion(value0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:93715:93738 \"publicLockLatestVersion\" */ 0x75), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff))\n let memPos_6 := mload(_2)\n mstore(memPos_6, and(var_1, sub(shl(160, 1), 1)))\n return(memPos_6, 32)\n }\n case 0x487a8a76 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let offset_2 := calldataload(_3)\n if gt(offset_2, 0xffffffffffffffff) { revert(_4, _4) }\n let value0_1 := abi_decode_bytes(add(_3, offset_2), calldatasize())\n let ret := fun_createUpgradeableLockAtVersion(value0_1, abi_decode_uint16())\n let memPos_7 := mload(_2)\n mstore(memPos_7, and(ret, sub(shl(160, 1), 1)))\n return(memPos_7, 32)\n }\n case 0x4a387bef {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_2 := abi_decode_address_27006()\n let _7 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _7)))\n mstore(_4, and(value0_2, _7))\n mstore(32, /** @src 0:106247:106252 \"locks\" */ 0x68)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot := keccak256(_4, _2)\n sstore(dataSlot, _4)\n sstore(add(dataSlot, 1), _4)\n sstore(add(dataSlot, 2), _4)\n return(_4, _4)\n }\n case 0x5979e755 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_3 := and(sload(/** @src 0:88488:88520 \"address public proxyAdminAddress\" */ 113), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_8 := mload(_2)\n mstore(memPos_8, value_3)\n return(memPos_8, 32)\n }\n case 0x5c38eb3a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_3 := abi_decode_address_27006()\n let value1_1 := abi_decode_address()\n let _8 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _8)))\n let _9 := and(/** @src 0:103157:103189 \"IUniswapOracleV3(_oracleAddress)\" */ value1_1, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _8)\n let _10 := and(value0_3, _8)\n mstore(_4, _10)\n mstore(32, /** @src 0:103125:103139 \"uniswapOracles\" */ 0x6c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _11 := keccak256(_4, _2)\n sstore(_11, or(and(sload(_11), shl(160, 0xffffffffffffffffffffffff)), _9))\n /// @src 0:103195:103304 \"if (_oracleAddress != address(0)) {...\"\n if /** @src 0:103199:103227 \"_oracleAddress != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _9))\n /// @src 0:103195:103304 \"if (_oracleAddress != address(0)) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_1 := and(sload(/** @src 0:103292:103296 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _8)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n if iszero(extcodesize(_9))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n let _12 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n mstore(_12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xc640752d))\n mstore(/** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ add(_12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _10)\n mstore(add(/** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ _12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), cleaned_1)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n let _13 := call(gas(), _9, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ _12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68, /** @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\" */ _12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n if iszero(_13)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos := mload(_2)\n returndatacopy(pos, _4, returndatasize())\n revert(pos, returndatasize())\n }\n /// @src 0:103237:103297 \"IUniswapOracleV3(_oracleAddress).update(_tokenAddress, weth)\"\n if _13\n {\n finalize_allocation_27015(_12)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n _4 := _4\n }\n }\n return(_4, _4)\n }\n case 0x5de9a137 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n mstore(_4, and(abi_decode_address_27006(), sub(shl(160, 1), 1)))\n mstore(32, /** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ 104)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot_1 := keccak256(_4, _2)\n let value_4 := and(sload(/** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ dataSlot_1), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xff)\n let _14 := sload(/** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ add(dataSlot_1, 1))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _15 := sload(/** @src 0:87488:87533 \"mapping(address => LockBalances) public locks\" */ add(dataSlot_1, 2))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_9 := mload(_2)\n mstore(memPos_9, iszero(iszero(value_4)))\n mstore(add(memPos_9, 32), _14)\n mstore(add(memPos_9, _2), _15)\n return(memPos_9, 96)\n }\n case 0x666018a5 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value_5 := calldataload(_3)\n let _16 := and(value_5, 0xffff)\n if iszero(eq(value_5, _16)) { revert(0, 0) }\n mstore(_4, _16)\n mstore(32, /** @src 0:91012:91028 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_2 := and(sload(keccak256(_4, _2)), sub(shl(160, 1), 1))\n let memPos_10 := mload(_2)\n mstore(memPos_10, cleaned_2)\n return(memPos_10, 32)\n }\n case 0x6bced5a2 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _17 := sub(shl(160, 1), 1)\n mstore(_4, and(abi_decode_address_27006(), _17))\n mstore(32, /** @src 0:88038:88096 \"mapping(address => IUniswapOracleV3) public uniswapOracles\" */ 108)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let value_6 := and(sload(keccak256(_4, _2)), _17)\n let memPos_11 := mload(_2)\n mstore(memPos_11, value_6)\n return(memPos_11, 32)\n }\n case 0x6e9960c3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let cleaned_3 := and(sload(/** @src 0:104217:104283 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_12 := mload(_2)\n mstore(memPos_12, cleaned_3)\n return(memPos_12, 32)\n }\n case 0x715018a6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _18 := sload(/** @src 0:84232:84238 \"_owner\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _19 := and(_18, sub(shl(160, 1), 1))\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _19))\n sstore(/** @src 0:84232:84238 \"_owner\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_18, shl(160, 0xffffffffffffffffffffffff)))\n /// @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0, 0, /** @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, _19, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0)\n return(_4, _4)\n }\n case 0x743bbc2f {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _20 := sload(/** @src 0:88322:88357 \"uint public estimatedGasForPurchase\" */ 111)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_13 := mload(_2)\n mstore(memPos_13, _20)\n return(memPos_13, 32)\n }\n case 0x787dce3d {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))))\n sstore(/** @src 0:101641:101667 \"protocolFee = _protocolFee\" */ 0x76, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ calldataload(_3))\n return(_4, _4)\n }\n case 0x7d8fb641 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 192) { revert(_4, _4) }\n let value0_4 := abi_decode_address_27006()\n let value1_2 := abi_decode_address()\n let value_7 := calldataload(68)\n let offset_3 := calldataload(100)\n let _21 := 0xffffffffffffffff\n if gt(offset_3, _21) { revert(_4, _4) }\n let value3, value4_1 := abi_decode_string_calldata(add(_3, offset_3), calldatasize())\n let offset_4 := calldataload(132)\n if gt(offset_4, _21) { revert(_4, _4) }\n let value5_1, value6 := abi_decode_string_calldata(add(_3, offset_4), calldatasize())\n let value_8 := calldataload(164)\n let _22 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _22)))\n let _23 := and(value0_4, _22)\n let _24 := shl(160, 0xffffffffffffffffffffffff)\n sstore(/** @src 0:101949:101959 \"udt = _udt\" */ 0x6e, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:101949:101959 \"udt = _udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _24), _23))\n let _25 := and(value1_2, _22)\n sstore(/** @src 0:101965:101977 \"weth = _weth\" */ 0x6d, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:101965:101977 \"weth = _weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _24), _25))\n sstore(/** @src 0:101983:102033 \"estimatedGasForPurchase = _estimatedGasForPurchase\" */ 0x6f, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_7)\n if gt(value4_1, _21)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x41)\n revert(_4, 36)\n }\n let _26 := extract_byte_array_length(sload(/** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _27 := 31\n if gt(_26, _27)\n {\n mstore(_4, /** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _28 := 7887053984229333715756243741084912719879447020693965939365260134600710199889\n let deleteStart := add(_28, shr(5, add(value4_1, _27)))\n if lt(value4_1, 32) { deleteStart := _28 }\n let _29 := add(_28, shr(5, add(_26, _27)))\n let start := deleteStart\n for { } lt(start, _29) { start := add(start, 1) }\n { sstore(start, _4) }\n }\n let srcOffset := _4\n switch gt(value4_1, _27)\n case 1 {\n let loopEnd := and(value4_1, /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, /** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dstPtr := 7887053984229333715756243741084912719879447020693965939365260134600710199889\n let i := _4\n for { } lt(i, loopEnd) { i := add(i, 32) }\n {\n sstore(dstPtr, calldataload(add(value3, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, 32)\n }\n if lt(loopEnd, value4_1)\n {\n sstore(dstPtr, and(calldataload(add(value3, srcOffset)), not(shr(and(shl(3, value4_1), 248), not(0)))))\n }\n sstore(/** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ add(shl(1, value4_1), 1))\n }\n default {\n let value_9 := _4\n if value4_1\n {\n value_9 := calldataload(add(value3, srcOffset))\n }\n sstore(/** @src 0:102040:102067 \"globalTokenSymbol = _symbol\" */ 0x6a, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(value_9, not(shr(shl(3, value4_1), not(0)))), shl(1, value4_1)))\n }\n if gt(value6, _21)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x41)\n revert(_4, 36)\n }\n let _30 := extract_byte_array_length(sload(/** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if gt(_30, _27)\n {\n mstore(_4, /** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _31 := 57762096780731528330405058414938765910932439953606620384872163540286326260488\n let deleteStart_1 := add(_31, shr(5, add(value6, _27)))\n if lt(value6, 32) { deleteStart_1 := _31 }\n let _32 := add(_31, shr(5, add(_30, _27)))\n let start_1 := deleteStart_1\n for { } lt(start_1, _32) { start_1 := add(start_1, 1) }\n { sstore(start_1, _4) }\n }\n let srcOffset_1 := _4\n switch gt(value6, _27)\n case 1 {\n let loopEnd_1 := and(value6, /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, /** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dstPtr_1 := 57762096780731528330405058414938765910932439953606620384872163540286326260488\n let i_1 := _4\n for { } lt(i_1, loopEnd_1) { i_1 := add(i_1, 32) }\n {\n sstore(dstPtr_1, calldataload(add(value5_1, srcOffset_1)))\n dstPtr_1 := add(dstPtr_1, 1)\n srcOffset_1 := add(srcOffset_1, 32)\n }\n if lt(loopEnd_1, value6)\n {\n sstore(dstPtr_1, and(calldataload(add(value5_1, srcOffset_1)), not(shr(and(shl(3, value6), 248), not(0)))))\n }\n sstore(/** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ add(shl(1, value6), 1))\n }\n default {\n let value_10 := _4\n if value6\n {\n value_10 := calldataload(add(value5_1, srcOffset_1))\n }\n sstore(/** @src 0:102073:102098 \"globalBaseTokenURI = _URI\" */ 0x69, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(value_10, not(shr(shl(3, value6), not(0)))), shl(1, value6)))\n }\n sstore(/** @src 0:102105:102123 \"chainId = _chainId\" */ 0x70, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_8)\n /// @src 0:102135:102253 \"ConfigUnlock(...\"\n let _33 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_33, _23)\n mstore(add(_33, 32), _25)\n mstore(add(_33, _2), value_7)\n mstore(add(_33, 96), 192)\n let tail := abi_encode_string_calldata(value3, value4_1, add(_33, 192))\n mstore(add(_33, 128), sub(tail, _33))\n let tail_1 := abi_encode_string_calldata(value5_1, value6, tail)\n mstore(add(_33, 160), value_8)\n /// @src 0:102135:102253 \"ConfigUnlock(...\"\n log1(_33, sub(tail_1, _33), 0xa14230a1687e9bb8cdc0f3931d27c3a806e88c1c2235ba7756d6911feb35be67)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0x7ff94bb2 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let converted_1 := copy_array_from_storage_to_memory_string_27022()\n let memPos_14 := mload(_2)\n mstore(memPos_14, 32)\n return(memPos_14, sub(abi_encode_string(converted_1, add(memPos_14, 32)), memPos_14))\n }\n case 0x8da5cb5b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let cleaned_4 := and(sload(/** @src 0:83920:83926 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_15 := mload(_2)\n mstore(memPos_15, cleaned_4)\n return(memPos_15, 32)\n }\n case 0x8f32d59b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n /// @src 0:84209:84238 \"return _msgSender() == _owner\"\n let var_2 := /** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1)))\n let memPos_16 := mload(_2)\n mstore(memPos_16, var_2)\n return(memPos_16, 32)\n }\n case 0x939d9f1f {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value_11 := calldataload(_3)\n let value1_3 := abi_decode_address()\n mstore(_4, /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _34 := 32\n mstore(_34, /** @src 0:87274:87279 \"locks\" */ 0x68)\n /// @src 0:87266:87315 \"require(locks[msg.sender].deployed, \\\"ONLY_LOCKS\\\")\"\n require_helper_stringliteral_2f7a(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(keccak256(_4, _2)), 0xff))\n /// @src 0:97516:100582 \"if (_value > 0) {...\"\n if /** @src 0:97520:97530 \"_value > 0\" */ iszero(iszero(value_11))\n /// @src 0:97516:100582 \"if (_value > 0) {...\"\n {\n /// @src 0:97540:97555 \"uint valueInETH\"\n let var_valueInETH := _4\n var_valueInETH := _4\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n let _35 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n mstore(_35, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(227, 0x13aedd4b))\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n let _36 := staticcall(gas(), /** @src 0:87280:87290 \"msg.sender\" */ caller(), /** @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\" */ _35, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\" */ _35, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n if iszero(_36)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_1 := mload(_2)\n returndatacopy(pos_1, _4, returndatasize())\n revert(pos_1, returndatasize())\n }\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n let expr := _4\n if _36\n {\n let _37 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:97586:97624 \"IPublicLock(msg.sender).tokenAddress()\" */ returndatasize()) { _37 := returndatasize() }\n finalize_allocation(_35, _37)\n expr := abi_decode_address_fromMemory(_35, add(_35, _37))\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _38 := sub(shl(160, 1), 1)\n /// @src 0:97636:97662 \"tokenAddress != address(0)\"\n let _39 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:97636:97662 \"tokenAddress != address(0)\" */ expr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:97636:97686 \"tokenAddress != address(0) && tokenAddress != weth\"\n let expr_1 := /** @src 0:97636:97662 \"tokenAddress != address(0)\" */ iszero(iszero(_39))\n /// @src 0:97636:97686 \"tokenAddress != address(0) && tokenAddress != weth\"\n if expr_1\n {\n expr_1 := /** @src 0:97666:97686 \"tokenAddress != weth\" */ iszero(eq(_39, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:97682:97686 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)))\n }\n /// @src 0:97632:98082 \"if (tokenAddress != address(0) && tokenAddress != weth) {...\"\n switch expr_1\n case 0 {\n /// @src 0:98054:98073 \"valueInETH = _value\"\n var_valueInETH := value_11\n }\n default /// @src 0:97632:98082 \"if (tokenAddress != address(0) && tokenAddress != weth) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, _39)\n mstore(_34, /** @src 0:97799:97813 \"uniswapOracles\" */ 0x6c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_5 := and(sload(keccak256(_4, _2)), _38)\n /// @src 0:97837:97959 \"if (address(oracle) != address(0)) {...\"\n if /** @src 0:97841:97870 \"address(oracle) != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_5))\n /// @src 0:97837:97959 \"if (address(oracle) != address(0)) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_6 := and(sload(/** @src 0:97943:97947 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n let _40 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n mstore(_40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xc1e553e7))\n mstore(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ add(_40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _39)\n mstore(add(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), value_11)\n mstore(add(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), cleaned_6)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n let _41 := call(gas(), cleaned_5, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100, /** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ _40, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n if iszero(_41)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_2 := mload(_2)\n returndatacopy(pos_2, _4, returndatasize())\n revert(pos_2, returndatasize())\n }\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n let expr_2 := _4\n if _41\n {\n let _42 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ returndatasize()) { _42 := returndatasize() }\n finalize_allocation(_40, _42)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\" */ add(_40, _42), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _40), _34) { revert(0, 0) }\n /// @src 0:97897:97948 \"oracle.updateAndConsult(tokenAddress, _value, weth)\"\n expr_2 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_40)\n }\n /// @src 0:97884:97948 \"valueInETH = oracle.updateAndConsult(tokenAddress, _value, weth)\"\n var_valueInETH := expr_2\n }\n }\n /// @src 0:100858:100891 \"grossNetworkProduct + _valueInETH\"\n let _43 := checked_add_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sload(/** @src 0:100858:100877 \"grossNetworkProduct\" */ 0x66), /** @src 0:100858:100891 \"grossNetworkProduct + _valueInETH\" */ var_valueInETH)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:100858:100877 \"grossNetworkProduct\" */ 0x66, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _43)\n /// @src 0:100903:101013 \"GNPChanged(...\"\n let _44 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_44, _43)\n mstore(add(_44, _34), var_valueInETH)\n mstore(add(_44, _2), _39)\n mstore(add(_44, 96), value_11)\n mstore(add(_44, 128), /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:100903:101013 \"GNPChanged(...\"\n log1(_44, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 160, /** @src 0:100903:101013 \"GNPChanged(...\" */ 0x3b50eb9d9b4a8db204f2928c9e572c2865b0d02803493ccb6aa256848323ebb7)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_4, /** @src 0:87280:87290 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_34, /** @src 0:87274:87279 \"locks\" */ 0x68)\n /// @src 0:98295:98323 \"locks[msg.sender].totalSales\"\n let _45 := add(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ keccak256(_4, _2), 1)\n sstore(_45, /** @src 0:98295:98337 \"locks[msg.sender].totalSales += valueInETH\" */ checked_add_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sload(/** @src 0:98295:98337 \"locks[msg.sender].totalSales += valueInETH\" */ _45), var_valueInETH))\n /// @src 0:98533:98617 \"_referrer != address(0) &&...\"\n let expr_3 := /** @src 0:98533:98556 \"_referrer != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:98533:98556 \"_referrer != address(0)\" */ value1_3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)))\n /// @src 0:98533:98617 \"_referrer != address(0) &&...\"\n if expr_3\n {\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _46 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n mstore(_46, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x346ef527))\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _47 := staticcall(gas(), /** @src 0:87280:87290 \"msg.sender\" */ caller(), /** @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\" */ _46, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\" */ _46, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n if iszero(_47)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_3 := mload(_2)\n returndatacopy(pos_3, _4, returndatasize())\n revert(pos_3, returndatasize())\n }\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n let expr_4 := _4\n if _47\n {\n let _48 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:98568:98611 \"IPublicLock(msg.sender).publicLockVersion()\" */ returndatasize()) { _48 := returndatasize() }\n finalize_allocation(_46, _48)\n expr_4 := abi_decode_uint16_fromMemory(_46, add(_46, _48))\n }\n /// @src 0:98533:98617 \"_referrer != address(0) &&...\"\n expr_3 := /** @src 0:98568:98617 \"IPublicLock(msg.sender).publicLockVersion() >= 13\" */ iszero(lt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:98568:98617 \"IPublicLock(msg.sender).publicLockVersion() >= 13\" */ expr_4, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff), /** @src 0:98615:98617 \"13\" */ 0x0d))\n }\n /// @src 0:98520:100576 \"if (...\"\n if expr_3\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_7 := and(sload(/** @src 0:98680:98683 \"udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n mstore(_4, cleaned_7)\n mstore(_34, /** @src 0:98665:98679 \"uniswapOracles\" */ 0x6c)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_8 := and(sload(keccak256(_4, _2)), _38)\n /// @src 0:98694:100568 \"if (address(udtOracle) != address(0)) {...\"\n if /** @src 0:98698:98730 \"address(udtOracle) != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_8))\n /// @src 0:98694:100568 \"if (address(udtOracle) != address(0)) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_9 := and(sload(/** @src 0:98862:98866 \"weth\" */ 0x6d), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n let _49 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n mstore(_49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xc1e553e7))\n mstore(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ add(_49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), cleaned_7)\n let _50 := 36\n mstore(add(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _50), /** @src 0:98852:98860 \"10 ** 18\" */ 0x0de0b6b3a7640000)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(add(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), cleaned_9)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n let _51 := call(gas(), cleaned_8, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100, /** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ _49, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n if iszero(_51)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_4 := mload(_2)\n returndatacopy(pos_4, _4, returndatasize())\n revert(pos_4, returndatasize())\n }\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n let expr_5 := _4\n if _51\n {\n let _52 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ returndatasize()) { _52 := returndatasize() }\n finalize_allocation(_49, _52)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\" */ add(_49, _52), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _49), _34) { revert(0, 0) }\n /// @src 0:98820:98867 \"udtOracle.updateAndConsult(udt, 10 ** 18, weth)\"\n expr_5 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_49)\n }\n let cleaned_10 := and(sload(/** @src 0:98680:98683 \"udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n let _53 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n mstore(_53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x70a08231))\n mstore(/** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ add(_53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:98933:98937 \"this\" */ address())\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n let _54 := staticcall(gas(), cleaned_10, _53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _50, /** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ _53, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n if iszero(_54)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_5 := mload(_2)\n returndatacopy(pos_5, _4, returndatasize())\n revert(pos_5, returndatasize())\n }\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n let expr_6 := _4\n if _54\n {\n let _55 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ returndatasize()) { _55 := returndatasize() }\n finalize_allocation(_53, _55)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\" */ add(_53, _55), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _53), _34) { revert(0, 0) }\n /// @src 0:98895:98939 \"IMintableERC20(udt).balanceOf(address(this))\"\n expr_6 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_53)\n }\n /// @src 0:99015:99027 \"uint baseFee\"\n let var_baseFee := _4\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n let _56 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n mstore(_56, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xba5ea0d5))\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n let trySuccessCondition := staticcall(gas(), /** @src 0:98933:98937 \"this\" */ address(), /** @src 0:99043:99064 \"this.networkBaseFee()\" */ _56, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:99043:99064 \"this.networkBaseFee()\" */ _56, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n let expr_7 := _4\n if trySuccessCondition\n {\n let _57 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:99043:99064 \"this.networkBaseFee()\" */ returndatasize()) { _57 := returndatasize() }\n finalize_allocation(_56, _57)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:99043:99064 \"this.networkBaseFee()\" */ add(_56, _57), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _56), _34) { revert(0, 0) }\n /// @src 0:99043:99064 \"this.networkBaseFee()\"\n expr_7 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_56)\n }\n /// @src 0:99039:99356 \"try this.networkBaseFee() returns (uint _basefee) {...\"\n switch iszero(trySuccessCondition)\n case 0 {\n /// @src 0:99136:99254 \"if (_basefee == 0) {...\"\n switch /** @src 0:99140:99153 \"_basefee == 0\" */ iszero(expr_7)\n case /** @src 0:99136:99254 \"if (_basefee == 0) {...\" */ 0 {\n /// @src 0:99221:99239 \"baseFee = _basefee\"\n var_baseFee := expr_7\n }\n default /// @src 0:99136:99254 \"if (_basefee == 0) {...\"\n {\n /// @src 0:99171:99184 \"baseFee = 100\"\n var_baseFee := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100\n }\n }\n default /// @src 0:99039:99356 \"try this.networkBaseFee() returns (uint _basefee) {...\"\n {\n /// @src 0:99330:99343 \"baseFee = 100\"\n var_baseFee := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100\n }\n /// @src 0:99493:99526 \"estimatedGasForPurchase * baseFee\"\n let expr_8 := checked_mul_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sload(/** @src 0:99493:99516 \"estimatedGasForPurchase\" */ 0x6f), /** @src 0:99493:99526 \"estimatedGasForPurchase * baseFee\" */ var_baseFee)\n /// @src 0:99543:99557 \"125 * 10 ** 18\"\n let _58 := 0x06c6b935b8bbd40000\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let product := mul(expr_8, /** @src 0:99543:99557 \"125 * 10 ** 18\" */ _58)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if iszero(or(iszero(expr_8), eq(/** @src 0:99543:99557 \"125 * 10 ** 18\" */ _58, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ div(product, expr_8))))\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n /// @src 0:99465:99600 \"uint tokensToDistribute = ((estimatedGasForPurchase * baseFee) *...\"\n let var_tokensToDistribute := /** @src 0:99491:99600 \"((estimatedGasForPurchase * baseFee) *...\" */ checked_div_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ div(product, 100), /** @src 0:99491:99600 \"((estimatedGasForPurchase * baseFee) *...\" */ expr_5)\n /// @src 0:99773:99793 \"balance * valueInETH\"\n let expr_9 := checked_mul_uint256(expr_6, var_valueInETH)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if iszero(eq(var_valueInETH, and(var_valueInETH, sub(shl(255, 1), 1))))\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n let _59 := sload(/** @src 0:100858:100877 \"grossNetworkProduct\" */ 0x66)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let sum := add(/** @src 0:99810:99811 \"2\" */ 0x02, /** @src 0:99814:99852 \"(2 * valueInETH) / grossNetworkProduct\" */ checked_div_uint256(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(1, var_valueInETH), _59))\n if gt(/** @src 0:99810:99811 \"2\" */ 0x02, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sum)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n /// @src 0:99772:99887 \"(balance * valueInETH) /...\"\n let expr_10 := checked_div_uint256(/** @src 0:99772:99853 \"(balance * valueInETH) /...\" */ checked_div_uint256(expr_9, /** @src 0:99810:99852 \"2 + (2 * valueInETH) / grossNetworkProduct\" */ sum), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _59)\n /// @src 0:99932:100025 \"if (tokensToDistribute > maxTokens) {...\"\n if /** @src 0:99936:99966 \"tokensToDistribute > maxTokens\" */ gt(var_tokensToDistribute, expr_10)\n /// @src 0:99932:100025 \"if (tokensToDistribute > maxTokens) {...\"\n {\n /// @src 0:99982:100012 \"tokensToDistribute = maxTokens\"\n var_tokensToDistribute := expr_10\n }\n /// @src 0:100041:100063 \"tokensToDistribute > 0\"\n let _60 := iszero(var_tokensToDistribute)\n /// @src 0:100037:100558 \"if (tokensToDistribute > 0) {...\"\n if /** @src 0:100041:100063 \"tokensToDistribute > 0\" */ iszero(_60)\n /// @src 0:100037:100558 \"if (tokensToDistribute > 0) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let product_1 := mul(var_tokensToDistribute, /** @src 0:100214:100216 \"20\" */ 0x14)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if iszero(or(_60, eq(/** @src 0:100214:100216 \"20\" */ 0x14, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ div(product_1, var_tokensToDistribute))))\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n let r := div(product_1, 100)\n /// @src 0:100238:100546 \"if (balance > tokensToDistribute) {...\"\n if /** @src 0:100242:100270 \"balance > tokensToDistribute\" */ gt(expr_6, var_tokensToDistribute)\n /// @src 0:100238:100546 \"if (balance > tokensToDistribute) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let diff := sub(var_tokensToDistribute, r)\n if gt(diff, var_tokensToDistribute)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, _50)\n }\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n let _61 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n let _62 := shl(224, 0xa9059cbb)\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n mstore(_61, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _62)\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n let _63 := call(gas(), cleaned_10, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ _61, sub(abi_encode_address_uint256(add(_61, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ value1_3, diff), _61), _61, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n if iszero(_63)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_6 := mload(_2)\n returndatacopy(pos_6, _4, returndatasize())\n revert(pos_6, returndatasize())\n }\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n if _63\n {\n let _64 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ returndatasize()) { _64 := returndatasize() }\n finalize_allocation(_61, _64)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:100348:100467 \"IMintableERC20(udt).transfer(...\" */ add(_61, _64), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _61), _34) { revert(_4, _4) }\n pop(abi_decode_bool_fromMemory(_61))\n }\n let cleaned_11 := and(sload(/** @src 0:98680:98683 \"udt\" */ 0x6e), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n let cleaned_12 := and(sload(/** @src 0:83920:83926 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _38)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n let _65 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n mstore(_65, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _62)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n let _66 := call(gas(), cleaned_11, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ _65, sub(abi_encode_address_uint256(add(_65, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ cleaned_12, r), _65), _65, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34)\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n if iszero(_66)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_7 := mload(_2)\n returndatacopy(pos_7, _4, returndatasize())\n revert(pos_7, returndatasize())\n }\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n if _66\n {\n let _67 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34\n /// @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _34, /** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ returndatasize()) { _67 := returndatasize() }\n finalize_allocation(_65, _67)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:100483:100531 \"IMintableERC20(udt).transfer(owner(), devReward)\" */ add(_65, _67), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _65), _34) { revert(_4, _4) }\n pop(abi_decode_bool_fromMemory(_65))\n }\n }\n }\n }\n }\n }\n return(_4, _4)\n }\n case 0x963a9478 {\n if callvalue() { revert(_4, _4) }\n let param_2, param_3 := abi_decode_uint256t_uint256(calldatasize())\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))))\n sstore(/** @src 0:103503:103545 \"grossNetworkProduct = _grossNetworkProduct\" */ 0x66, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ param_2)\n sstore(/** @src 0:103551:103595 \"totalDiscountGranted = _totalDiscountGranted\" */ 0x67, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ param_3)\n /// @src 0:103607:103669 \"ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted)\"\n let _68 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_68, param_2)\n mstore(add(_68, 32), param_3)\n /// @src 0:103607:103669 \"ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted)\"\n log1(_68, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _2, /** @src 0:103607:103669 \"ResetTrackedValue(_grossNetworkProduct, _totalDiscountGranted)\" */ 0x7b2ce3c83b45f79993ff2cbf5651caff2dfe04010b4846e03066b84e3e4059bb)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0x9a8a0592 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _69 := sload(/** @src 0:88441:88460 \"uint public chainId\" */ 112)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_17 := mload(_2)\n mstore(memPos_17, _69)\n return(memPos_17, 32)\n }\n case 0xa082eb0e {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _70 := sload(/** @src 0:87367:87399 \"uint public totalDiscountGranted\" */ 103)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_18 := mload(_2)\n mstore(memPos_18, _70)\n return(memPos_18, 32)\n }\n case 0xa64b6e5f {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 96) { revert(_4, _4) }\n let value0_5 := abi_decode_address_27006()\n let value1_4 := abi_decode_address()\n let value_12 := calldataload(68)\n let _71 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _71)))\n let _72 := and(/** @src 0:105775:105794 \"token != address(0)\" */ value0_5, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _71)\n /// @src 0:105771:105902 \"if (token != address(0)) {...\"\n switch /** @src 0:105775:105794 \"token != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _72))\n case /** @src 0:105771:105902 \"if (token != address(0)) {...\" */ 0 {\n /// @src 0:105867:105895 \"payable(to).transfer(amount)\"\n let _73 := _4\n if iszero(value_12) { _73 := 2300 }\n if iszero(call(_73, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:105867:105878 \"payable(to)\" */ value1_4, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _71), /** @src 0:105867:105895 \"payable(to).transfer(amount)\" */ value_12, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, _4, _4, _4))\n /// @src 0:105867:105895 \"payable(to).transfer(amount)\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_8 := mload(_2)\n returndatacopy(pos_8, _4, returndatasize())\n revert(pos_8, returndatasize())\n }\n }\n default /// @src 0:105771:105902 \"if (token != address(0)) {...\"\n {\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n let _74 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n mstore(_74, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xa9059cbb))\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n let _75 := call(gas(), _72, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ _74, sub(abi_encode_address_uint256(add(_74, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ value1_4, value_12), _74), _74, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32)\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n if iszero(_75)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_9 := mload(_2)\n returndatacopy(pos_9, _4, returndatasize())\n revert(pos_9, returndatasize())\n }\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n if _75\n {\n let _76 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32\n /// @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _76, /** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ returndatasize()) { _76 := returndatasize() }\n finalize_allocation(_74, _76)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:105804:105846 \"IMintableERC20(token).transfer(to, amount)\" */ add(_74, _76), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _74), 32) { revert(_4, _4) }\n pop(abi_decode_bool_fromMemory(_74))\n }\n }\n return(_4, _4)\n }\n case 0xa998e9fb {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_13 := copy_array_from_storage_to_memory_string_27022()\n let memPos_19 := mload(_2)\n mstore(memPos_19, 32)\n return(memPos_19, sub(abi_encode_string(value_13, add(memPos_19, 32)), memPos_19))\n }\n case 0xb0ca0c83 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_6 := abi_decode_address_27006()\n let _77 := sload(_4)\n let value_14 := and(shr(8, _77), 0xff)\n /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n let expr_11 := _4\n switch value_14\n case 0 {\n expr_11 := /** @src 0:80903:80915 \"!initialized\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_77, 0xff))\n }\n default /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n {\n expr_11 := /** @src 0:72115:72138 \"account.code.length > 0\" */ iszero(/** @src 0:72115:72134 \"account.code.length\" */ extcodesize(/** @src 0:81527:81531 \"this\" */ address()))\n }\n /// @src 0:80854:80950 \"require(...\"\n require_helper_stringliteral(expr_11)\n /// @src 0:80979:80992 \"!initializing\"\n let _78 := iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_14)\n /// @src 0:80998:81078 \"if (isTopLevelCall) {...\"\n if _78\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, or(and(_77, not(65535)), 257))\n }\n let _79 := and(value0_6, sub(shl(160, 1), 1))\n let _80 := sload(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(_80, shl(160, 0xffffffffffffffffffffffff)), _79))\n /// @src 0:83747:83787 \"OwnershipTransferred(address(0), _owner)\"\n log3(_4, _4, 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, or(and(_80, _4), _79))\n /// @src 0:81092:81147 \"if (isTopLevelCall) {...\"\n if _78\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, and(sload(_4), not(65280)))\n }\n return(_4, _4)\n }\n case 0xb0e21e8a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _81 := sload(/** @src 0:88757:88780 \"uint public protocolFee\" */ 118)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_20 := mload(_2)\n mstore(memPos_20, _81)\n return(memPos_20, 32)\n }\n case 0xba5ea0d5 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let memPos_21 := mload(_2)\n mstore(memPos_21, /** @src 0:97030:97043 \"block.basefee\" */ basefee())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(memPos_21, 32)\n }\n case 0xc4d66de8 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_7 := abi_decode_address_27006()\n let _82 := sload(_4)\n let value_15 := and(shr(8, _82), 0xff)\n /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n let expr_12 := _4\n switch value_15\n case 0 {\n expr_12 := /** @src 0:80903:80915 \"!initialized\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_82, 0xff))\n }\n default /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n {\n expr_12 := /** @src 0:72115:72138 \"account.code.length > 0\" */ iszero(/** @src 0:72115:72134 \"account.code.length\" */ extcodesize(/** @src 0:81527:81531 \"this\" */ address()))\n }\n /// @src 0:80854:80950 \"require(...\"\n require_helper_stringliteral(expr_12)\n /// @src 0:80979:80992 \"!initializing\"\n let _83 := iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_15)\n /// @src 0:80998:81078 \"if (isTopLevelCall) {...\"\n if _83\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, or(and(_82, not(65535)), 257))\n }\n let _84 := sload(_4)\n let value_16 := and(shr(8, _84), 0xff)\n /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n let expr_13 := _4\n switch value_16\n case 0 {\n expr_13 := /** @src 0:80903:80915 \"!initialized\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(_84, 0xff))\n }\n default /// @src 0:80869:80915 \"initializing ? _isConstructor() : !initialized\"\n {\n expr_13 := /** @src 0:72115:72138 \"account.code.length > 0\" */ iszero(/** @src 0:72115:72134 \"account.code.length\" */ extcodesize(/** @src 0:81527:81531 \"this\" */ address()))\n }\n /// @src 0:80854:80950 \"require(...\"\n require_helper_stringliteral(expr_13)\n /// @src 0:80979:80992 \"!initializing\"\n let _85 := iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ value_16)\n /// @src 0:80998:81078 \"if (isTopLevelCall) {...\"\n if _85\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, or(and(_84, not(65535)), 257))\n }\n let _86 := and(value0_7, sub(shl(160, 1), 1))\n let _87 := sload(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:83721:83736 \"_owner = sender\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(_87, shl(160, 0xffffffffffffffffffffffff)), _86))\n /// @src 0:83747:83787 \"OwnershipTransferred(address(0), _owner)\"\n log3(_4, _4, 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, or(and(_87, _4), _86))\n /// @src 0:81092:81147 \"if (isTopLevelCall) {...\"\n if _85\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, and(sload(_4), not(65280)))\n }\n /// @src 0:90072:90091 \"_deployProxyAdmin()\"\n pop(fun_deployProxyAdmin())\n /// @src 0:81092:81147 \"if (isTopLevelCall) {...\"\n if _83\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(_4, and(sload(_4), not(65280)))\n }\n return(_4, _4)\n }\n case 0xc7d7d0c9 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _88 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _88)))\n /// @src 0:90155:90240 \"if (proxyAdminAddress != address(0)) {...\"\n if /** @src 0:90159:90190 \"proxyAdminAddress != address(0)\" */ iszero(iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:90159:90176 \"proxyAdminAddress\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _88)))\n /// @src 0:90155:90240 \"if (proxyAdminAddress != address(0)) {...\"\n {\n /// @src 0:90207:90233 \"Unlock__ALREADY_DEPLOYED()\"\n let _89 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:90207:90233 \"Unlock__ALREADY_DEPLOYED()\"\n mstore(_89, shl(224, 0xfeb51c9f))\n revert(_89, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n /// @src 0:90245:90264 \"_deployProxyAdmin()\"\n pop(fun_deployProxyAdmin())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xcaeee3a3 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_8 := abi_decode_address_27006()\n let value1_5 := abi_decode_uint16()\n let _90 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _90)))\n let _91 := and(/** @src 0:91514:91531 \"IPublicLock(impl)\" */ value0_8, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _90)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n if iszero(extcodesize(_91))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n let _92 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n mstore(_92, /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ shl(224, 0x6eadde43))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ add(_92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:91551:91555 \"this\" */ address())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 132), _4)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 164), 192)\n mstore(add(/** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 196), _4)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n let _93 := call(gas(), _91, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 228, /** @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\" */ _92, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n if iszero(_93)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_10 := mload(_2)\n returndatacopy(pos_10, _4, returndatasize())\n revert(pos_10, returndatasize())\n }\n /// @src 0:91514:91582 \"IPublicLock(impl).initialize(address(this), 0, address(0), 0, 0, \\\"\\\")\"\n if _93\n {\n finalize_allocation_27015(_92)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n if iszero(extcodesize(_91))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n let _94 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n mstore(_94, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(230, 0x03c2e981))\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n let _95 := call(gas(), _91, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\" */ _94, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\" */ _94, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n if iszero(_95)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_11 := mload(_2)\n returndatacopy(pos_11, _4, returndatasize())\n revert(pos_11, returndatasize())\n }\n /// @src 0:91588:91627 \"IPublicLock(impl).renounceLockManager()\"\n if _95\n {\n finalize_allocation_27015(_94)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n mstore(_4, _91)\n mstore(32, /** @src 0:91634:91653 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _96 := keccak256(_4, _2)\n let _97 := and(value1_5, 0xffff)\n sstore(_96, or(and(sload(_96), not(65535)), _97))\n mstore(_4, _97)\n mstore(32, /** @src 0:91675:91691 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _98 := keccak256(_4, _2)\n sstore(_98, or(and(sload(_98), shl(160, 0xffffffffffffffffffffffff)), _91))\n /// @src 0:91719:91753 \"UnlockTemplateAdded(impl, version)\"\n log3(_4, _4, 0xd36d021c4aa145e30eadc73e34284101030d688b9eb9413a4dc3af40ab1d4748, _91, _97)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xccf54648 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value_17 := calldataload(_3)\n let _99 := sub(shl(160, 1), 1)\n let _100 := and(value_17, _99)\n if iszero(eq(value_17, _100)) { revert(_4, _4) }\n let value1_6 := abi_decode_uint16()\n /// @src 0:95248:95336 \"if (proxyAdminAddress == address(0)) {...\"\n if /** @src 0:95252:95283 \"proxyAdminAddress == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:95252:95269 \"proxyAdminAddress\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _99))\n /// @src 0:95248:95336 \"if (proxyAdminAddress == address(0)) {...\"\n {\n /// @src 0:95300:95329 \"Unlock__MISSING_PROXY_ADMIN()\"\n let _101 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95300:95329 \"Unlock__MISSING_PROXY_ADMIN()\"\n mstore(_101, shl(226, 0x20ad73f3))\n revert(_101, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n let _102 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n mstore(_102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0xaae4b8f7))\n mstore(/** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ add(_102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:95393:95403 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _103 := 32\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n let _104 := staticcall(gas(), _100, _102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36, /** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ _102, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103)\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n if iszero(_104)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_12 := mload(_2)\n returndatacopy(pos_12, _4, returndatasize())\n revert(pos_12, returndatasize())\n }\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n let expr_14 := _4\n if _104\n {\n let _105 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103, /** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ returndatasize()) { _105 := returndatasize() }\n finalize_allocation(_102, _105)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:96386:96413 \"lock.isLockManager(_sender)\" */ add(_102, _105), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _102), _103) { revert(_4, _4) }\n /// @src 0:96386:96413 \"lock.isLockManager(_sender)\"\n expr_14 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ abi_decode_bool_fromMemory(_102)\n }\n /// @src 0:95361:95458 \"if (_isLockManager(lockAddress, msg.sender) != true) {...\"\n if /** @src 0:95365:95412 \"_isLockManager(lockAddress, msg.sender) != true\" */ iszero(eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ iszero(iszero(/** @src 0:95365:95412 \"_isLockManager(lockAddress, msg.sender) != true\" */ expr_14)), /** @src 0:95408:95412 \"true\" */ 0x01))\n /// @src 0:95361:95458 \"if (_isLockManager(lockAddress, msg.sender) != true) {...\"\n {\n /// @src 0:95429:95451 \"Unlock__MANAGER_ONLY()\"\n let _106 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95429:95451 \"Unlock__MANAGER_ONLY()\"\n mstore(_106, shl(229, 0x05167ffd))\n revert(_106, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n let _107 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n mstore(_107, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x346ef527))\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n let _108 := staticcall(gas(), _100, _107, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:95558:95582 \"lock.publicLockVersion()\" */ _107, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103)\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n if iszero(_108)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_13 := mload(_2)\n returndatacopy(pos_13, _4, returndatasize())\n revert(pos_13, returndatasize())\n }\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n let expr_15 := _4\n if _108\n {\n let _109 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103\n /// @src 0:95558:95582 \"lock.publicLockVersion()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _103, /** @src 0:95558:95582 \"lock.publicLockVersion()\" */ returndatasize()) { _109 := returndatasize() }\n finalize_allocation(_107, _109)\n expr_15 := abi_decode_uint16_fromMemory(_107, add(_107, _109))\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _110 := 0xffff\n let sum_1 := add(and(expr_15, _110), /** @src 0:95408:95412 \"true\" */ 0x01)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if gt(sum_1, _110)\n {\n mstore(_4, shl(224, 0x4e487b71))\n mstore(_3, 0x11)\n revert(_4, 36)\n }\n let _111 := and(/** @src 0:95593:95622 \"version != currentVersion + 1\" */ value1_6, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _110)\n /// @src 0:95589:95672 \"if (version != currentVersion + 1) {...\"\n if /** @src 0:95593:95622 \"version != currentVersion + 1\" */ iszero(eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _111, and(sum_1, _110)))\n /// @src 0:95589:95672 \"if (version != currentVersion + 1) {...\"\n {\n /// @src 0:95639:95665 \"Unlock__VERSION_TOO_HIGH()\"\n let _112 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95639:95665 \"Unlock__VERSION_TOO_HIGH()\"\n mstore(_112, shl(224, 0x37bb0061))\n revert(_112, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n mstore(_4, _111)\n mstore(_103, /** @src 0:95717:95733 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let cleaned_13 := and(sload(keccak256(_4, _2)), _99)\n /// @src 0:95748:95820 \"if (impl == address(0)) {...\"\n if /** @src 0:95752:95770 \"impl == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_13)\n /// @src 0:95748:95820 \"if (impl == address(0)) {...\"\n {\n /// @src 0:95787:95813 \"Unlock__MISSING_TEMPLATE()\"\n let _113 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95787:95813 \"Unlock__MISSING_TEMPLATE()\"\n mstore(_113, shl(225, 0x6b53d5c7))\n revert(_113, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n let cleaned_14 := and(sload(/** @src 0:95921:95931 \"proxyAdmin\" */ 0x72), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _99)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n if iszero(extcodesize(cleaned_14))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n let _114 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n mstore(_114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x266a23b1))\n mstore(/** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ add(_114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _100)\n mstore(add(/** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ _114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), cleaned_13)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n let _115 := call(gas(), cleaned_14, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ _114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68, /** @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\" */ _114, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n if iszero(_115)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_14 := mload(_2)\n returndatacopy(pos_14, _4, returndatasize())\n revert(pos_14, returndatasize())\n }\n /// @src 0:95921:95952 \"proxyAdmin.upgrade(proxy, impl)\"\n if _115\n {\n finalize_allocation_27015(_114)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n if iszero(extcodesize(_100))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n revert(_4, _4)\n }\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n let _116 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n mstore(_116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x8932a90d))\n mstore(/** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ add(_116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), _103)\n mstore(add(/** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36), 2)\n mstore(add(/** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 68), \"0x\")\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n let _117 := call(gas(), _100, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4, /** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 100, /** @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\" */ _116, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n if iszero(_117)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_15 := mload(_2)\n returndatacopy(pos_15, _4, returndatasize())\n revert(pos_15, returndatasize())\n }\n /// @src 0:96115:96133 \"lock.migrate(\\\"0x\\\")\"\n if _117\n {\n finalize_allocation_27015(_116)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if _4 { revert(_4, _4) }\n }\n /// @src 0:96145:96179 \"LockUpgraded(lockAddress, version)\"\n let _118 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_118, _100)\n mstore(add(_118, _103), _111)\n /// @src 0:96145:96179 \"LockUpgraded(lockAddress, version)\"\n log1(_118, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _2, /** @src 0:96145:96179 \"LockUpgraded(lockAddress, version)\" */ 0x5e7b70a9e6f0b4c7cf2657cf563ce85eed3aebb7731396118d01a195d218fd5e)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_22 := mload(_2)\n mstore(memPos_22, _100)\n return(memPos_22, _103)\n }\n case 0xcd93b532 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_18 := and(sload(/** @src 0:88697:88734 \"uint16 public publicLockLatestVersion\" */ 117), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff)\n let memPos_23 := mload(_2)\n mstore(memPos_23, value_18)\n return(memPos_23, 32)\n }\n case 0xcec41052 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_19 := copy_array_from_storage_to_memory_string()\n let memPos_24 := mload(_2)\n mstore(memPos_24, 32)\n return(memPos_24, sub(abi_encode_string(value_19, add(memPos_24, 32)), memPos_24))\n }\n case 0xd6e9e803 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let _119 := sload(/** @src 0:87331:87362 \"uint public grossNetworkProduct\" */ 102)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPos_25 := mload(_2)\n mstore(memPos_25, _119)\n return(memPos_25, 32)\n }\n case 0xed9674bd {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n mstore(_4, /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _120 := 0x20\n mstore(_120, /** @src 0:104509:104514 \"locks\" */ 0x68)\n /// @src 0:104509:104603 \"locks[msg.sender].deployed == false &&...\"\n let expr_16 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ iszero(and(sload(keccak256(_4, _2)), 0xff))\n /// @src 0:104509:104603 \"locks[msg.sender].deployed == false &&...\"\n if expr_16\n {\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _121 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n mstore(_121, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(226, 0x346ef527))\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n let _122 := staticcall(gas(), /** @src 0:104515:104525 \"msg.sender\" */ caller(), /** @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\" */ _121, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\" */ _121, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120)\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n if iszero(_122)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_16 := mload(_2)\n returndatacopy(pos_16, _4, returndatasize())\n revert(pos_16, returndatasize())\n }\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n let expr_17 := _4\n if _122\n {\n let _123 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120\n /// @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120, /** @src 0:104554:104597 \"IPublicLock(msg.sender).publicLockVersion()\" */ returndatasize()) { _123 := returndatasize() }\n finalize_allocation(_121, _123)\n expr_17 := abi_decode_uint16_fromMemory(_121, add(_121, _123))\n }\n /// @src 0:104509:104603 \"locks[msg.sender].deployed == false &&...\"\n expr_16 := /** @src 0:104554:104603 \"IPublicLock(msg.sender).publicLockVersion() == 13\" */ eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:104554:104603 \"IPublicLock(msg.sender).publicLockVersion() == 13\" */ expr_17, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0xffff), /** @src 0:104601:104603 \"13\" */ 0x0d)\n }\n /// @src 0:104509:104631 \"locks[msg.sender].deployed == false &&...\"\n let expr_18 := expr_16\n if expr_16\n {\n expr_18 := /** @src 0:104613:104631 \"block.chainid == 1\" */ eq(/** @src 0:104613:104626 \"block.chainid\" */ chainid(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 1)\n }\n /// @src 0:104509:104733 \"locks[msg.sender].deployed == false &&...\"\n let expr_19 := expr_18\n if expr_18\n {\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n let _124 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n mstore(_124, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x0f15023b))\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n let _125 := staticcall(gas(), /** @src 0:104515:104525 \"msg.sender\" */ caller(), /** @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\" */ _124, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3, /** @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\" */ _124, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120)\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n if iszero(_125)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_17 := mload(_2)\n returndatacopy(pos_17, _4, returndatasize())\n revert(pos_17, returndatasize())\n }\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n let expr_20 := _4\n if _125\n {\n let _126 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120\n /// @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\"\n if gt(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120, /** @src 0:104641:104681 \"IPublicLock(msg.sender).unlockProtocol()\" */ returndatasize()) { _126 := returndatasize() }\n finalize_allocation(_124, _126)\n expr_20 := abi_decode_address_fromMemory(_124, add(_124, _126))\n }\n /// @src 0:104509:104733 \"locks[msg.sender].deployed == false &&...\"\n expr_19 := /** @src 0:104641:104733 \"IPublicLock(msg.sender).unlockProtocol() ==...\" */ eq(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(/** @src 0:104641:104733 \"IPublicLock(msg.sender).unlockProtocol() ==...\" */ expr_20, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1)), /** @src 0:104691:104733 \"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13\" */ 0x3d5409cce1d45233de1d4ebdee74b8e004abdd13)\n }\n /// @src 0:104498:105294 \"if (...\"\n if expr_19\n {\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n let _127 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n mstore(_127, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x5de9a137))\n mstore(/** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ add(_127, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n let _128 := staticcall(gas(), /** @src 0:104830:104872 \"0x3d5409CcE1d45233dE1D4eBDEe74b8E004abDD13\" */ 0x3d5409cce1d45233de1d4ebdee74b8e004abdd13, /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ _127, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36, /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ _127, 96)\n if iszero(_128)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos_18 := mload(_2)\n returndatacopy(pos_18, _4, returndatasize())\n revert(pos_18, returndatasize())\n }\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n let expr_component := _4\n let expr_component_1 := _4\n let expr_component_2 := _4\n if _128\n {\n let _129 := 96\n if gt(_129, returndatasize()) { _129 := returndatasize() }\n finalize_allocation(_127, _129)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if slt(sub(/** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ add(_127, _129), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _127), /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ 96)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n { revert(_4, _4) }\n let value0_9 := abi_decode_bool_fromMemory(_127)\n let value_20 := mload(add(_127, _120))\n let value_21 := mload(add(_127, _2))\n /// @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\"\n expr_component := value0_9\n expr_component_1 := value_20\n expr_component_2 := value_21\n }\n /// @src 0:105074:105288 \"if (deployed) {...\"\n switch expr_component\n case 0 {\n /// @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\"\n let _130 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\"\n mstore(_130, shl(225, 0x411789a7))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\" */ add(_130, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3), /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:105247:105279 \"Unlock__MISSING_LOCK(msg.sender)\"\n revert(_130, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 36)\n }\n default /// @src 0:105074:105288 \"if (deployed) {...\"\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let memPtr := mload(_2)\n finalize_allocation_27038(memPtr)\n mstore(memPtr, iszero(iszero(expr_component)))\n /// @src 0:105118:105215 \"LockBalances(...\"\n let _131 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _120)\n mstore(_131, expr_component_1)\n /// @src 0:105118:105215 \"LockBalances(...\"\n let _132 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _2)\n mstore(_132, expr_component_2)\n mstore(_4, /** @src 0:104515:104525 \"msg.sender\" */ caller())\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_120, /** @src 0:104509:104514 \"locks\" */ 0x68)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot_2 := keccak256(_4, _2)\n update_storage_value_offsett_bool_to_bool(dataSlot_2, iszero(iszero(mload(memPtr))))\n sstore(add(dataSlot_2, 1), mload(_131))\n sstore(add(dataSlot_2, 2), mload(_132))\n }\n }\n return(_4, _4)\n }\n case 0xef67fde6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_10 := abi_decode_address_27006()\n let _133 := sub(shl(160, 1), 1)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(/** @src 0:84232:84238 \"_owner\" */ 0x33), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _133)))\n let _134 := and(value0_10, _133)\n mstore(_4, _134)\n mstore(32, /** @src 0:102432:102451 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _135 := 0xffff\n /// @src 0:102428:102531 \"if (_publicLockVersions[_publicLockAddress] == 0) {...\"\n if /** @src 0:102432:102476 \"_publicLockVersions[_publicLockAddress] == 0\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(sload(keccak256(_4, _2)), _135))\n /// @src 0:102428:102531 \"if (_publicLockVersions[_publicLockAddress] == 0) {...\"\n {\n /// @src 0:102493:102524 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n let _136 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:102493:102524 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n mstore(_136, shl(224, 0xadf22763))\n revert(_136, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n mstore(_4, _134)\n mstore(32, /** @src 0:102432:102451 \"_publicLockVersions\" */ 0x73)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n sstore(/** @src 0:102562:102627 \"publicLockLatestVersion = _publicLockVersions[_publicLockAddress]\" */ 0x75, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:102562:102627 \"publicLockLatestVersion = _publicLockVersions[_publicLockAddress]\" */ 0x75), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ not(65535)), and(sload(keccak256(_4, _2)), _135)))\n sstore(/** @src 0:102667:102705 \"publicLockAddress = _publicLockAddress\" */ 0x6b, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:102667:102705 \"publicLockAddress = _publicLockAddress\" */ 0x6b), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(160, 0xffffffffffffffffffffffff)), _134))\n /// @src 0:102716:102751 \"SetLockTemplate(_publicLockAddress)\"\n let _137 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n mstore(_137, _134)\n /// @src 0:102716:102751 \"SetLockTemplate(_publicLockAddress)\"\n log1(_137, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 32, /** @src 0:102716:102751 \"SetLockTemplate(_publicLockAddress)\" */ 0x4fa58418e580e78539e8d3d8d17d94dbaca0927533953c8248f313e6f8927c21)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xf2fde38b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_11 := abi_decode_address_27006()\n let _138 := sload(/** @src 0:84232:84238 \"_owner\" */ 0x33)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _139 := sub(shl(160, 1), 1)\n let _140 := and(_138, _139)\n /// @src 0:84038:84070 \"require(isOwner(), \\\"ONLY_OWNER\\\")\"\n require_helper_stringliteral_ed52(/** @src 0:84216:84238 \"_msgSender() == _owner\" */ eq(/** @src 0:82478:82488 \"msg.sender\" */ caller(), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _140))\n let _141 := and(/** @src 0:84873:84895 \"newOwner != address(0)\" */ value0_11, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _139)\n if /** @src 0:84873:84895 \"newOwner != address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _141)\n {\n let memPtr_1 := mload(_2)\n mstore(memPtr_1, shl(229, 4594637))\n mstore(add(memPtr_1, _3), 32)\n mstore(add(memPtr_1, 36), 13)\n mstore(add(memPtr_1, 68), \"INVALID_OWNER\")\n revert(memPtr_1, 100)\n }\n sstore(/** @src 0:84232:84238 \"_owner\" */ 0x33, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(_138, shl(160, 0xffffffffffffffffffffffff)), _141))\n /// @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0, 0, /** @src 0:85165:85205 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, _140, _141)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n return(_4, _4)\n }\n case 0xf8328991 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value_22 := and(sload(/** @src 0:87894:87926 \"address public publicLockAddress\" */ 107), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ sub(shl(160, 1), 1))\n let memPos_26 := mload(_2)\n mstore(memPos_26, value_22)\n return(memPos_26, 32)\n }\n }\n if iszero(calldatasize())\n {\n /// @src 0:106344:106410 \"if (msg.value <= 0) {...\"\n if /** @src 0:106348:106362 \"msg.value <= 0\" */ iszero(/** @src 0:106348:106357 \"msg.value\" */ callvalue())\n /// @src 0:106344:106410 \"if (msg.value <= 0) {...\"\n {\n /// @src 0:106379:106403 \"Unlock__INVALID_AMOUNT()\"\n let _142 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_2)\n /// @src 0:106379:106403 \"Unlock__INVALID_AMOUNT()\"\n mstore(_142, shl(225, 35057))\n revert(_142, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _3)\n }\n stop()\n }\n revert(0, 0)\n }\n function abi_decode_address_27006() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_address() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n let _1 := 0x20\n mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n }\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20)\n }\n function abi_decode_uint256t_uint256(dataEnd) -> value0, value1\n {\n if slt(add(dataEnd, not(3)), 64) { revert(0, 0) }\n value0 := calldataload(4)\n value1 := calldataload(36)\n }\n function abi_decode_string_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function finalize_allocation_27015(memPtr)\n {\n if gt(memPtr, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, memPtr)\n }\n function finalize_allocation_27038(memPtr)\n {\n let newFreePtr := add(memPtr, /** @src 0:104984:105016 \"previousUnlock.locks(msg.sender)\" */ 96)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function finalize_allocation(memPtr, size)\n {\n let newFreePtr := add(memPtr, and(add(size, 31), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31)))\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n if gt(_1, 0xffffffffffffffff)\n {\n mstore(/** @src -1:-1:-1 */ 0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ 0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x24)\n }\n let memPtr := mload(64)\n finalize_allocation(memPtr, add(and(add(_1, 0x1f), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31)), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20))\n mstore(memPtr, _1)\n if gt(add(add(offset, _1), 0x20), end)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n mstore(add(add(memPtr, _1), 0x20), /** @src -1:-1:-1 */ 0)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n array := memPtr\n }\n function abi_decode_uint16() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function copy_array_from_storage_to_memory_string() -> memPtr\n {\n memPtr := mload(64)\n let ret := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let slotValue := sload(/** @src 0:104083:104100 \"globalTokenSymbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let length := extract_byte_array_length(slotValue)\n mstore(memPtr, length)\n let _1 := 0x20\n let _2 := 1\n switch and(slotValue, _2)\n case 0 {\n mstore(add(memPtr, _1), and(slotValue, not(255)))\n ret := add(add(memPtr, shl(5, iszero(iszero(length)))), _1)\n }\n case 1 {\n mstore(/** @src -1:-1:-1 */ 0, /** @src 0:104083:104100 \"globalTokenSymbol\" */ 0x6a)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataPos := 7887053984229333715756243741084912719879447020693965939365260134600710199889\n let i := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(memPtr, i), _1), sload(dataPos))\n dataPos := add(dataPos, _2)\n }\n ret := add(add(memPtr, i), _1)\n }\n finalize_allocation(memPtr, sub(ret, memPtr))\n }\n function copy_array_from_storage_to_memory_string_27022() -> memPtr\n {\n memPtr := mload(64)\n let ret := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let slotValue := sload(/** @src 0:103868:103886 \"globalBaseTokenURI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let length := extract_byte_array_length(slotValue)\n mstore(memPtr, length)\n let _1 := 0x20\n let _2 := 1\n switch and(slotValue, _2)\n case 0 {\n mstore(add(memPtr, _1), and(slotValue, not(255)))\n ret := add(add(memPtr, shl(5, iszero(iszero(length)))), _1)\n }\n case 1 {\n mstore(/** @src -1:-1:-1 */ 0, /** @src 0:103868:103886 \"globalBaseTokenURI\" */ 0x69)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataPos := 57762096780731528330405058414938765910932439953606620384872163540286326260488\n let i := /** @src -1:-1:-1 */ 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(memPtr, i), _1), sload(dataPos))\n dataPos := add(dataPos, _2)\n }\n ret := add(add(memPtr, i), _1)\n }\n finalize_allocation(memPtr, sub(ret, memPtr))\n }\n function require_helper_stringliteral(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 19)\n mstore(add(memPtr, 68), \"ALREADY_INITIALIZED\")\n revert(memPtr, 100)\n }\n }\n function update_storage_value_offsett_bool_to_bool(slot, value)\n {\n let value_1 := and(sload(slot), not(255))\n sstore(slot, or(value_1, and(iszero(iszero(value)), 255)))\n }\n function require_helper_stringliteral_ed52(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 10)\n mstore(add(memPtr, 68), \"ONLY_OWNER\")\n revert(memPtr, 100)\n }\n }\n /// @ast-id 2991 @src 0:90451:90623 \"function _deployProxyAdmin() private returns (address) {...\"\n function fun_deployProxyAdmin() -> var\n {\n /// @src 0:90525:90541 \"new ProxyAdmin()\"\n let _1 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(64)\n /// @src 0:90525:90541 \"new ProxyAdmin()\"\n let _2 := datasize(\"ProxyAdmin_1215\")\n let _3 := add(_1, _2)\n if or(gt(_3, 0xffffffffffffffff), lt(_3, _1))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n /// @src 0:90525:90541 \"new ProxyAdmin()\"\n datacopy(_1, dataoffset(\"ProxyAdmin_1215\"), _2)\n let expr_address := create(0, _1, sub(_3, _1))\n if iszero(expr_address)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos := mload(64)\n returndatacopy(pos, /** @src 0:90525:90541 \"new ProxyAdmin()\" */ 0, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ returndatasize())\n revert(pos, returndatasize())\n }\n let _4 := and(expr_address, sub(shl(160, 1), 1))\n let _5 := shl(160, 0xffffffffffffffffffffffff)\n sstore(/** @src 0:90512:90541 \"proxyAdmin = new ProxyAdmin()\" */ 0x72, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:90512:90541 \"proxyAdmin = new ProxyAdmin()\" */ 0x72), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _5), _4))\n sstore(/** @src 0:90547:90586 \"proxyAdminAddress = address(proxyAdmin)\" */ 0x71, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ or(and(sload(/** @src 0:90547:90586 \"proxyAdminAddress = address(proxyAdmin)\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _5), _4))\n /// @src 0:90592:90618 \"return address(proxyAdmin)\"\n var := _4\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n function abi_encode_string_calldata(start, length, pos) -> end\n {\n mstore(pos, length)\n calldatacopy(add(pos, 0x20), start, length)\n mstore(add(add(pos, length), 0x20), /** @src -1:-1:-1 */ 0)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n end := add(add(pos, and(add(length, 31), /** @src 0:92718:92939 \"abi.encodeWithSignature(...\" */ not(31))), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20)\n }\n /// @ast-id 3202 @src 0:94039:94892 \"function createUpgradeableLockAtVersion(...\"\n function fun_createUpgradeableLockAtVersion(var_data_mpos, var_lockVersion) -> var\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _1 := sub(shl(160, 1), 1)\n let cleaned := and(sload(/** @src 0:94166:94183 \"proxyAdminAddress\" */ 0x71), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _1)\n /// @src 0:94162:94250 \"if (proxyAdminAddress == address(0)) {...\"\n if /** @src 0:94166:94197 \"proxyAdminAddress == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned)\n /// @src 0:94162:94250 \"if (proxyAdminAddress == address(0)) {...\"\n {\n /// @src 0:94214:94243 \"Unlock__MISSING_PROXY_ADMIN()\"\n let _2 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(64)\n /// @src 0:94214:94243 \"Unlock__MISSING_PROXY_ADMIN()\"\n mstore(_2, /** @src 0:95300:95329 \"Unlock__MISSING_PROXY_ADMIN()\" */ shl(226, 0x20ad73f3))\n /// @src 0:94214:94243 \"Unlock__MISSING_PROXY_ADMIN()\"\n revert(_2, 4)\n }\n /// @src -1:-1:-1\n let _3 := 0\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ and(var_lockVersion, 0xffff))\n mstore(0x20, /** @src 0:94305:94321 \"_publicLockImpls\" */ 0x74)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let _4 := 0x40\n let cleaned_1 := and(sload(keccak256(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)), _1)\n /// @src 0:94341:94428 \"if (publicLockImpl == address(0)) {...\"\n if /** @src 0:94345:94373 \"publicLockImpl == address(0)\" */ iszero(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ cleaned_1)\n /// @src 0:94341:94428 \"if (publicLockImpl == address(0)) {...\"\n {\n /// @src 0:94390:94421 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n let _5 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_4)\n /// @src 0:94390:94421 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n mstore(_5, /** @src 0:102493:102524 \"Unlock__MISSING_LOCK_TEMPLATE()\" */ shl(224, 0xadf22763))\n /// @src 0:94390:94421 \"Unlock__MISSING_LOCK_TEMPLATE()\"\n revert(_5, 4)\n }\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n let _6 := /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_4)\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n let _7 := datasize(\"TransparentUpgradeableProxy_1082\")\n let _8 := add(_6, _7)\n if or(gt(_8, 0xffffffffffffffff), lt(_8, _6))\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x24)\n }\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n datacopy(_6, dataoffset(\"TransparentUpgradeableProxy_1082\"), _7)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(_8, cleaned_1)\n mstore(add(_8, 0x20), cleaned)\n mstore(add(_8, _4), 96)\n /// @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\"\n let expr_3171_address := create(/** @src -1:-1:-1 */ _3, /** @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\" */ _6, sub(/** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ abi_encode_string(var_data_mpos, add(_8, 96)), /** @src 0:94509:94605 \"new TransparentUpgradeableProxy(...\" */ _6))\n if iszero(expr_3171_address)\n {\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let pos := mload(_4)\n returndatacopy(pos, /** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ returndatasize())\n revert(pos, returndatasize())\n }\n let _9 := and(/** @src 0:94645:94659 \"address(proxy)\" */ expr_3171_address, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _1)\n let memPtr := mload(_4)\n finalize_allocation_27038(memPtr)\n mstore(memPtr, /** @src 0:94742:94746 \"true\" */ 0x01)\n /// @src 0:94711:94806 \"LockBalances({...\"\n let _10 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ 0x20)\n mstore(_10, /** @src -1:-1:-1 */ _3)\n /// @src 0:94711:94806 \"LockBalances({...\"\n let _11 := add(memPtr, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n mstore(_11, /** @src -1:-1:-1 */ _3)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n mstore(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _9)\n mstore(0x20, /** @src 0:94694:94699 \"locks\" */ 0x68)\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n let dataSlot := keccak256(/** @src -1:-1:-1 */ _3, /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ _4)\n update_storage_value_offsett_bool_to_bool(dataSlot, iszero(iszero(mload(memPtr))))\n sstore(add(dataSlot, /** @src 0:94742:94746 \"true\" */ 0x01), /** @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\" */ mload(_10))\n sstore(add(dataSlot, 2), mload(_11))\n /// @src 0:94839:94867 \"NewLock(msg.sender, newLock)\"\n log3(/** @src -1:-1:-1 */ _3, _3, /** @src 0:94839:94867 \"NewLock(msg.sender, newLock)\" */ 0x01017ed19df0c7f8acc436147b234b09664a9fb4797b4fa3fb9e599c2eb67be7, /** @src 0:94847:94857 \"msg.sender\" */ caller(), /** @src 0:94839:94867 \"NewLock(msg.sender, newLock)\" */ _9)\n /// @src 0:94873:94887 \"return newLock\"\n var := _9\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n function abi_decode_uint16_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xffff)))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n value0 := value\n }\n function abi_decode_bool_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function require_helper_stringliteral_2f7a(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 10)\n mstore(add(memPtr, 68), \"ONLY_LOCKS\")\n revert(memPtr, 100)\n }\n }\n function abi_decode_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1))))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:86803:106416 \"contract Unlock is UnlockInitializable, UnlockOwnable {...\"\n value0 := value\n }\n function checked_add_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function checked_mul_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x))))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n }\n function checked_div_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function abi_encode_address_uint256(headStart, value0, value1) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"TransparentUpgradeableProxy_1082\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := 64\n mstore(_1, memoryguard(0x80))\n let programSize := datasize(\"TransparentUpgradeableProxy_1082\")\n let argSize := sub(codesize(), programSize)\n let memoryDataOffset := allocate_memory(argSize)\n codecopy(memoryDataOffset, programSize, argSize)\n let _2 := add(memoryDataOffset, argSize)\n if slt(sub(_2, memoryDataOffset), 96)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address_fromMemory(memoryDataOffset)\n let _3 := 32\n let value1 := abi_decode_address_fromMemory(add(memoryDataOffset, _3))\n let offset := mload(add(memoryDataOffset, _1))\n let _4 := sub(shl(64, 1), 1)\n if gt(offset, _4)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _5 := add(memoryDataOffset, offset)\n if iszero(slt(add(_5, 0x1f), _2))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _6 := mload(_5)\n let array := allocate_memory(array_allocation_size_bytes(_6))\n mstore(array, _6)\n let dst := add(array, _3)\n if gt(add(add(_5, _6), _3), _2)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n copy_memory_to_memory_with_cleanup(add(_5, _3), dst, _6)\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(value0))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(_1)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), _3)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _7 := sub(shl(160, 1), 1)\n let _8 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7)\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _9 := not(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _10 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n sstore(_10, or(and(sload(_10), _9), _8))\n /// @src -1:-1:-1\n let _11 := 0\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ _11, _11, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _8)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _12 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ array))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_12)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _12\n {\n expr := /** @src -1:-1:-1 */ _11\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr_1 := mload(_1)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, _4), lt(newFreePtr, memPtr_1))\n {\n mstore(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(/** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0x24)\n }\n mstore(_1, newFreePtr)\n mstore(memPtr_1, 39)\n mstore(add(memPtr_1, _3), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, _1), \" failed\")\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), value0, dst, mload(array), /** @src -1:-1:-1 */ _11, _11)\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let data := /** @src -1:-1:-1 */ _11\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _13 := returndatasize()\n let memPtr_2 := allocate_memory(array_allocation_size_bytes(_13))\n mstore(memPtr_2, _13)\n data := memPtr_2\n returndatacopy(add(memPtr_2, _3), /** @src -1:-1:-1 */ _11, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\"\n pop(fun_verifyCallResultFromTarget(value0, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ memPtr_1))\n }\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _14 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n let _15 := sload(_14)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _16 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(_1)\n mstore(_16, and(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _15, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _7))\n let _17 := and(value1, _7)\n mstore(add(_16, _3), _17)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_16, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _17)\n {\n let memPtr_3 := mload(_1)\n mstore(memPtr_3, shl(229, 4594637))\n mstore(add(memPtr_3, 4), _3)\n mstore(add(memPtr_3, 36), 38)\n mstore(add(memPtr_3, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr_3, 100), \"ddress\")\n revert(memPtr_3, 132)\n }\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _14, /** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ or(and(_15, _9), _17))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _18 := mload(_1)\n let _19 := datasize(\"TransparentUpgradeableProxy_1082_deployed\")\n codecopy(_18, dataoffset(\"TransparentUpgradeableProxy_1082_deployed\"), _19)\n return(_18, _19)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 32)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n copy_memory_to_memory_with_cleanup(add(var_errorMessage_mpos, 32), add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68), length)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_target))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"TransparentUpgradeableProxy_1082_deployed\" {\n code {\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n mstore(64, 128)\n if iszero(lt(calldatasize(), 4))\n {\n let _1 := 0\n switch shr(224, calldataload(_1))\n case 0x3659cfe6 {\n if callvalue() { revert(_1, _1) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_1, _1) }\n let value0 := abi_decode_address()\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let memPtr := allocate_memory_5122()\n mstore(memPtr, _1)\n /// @src 0:30541:30546 \"false\"\n fun_upgradeToAndCall(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ memPtr)\n }\n return(_1, _1)\n }\n case 0x4f1ef286 {\n external_fun_upgradeToAndCall()\n }\n case 0x5c60da1b { external_fun_implementation() }\n case 0x8f283970 { external_fun_changeAdmin() }\n case 0xf851a440 { external_fun_admin() }\n }\n if iszero(calldatasize())\n {\n /// @src 0:24748:24806 \"fallback() external payable virtual {...\"\n fun_fallback()\n }\n fun_fallback()\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function abi_decode_address() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function external_fun_upgradeToAndCall()\n {\n if slt(add(calldatasize(), not(3)), 64)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let offset := calldataload(36)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if iszero(slt(add(offset, 35), calldatasize()))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let length := calldataload(add(4, offset))\n if gt(length, _1)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if gt(add(add(offset, length), 36), calldatasize())\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ sub(shl(160, 1), 1)))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let array := allocate_memory(array_allocation_size_string(length))\n mstore(array, length)\n calldatacopy(add(array, 32), add(offset, 36), length)\n mstore(add(add(array, length), 32), /** @src -1:-1:-1 */ 0)\n /// @src 0:31029:31077 \"_upgradeToAndCall(newImplementation, data, true)\"\n fun_upgradeToAndCall_3349(value0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ array)\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_implementation()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29919:29942 \"address implementation_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n function external_fun_changeAdmin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 32)\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let value0 := abi_decode_address()\n let _1 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _2 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _3 := sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n let _4 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n mstore(_4, and(_3, _1))\n let _5 := and(value0, _1)\n mstore(add(_4, 32), _5)\n /// @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\"\n log1(_4, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 64, /** @src 0:20544:20579 \"AdminChanged(_getAdmin(), newAdmin)\" */ 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f)\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:20253:20275 \"newAdmin != address(0)\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _5)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 38)\n mstore(add(memPtr, 68), \"ERC1967: new admin is the zero a\")\n mstore(add(memPtr, 100), \"ddress\")\n revert(memPtr, 132)\n }\n sstore(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(_3, shl(160, 0xffffffffffffffffffffffff)), _5))\n }\n return(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function external_fun_admin()\n {\n if callvalue() { revert(0, 0) }\n if slt(add(calldatasize(), not(3)), 0) { revert(0, 0) }\n /// @src 0:29380:29394 \"address admin_\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n let _2 := sub(shl(160, 1), 1)\n /// @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\"\n let _3 := 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\n /// @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\"\n switch /** @src 0:28836:28861 \"msg.sender == _getAdmin()\" */ eq(/** @src 0:28836:28846 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2))\n case /** @src 0:28832:28911 \"if (msg.sender == _getAdmin()) {...\" */ 0 { fun_fallback() }\n default {\n /// @src 0:28871:28872 \"_\"\n _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ _3), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n }\n let memPos := mload(64)\n mstore(memPos, and(_1, _2))\n return(memPos, 32)\n }\n /// @ast-id 880 @src 0:24461:24561 \"function _fallback() internal virtual {...\"\n function fun_fallback()\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n let _1 := sub(shl(160, 1), 1)\n if /** @src 0:31409:31434 \"msg.sender != _getAdmin()\" */ eq(/** @src 0:31409:31419 \"msg.sender\" */ caller(), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(/** @src 0:19754:19820 \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\" */ 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1))\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 66)\n mstore(add(memPtr, 68), \"TransparentUpgradeableProxy: adm\")\n mstore(add(memPtr, 100), \"in cannot fallback to proxy targ\")\n mstore(add(memPtr, 132), \"et\")\n revert(memPtr, 164)\n }\n let _2 := and(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _1)\n /// @src 0:23291:24000 \"assembly {...\"\n let _3 := 0\n calldatacopy(_3, _3, calldatasize())\n let usr$result := delegatecall(gas(), _2, _3, calldatasize(), _3, _3)\n returndatacopy(_3, _3, returndatasize())\n switch usr$result\n case 0 { revert(_3, returndatasize()) }\n default { return(_3, returndatasize()) }\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_5122() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 32)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_string(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 0\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n /// @ast-id 634 @src 0:18189:18450 \"function _upgradeToAndCall(...\"\n function fun_upgradeToAndCall_3349(var_newImplementation, var_data_mpos)\n {\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n if /** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(var_newImplementation))\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 45)\n mstore(add(memPtr, 68), \"ERC1967: new implementation is n\")\n mstore(add(memPtr, 100), \"ot a contract\")\n revert(memPtr, 132)\n }\n let _1 := and(var_newImplementation, sub(shl(160, 1), 1))\n /// @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\"\n let _2 := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n sstore(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ or(and(sload(/** @src 0:17092:17158 \"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\" */ _2), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(160, 0xffffffffffffffffffffffff)), _1))\n /// @src 0:18035:18062 \"Upgraded(newImplementation)\"\n log2(/** @src -1:-1:-1 */ 0, 0, /** @src 0:18035:18062 \"Upgraded(newImplementation)\" */ 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b, _1)\n /// @src 0:18348:18363 \"data.length > 0\"\n let _3 := iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:18348:18359 \"data.length\" */ var_data_mpos))\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n let expr := /** @src 0:18348:18363 \"data.length > 0\" */ iszero(_3)\n /// @src 0:18348:18376 \"data.length > 0 || forceCall\"\n if _3\n {\n expr := /** @src 0:31072:31076 \"true\" */ 0x01\n }\n /// @src 0:18344:18446 \"if (data.length > 0 || forceCall) {...\"\n if expr\n {\n /// @src 0:11217:11326 \"functionDelegateCall(...\"\n pop(fun_functionDelegateCall(/** @src 0:18386:18439 \"Address.functionDelegateCall(newImplementation, data)\" */ var_newImplementation, var_data_mpos, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398()))\n }\n }\n function copy_literal_to_memory_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398() -> memPtr\n {\n let memPtr_1 := mload(64)\n let newFreePtr := add(memPtr_1, 96)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr_1)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr_1, 39)\n memPtr := memPtr_1\n mstore(add(memPtr_1, 32), \"Address: low-level delegate call\")\n mstore(add(memPtr_1, 64), \" failed\")\n }\n /// @ast-id 395 @src 0:11503:11810 \"function functionDelegateCall(...\"\n function fun_functionDelegateCall(var_target, var_data_mpos, var_errorMessage_373_mpos) -> var_376_mpos\n {\n /// @src 0:11692:11717 \"target.delegatecall(data)\"\n let expr_component := delegatecall(gas(), var_target, add(var_data_mpos, 0x20), mload(var_data_mpos), 0, 0)\n let data := 0\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let memPtr := allocate_memory(array_allocation_size_string(_1))\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ 0x20), 0, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ returndatasize())\n }\n /// @src 0:11723:11805 \"return...\"\n var_376_mpos := /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ fun_verifyCallResultFromTarget(var_target, expr_component, /** @src 0:11692:11717 \"target.delegatecall(data)\" */ data, /** @src 0:11736:11805 \"verifyCallResultFromTarget(target, success, returndata, errorMessage)\" */ var_errorMessage_373_mpos)\n }\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n function require_helper_stringliteral_cc2e(condition)\n {\n if iszero(condition)\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 29)\n mstore(add(memPtr, 68), \"Address: call to non-contract\")\n revert(memPtr, 100)\n }\n }\n /// @ast-id 434 @src 0:12084:12632 \"function verifyCallResultFromTarget(...\"\n function fun_verifyCallResultFromTarget(var_target, var_success, var_returndata_mpos, var_errorMessage_mpos) -> var_mpos\n {\n /// @src 0:12266:12628 \"if (success) {...\"\n switch var_success\n case 0 {\n /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n switch /** @src 0:13261:13282 \"returndata.length > 0\" */ iszero(iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:13261:13278 \"returndata.length\" */ var_returndata_mpos)))\n case /** @src 0:13257:13582 \"if (returndata.length > 0) {...\" */ 0 {\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n let _1 := /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(64)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n mstore(_1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ shl(229, 4594637))\n let _2 := 32\n mstore(/** @src 0:13555:13575 \"revert(errorMessage)\" */ add(_1, 4), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ _2)\n let length := mload(var_errorMessage_mpos)\n mstore(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 36), length)\n let i := /** @src 0:13281:13282 \"0\" */ 0x00\n /// @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\"\n for { } lt(i, length) { i := add(i, _2) }\n {\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ i), 68), mload(add(add(var_errorMessage_mpos, i), _2)))\n }\n mstore(add(add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ length), 68), /** @src 0:13281:13282 \"0\" */ 0x00)\n /// @src 0:13555:13575 \"revert(errorMessage)\"\n revert(_1, add(sub(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ add(/** @src 0:13555:13575 \"revert(errorMessage)\" */ _1, /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ and(add(length, 31), not(31))), /** @src 0:13555:13575 \"revert(errorMessage)\" */ _1), /** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ 68))\n }\n default /// @src 0:13257:13582 \"if (returndata.length > 0) {...\"\n {\n /// @src 0:13415:13535 \"assembly {...\"\n revert(add(32, var_returndata_mpos), mload(var_returndata_mpos))\n }\n }\n default /// @src 0:12266:12628 \"if (success) {...\"\n {\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n if /** @src 0:12291:12313 \"returndata.length == 0\" */ iszero(/** @src 0:28263:31552 \"contract TransparentUpgradeableProxy is ERC1967Proxy {...\" */ mload(/** @src 0:12291:12308 \"returndata.length\" */ var_returndata_mpos))\n /// @src 0:12287:12543 \"if (returndata.length == 0) {...\"\n {\n /// @src 0:12474:12534 \"require(isContract(target), \\\"Address: call to non-contract\\\")\"\n require_helper_stringliteral_cc2e(/** @src 0:6245:6268 \"account.code.length > 0\" */ iszero(iszero(/** @src 0:6245:6264 \"account.code.length\" */ extcodesize(/** @src 0:12482:12500 \"isContract(target)\" */ var_target))))\n }\n /// @src 0:12550:12567 \"return returndata\"\n var_mpos := var_returndata_mpos\n leave\n }\n }\n }\n data \".metadata\" hex\"a2646970667358221220d8a26ce07e9604f1b4fef919eed2c5ade04b5f04093830e7e2d20653d83fa26f64736f6c63430008150033\"\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ProxyAdmin_1215\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n mstore(64, _1)\n if callvalue() { revert(0, 0) }\n let _2 := sload(/** @src 0:3363:3369 \"_owner\" */ 0x00)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n sstore(/** @src 0:3363:3369 \"_owner\" */ 0x00, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ or(and(_2, not(sub(shl(160, 1), 1))), /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:3363:3369 \"_owner\" */ 0x00, 0x00, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_2, sub(shl(160, 1), 1)), /** @src 0:835:845 \"msg.sender\" */ caller())\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _3 := datasize(\"ProxyAdmin_1215_deployed\")\n codecopy(_1, dataoffset(\"ProxyAdmin_1215_deployed\"), _3)\n return(_1, _3)\n }\n }\n /// @use-src 0:\"contracts/past-versions/UnlockV12.sol\"\n object \"ProxyAdmin_1215_deployed\" {\n code {\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _1 := memoryguard(0x80)\n let _2 := 64\n mstore(_2, _1)\n let _3 := 4\n if iszero(lt(calldatasize(), _3))\n {\n let _4 := 0\n switch shr(224, calldataload(_4))\n case 0x204e1c7a {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _5 := sub(shl(160, 1), 1)\n let _6 := and(abi_decode_contract_TransparentUpgradeableProxy(), _5)\n mstore(_1, shl(224, 0x5c60da1b))\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component := staticcall(gas(), _6, _1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:32444:32496 \"address(proxy).staticcall(...\"\n let expr_component_mpos := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component) { revert(_4, _4) }\n let _7 := and(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:32531:32564 \"abi.decode(returndata, (address))\" */ expr_component_mpos)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _5)\n let memPos := mload(_2)\n mstore(memPos, _7)\n return(memPos, 32)\n }\n case 0x715018a6 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _8 := sload(_4)\n sstore(_4, and(_8, shl(160, 0xffffffffffffffffffffffff)))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, _4, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_8, sub(shl(160, 1), 1)), _4)\n return(_4, _4)\n }\n case 0x7eff275e {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _9 := sub(shl(160, 1), 1)\n let _10 := and(/** @src 0:33410:33427 \"proxy.changeAdmin\" */ value0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _9)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(extcodesize(_10))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _11 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n mstore(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(228, 0x08f28397))\n mstore(/** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ add(_11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1, _9))\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n let _12 := call(gas(), _10, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\" */ _11, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if iszero(_12)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos := mload(_2)\n returndatacopy(pos, _4, returndatasize())\n revert(pos, returndatasize())\n }\n /// @src 0:33410:33437 \"proxy.changeAdmin(newAdmin)\"\n if _12\n {\n finalize_allocation_3427(_11)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n _4 := _4\n }\n return(_4, _4)\n }\n case 0x8da5cb5b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _4) { revert(_4, _4) }\n let value := and(sload(_4), sub(shl(160, 1), 1))\n let memPos_1 := mload(_2)\n mstore(memPos_1, value)\n return(memPos_1, 32)\n }\n case 0x9623609d {\n if slt(add(calldatasize(), not(3)), 96) { revert(_4, _4) }\n let value0_1 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_1 := abi_decode_address()\n let offset := calldataload(68)\n if gt(offset, 0xffffffffffffffff) { revert(_4, _4) }\n if iszero(slt(add(offset, 35), calldatasize())) { revert(_4, _4) }\n let _13 := calldataload(add(_3, offset))\n let _14 := array_allocation_size_bytes(_13)\n let memPtr := mload(_2)\n finalize_allocation(memPtr, _14)\n mstore(memPtr, _13)\n let _15 := 32\n if gt(add(add(offset, _13), 36), calldatasize()) { revert(_4, _4) }\n calldatacopy(add(memPtr, _15), add(offset, 36), _13)\n mstore(add(add(memPtr, _13), _15), _4)\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _16 := sub(shl(160, 1), 1)\n let _17 := and(/** @src 0:34191:34213 \"proxy.upgradeToAndCall\" */ value0_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _16)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(extcodesize(_17))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _18 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n mstore(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x278f7943))\n mstore(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ add(_18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_1, _16))\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36), _2)\n let length := mload(memPtr)\n mstore(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 68), length)\n let i := _4\n for { } lt(i, length) { i := add(i, _15) }\n {\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ i), 100), mload(add(add(memPtr, i), _15)))\n }\n mstore(add(add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ length), 100), _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n let _19 := call(gas(), _17, /** @src 0:34221:34230 \"msg.value\" */ callvalue(), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, add(sub(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ add(/** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(add(length, 0x1f), not(31))), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 100), /** @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\" */ _18, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if iszero(_19)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_1 := mload(_2)\n returndatacopy(pos_1, _4, returndatasize())\n revert(pos_1, returndatasize())\n }\n /// @src 0:34191:34253 \"proxy.upgradeToAndCall{value: msg.value}(implementation, data)\"\n if _19\n {\n finalize_allocation_3427(_18)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0x99a88ec4 {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), _2) { revert(_4, _4) }\n let value0_2 := abi_decode_contract_TransparentUpgradeableProxy()\n let value1_2 := abi_decode_address()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _20 := sub(shl(160, 1), 1)\n let _21 := and(/** @src 0:33750:33765 \"proxy.upgradeTo\" */ value0_2, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _20)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(extcodesize(_21))\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n revert(_4, _4)\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _22 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n mstore(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ shl(225, 0x1b2ce7f3))\n mstore(/** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ add(_22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3), and(value1_2, _20))\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n let _23 := call(gas(), _21, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 36, /** @src 0:33750:33781 \"proxy.upgradeTo(implementation)\" */ _22, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _4)\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if iszero(_23)\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let pos_2 := mload(_2)\n returndatacopy(pos_2, _4, returndatasize())\n revert(pos_2, returndatasize())\n }\n /// @src 0:33750:33781 \"proxy.upgradeTo(implementation)\"\n if _23\n {\n finalize_allocation_3427(_22)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if _4 { revert(_4, _4) }\n }\n return(_4, _4)\n }\n case 0xf2fde38b {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let value0_3 := abi_decode_contract_TransparentUpgradeableProxy()\n /// @src 0:1995:2047 \"modifier onlyOwner() {...\"\n fun_checkOwner()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let _24 := sub(shl(160, 1), 1)\n let _25 := and(/** @src 0:3027:3049 \"newOwner != address(0)\" */ value0_3, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _24)\n if /** @src 0:3027:3049 \"newOwner != address(0)\" */ iszero(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _25)\n {\n let memPtr_1 := mload(_2)\n mstore(memPtr_1, shl(229, 4594637))\n mstore(add(memPtr_1, _3), 32)\n mstore(add(memPtr_1, 36), 38)\n mstore(add(memPtr_1, 68), \"Ownable: new owner is the zero a\")\n mstore(add(memPtr_1, 100), \"ddress\")\n revert(memPtr_1, 132)\n }\n let _26 := sload(0)\n sstore(0, or(and(_26, shl(160, 0xffffffffffffffffffffffff)), _25))\n /// @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\"\n log3(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 0, 0, /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ and(_26, _24), /** @src 0:3403:3443 \"OwnershipTransferred(oldOwner, newOwner)\" */ _25)\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n return(_4, _4)\n }\n case 0xf3b7dead {\n if callvalue() { revert(_4, _4) }\n if slt(add(calldatasize(), not(3)), 32) { revert(_4, _4) }\n let _27 := sub(shl(160, 1), 1)\n let _28 := and(abi_decode_contract_TransparentUpgradeableProxy(), _27)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let _29 := /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(_2)\n mstore(_29, shl(230, 0x03e14691))\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_1 := staticcall(gas(), _28, _29, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ _3, _4, _4)\n /// @src 0:33005:33057 \"address(proxy).staticcall(...\"\n let expr_component_mpos_1 := extract_returndata()\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n if iszero(expr_component_1) { revert(_4, _4) }\n let _30 := and(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ abi_decode_address_payable_fromMemory(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32), /** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ add(add(expr_component_mpos_1, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ mload(/** @src 0:33092:33125 \"abi.decode(returndata, (address))\" */ expr_component_mpos_1)), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ 32)), _27)\n let memPos_2 := mload(_2)\n mstore(memPos_2, _30)\n return(memPos_2, 32)\n }\n }\n revert(0, 0)\n }\n function abi_decode_contract_TransparentUpgradeableProxy() -> value\n {\n value := calldataload(4)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_address() -> value\n {\n value := calldataload(36)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function finalize_allocation_3427(memPtr)\n {\n if gt(memPtr, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, memPtr)\n }\n function finalize_allocation(memPtr, size)\n {\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n /// @ast-id 74 @src 0:2259:2383 \"function _checkOwner() internal view virtual {...\"\n function fun_checkOwner()\n {\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n let value := and(sload(/** @src 0:2183:2189 \"_owner\" */ 0x00), /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ sub(shl(160, 1), 1))\n if iszero(/** @src 0:2318:2341 \"owner() == _msgSender()\" */ eq(/** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ value, /** @src 0:835:845 \"msg.sender\" */ caller()))\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n {\n let memPtr := mload(64)\n mstore(memPtr, shl(229, 4594637))\n mstore(add(memPtr, 4), 32)\n mstore(add(memPtr, 36), 32)\n mstore(add(memPtr, 68), \"Ownable: caller is not the owner\")\n revert(memPtr, 100)\n }\n }\n function extract_returndata() -> data\n {\n switch returndatasize()\n case 0 { data := 96 }\n default {\n let _1 := returndatasize()\n let _2 := array_allocation_size_bytes(_1)\n let memPtr := mload(64)\n finalize_allocation(memPtr, _2)\n mstore(memPtr, _1)\n data := memPtr\n returndatacopy(add(memPtr, 0x20), /** @src -1:-1:-1 */ 0, /** @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\" */ returndatasize())\n }\n }\n function abi_decode_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1))))\n {\n revert(/** @src -1:-1:-1 */ 0, 0)\n }\n /// @src 0:31950:34260 \"contract ProxyAdmin is Ownable {...\"\n value0 := value\n }\n }\n data \".metadata\" hex\"a26469706673582212200c357892ee89f46df6d61d0354d7a1306c19bb275746744c0a9d77ef5644b92664736f6c63430008150033\"\n }\n }\n data \".metadata\" hex\"a264697066735822122050a1b4afc3e492cd053cbbb1de14f48d88590a00e5d1871b0518c4efbc80ffe864736f6c63430008150033\"\n }\n}\n","hash":"0100051b7bb4ca1d360ea287eb09e6bd359a657d042285d7558210db93ffe6bc","factoryDependencies":{"010000ed89a9abe7f27c522a89d1c165b742f032da6ae4b42f62bfda768e4bf9":"contracts/past-versions/UnlockV12.sol:ProxyAdmin","010001cfcb8d4a4136647d024e21a6ed4207383d3ffddf7dfb8aac303d71d949":"contracts/past-versions/UnlockV12.sol:TransparentUpgradeableProxy"}},"UnlockContextUpgradeable":{"abi":[],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"UnlockContextUpgradeable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:UnlockContextUpgradeable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:UnlockContextUpgradeable","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2654,"contract":"contracts/past-versions/UnlockV12.sol:UnlockContextUpgradeable","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"UnlockInitializable":{"abi":[],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() initializer {} ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.hljs-theme-light.nopadding] ```\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"UnlockInitializable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:UnlockInitializable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:UnlockInitializable","label":"initializing","offset":1,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{}},"irOptimized":""},"UnlockOwnable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"__initializeOwnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"metadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"__initializeOwnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be aplied to your functions to restrict their use to the owner. This contract was originally part of openzeppelin/contracts-ethereum-package but had to be included (instead of using the one in openzeppelin/contracts-upgradeable ) because the ______gap array length was 49 instead of 50\",\"kind\":\"dev\",\"methods\":{\"__initializeOwnable(address)\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"isOwner()\":{\"details\":\"Returns true if the caller is the current owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. > Note: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/past-versions/UnlockV12.sol\":\"UnlockOwnable\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":false,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf[xa[r]EscLMcCTUtTOntnfDIulLculVcul [j]Tpeulxa[rul]xa[r]cLgvifCTUca[r]LSsTFOtfDnca[r]Iulc]jmul[jul] VcTOcul jmul:fDnTOc\",\"stackAllocation\":true}},\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/past-versions/UnlockV12.sol\":{\"keccak256\":\"0x5645ac6a1ae8a2bfed94631e7d2df45270fac6729cf7df55d8bec52579fd2694\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea94f92b0005a693bfb25b443dd0396b404a7b781fb3e160634d2788b108e79\",\"dweb:/ipfs/Qmcg25fum8AJNxAWdZCV2MuGuSDSWTXBf8mLyznewFbnNa\"]}},\"version\":1}","storageLayout":{"storage":[{"astId":2546,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"initialized","offset":0,"slot":"0","type":"t_bool"},{"astId":2549,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":2654,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":2663,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":2783,"contract":"contracts/past-versions/UnlockV12.sol:UnlockOwnable","label":"______gap","offset":0,"slot":"52","type":"t_array(t_uint256)50_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"evm":{"legacyAssembly":null,"assembly":null,"bytecode":null,"methodIdentifiers":{"__initializeOwnable(address)":"b0ca0c83","isOwner()":"8f32d59b","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"irOptimized":""}}}}} \ No newline at end of file diff --git a/governance/cache-zk/solidity-files-cache.json b/governance/cache-zk/solidity-files-cache.json index 58a2966c66d..43ee3a2d7e2 100644 --- a/governance/cache-zk/solidity-files-cache.json +++ b/governance/cache-zk/solidity-files-cache.json @@ -2,8 +2,8 @@ "_format": "hh-sol-cache-2", "files": { "/Users/julien/repos/unlock/governance/contracts/past-versions/UnlockV12.sol": { - "lastModificationDate": 1702049079745, - "contentHash": "1cf88791237780dd7b4a24f829a72d3b", + "lastModificationDate": 1704484176944, + "contentHash": "c257b5242e07f739f326327aa32760ef", "sourceName": "contracts/past-versions/UnlockV12.sol", "solcConfig": { "version": "0.8.21", @@ -29,14 +29,14 @@ "libraries": {} }, "zksolc": { - "version": "1.3.18", + "version": "1.3.21", "compilerSource": "binary", "settings": { "optimizer": { "enabled": true, "mode": "3" }, - "compilerPath": "/Users/julien/Library/Caches/hardhat-nodejs/compilers-v2/zksolc/zksolc-v1.3.18", + "compilerPath": "/Users/julien/Library/Caches/hardhat-nodejs/compilers-v2/zksolc/zksolc-v1.3.21", "missingLibrariesPath": "./.zksolc-libraries-cache/missingLibraryDependencies.json", "areLibrariesMissing": false, "experimental": {}, diff --git a/governance/package.json b/governance/package.json index aa46129b6fd..c23757af3c5 100644 --- a/governance/package.json +++ b/governance/package.json @@ -22,7 +22,7 @@ "fs-extra": "11.2.0", "hardhat": "2.19.5", "solhint": "4.0.0", - "zksync-web3": "0.14.3" + "zksync-ethers": "6.0.0" }, "scripts": { "test": "hardhat test", diff --git a/yarn.lock b/yarn.lock index 1d5283bfbf6..4e9b0135df5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19564,7 +19564,7 @@ __metadata: fs-extra: "npm:11.2.0" hardhat: "npm:2.19.5" solhint: "npm:4.0.0" - zksync-web3: "npm:0.14.3" + zksync-ethers: "npm:6.0.0" languageName: unknown linkType: soft @@ -60008,12 +60008,12 @@ __metadata: languageName: node linkType: hard -"zksync-web3@npm:0.14.3": - version: 0.14.3 - resolution: "zksync-web3@npm:0.14.3" +"zksync-ethers@npm:6.0.0": + version: 6.0.0 + resolution: "zksync-ethers@npm:6.0.0" peerDependencies: - ethers: ^5.7.0 - checksum: 169952c1200211348261f0ad7ea5ca73094d54e8b83769e746fe28cc9534d01d273404d8a44e7e702197ca2d4425a780ad7cb7dcc24e2c4a4c4f262c327c1b8d + ethers: ^6.7.1 + checksum: 1135be59af2fdca1ffaf9947aa6859f7927aad646432ef052c3b1e77f5475b7cd504b226c0247fad80ca17b84b14c90e413b9acb9d393027aa7c39bac39f3cd7 languageName: node linkType: hard From 473b49da475b9ae1e7604804afb661ed861eb8b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 14:04:34 +0100 Subject: [PATCH 10/51] ignore cache files --- governance/.gitignore | 7 +- governance/cache-zk/solidity-files-cache.json | 94 ------------------- 2 files changed, 6 insertions(+), 95 deletions(-) delete mode 100644 governance/cache-zk/solidity-files-cache.json diff --git a/governance/.gitignore b/governance/.gitignore index f131eefc67a..36fb39f7548 100644 --- a/governance/.gitignore +++ b/governance/.gitignore @@ -1,3 +1,8 @@ cache contracts -artifacts \ No newline at end of file +artifacts + +# zksync +zk-artifacts +zk-cache +cache-zk \ No newline at end of file diff --git a/governance/cache-zk/solidity-files-cache.json b/governance/cache-zk/solidity-files-cache.json deleted file mode 100644 index 43ee3a2d7e2..00000000000 --- a/governance/cache-zk/solidity-files-cache.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_format": "hh-sol-cache-2", - "files": { - "/Users/julien/repos/unlock/governance/contracts/past-versions/UnlockV12.sol": { - "lastModificationDate": 1704484176944, - "contentHash": "c257b5242e07f739f326327aa32760ef", - "sourceName": "contracts/past-versions/UnlockV12.sol", - "solcConfig": { - "version": "0.8.21", - "settings": { - "optimizer": { - "enabled": true, - "mode": "3" - }, - "outputSelection": { - "*": { - "*": [ - "storageLayout", - "abi", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - }, - "evmVersion": "paris", - "libraries": {} - }, - "zksolc": { - "version": "1.3.21", - "compilerSource": "binary", - "settings": { - "optimizer": { - "enabled": true, - "mode": "3" - }, - "compilerPath": "/Users/julien/Library/Caches/hardhat-nodejs/compilers-v2/zksolc/zksolc-v1.3.21", - "missingLibrariesPath": "./.zksolc-libraries-cache/missingLibraryDependencies.json", - "areLibrariesMissing": false, - "experimental": {}, - "libraries": {} - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0", - "^0.8.0", - "^0.8.0", - "^0.8.0", - "^0.8.1", - "^0.8.0", - "^0.8.2", - "^0.8.0", - "^0.8.0", - "^0.8.0", - "^0.8.0", - ">=0.5.17 <0.9.0", - ">=0.5.17 <0.9.0", - ">=0.5.0", - ">=0.5.17 <0.9.0", - "^0.8.1", - "^0.8.0", - "^0.8.0", - "^0.8.0", - "^0.8.7" - ], - "artifacts": [ - "Address", - "AddressUpgradeable", - "Context", - "ERC1967Proxy", - "ERC1967Upgrade", - "IBeacon", - "IERC1822Proxiable", - "IMintableERC20", - "IPublicLock", - "IUniswapOracleV3", - "IUnlock", - "Ownable", - "Proxy", - "ProxyAdmin", - "StorageSlot", - "TransparentUpgradeableProxy", - "Unlock", - "UnlockContextUpgradeable", - "UnlockInitializable", - "UnlockOwnable" - ] - } - } -} From ff746e214796bf89e69a83a27d6dc97d352867ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 14:12:53 +0100 Subject: [PATCH 11/51] bump zksync libs --- governance/hardhat.config.js | 23 +- governance/package.json | 10 +- yarn.lock | 427 +++++++++++++++++++++++++++-------- 3 files changed, 361 insertions(+), 99 deletions(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index 05cbc45714a..84015990edb 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -5,9 +5,6 @@ require('@nomicfoundation/hardhat-ethers') require('@nomicfoundation/hardhat-verify') require('@openzeppelin/hardhat-upgrades') -require('@matterlabs/hardhat-zksync-deploy') -require('@matterlabs/hardhat-zksync-solc') - // import helpers const { etherscan, @@ -15,6 +12,14 @@ const { parseForkUrl, } = require('@unlock-protocol/hardhat-helpers') +// zksync-related +if (process.env.ZK_SYNC) { + require('@matterlabs/hardhat-zksync-deploy') + require('@matterlabs/hardhat-zksync-solc') + require('@matterlabs/hardhat-zksync-verify') + require('@matterlabs/hardhat-zksync-upgradable') +} + const settings = { optimizer: { enabled: true, @@ -44,6 +49,7 @@ if (process.env.TENDERLY_FORK) { accounts: networks.mainnet.accounts, } } + // tasks require('./tasks/balance') require('./tasks/safe') @@ -57,7 +63,7 @@ require('./tasks/lock') /** * @type import('hardhat/config').HardhatUserConfig */ -module.exports = { +const config = { networks, etherscan, solidity: { @@ -66,8 +72,13 @@ module.exports = { sourcify: { enabled: true, }, - zksolc: { +} + +if (process.env.ZK_SYNC) { + config.zksolc = { version: 'latest', settings: {}, - }, + } } + +module.exports = config diff --git a/governance/package.json b/governance/package.json index c23757af3c5..7ad8a74831b 100644 --- a/governance/package.json +++ b/governance/package.json @@ -3,6 +3,10 @@ "description": "Scripts for the management of the Unlock Protocol", "private": true, "dependencies": { + "@matterlabs/hardhat-zksync-deploy": "1.1.2", + "@matterlabs/hardhat-zksync-solc": "1.0.6", + "@matterlabs/hardhat-zksync-upgradable": "1.2.1", + "@matterlabs/hardhat-zksync-verify": "1.3.0", "@nomicfoundation/hardhat-ethers": "3.0.5", "@nomicfoundation/hardhat-network-helpers": "1.0.10", "@nomicfoundation/hardhat-verify": "2.0.4", @@ -22,7 +26,7 @@ "fs-extra": "11.2.0", "hardhat": "2.19.5", "solhint": "4.0.0", - "zksync-ethers": "6.0.0" + "zksync-ethers": "6.1.0" }, "scripts": { "test": "hardhat test", @@ -32,7 +36,7 @@ "lint": "yarn lint:contracts && yarn lint:code" }, "devDependencies": { - "@matterlabs/hardhat-zksync-deploy": "0.6.5", - "@matterlabs/hardhat-zksync-solc": "0.4.2" + "@matterlabs/hardhat-zksync-deploy": "1.1.2", + "@matterlabs/hardhat-zksync-solc": "1.1.0" } } diff --git a/yarn.lock b/yarn.lock index 4e9b0135df5..cc6a9dae394 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9240,34 +9240,76 @@ __metadata: languageName: node linkType: hard -"@matterlabs/hardhat-zksync-deploy@npm:0.6.5": - version: 0.6.5 - resolution: "@matterlabs/hardhat-zksync-deploy@npm:0.6.5" +"@matterlabs/hardhat-zksync-deploy@npm:1.1.2, @matterlabs/hardhat-zksync-deploy@npm:^1.1.0": + version: 1.1.2 + resolution: "@matterlabs/hardhat-zksync-deploy@npm:1.1.2" dependencies: - "@matterlabs/hardhat-zksync-solc": "npm:0.4.2" + "@matterlabs/hardhat-zksync-solc": "npm:^1.0.4" chalk: "npm:4.1.2" - ts-morph: "npm:^19.0.0" + ts-morph: "npm:^21.0.1" peerDependencies: - ethers: ~5.7.2 - hardhat: ^2.14.0 - zksync-web3: ^0.14.3 - checksum: 8df3ac554d31c37289f40ea479edb786e12be69a93c0190ee04dd7ffdf54e5a0f3f88a8eedd5569d3c5e7c22158f6c739cafc3864a1a20bae951daacef03cc70 + ethers: ^6.7.1 + hardhat: ^2.19.2 + zksync-ethers: ^6.0.0 + checksum: 75b877240d709ebee86e35414e3a18f579f11d2c170a24b2da02aa8b08eb29f6ead8500d8ef6c4207bb047232974f22d801a5169a45da703d7784b9f95714f6d languageName: node linkType: hard -"@matterlabs/hardhat-zksync-solc@npm:0.4.2": - version: 0.4.2 - resolution: "@matterlabs/hardhat-zksync-solc@npm:0.4.2" +"@matterlabs/hardhat-zksync-solc@npm:1.1.0, @matterlabs/hardhat-zksync-solc@npm:^1.0.3, @matterlabs/hardhat-zksync-solc@npm:^1.0.4": + version: 1.1.0 + resolution: "@matterlabs/hardhat-zksync-solc@npm:1.1.0" dependencies: "@nomiclabs/hardhat-docker": "npm:^2.0.0" + chai: "npm:^4.3.6" chalk: "npm:4.1.2" - dockerode: "npm:^3.3.4" + debug: "npm:^4.3.4" + dockerode: "npm:^4.0.0" fs-extra: "npm:^11.1.1" proper-lockfile: "npm:^4.1.2" semver: "npm:^7.5.1" + sinon: "npm:^16.0.0" + sinon-chai: "npm:^3.7.0" + undici: "npm:^5.14.0" + peerDependencies: + hardhat: ^2.19.4 + checksum: 481b2eb6b0b0fef844ebb085d56253eeae9cf6aa355438b6877bd5f33962315ab264349f235e9d33c56311bd31258db077a8e2d622bcf3a1888688b230301cbf + languageName: node + linkType: hard + +"@matterlabs/hardhat-zksync-upgradable@npm:1.2.1": + version: 1.2.1 + resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.1" + dependencies: + "@matterlabs/hardhat-zksync-deploy": "npm:^1.1.0" + "@matterlabs/hardhat-zksync-solc": "npm:^1.0.3" + "@openzeppelin/upgrades-core": "npm:^1.31.0" + peerDependencies: + "@openzeppelin/contracts-upgradeable": ^4.9.2 + checksum: 73f59220cd4c2f2b0cddba1b3b5aacfa671a48fc8b6d67dc0a2944010d6f3961290ab82160c76a93e1406b9dc5e150b4d05a73211818fd3149018aff4f844c74 + languageName: node + linkType: hard + +"@matterlabs/hardhat-zksync-verify@npm:1.3.0": + version: 1.3.0 + resolution: "@matterlabs/hardhat-zksync-verify@npm:1.3.0" + dependencies: + "@ethersproject/abi": "npm:^5.1.2" + "@ethersproject/address": "npm:5.7.0" + "@matterlabs/hardhat-zksync-solc": "npm:^1.0.3" + "@nomicfoundation/hardhat-verify": "npm:^2.0.0" + "@openzeppelin/contracts": "npm:^4.9.2" + axios: "npm:^1.6.2" + cbor: "npm:^8.1.0" + chai: "npm:^4.3.6" + chalk: "npm:4.1.2" + debug: "npm:^4.1.1" + hardhat: "npm:^2.19.4" + sinon: "npm:^16.0.0" + sinon-chai: "npm:^3.7.0" + zksync-ethers: "npm:^6.0.0" peerDependencies: - hardhat: ^2.14.0 - checksum: e282d67147b254f4243cacdfb2fec3721d82aa57354cfafa0cc5beb2254460d75933143d291cbfdad2a15d9daab5c9b468061abd1ca61d77635aa13570b2b0be + "@nomicfoundation/hardhat-verify": ^2.0.0 + checksum: f0d5af42914519042f86532e4f8cfb0bef3a53f335c0bfa75372ab32154f1ad885ce1ee27c1f9183208baa4ca43721d1ea47c26a8e95674f9036f225b5ca9ae8 languageName: node linkType: hard @@ -10851,6 +10893,25 @@ __metadata: languageName: node linkType: hard +"@nomicfoundation/hardhat-verify@npm:^2.0.0": + version: 2.0.3 + resolution: "@nomicfoundation/hardhat-verify@npm:2.0.3" + dependencies: + "@ethersproject/abi": "npm:^5.1.2" + "@ethersproject/address": "npm:^5.0.2" + cbor: "npm:^8.1.0" + chalk: "npm:^2.4.2" + debug: "npm:^4.1.1" + lodash.clonedeep: "npm:^4.5.0" + semver: "npm:^6.3.0" + table: "npm:^6.8.0" + undici: "npm:^5.14.0" + peerDependencies: + hardhat: ^2.0.4 + checksum: 4b461f9cd242ba570ab98b7f407d8d27fb3cd667ef8268489485e337e7b2d256d3946869b86c7b7285b51adbcbfe2eeff54066737fec139e186e24e6a0c7ec79 + languageName: node + linkType: hard + "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": version: 0.1.1 resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" @@ -11484,7 +11545,7 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/contracts@npm:4.9.5": +"@openzeppelin/contracts@npm:4.9.5, @openzeppelin/contracts@npm:^4.9.2": version: 4.9.5 resolution: "@openzeppelin/contracts@npm:4.9.5" checksum: f221d91a7dd96f9187aa832f8a160d673feb2904711bd210fab56ccfd8b8351b8150b4f0bd247701f7d4adddceba83943c049c6da11d126e07164b9abff767e0 @@ -11748,6 +11809,24 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/upgrades-core@npm:^1.31.0": + version: 1.32.3 + resolution: "@openzeppelin/upgrades-core@npm:1.32.3" + dependencies: + cbor: "npm:^9.0.0" + chalk: "npm:^4.1.0" + compare-versions: "npm:^6.0.0" + debug: "npm:^4.1.1" + ethereumjs-util: "npm:^7.0.3" + minimist: "npm:^1.2.7" + proper-lockfile: "npm:^4.1.1" + solidity-ast: "npm:^0.4.51" + bin: + openzeppelin-upgrades-core: dist/cli/cli.js + checksum: aaffecac931e79abf546dec47d937c8a4d39e6459b4ead464ce87572e3d9c89b7b1aac075cd582e56e7d6299976fdeefac012e5f42a200e8350b82cba3697383 + languageName: node + linkType: hard + "@openzeppelin/upgrades@npm:2.8.0": version: 2.8.0 resolution: "@openzeppelin/upgrades@npm:2.8.0" @@ -13796,6 +13875,60 @@ __metadata: languageName: node linkType: hard +"@sinonjs/commons@npm:^2.0.0": + version: 2.0.0 + resolution: "@sinonjs/commons@npm:2.0.0" + dependencies: + type-detect: "npm:4.0.8" + checksum: bd6b44957077cd99067dcf401e80ed5ea03ba930cba2066edbbfe302d5fc973a108db25c0ae4930ee53852716929e4c94fa3b8a1510a51ac6869443a139d1e3d + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: "npm:4.0.8" + checksum: a0af217ba7044426c78df52c23cedede6daf377586f3ac58857c565769358ab1f44ebf95ba04bbe38814fba6e316ca6f02870a009328294fc2c555d0f85a7117 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.3.0": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 78155c7bd866a85df85e22028e046b8d46cf3e840f72260954f5e3ed5bd97d66c595524305a6841ffb3f681a08f6e5cef572a2cce5442a8a232dc29fb409b83e + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^11.2.2": + version: 11.2.2 + resolution: "@sinonjs/fake-timers@npm:11.2.2" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: da7dfa677b2362bc5a321fc1563184755b5c62fbb1a72457fb9e901cd187ba9dc834f9e8a0fb5a4e1d1e6e6ad4c5b54e90900faa44dd6c82d3c49c92ec23ecd4 + languageName: node + linkType: hard + +"@sinonjs/samsam@npm:^8.0.0": + version: 8.0.0 + resolution: "@sinonjs/samsam@npm:8.0.0" + dependencies: + "@sinonjs/commons": "npm:^2.0.0" + lodash.get: "npm:^4.4.2" + type-detect: "npm:^4.0.8" + checksum: 0c9928a7d16a2428ba561e410d9d637c08014d549cac4979c63a6580c56b69378dba80ea01b17e8e163f2ca5dd331376dae92eae8364857ef827ae59dbcfe0ce + languageName: node + linkType: hard + +"@sinonjs/text-encoding@npm:^0.7.2": + version: 0.7.2 + resolution: "@sinonjs/text-encoding@npm:0.7.2" + checksum: ec713fb44888c852d84ca54f6abf9c14d036c11a5d5bfab7825b8b9d2b22127dbe53412c68f4dbb0c05ea5ed61c64679bd2845c177d81462db41e0d3d7eca499 + languageName: node + linkType: hard + "@skn0tt/lambda-local@npm:2.0.3": version: 2.0.3 resolution: "@skn0tt/lambda-local@npm:2.0.3" @@ -17063,15 +17196,15 @@ __metadata: languageName: node linkType: hard -"@ts-morph/common@npm:~0.20.0": - version: 0.20.0 - resolution: "@ts-morph/common@npm:0.20.0" +"@ts-morph/common@npm:~0.22.0": + version: 0.22.0 + resolution: "@ts-morph/common@npm:0.22.0" dependencies: - fast-glob: "npm:^3.2.12" - minimatch: "npm:^7.4.3" - mkdirp: "npm:^2.1.6" + fast-glob: "npm:^3.3.2" + minimatch: "npm:^9.0.3" + mkdirp: "npm:^3.0.1" path-browserify: "npm:^1.0.1" - checksum: 853cf73885ebb227134ca6e9c8660f4126c97227b837fe2609aec5b9212d5af7c0c2d48c2c13c48687c003d1a00270dd63d3ab3b5693a1d7b2413a017c1f4c82 + checksum: 536ca9944065156e26bb7fecca13adcbd5d65494e8ffa72096d02da9ec6afc8cd97bb582b12c15d0ac34f26cdab25dbc87e4f9e21f21f1019d30e670c8392d9f languageName: node linkType: hard @@ -19543,8 +19676,10 @@ __metadata: version: 0.0.0-use.local resolution: "@unlock-protocol/governance@workspace:governance" dependencies: - "@matterlabs/hardhat-zksync-deploy": "npm:0.6.5" - "@matterlabs/hardhat-zksync-solc": "npm:0.4.2" + "@matterlabs/hardhat-zksync-deploy": "npm:1.1.2" + "@matterlabs/hardhat-zksync-solc": "npm:1.1.0" + "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.1" + "@matterlabs/hardhat-zksync-verify": "npm:1.3.0" "@nomicfoundation/hardhat-ethers": "npm:3.0.5" "@nomicfoundation/hardhat-network-helpers": "npm:1.0.10" "@nomicfoundation/hardhat-verify": "npm:2.0.4" @@ -19564,7 +19699,7 @@ __metadata: fs-extra: "npm:11.2.0" hardhat: "npm:2.19.5" solhint: "npm:4.0.0" - zksync-ethers: "npm:6.0.0" + zksync-ethers: "npm:6.1.0" languageName: unknown linkType: soft @@ -23029,6 +23164,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.6.2": + version: 1.6.6 + resolution: "axios@npm:1.6.6" + dependencies: + follow-redirects: "npm:^1.15.4" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 499401107e237e6fe91db3f68122a4d83496bc8da325aefc97f1fa4a0624333423262eb55b9e1f9a2ec50804a74bc47377fe15bf689f435e68ade9b0bff5399b + languageName: node + linkType: hard + "axobject-query@npm:^3.2.1": version: 3.2.1 resolution: "axobject-query@npm:3.2.1" @@ -25616,6 +25762,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.6": + version: 4.4.1 + resolution: "chai@npm:4.4.1" + dependencies: + assertion-error: "npm:^1.1.0" + check-error: "npm:^1.0.3" + deep-eql: "npm:^4.1.3" + get-func-name: "npm:^2.0.2" + loupe: "npm:^2.3.6" + pathval: "npm:^1.1.1" + type-detect: "npm:^4.0.8" + checksum: c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae + languageName: node + linkType: hard + "chalk@npm:3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" @@ -27266,7 +27427,7 @@ __metadata: languageName: node linkType: hard -"cpu-features@npm:~0.0.8": +"cpu-features@npm:~0.0.9": version: 0.0.9 resolution: "cpu-features@npm:0.0.9" dependencies: @@ -28715,7 +28876,7 @@ __metadata: languageName: node linkType: hard -"diff@npm:^5.0.0": +"diff@npm:^5.0.0, diff@npm:^5.1.0": version: 5.1.0 resolution: "diff@npm:5.1.0" checksum: f4557032a98b2967fe27b1a91dfcf8ebb6b9a24b1afe616b5c2312465100b861e9b8d4da374be535f2d6b967ce2f53826d7f6edc2a0d32b2ab55abc96acc2f9d @@ -28806,15 +28967,15 @@ __metadata: languageName: node linkType: hard -"docker-modem@npm:^3.0.0": - version: 3.0.8 - resolution: "docker-modem@npm:3.0.8" +"docker-modem@npm:^5.0.3": + version: 5.0.3 + resolution: "docker-modem@npm:5.0.3" dependencies: debug: "npm:^4.1.1" readable-stream: "npm:^3.5.0" split-ca: "npm:^1.0.1" - ssh2: "npm:^1.11.0" - checksum: a731d057b3da5a9da3dd9aff7e25bc33f2d29f3e0af947bd823d1361350071afb5b7cb0582af5bf012b08fca356520685bcff87bfcba08e85725576b32f264a2 + ssh2: "npm:^1.15.0" + checksum: fc4cc09f3aab0e17d32eb5a01974bed845a803e23352937aceab2e35c35bdcd283d1655c154b737063b037f164f57addbd447628d620f564a2da82e036543a5f languageName: node linkType: hard @@ -28829,14 +28990,14 @@ __metadata: languageName: node linkType: hard -"dockerode@npm:^3.3.4": - version: 3.3.5 - resolution: "dockerode@npm:3.3.5" +"dockerode@npm:^4.0.0": + version: 4.0.2 + resolution: "dockerode@npm:4.0.2" dependencies: "@balena/dockerignore": "npm:^1.0.2" - docker-modem: "npm:^3.0.0" + docker-modem: "npm:^5.0.3" tar-fs: "npm:~2.0.1" - checksum: 1748e8d96f88fe71bb165a4c05726904937f5863b69eaeb4a3c1bb3bbf66940c7bef13b349ff757dc43664b4367611aab76f35c1ba468f07dcbaba567e6acd88 + checksum: 859279721553cc07d00f8e7ac55abb3bba3a8a42685c742f3651c46a996755c720005fedc8b6bb7ac0ca5dc9123536164099c93741d691c7779669ecde3bbc3d languageName: node linkType: hard @@ -32365,19 +32526,6 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.12": - version: 3.2.12 - resolution: "fast-glob@npm:3.2.12" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 641e748664ae0fdc4dadd23c812fd7d6c80cd92d451571cb1f81fa87edb750e917f25abf74fc9503c97438b0b67ecf75b738bb8e50a83b16bd2a88b4d64e81fa - languageName: node - linkType: hard - "fast-glob@npm:^3.3.0": version: 3.3.1 resolution: "fast-glob@npm:3.3.1" @@ -35006,6 +35154,72 @@ __metadata: languageName: node linkType: hard +"hardhat@npm:^2.19.4": + version: 2.19.4 + resolution: "hardhat@npm:2.19.4" + dependencies: + "@ethersproject/abi": "npm:^5.1.2" + "@metamask/eth-sig-util": "npm:^4.0.0" + "@nomicfoundation/ethereumjs-block": "npm:5.0.2" + "@nomicfoundation/ethereumjs-blockchain": "npm:7.0.2" + "@nomicfoundation/ethereumjs-common": "npm:4.0.2" + "@nomicfoundation/ethereumjs-evm": "npm:2.0.2" + "@nomicfoundation/ethereumjs-rlp": "npm:5.0.2" + "@nomicfoundation/ethereumjs-statemanager": "npm:2.0.2" + "@nomicfoundation/ethereumjs-trie": "npm:6.0.2" + "@nomicfoundation/ethereumjs-tx": "npm:5.0.2" + "@nomicfoundation/ethereumjs-util": "npm:9.0.2" + "@nomicfoundation/ethereumjs-vm": "npm:7.0.2" + "@nomicfoundation/solidity-analyzer": "npm:^0.1.0" + "@sentry/node": "npm:^5.18.1" + "@types/bn.js": "npm:^5.1.0" + "@types/lru-cache": "npm:^5.1.0" + adm-zip: "npm:^0.4.16" + aggregate-error: "npm:^3.0.0" + ansi-escapes: "npm:^4.3.0" + chalk: "npm:^2.4.2" + chokidar: "npm:^3.4.0" + ci-info: "npm:^2.0.0" + debug: "npm:^4.1.1" + enquirer: "npm:^2.3.0" + env-paths: "npm:^2.2.0" + ethereum-cryptography: "npm:^1.0.3" + ethereumjs-abi: "npm:^0.6.8" + find-up: "npm:^2.1.0" + fp-ts: "npm:1.19.3" + fs-extra: "npm:^7.0.1" + glob: "npm:7.2.0" + immutable: "npm:^4.0.0-rc.12" + io-ts: "npm:1.10.4" + keccak: "npm:^3.0.2" + lodash: "npm:^4.17.11" + mnemonist: "npm:^0.38.0" + mocha: "npm:^10.0.0" + p-map: "npm:^4.0.0" + raw-body: "npm:^2.4.1" + resolve: "npm:1.17.0" + semver: "npm:^6.3.0" + solc: "npm:0.7.3" + source-map-support: "npm:^0.5.13" + stacktrace-parser: "npm:^0.1.10" + tsort: "npm:0.0.1" + undici: "npm:^5.14.0" + uuid: "npm:^8.3.2" + ws: "npm:^7.4.6" + peerDependencies: + ts-node: "*" + typescript: "*" + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + bin: + hardhat: internal/cli/bootstrap.js + checksum: f8548a32c6d81af40a0377d4e7cfffbdae22c1c5ac1d8f106ec14d98d219ce8c8d67799abbd609f69e9593a43820c98c4fc8bc1273d995d43692f272b54da58c + languageName: node + linkType: hard + "hardlydifficult-eth@npm:1.1.4": version: 1.1.4 resolution: "hardlydifficult-eth@npm:1.1.4" @@ -38862,6 +39076,13 @@ __metadata: languageName: node linkType: hard +"just-extend@npm:^6.2.0": + version: 6.2.0 + resolution: "just-extend@npm:6.2.0" + checksum: 1f487b074b9e5773befdd44dc5d1b446f01f24f7d4f1f255d51c0ef7f686e8eb5f95d983b792b9ca5c8b10cd7e60a924d64103725759eddbd7f18bcb22743f92 + languageName: node + linkType: hard + "jwa@npm:^1.4.1": version: 1.4.1 resolution: "jwa@npm:1.4.1" @@ -39747,6 +39968,13 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 2a4925f6e89bc2c010a77a802d1ba357e17ed1ea03c2ddf6a146429f2856a216663e694a6aa3549a318cbbba3fd8b7decb392db457e6ac0b83dc745ed0a17380 + languageName: node + linkType: hard + "lodash.isarguments@npm:^3.1.0": version: 3.1.0 resolution: "lodash.isarguments@npm:3.1.0" @@ -42161,7 +42389,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -42197,15 +42425,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^7.4.3": - version: 7.4.6 - resolution: "minimatch@npm:7.4.6" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 0046ba1161ac6414bde1b07c440792ebcdb2ed93e6714c85c73974332b709b7e692801550bc9da22028a8613407b3f13861e17dd0dd44f4babdeacd44950430b - languageName: node - linkType: hard - "minimatch@npm:^8.0.2": version: 8.0.4 resolution: "minimatch@npm:8.0.4" @@ -42381,7 +42600,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:*": +"mkdirp@npm:*, mkdirp@npm:^3.0.1": version: 3.0.1 resolution: "mkdirp@npm:3.0.1" bin: @@ -42421,15 +42640,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^2.1.6": - version: 2.1.6 - resolution: "mkdirp@npm:2.1.6" - bin: - mkdirp: dist/cjs/src/bin.js - checksum: 4672fadb94dca8d2eafeb6fff53f2c5ea74e885565ef23251791709064f216105167c2387088c61ef068901bd0776648999785e341d74728164fa551b1c65996 - languageName: node - linkType: hard - "mlly@npm:^1.2.0, mlly@npm:^1.4.2": version: 1.4.2 resolution: "mlly@npm:1.4.2" @@ -42901,7 +43111,7 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.14.0, nan@npm:^2.16.0, nan@npm:^2.17.0": +"nan@npm:^2.14.0, nan@npm:^2.16.0, nan@npm:^2.17.0, nan@npm:^2.18.0": version: 2.18.0 resolution: "nan@npm:2.18.0" dependencies: @@ -43422,6 +43632,19 @@ __metadata: languageName: node linkType: hard +"nise@npm:^5.1.4": + version: 5.1.7 + resolution: "nise@npm:5.1.7" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + "@sinonjs/fake-timers": "npm:^11.2.2" + "@sinonjs/text-encoding": "npm:^0.7.2" + just-extend: "npm:^6.2.0" + path-to-regexp: "npm:^6.2.1" + checksum: 4754e3ae52654f66e947d44d0dd40ae823e594c201474ad7c5115acb2188c839c9b8617504327051857aea8042befac946e82918e1e53b99350cb275140332d0 + languageName: node + linkType: hard + "no-case@npm:^2.2.0, no-case@npm:^2.3.2": version: 2.3.2 resolution: "no-case@npm:2.3.2" @@ -45369,7 +45592,7 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:6.2.1, path-to-regexp@npm:^6.2.0": +"path-to-regexp@npm:6.2.1, path-to-regexp@npm:^6.2.0, path-to-regexp@npm:^6.2.1": version: 6.2.1 resolution: "path-to-regexp@npm:6.2.1" checksum: 1e266be712d1a08086ee77beab12a1804842ec635dfed44f9ee1ba960a0e01cec8063fb8c92561115cdc0ce73158cdc7766e353ffa039340b4a85b370084c4d4 @@ -50986,6 +51209,30 @@ __metadata: languageName: node linkType: hard +"sinon-chai@npm:^3.7.0": + version: 3.7.0 + resolution: "sinon-chai@npm:3.7.0" + peerDependencies: + chai: ^4.0.0 + sinon: ">=4.0.0" + checksum: 028853eb8a545ca613c6863014a40f07d1e6b81467e20939fefcd13f170206d24165b91099fb297aeb4d137745e321da25daa8e2d665cc0a78f90d5b877e8bbe + languageName: node + linkType: hard + +"sinon@npm:^16.0.0": + version: 16.1.3 + resolution: "sinon@npm:16.1.3" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + "@sinonjs/fake-timers": "npm:^10.3.0" + "@sinonjs/samsam": "npm:^8.0.0" + diff: "npm:^5.1.0" + nise: "npm:^5.1.4" + supports-color: "npm:^7.2.0" + checksum: 43d40437c3434b1e06c6c7f9f482b4096aaa869dbc486bf511a6319cc6900e1306f6d0bd0395e2278c208f75ed526e340cf1071b41efc6a9e8d9018b152f2326 + languageName: node + linkType: hard + "sirv@npm:^2.0.3": version: 2.0.4 resolution: "sirv@npm:2.0.4" @@ -51679,20 +51926,20 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:^1.11.0": - version: 1.14.0 - resolution: "ssh2@npm:1.14.0" +"ssh2@npm:^1.15.0": + version: 1.15.0 + resolution: "ssh2@npm:1.15.0" dependencies: asn1: "npm:^0.2.6" bcrypt-pbkdf: "npm:^1.0.2" - cpu-features: "npm:~0.0.8" - nan: "npm:^2.17.0" + cpu-features: "npm:~0.0.9" + nan: "npm:^2.18.0" dependenciesMeta: cpu-features: optional: true nan: optional: true - checksum: 95f1114f26a6b5bfb94c14de1513e37207bcffb096e8b315faa2b31539e7c8f98071e6fc0e3fd709d685b55ebc74b0206edc6ae5a4df833991641f02fdc863e2 + checksum: afe7cb646d73348753c25938f677b61f6ac7554ff3d7dbbcdd4e7bbb275eaff9956729267c1828de92bbbdcd8431253cff995b05d4c882b9e411661fb4f4cd88 languageName: node linkType: hard @@ -52577,7 +52824,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -53934,13 +54181,13 @@ __metadata: languageName: node linkType: hard -"ts-morph@npm:^19.0.0": - version: 19.0.0 - resolution: "ts-morph@npm:19.0.0" +"ts-morph@npm:^21.0.1": + version: 21.0.1 + resolution: "ts-morph@npm:21.0.1" dependencies: - "@ts-morph/common": "npm:~0.20.0" + "@ts-morph/common": "npm:~0.22.0" code-block-writer: "npm:^12.0.0" - checksum: edb3542e4540c91ce7752f723386e11804c0ee81e7a6e52907488abb7edf516a3956d404622a008ebaff4d0739e59c7f188cd51c23d3c41158b5f996ada82b09 + checksum: 6e83a696807b44625c7eff01a074ba655c4a53e72a9000fe1fae6deba180549edbf36ebabb48027ed2af9b6d101f23e8d935e1e52a698c476a25153d6f5eed01 languageName: node linkType: hard @@ -54283,7 +54530,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d @@ -60008,12 +60255,12 @@ __metadata: languageName: node linkType: hard -"zksync-ethers@npm:6.0.0": - version: 6.0.0 - resolution: "zksync-ethers@npm:6.0.0" +"zksync-ethers@npm:6.1.0, zksync-ethers@npm:^6.0.0": + version: 6.1.0 + resolution: "zksync-ethers@npm:6.1.0" peerDependencies: ethers: ^6.7.1 - checksum: 1135be59af2fdca1ffaf9947aa6859f7927aad646432ef052c3b1e77f5475b7cd504b226c0247fad80ca17b84b14c90e413b9acb9d393027aa7c39bac39f3cd7 + checksum: bf22ebaae03c01a1bff36b3c50944b7d9806d6f99182f40ac1451c674add8768554c590a081258e0b178246d19932900c454c8efbd83674d5e5fc6a03a32e353 languageName: node linkType: hard From 727104fd9fa066d6c59f316638ad82c4af9ce05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 14:16:00 +0100 Subject: [PATCH 12/51] bump zksync-solc --- governance/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/governance/package.json b/governance/package.json index 7ad8a74831b..b754f85bfc2 100644 --- a/governance/package.json +++ b/governance/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@matterlabs/hardhat-zksync-deploy": "1.1.2", - "@matterlabs/hardhat-zksync-solc": "1.0.6", + "@matterlabs/hardhat-zksync-solc": "1.1.0", "@matterlabs/hardhat-zksync-upgradable": "1.2.1", "@matterlabs/hardhat-zksync-verify": "1.3.0", "@nomicfoundation/hardhat-ethers": "3.0.5", From 2f4c19a4589978badef4388bafc80643f182436b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 14:16:47 +0100 Subject: [PATCH 13/51] remove dev deps --- governance/package.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/governance/package.json b/governance/package.json index b754f85bfc2..1bf2eb58955 100644 --- a/governance/package.json +++ b/governance/package.json @@ -34,9 +34,5 @@ "lint:contracts": "solhint 'contracts/**/*.sol'", "lint:code": "eslint --resolve-plugins-relative-to ../packages/eslint-config .", "lint": "yarn lint:contracts && yarn lint:code" - }, - "devDependencies": { - "@matterlabs/hardhat-zksync-deploy": "1.1.2", - "@matterlabs/hardhat-zksync-solc": "1.1.0" } } From f98f4c6baac1c4401423a45fee922b91c36b4344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 14:22:41 +0100 Subject: [PATCH 14/51] comment upgredeable that throws on import --- governance/hardhat.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index 84015990edb..14fa794b501 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -17,7 +17,8 @@ if (process.env.ZK_SYNC) { require('@matterlabs/hardhat-zksync-deploy') require('@matterlabs/hardhat-zksync-solc') require('@matterlabs/hardhat-zksync-verify') - require('@matterlabs/hardhat-zksync-upgradable') + // throws currently + // require('@matterlabs/hardhat-zksync-upgradable') } const settings = { From 7f133f5643af2cc393d7ee0cdc7fe665de840209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 15:01:01 +0100 Subject: [PATCH 15/51] move zksync deploy deps to helpers --- governance/hardhat.config.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index 14fa794b501..55d99b1b6aa 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -12,13 +12,9 @@ const { parseForkUrl, } = require('@unlock-protocol/hardhat-helpers') -// zksync-related +// zksync if (process.env.ZK_SYNC) { - require('@matterlabs/hardhat-zksync-deploy') require('@matterlabs/hardhat-zksync-solc') - require('@matterlabs/hardhat-zksync-verify') - // throws currently - // require('@matterlabs/hardhat-zksync-upgradable') } const settings = { From 313d4dd39b6ea4bd94e630edff37cae84e9c92fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 15:01:37 +0100 Subject: [PATCH 16/51] zkSync deploy tasks --- packages/hardhat-helpers/src/deploy.js | 8 ++- packages/hardhat-helpers/src/zkSync.js | 85 ++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 packages/hardhat-helpers/src/zkSync.js diff --git a/packages/hardhat-helpers/src/deploy.js b/packages/hardhat-helpers/src/deploy.js index 70bbb7a8f25..eaa08d68c0d 100644 --- a/packages/hardhat-helpers/src/deploy.js +++ b/packages/hardhat-helpers/src/deploy.js @@ -1,3 +1,5 @@ +import zkSync from './zkSync' + export const deployContract = async ( contractNameOrFullyQualifiedNameOrEthersFactory, deployArgs = [], @@ -56,6 +58,8 @@ export const deployUpgradeableContract = async ( } export default { - deployContract, - deployUpgradeableContract, + deployContract: process.env.ZK_SYNC ? zkSync.deployContract : deployContract, + deployUpgradeableContract: process.env.ZK_SYNC + ? zkSync.deployUpgradeableContract + : deployUpgradeableContract, } diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js new file mode 100644 index 00000000000..e7ab1852248 --- /dev/null +++ b/packages/hardhat-helpers/src/zkSync.js @@ -0,0 +1,85 @@ +const { Wallet, Provider } = require('zksync-ethers') +const { Deployer } = require('@matterlabs/hardhat-zksync-deploy') +const { getNetwork } = require('./unlock') + +const ethers = require('ethers') + +export async function deployContract( + contractNameOrFullyQualifiedName, + deployArgs = [] +) { + const { deployer } = await zkSyncSetupDeployer() + const deploymentFee = await deployer.estimateDeployFee( + contractNameOrFullyQualifiedName, + deployArgs + ) + const parsedFee = ethers.formatEther(deploymentFee.toString()) + console.log(`Deployment is estimated to cost ${parsedFee} ETH`) + + const contract = await deployer.deploy( + contractNameOrFullyQualifiedName, + deployArgs + ) + + await contract.waitForDeployment() + const address = await contract.getAddress() + const { hash } = await contract.deploymentTransaction() + + return { + contract, + hash, + address, + } +} + +export async function deployUpgradeableContract( + contractNameOrFullyQualifiedName, + deployArgs = [] +) { + const { zkUpgrades } = require('hardhat') + const { deployer } = await zkSyncSetupDeployer() + + const contract = await zkUpgrades.deployProxy( + deployer.zkWallet, + contractNameOrFullyQualifiedName, + deployArgs + ) + + await contract.waitForDeployment() + const contractAddress = await contract.getAddress() + const { hash } = await contract.deploymentTransaction() + + return { + contract, + hash, + address: contractAddress, + } +} + +async function zkSyncSetupDeployer() { + const hre = require('hardhat') + + const { id, provider: providerUrl } = await getNetwork() + console.log(hre.networks[id]) + const { accounts } = hre.networks[id] + console.log(accounts) + + let privateKey + if (process.env.DEPLOYER_PRIVATE_KEY) { + privateKey = process.env.DEPLOYER_PRIVATE_KEY + } else { + privateKey = accounts[0].privKey + } + + // setup deployer + const provider = new Provider(providerUrl) + const wallet = new Wallet(privateKey, provider) + const deployer = new Deployer(hre, wallet) + + return { provider, wallet, deployer } +} + +export default { + deployContract, + deployUpgradeableContract, +} From feb98f4b0ecd2554fd112602dc232e9326f2fb1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 15:02:03 +0100 Subject: [PATCH 17/51] add zksync deps to helpers --- packages/hardhat-helpers/package.json | 8 +++++- yarn.lock | 36 ++++++++++++++++----------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/packages/hardhat-helpers/package.json b/packages/hardhat-helpers/package.json index 08807191d14..4f6457d4ca0 100644 --- a/packages/hardhat-helpers/package.json +++ b/packages/hardhat-helpers/package.json @@ -13,6 +13,10 @@ "lint": "eslint --resolve-plugins-relative-to ../eslint-config --ext .ts,.js src/" }, "dependencies": { + "@matterlabs/hardhat-zksync-deploy": "1.1.2", + "@matterlabs/hardhat-zksync-solc": "1.1.0", + "@matterlabs/hardhat-zksync-upgradable": "1.2.1", + "@matterlabs/hardhat-zksync-verify": "1.3.0", "@nomiclabs/hardhat-ethers": "2.2.3", "@nomiclabs/hardhat-waffle": "2.0.6", "@openzeppelin/hardhat-upgrades": "1.28.0", @@ -24,8 +28,10 @@ "@unlock-protocol/networks": "workspace:^", "@unlock-protocol/tsconfig": "workspace:^", "@unlock-protocol/types": "workspace:^", + "ethers": "6", "hardhat": "2.19.5", - "typescript": "5.3.3" + "typescript": "5.3.3", + "zksync-ethers": "6.1.0" }, "devDependencies": { "copyfiles": "2.4.1", diff --git a/yarn.lock b/yarn.lock index cc6a9dae394..b8f14be45f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19707,6 +19707,10 @@ __metadata: version: 0.0.0-use.local resolution: "@unlock-protocol/hardhat-helpers@workspace:packages/hardhat-helpers" dependencies: + "@matterlabs/hardhat-zksync-deploy": "npm:1.1.2" + "@matterlabs/hardhat-zksync-solc": "npm:1.1.0" + "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.1" + "@matterlabs/hardhat-zksync-verify": "npm:1.3.0" "@nomiclabs/hardhat-ethers": "npm:2.2.3" "@nomiclabs/hardhat-waffle": "npm:2.0.6" "@openzeppelin/hardhat-upgrades": "npm:1.28.0" @@ -19719,9 +19723,11 @@ __metadata: "@unlock-protocol/tsconfig": "workspace:^" "@unlock-protocol/types": "workspace:^" copyfiles: "npm:2.4.1" + ethers: "npm:6" hardhat: "npm:2.19.5" tsup: "npm:8.0.1" typescript: "npm:5.3.3" + zksync-ethers: "npm:6.1.0" languageName: unknown linkType: soft @@ -31909,6 +31915,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:6, ethers@npm:^6.8.1": + version: 6.10.0 + resolution: "ethers@npm:6.10.0" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.0" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@types/node": "npm:18.15.13" + aes-js: "npm:4.0.0-beta.5" + tslib: "npm:2.4.0" + ws: "npm:8.5.0" + checksum: 04fdd3f76ea93a8b45b2fe4d9c8e2bd0d688823faba672897dd19cc3303c202a166902fe6058004562f13aaecf9f77a9f70ff113f995e94107efef2457b016dd + languageName: node + linkType: hard + "ethers@npm:6.9.0": version: 6.9.0 resolution: "ethers@npm:6.9.0" @@ -31956,21 +31977,6 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^6.8.1": - version: 6.10.0 - resolution: "ethers@npm:6.10.0" - dependencies: - "@adraffy/ens-normalize": "npm:1.10.0" - "@noble/curves": "npm:1.2.0" - "@noble/hashes": "npm:1.3.2" - "@types/node": "npm:18.15.13" - aes-js: "npm:4.0.0-beta.5" - tslib: "npm:2.4.0" - ws: "npm:8.5.0" - checksum: 04fdd3f76ea93a8b45b2fe4d9c8e2bd0d688823faba672897dd19cc3303c202a166902fe6058004562f13aaecf9f77a9f70ff113f995e94107efef2457b016dd - languageName: node - linkType: hard - "ethjs-abi@npm:^0.2.1": version: 0.2.1 resolution: "ethjs-abi@npm:0.2.1" From b19d5042563745ff87a975ce845b97febaaa7759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 15:04:16 +0100 Subject: [PATCH 18/51] add zksync Sepolia network --- .github/workflows/_protocol-health-check.yml | 24 ++++++ packages/networks/src/networks/index.ts | 1 + .../networks/src/networks/zksyncSepolia.ts | 81 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 .github/workflows/_protocol-health-check.yml create mode 100644 packages/networks/src/networks/zksyncSepolia.ts diff --git a/.github/workflows/_protocol-health-check.yml b/.github/workflows/_protocol-health-check.yml new file mode 100644 index 00000000000..00276e50437 --- /dev/null +++ b/.github/workflows/_protocol-health-check.yml @@ -0,0 +1,24 @@ +name: Protocol Health Check + +on: + workflow_call: + inputs: + chainId: + description: '' + type: string + required: true + +jobs: + health-check: + name: Check the state of the Unlock Protocol for chain ${{ inputs.chainId }} + runs-on: ubuntu-22.04 + env: + DOCKER_BUILDKIT: 1 + BUILDKIT_PROGRESS: plain + steps: + - uses: actions/checkout@v4 + - name: Check networks package + run: yarn workspace @unlock-protocol/networks check + shell: bash + - name: Check Unlock info + run: cd governance && sh ./all_networks unlock:info diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index b5b2b5330af..e6ca7f4d741 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -14,3 +14,4 @@ export * from './base' export * from './linea' export * from './sepolia' export * from './zksync' +export * from './zksyncSepolia' diff --git a/packages/networks/src/networks/zksyncSepolia.ts b/packages/networks/src/networks/zksyncSepolia.ts new file mode 100644 index 00000000000..9f655ad7cca --- /dev/null +++ b/packages/networks/src/networks/zksyncSepolia.ts @@ -0,0 +1,81 @@ +import { NetworkConfig } from '@unlock-protocol/types' + +export const zksyncSepolia: NetworkConfig = { + blockScan: { + url: (address: string) => `https://blockscan.com/address/${address}`, + }, + chain: 'zksyncSepolia', + description: + "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", + explorer: { + name: 'zkSync Era Block Explorer - Sepolia', + urls: { + address: (address: string) => + `https://sepolia.explorer.zksync.io/address/${address}`, + base: `https://sepolia.explorer.zksync.io/`, + token: (address: string, holder: string) => + `https://sepolia.explorer.zksync.io/address/${address}?a=${holder}`, + transaction: (hash: string) => `https://explorer.zksync.io/tx/${hash}`, + }, + }, + featured: false, + hooks: {}, + id: 300, + isTestNetwork: false, + maxFreeClaimCost: 1, + multisig: 'TK', + name: 'zkSync Era - Sepolia', + nativeCurrency: { + coingecko: 'zksync-eth', + decimals: 18, + name: 'zkSync Ether', + symbol: 'ETH', + }, + previousDeploys: [], + provider: 'https://rpc.unlock-protocol.com/300', + publicLockVersionToDeploy: 13, + publicProvider: 'https://sepolia.era.zksync.dev', + startBlock: 0, + subgraph: { + endpoint: '', + endpointV2: '', + networkName: 'matic', + }, + tokens: [ + { + address: '0x000000000000000000000000000000000000800A', + decimals: 18, + name: 'Wrapped Ether', + symbol: 'WETH', + }, + { + address: '0x4B9eb6c0b6ea15176BBF62841C6B2A8a398cb656', + decimals: 18, + name: 'Dai Stablecoin', + symbol: 'DAI', + }, + + { + address: '0x493257fD37EDB34451f62EDf8D2a0C418852bA4C', + decimals: 6, + name: 'Tether USD', + symbol: 'USDT', + }, + { + address: '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', + }, + { + address: '0xBBeB516fb02a01611cBBE0453Fe3c580D7281011', + decimals: 8, + name: 'Wrapped BTC', + symbol: 'WBTC', + }, + ], + unlockAddress: '', + url: 'https://sepolia.era.zksync.dev', +} + +export default zksyncSepolia From 0db015f65d4fe204a59a3195f9307303b2c1b766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 15:25:04 +0100 Subject: [PATCH 19/51] use tmp provider --- packages/networks/src/networks/zksyncSepolia.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/networks/src/networks/zksyncSepolia.ts b/packages/networks/src/networks/zksyncSepolia.ts index 9f655ad7cca..ed75d995e81 100644 --- a/packages/networks/src/networks/zksyncSepolia.ts +++ b/packages/networks/src/networks/zksyncSepolia.ts @@ -32,7 +32,9 @@ export const zksyncSepolia: NetworkConfig = { symbol: 'ETH', }, previousDeploys: [], - provider: 'https://rpc.unlock-protocol.com/300', + // TODO: add to unlock providers + // provider: 'https://rpc.unlock-protocol.com/300', + provider: 'https://sepolia.era.zksync.dev', publicLockVersionToDeploy: 13, publicProvider: 'https://sepolia.era.zksync.dev', startBlock: 0, From 3b1b99e0a0c2a08675876458f378255767c77328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 25 Jan 2024 15:25:50 +0100 Subject: [PATCH 20/51] ignore artifacts --- governance/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/governance/.gitignore b/governance/.gitignore index 36fb39f7548..9f6eb7c5f8d 100644 --- a/governance/.gitignore +++ b/governance/.gitignore @@ -5,4 +5,5 @@ artifacts # zksync zk-artifacts zk-cache +artifacts-zk cache-zk \ No newline at end of file From 8ca79a0ecffe3d1ced6220fd8e859af5f0ac10c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 10:16:41 +0100 Subject: [PATCH 21/51] use actual artifact in function --- packages/hardhat-helpers/src/zkSync.js | 33 ++++++++++---------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index e7ab1852248..4e981f547b9 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -9,17 +9,13 @@ export async function deployContract( deployArgs = [] ) { const { deployer } = await zkSyncSetupDeployer() - const deploymentFee = await deployer.estimateDeployFee( - contractNameOrFullyQualifiedName, - deployArgs - ) + const artifact = await deployer.loadArtifact(contractNameOrFullyQualifiedName) + + const deploymentFee = await deployer.estimateDeployFee(artifact, deployArgs) const parsedFee = ethers.formatEther(deploymentFee.toString()) console.log(`Deployment is estimated to cost ${parsedFee} ETH`) - const contract = await deployer.deploy( - contractNameOrFullyQualifiedName, - deployArgs - ) + const contract = await deployer.deploy(artifact, deployArgs) await contract.waitForDeployment() const address = await contract.getAddress() @@ -38,10 +34,11 @@ export async function deployUpgradeableContract( ) { const { zkUpgrades } = require('hardhat') const { deployer } = await zkSyncSetupDeployer() + const artifact = await deployer.loadArtifact(contractNameOrFullyQualifiedName) const contract = await zkUpgrades.deployProxy( deployer.zkWallet, - contractNameOrFullyQualifiedName, + artifact, deployArgs ) @@ -59,21 +56,17 @@ export async function deployUpgradeableContract( async function zkSyncSetupDeployer() { const hre = require('hardhat') - const { id, provider: providerUrl } = await getNetwork() - console.log(hre.networks[id]) - const { accounts } = hre.networks[id] - console.log(accounts) - - let privateKey + // set provider and accounts + const { chainId, accounts } = hre.network.config + const { provider: providerUrl } = await getNetwork(chainId) + const provider = new Provider(providerUrl) + let wallet if (process.env.DEPLOYER_PRIVATE_KEY) { - privateKey = process.env.DEPLOYER_PRIVATE_KEY + wallet = new Wallet(process.env.DEPLOYER_PRIVATE_KEY, provider) } else { - privateKey = accounts[0].privKey + wallet = Wallet.fromMnemonic(accounts.mnemonic, provider) } - // setup deployer - const provider = new Provider(providerUrl) - const wallet = new Wallet(privateKey, provider) const deployer = new Deployer(hre, wallet) return { provider, wallet, deployer } From 0d343499c00d63d76046ea75cd1366d9c04d379e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 10:28:04 +0100 Subject: [PATCH 22/51] move verification to helpers --- governance/scripts/deployments/publicLock.js | 17 ++++--------- governance/scripts/deployments/swapBurner.js | 20 ++++------------ governance/scripts/deployments/udt.js | 7 +----- governance/scripts/deployments/unlock.js | 7 +----- packages/hardhat-helpers/src/deploy.js | 25 ++++++++++++++++++++ 5 files changed, 35 insertions(+), 41 deletions(-) diff --git a/governance/scripts/deployments/publicLock.js b/governance/scripts/deployments/publicLock.js index 4dfb8495c92..3518be08783 100644 --- a/governance/scripts/deployments/publicLock.js +++ b/governance/scripts/deployments/publicLock.js @@ -1,6 +1,5 @@ -const { ethers, run } = require('hardhat') +const { ethers } = require('hardhat') const { - isLocalhost, ADDRESS_ZERO, deployContract, copyAndBuildContractsAtVersion, @@ -22,16 +21,12 @@ async function main({ publicLockVersion }) { { contractName: 'PublicLock', version: publicLockVersion }, ]) - const { - contract: publicLock, - hash, - address: publicLockAddress, - } = await deployContract(qualifiedPath) + const { contract: publicLock, address: publicLockAddress } = + await deployContract(qualifiedPath) console.log( - `PUBLIC LOCK > deployed v${await publicLock.publicLockVersion()} to : ${publicLockAddress} (tx: ${hash})` + `PUBLIC LOCK > deployed v${await publicLock.publicLockVersion()} to : ${publicLockAddress}` ) - // initialize the template to prevent someone else from doing it const { hash: txInitHash } = await publicLock.initialize( signer.address, @@ -47,10 +42,6 @@ async function main({ publicLockVersion }) { const { hash: txRenounceHash } = await publicLock.renounceLockManager() console.log(`PUBLIC LOCK > manager role revoked (tx: ${txRenounceHash})`) - if (!(await isLocalhost())) { - await run('verify:verify', { address: publicLockAddress }) - } - return publicLockAddress } diff --git a/governance/scripts/deployments/swapBurner.js b/governance/scripts/deployments/swapBurner.js index 0b78016c81d..7a2aa22d2c8 100644 --- a/governance/scripts/deployments/swapBurner.js +++ b/governance/scripts/deployments/swapBurner.js @@ -1,8 +1,7 @@ -const { ethers, run } = require('hardhat') +const { ethers } = require('hardhat') const { PERMIT2_ADDRESS } = require('@uniswap/universal-router-sdk') const { getNetwork, - isLocalhost, deployContract, } = require('@unlock-protocol/hardhat-helpers') const { UnlockSwapBurner } = require('@unlock-protocol/contracts') @@ -33,25 +32,14 @@ async function main() { UnlockSwapBurner.bytecode ) - console.log(` waiting for tx to be mined for contract verification...`) - const { - contract: swapper, - hash, - address: swapperAddress, - } = await deployContract( + console.log(` waiting for tx to be mined for contract verification...`) + const { address: swapperAddress } = await deployContract( SwapAndBurn, [unlockAddress, PERMIT2_ADDRESS, routerAddress], { wait: 5 } ) - console.log(`SwapAndBurn deployed at ${swapperAddress} (tx: ${hash})`) - - if (!(await isLocalhost())) { - await run('verify:verify', { - address: await swapper.getAddress(), - constructorArguments: [unlockAddress, PERMIT2_ADDRESS, routerAddress], - }) - } + console.log(`SwapAndBurn deployed at ${swapperAddress}`) } // execute as standalone diff --git a/governance/scripts/deployments/udt.js b/governance/scripts/deployments/udt.js index 7ad3113eca1..e718b444464 100644 --- a/governance/scripts/deployments/udt.js +++ b/governance/scripts/deployments/udt.js @@ -1,7 +1,6 @@ -const { ethers, run } = require('hardhat') +const { ethers } = require('hardhat') const { copyAndBuildContractsAtVersion, - isLocalhost, deployUpgradeableContract, } = require('@unlock-protocol/hardhat-helpers') @@ -29,10 +28,6 @@ async function main() { `UDT SETUP > UDT v3 (w proxy) deployed to: ${udtAddress} (tx: ${hash})` ) - if (!(await isLocalhost())) { - await run('verify:verify', { address: udtAddress }) - } - return udtAddress } diff --git a/governance/scripts/deployments/unlock.js b/governance/scripts/deployments/unlock.js index 52d46de23d9..79b2b568dfb 100644 --- a/governance/scripts/deployments/unlock.js +++ b/governance/scripts/deployments/unlock.js @@ -1,7 +1,6 @@ -const { ethers, run } = require('hardhat') +const { ethers } = require('hardhat') const { - isLocalhost, copyAndBuildContractsAtVersion, cleanupContractVersions, deployUpgradeableContract, @@ -35,10 +34,6 @@ async function main({ unlockVersion } = {}) { `- implementation at: ${implementation}` ) - if (!(await isLocalhost())) { - await run('verify:verify', { address: implementation }) - } - // delete remaining files if we are using a packaged version if (unlockVersion) { await cleanupContractVersions(__dirname) diff --git a/packages/hardhat-helpers/src/deploy.js b/packages/hardhat-helpers/src/deploy.js index eaa08d68c0d..677d8b4bb66 100644 --- a/packages/hardhat-helpers/src/deploy.js +++ b/packages/hardhat-helpers/src/deploy.js @@ -1,4 +1,5 @@ import zkSync from './zkSync' +import { isLocalhost } from './localhost' export const deployContract = async ( contractNameOrFullyQualifiedNameOrEthersFactory, @@ -19,6 +20,12 @@ export const deployContract = async ( const { hash } = await contract.deploymentTransaction() const address = await contract.getAddress() + console.log(` > contract deployed at : ${address} (tx: ${hash})`) + + if (!(await isLocalhost())) { + await verify(address, deployArgs) + } + return { contract, hash, @@ -49,6 +56,10 @@ export const deployUpgradeableContract = async ( address ) + if (!(await isLocalhost())) { + await verify(address, deployArgs) + } + return { contract, hash, @@ -57,6 +68,20 @@ export const deployUpgradeableContract = async ( } } +export const verify = async (address, deployArgs) => { + const { run } = require('hardhat') + try { + await run('verify:verify', { + address, + constructorArguments: deployArgs, + }) + } catch (error) { + console.log(`FAIL: Verification failed for contract at ${address} + with args :${deployArgs.toString()}`) + console.log(error) + } +} + export default { deployContract: process.env.ZK_SYNC ? zkSync.deployContract : deployContract, deployUpgradeableContract: process.env.ZK_SYNC From 4fdaec39f89fc462efba6e74df2f22092dc60d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 10:32:56 +0100 Subject: [PATCH 23/51] zksync verification --- governance/hardhat.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index 55d99b1b6aa..ee3903d4ce8 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -15,6 +15,7 @@ const { // zksync if (process.env.ZK_SYNC) { require('@matterlabs/hardhat-zksync-solc') + require('@matterlabs/hardhat-zksync-verify') } const settings = { From 955834e397fc90f5471a2ddc8f8b9c21b9710612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 10:36:12 +0100 Subject: [PATCH 24/51] zksync networks testnet support --- packages/hardhat-helpers/src/networks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 5bb398316c9..0fe8ab4b842 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -55,7 +55,7 @@ Object.keys(networks).forEach((key) => { name: networks[key].name, url: networks[key].provider, accounts: getAccounts(networks[key].name), - zksync: key === 'zksync', + zksync: key.includes('zksync'), } } From a273c86866b08196ebbac3a1dff3abf9215ccb6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 10:47:31 +0100 Subject: [PATCH 25/51] add `ethNetwork`in networks types --- packages/networks/src/networks/zksync.ts | 1 + packages/networks/src/networks/zksyncSepolia.ts | 2 ++ packages/types/src/types/unlockTypes.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index 077540a5379..9664d497c48 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -7,6 +7,7 @@ export const zksync: NetworkConfig = { chain: 'zksync', description: "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", + ethNetwork: 'mainnet', explorer: { name: 'zkSync Era Block Explorer', urls: { diff --git a/packages/networks/src/networks/zksyncSepolia.ts b/packages/networks/src/networks/zksyncSepolia.ts index ed75d995e81..f7b03e41d3f 100644 --- a/packages/networks/src/networks/zksyncSepolia.ts +++ b/packages/networks/src/networks/zksyncSepolia.ts @@ -7,6 +7,7 @@ export const zksyncSepolia: NetworkConfig = { chain: 'zksyncSepolia', description: "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", + ethNetwork: 'sepolia', explorer: { name: 'zkSync Era Block Explorer - Sepolia', urls: { @@ -31,6 +32,7 @@ export const zksyncSepolia: NetworkConfig = { name: 'zkSync Ether', symbol: 'ETH', }, + previousDeploys: [], // TODO: add to unlock providers // provider: 'https://rpc.unlock-protocol.com/300', diff --git a/packages/types/src/types/unlockTypes.ts b/packages/types/src/types/unlockTypes.ts index c68444848ae..3c60923e8a6 100644 --- a/packages/types/src/types/unlockTypes.ts +++ b/packages/types/src/types/unlockTypes.ts @@ -146,6 +146,7 @@ export interface NetworkConfig { description: string url?: string faucet?: string + ethNetwork?: string tokens?: Token[] hooks?: Partial> fullySubsidizedGas?: boolean From 66f1457adc4f38e61bf34b08cef9f3a562b8a12f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 10:49:51 +0100 Subject: [PATCH 26/51] parse zkync opts into hardhat network --- packages/hardhat-helpers/src/networks.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 0fe8ab4b842..03f8d760978 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -55,7 +55,14 @@ Object.keys(networks).forEach((key) => { name: networks[key].name, url: networks[key].provider, accounts: getAccounts(networks[key].name), - zksync: key.includes('zksync'), + } + } + + if (key.includes('zksync')) { + hardhatNetworks[key] = { + ...hardhatNetworks[key], + zksync: true, + ethNetwork: networks[key].ethNetwork, } } From d6d0864b0ead324808d5aa751174454f3325f2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:07:52 +0100 Subject: [PATCH 27/51] fix versions --- governance/hardhat.config.js | 1 + governance/package.json | 4 +- packages/hardhat-helpers/package.json | 3 +- packages/hardhat-helpers/src/fixtures.js | 2 +- yarn.lock | 56 ++++++++++++++---------- 5 files changed, 38 insertions(+), 28 deletions(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index ee3903d4ce8..abdd43c63ad 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -16,6 +16,7 @@ const { if (process.env.ZK_SYNC) { require('@matterlabs/hardhat-zksync-solc') require('@matterlabs/hardhat-zksync-verify') + require('@matterlabs/hardhat-zksync-upgradable') } const settings = { diff --git a/governance/package.json b/governance/package.json index 1bf2eb58955..b6984d7fdb3 100644 --- a/governance/package.json +++ b/governance/package.json @@ -5,7 +5,7 @@ "dependencies": { "@matterlabs/hardhat-zksync-deploy": "1.1.2", "@matterlabs/hardhat-zksync-solc": "1.1.0", - "@matterlabs/hardhat-zksync-upgradable": "1.2.1", + "@matterlabs/hardhat-zksync-upgradable": "1.2.0", "@matterlabs/hardhat-zksync-verify": "1.3.0", "@nomicfoundation/hardhat-ethers": "3.0.5", "@nomicfoundation/hardhat-network-helpers": "1.0.10", @@ -22,7 +22,7 @@ "@unlock-protocol/hardhat-plugin": "workspace:^", "@unlock-protocol/networks": "workspace:./packages/networks", "eslint": "8.54.0", - "ethers": "6.9.0", + "ethers": "6.10.0", "fs-extra": "11.2.0", "hardhat": "2.19.5", "solhint": "4.0.0", diff --git a/packages/hardhat-helpers/package.json b/packages/hardhat-helpers/package.json index 4f6457d4ca0..bf2a7b20d64 100644 --- a/packages/hardhat-helpers/package.json +++ b/packages/hardhat-helpers/package.json @@ -19,7 +19,6 @@ "@matterlabs/hardhat-zksync-verify": "1.3.0", "@nomiclabs/hardhat-ethers": "2.2.3", "@nomiclabs/hardhat-waffle": "2.0.6", - "@openzeppelin/hardhat-upgrades": "1.28.0", "@uniswap/permit2-sdk": "1.2.0", "@uniswap/sdk-core": "4.0.9", "@uniswap/smart-order-router": "3.19.2", @@ -28,7 +27,7 @@ "@unlock-protocol/networks": "workspace:^", "@unlock-protocol/tsconfig": "workspace:^", "@unlock-protocol/types": "workspace:^", - "ethers": "6", + "ethers": "6.10.0", "hardhat": "2.19.5", "typescript": "5.3.3", "zksync-ethers": "6.1.0" diff --git a/packages/hardhat-helpers/src/fixtures.js b/packages/hardhat-helpers/src/fixtures.js index f1814977e65..65ab7c1caf2 100644 --- a/packages/hardhat-helpers/src/fixtures.js +++ b/packages/hardhat-helpers/src/fixtures.js @@ -5,7 +5,7 @@ let publicLock = { expirationDuration: 60 * 60 * 24 * 30, // 30 days expirationTimestamp: 0, // Not used keyPriceCalculator: null, - keyPrice: ethers.utils.parseEther('0.01'), + keyPrice: ethers.parseEther('0.01'), maxNumberOfKeys: 10, lockName: 'Unlock-Protocol Lock', maxKeysPerAddress: 10, diff --git a/yarn.lock b/yarn.lock index b8f14be45f7..d61c060ea45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9276,6 +9276,19 @@ __metadata: languageName: node linkType: hard +"@matterlabs/hardhat-zksync-upgradable@npm:1.2.0": + version: 1.2.0 + resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.0" + dependencies: + "@matterlabs/hardhat-zksync-deploy": "npm:^1.1.0" + "@matterlabs/hardhat-zksync-solc": "npm:^1.0.3" + "@openzeppelin/upgrades-core": "npm:^1.31.0" + peerDependencies: + "@openzeppelin/contracts-upgradeable": ^4.9.2 + checksum: ec0809b55893dabc4c1c85492691692b0bbe85605b1f7685aa9c96db0f23af173d0f49fd4f9054c7fcf6c4a4d3f41263d9f3c4dd35ae462efa38900c13a086b5 + languageName: node + linkType: hard + "@matterlabs/hardhat-zksync-upgradable@npm:1.2.1": version: 1.2.1 resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.1" @@ -11773,7 +11786,7 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/upgrades-core@npm:1.32.2, @openzeppelin/upgrades-core@npm:^1.32.0": +"@openzeppelin/upgrades-core@npm:1.32.2": version: 1.32.2 resolution: "@openzeppelin/upgrades-core@npm:1.32.2" dependencies: @@ -11809,7 +11822,7 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/upgrades-core@npm:^1.31.0": +"@openzeppelin/upgrades-core@npm:^1.31.0, @openzeppelin/upgrades-core@npm:^1.32.0": version: 1.32.3 resolution: "@openzeppelin/upgrades-core@npm:1.32.3" dependencies: @@ -19678,7 +19691,7 @@ __metadata: dependencies: "@matterlabs/hardhat-zksync-deploy": "npm:1.1.2" "@matterlabs/hardhat-zksync-solc": "npm:1.1.0" - "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.1" + "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.0" "@matterlabs/hardhat-zksync-verify": "npm:1.3.0" "@nomicfoundation/hardhat-ethers": "npm:3.0.5" "@nomicfoundation/hardhat-network-helpers": "npm:1.0.10" @@ -19695,7 +19708,7 @@ __metadata: "@unlock-protocol/hardhat-plugin": "workspace:^" "@unlock-protocol/networks": "workspace:./packages/networks" eslint: "npm:8.54.0" - ethers: "npm:6.9.0" + ethers: "npm:6.10.0" fs-extra: "npm:11.2.0" hardhat: "npm:2.19.5" solhint: "npm:4.0.0" @@ -19713,7 +19726,6 @@ __metadata: "@matterlabs/hardhat-zksync-verify": "npm:1.3.0" "@nomiclabs/hardhat-ethers": "npm:2.2.3" "@nomiclabs/hardhat-waffle": "npm:2.0.6" - "@openzeppelin/hardhat-upgrades": "npm:1.28.0" "@uniswap/permit2-sdk": "npm:1.2.0" "@uniswap/sdk-core": "npm:4.0.9" "@uniswap/smart-order-router": "npm:3.19.2" @@ -19723,7 +19735,7 @@ __metadata: "@unlock-protocol/tsconfig": "workspace:^" "@unlock-protocol/types": "workspace:^" copyfiles: "npm:2.4.1" - ethers: "npm:6" + ethers: "npm:6.10.0" hardhat: "npm:2.19.5" tsup: "npm:8.0.1" typescript: "npm:5.3.3" @@ -21949,7 +21961,7 @@ __metadata: languageName: node linkType: hard -"amazon-cognito-identity-js@npm:^6.0.1, amazon-cognito-identity-js@npm:^6.3.6": +"amazon-cognito-identity-js@npm:^6.0.1": version: 6.3.9 resolution: "amazon-cognito-identity-js@npm:6.3.9" dependencies: @@ -21962,6 +21974,19 @@ __metadata: languageName: node linkType: hard +"amazon-cognito-identity-js@npm:^6.3.6": + version: 6.3.10 + resolution: "amazon-cognito-identity-js@npm:6.3.10" + dependencies: + "@aws-crypto/sha256-js": "npm:1.2.2" + buffer: "npm:4.9.2" + fast-base64-decode: "npm:^1.0.0" + isomorphic-unfetch: "npm:^3.0.0" + js-cookie: "npm:^2.2.1" + checksum: dbfadd3708c7068e7032d2dccf53bb6d5c7543e39fc30ccf306ddf155d9ec2f8d2821b4354c31aed8955cdae9da3bd1977fec152b1cbfc0c2f69b449f8982ff8 + languageName: node + linkType: hard + "amdefine@npm:>=0.0.4": version: 1.0.1 resolution: "amdefine@npm:1.0.1" @@ -31915,7 +31940,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:6, ethers@npm:^6.8.1": +"ethers@npm:6.10.0, ethers@npm:^6.8.1": version: 6.10.0 resolution: "ethers@npm:6.10.0" dependencies: @@ -31930,21 +31955,6 @@ __metadata: languageName: node linkType: hard -"ethers@npm:6.9.0": - version: 6.9.0 - resolution: "ethers@npm:6.9.0" - dependencies: - "@adraffy/ens-normalize": "npm:1.10.0" - "@noble/curves": "npm:1.2.0" - "@noble/hashes": "npm:1.3.2" - "@types/node": "npm:18.15.13" - aes-js: "npm:4.0.0-beta.5" - tslib: "npm:2.4.0" - ws: "npm:8.5.0" - checksum: a48f268aa934900d90e34fd6b607db3d774ce58c73d249697f68398afa673b483fda19c6fa91eb91784fdfbaa07eb4c753b245c2123c5d2072f8dc1897cd556d - languageName: node - linkType: hard - "ethers@npm:6.9.2, ethers@npm:^6.7.1": version: 6.9.2 resolution: "ethers@npm:6.9.2" From 61a4aeb95c2b52ce7f365d2b55a444a8d9a30b53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:29:04 +0100 Subject: [PATCH 28/51] pass `deployOptions` to zksync upgrades --- packages/hardhat-helpers/src/zkSync.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index 4e981f547b9..884e4190dc3 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -30,16 +30,19 @@ export async function deployContract( export async function deployUpgradeableContract( contractNameOrFullyQualifiedName, - deployArgs = [] + deployArgs = [], + deployOptions = {} ) { const { zkUpgrades } = require('hardhat') + console.log(zkUpgrades) const { deployer } = await zkSyncSetupDeployer() const artifact = await deployer.loadArtifact(contractNameOrFullyQualifiedName) const contract = await zkUpgrades.deployProxy( deployer.zkWallet, artifact, - deployArgs + deployArgs, + deployOptions ) await contract.waitForDeployment() @@ -54,7 +57,9 @@ export async function deployUpgradeableContract( } async function zkSyncSetupDeployer() { + const { Deployer } = require('@matterlabs/hardhat-zksync-deploy') const hre = require('hardhat') + console.log(hre) // set provider and accounts const { chainId, accounts } = hre.network.config From 8c6efc407640c947818912dbb7daff0c3e594a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:29:55 +0100 Subject: [PATCH 29/51] avoid duplicate improt --- packages/hardhat-helpers/src/zkSync.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index 884e4190dc3..b390f692cb6 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -57,9 +57,7 @@ export async function deployUpgradeableContract( } async function zkSyncSetupDeployer() { - const { Deployer } = require('@matterlabs/hardhat-zksync-deploy') const hre = require('hardhat') - console.log(hre) // set provider and accounts const { chainId, accounts } = hre.network.config From bf8650b4bc9615b7cedb9008e5522d4548935e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:37:57 +0100 Subject: [PATCH 30/51] workaround to get `Deployer` class --- governance/hardhat.config.js | 4 ++++ packages/hardhat-helpers/src/zkSync.js | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index abdd43c63ad..6482642cc04 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -78,6 +78,10 @@ if (process.env.ZK_SYNC) { version: 'latest', settings: {}, } + + // workaround to prevent [HH209] error with tasks being overridden + const { Deployer } = require('@matterlabs/hardhat-zksync-deploy') + config.Deployer = Deployer } module.exports = config diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index b390f692cb6..4c46eb13658 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -1,5 +1,4 @@ const { Wallet, Provider } = require('zksync-ethers') -const { Deployer } = require('@matterlabs/hardhat-zksync-deploy') const { getNetwork } = require('./unlock') const ethers = require('ethers') @@ -70,6 +69,8 @@ async function zkSyncSetupDeployer() { wallet = Wallet.fromMnemonic(accounts.mnemonic, provider) } + // set deployer + const { Deployer } = hre.config const deployer = new Deployer(hre, wallet) return { provider, wallet, deployer } From 8879a795c93fb080245e8ab1dc4991548ea45ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:52:04 +0100 Subject: [PATCH 31/51] delete unwanted file --- .github/workflows/_protocol-health-check.yml | 24 -------------------- 1 file changed, 24 deletions(-) delete mode 100644 .github/workflows/_protocol-health-check.yml diff --git a/.github/workflows/_protocol-health-check.yml b/.github/workflows/_protocol-health-check.yml deleted file mode 100644 index 00276e50437..00000000000 --- a/.github/workflows/_protocol-health-check.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Protocol Health Check - -on: - workflow_call: - inputs: - chainId: - description: '' - type: string - required: true - -jobs: - health-check: - name: Check the state of the Unlock Protocol for chain ${{ inputs.chainId }} - runs-on: ubuntu-22.04 - env: - DOCKER_BUILDKIT: 1 - BUILDKIT_PROGRESS: plain - steps: - - uses: actions/checkout@v4 - - name: Check networks package - run: yarn workspace @unlock-protocol/networks check - shell: bash - - name: Check Unlock info - run: cd governance && sh ./all_networks unlock:info From 13f18f0927b7fcc5bb6ab879427b7fbb4d97eb6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:56:02 +0100 Subject: [PATCH 32/51] make zksync compile step programmatic --- packages/hardhat-helpers/src/upgrades.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/hardhat-helpers/src/upgrades.js b/packages/hardhat-helpers/src/upgrades.js index 7e928c92c93..aa9ac96bbcd 100644 --- a/packages/hardhat-helpers/src/upgrades.js +++ b/packages/hardhat-helpers/src/upgrades.js @@ -20,7 +20,7 @@ const copyContractFiles = async (dirname, contractName, version) => { } async function copyAndBuildContractsAtVersion(dirname, contracts) { - const { ethers, run } = require('hardhat') + const { ethers, run, network } = require('hardhat') // copy all files await Promise.all( @@ -29,8 +29,10 @@ async function copyAndBuildContractsAtVersion(dirname, contracts) { ) ) - // re-compile contract - await run('compile', { network: 'zksync' }) + // re-compile contract (and checking if zksync) + const { zksync } = network.config + const compileArgs = zksync ? { network: 'zksync' } : {} + await run('compile', compileArgs) // get factory using fully qualified path const qualifiedPaths = await Promise.all( From 79956a821174dceac62856f5a2d8d197eb09ad04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 11:56:44 +0100 Subject: [PATCH 33/51] remove log --- packages/hardhat-helpers/src/zkSync.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index 4c46eb13658..30e6e445169 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -33,7 +33,6 @@ export async function deployUpgradeableContract( deployOptions = {} ) { const { zkUpgrades } = require('hardhat') - console.log(zkUpgrades) const { deployer } = await zkSyncSetupDeployer() const artifact = await deployer.loadArtifact(contractNameOrFullyQualifiedName) From dfc45d37b5c2c961fe62e002ed913271c01d614e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 29 Jan 2024 17:18:28 +0100 Subject: [PATCH 34/51] remove `ethNetwork` --- packages/networks/src/networks/zksync.ts | 1 - packages/networks/src/networks/zksyncSepolia.ts | 3 +-- packages/types/src/types/unlockTypes.ts | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index 9664d497c48..077540a5379 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -7,7 +7,6 @@ export const zksync: NetworkConfig = { chain: 'zksync', description: "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", - ethNetwork: 'mainnet', explorer: { name: 'zkSync Era Block Explorer', urls: { diff --git a/packages/networks/src/networks/zksyncSepolia.ts b/packages/networks/src/networks/zksyncSepolia.ts index f7b03e41d3f..0ce1666b016 100644 --- a/packages/networks/src/networks/zksyncSepolia.ts +++ b/packages/networks/src/networks/zksyncSepolia.ts @@ -7,7 +7,6 @@ export const zksyncSepolia: NetworkConfig = { chain: 'zksyncSepolia', description: "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", - ethNetwork: 'sepolia', explorer: { name: 'zkSync Era Block Explorer - Sepolia', urls: { @@ -22,7 +21,7 @@ export const zksyncSepolia: NetworkConfig = { featured: false, hooks: {}, id: 300, - isTestNetwork: false, + isTestNetwork: true, maxFreeClaimCost: 1, multisig: 'TK', name: 'zkSync Era - Sepolia', diff --git a/packages/types/src/types/unlockTypes.ts b/packages/types/src/types/unlockTypes.ts index 3c60923e8a6..c68444848ae 100644 --- a/packages/types/src/types/unlockTypes.ts +++ b/packages/types/src/types/unlockTypes.ts @@ -146,7 +146,6 @@ export interface NetworkConfig { description: string url?: string faucet?: string - ethNetwork?: string tokens?: Token[] hooks?: Partial> fullySubsidizedGas?: boolean From 5db7fbe39e141f4f554dda3b85c3eb90dc727ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 29 Jan 2024 17:20:32 +0100 Subject: [PATCH 35/51] allow zksync on local nets --- packages/hardhat-helpers/src/networks.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 03f8d760978..86295602510 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -45,6 +45,7 @@ const hardhatNetworks = { chainId: 31337, url: `http://${testHost}:8545`, name: 'localhost', + zksync: !!process.env.ZK_SYNC, // allow zksync on localhost }, } @@ -62,7 +63,7 @@ Object.keys(networks).forEach((key) => { hardhatNetworks[key] = { ...hardhatNetworks[key], zksync: true, - ethNetwork: networks[key].ethNetwork, + ethNetwork: networks[key].isTestNetwork ? 'sepolia' : 'mainnet', } } @@ -74,6 +75,13 @@ Object.keys(networks).forEach((key) => { url: networks[key].provider, } } + + // allow zksync on hardhat default network + if (process.env.ZK_SYNC) { + hardhatNetworks.hardhat = { + zksync: true, + } + } }) export default hardhatNetworks From 5f7b4c4c283212ea375a792aa010da1708abcd7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 31 Jan 2024 14:42:47 +0100 Subject: [PATCH 36/51] add manifest --- governance/.upgradable/undefined.json | 278 ++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 governance/.upgradable/undefined.json diff --git a/governance/.upgradable/undefined.json b/governance/.upgradable/undefined.json new file mode 100644 index 00000000000..18f69a34eb6 --- /dev/null +++ b/governance/.upgradable/undefined.json @@ -0,0 +1,278 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0xb52E38541e709622D86142DC2D50e2eE94017a06", + "txHash": "0x3373bc2809db83dd9ef37e70a3b274df02861ca6941561dafa5b641359f92dec" + }, + "proxies": [], + "impls": { + "1e08e5aeb4050c1e4057c7ed73ca81b9710d240e2d74086cc15337008288f4b6": { + "address": "0x35DF7c5c1626E81BA62Ef9f1E2342C5DBc5E86ae", + "txHash": "0x26020b35d22a165e4edc6a3568d6abb64e7393bfbcacf6ab0d10343cd4f63b4c", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "UnlockInitializable", + "src": "contracts/past-versions/UnlockV13.sol:1327" + }, + { + "label": "initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "UnlockInitializable", + "src": "contracts/past-versions/UnlockV13.sol:1332" + }, + { + "label": "______gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "UnlockContextUpgradeable", + "src": "contracts/past-versions/UnlockV13.sol:1406" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "UnlockOwnable", + "src": "contracts/past-versions/UnlockV13.sol:1435" + }, + { + "label": "______gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)50_storage", + "contract": "UnlockOwnable", + "src": "contracts/past-versions/UnlockV13.sol:1501" + }, + { + "label": "grossNetworkProduct", + "offset": 0, + "slot": "102", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2786" + }, + { + "label": "totalDiscountGranted", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2788" + }, + { + "label": "locks", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_struct(LockBalances)3109_storage)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2791" + }, + { + "label": "globalBaseTokenURI", + "offset": 0, + "slot": "105", + "type": "t_string_storage", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2795" + }, + { + "label": "globalTokenSymbol", + "offset": 0, + "slot": "106", + "type": "t_string_storage", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2799" + }, + { + "label": "publicLockAddress", + "offset": 0, + "slot": "107", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2802" + }, + { + "label": "uniswapOracles", + "offset": 0, + "slot": "108", + "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)757)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2806" + }, + { + "label": "weth", + "offset": 0, + "slot": "109", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2809" + }, + { + "label": "udt", + "offset": 0, + "slot": "110", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2812" + }, + { + "label": "estimatedGasForPurchase", + "offset": 0, + "slot": "111", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2815" + }, + { + "label": "chainId", + "offset": 0, + "slot": "112", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2818" + }, + { + "label": "proxyAdminAddress", + "offset": 0, + "slot": "113", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2821" + }, + { + "label": "proxyAdmin", + "offset": 0, + "slot": "114", + "type": "t_contract(ProxyAdmin)3095", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2822" + }, + { + "label": "_publicLockVersions", + "offset": 0, + "slot": "115", + "type": "t_mapping(t_address,t_uint16)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2825" + }, + { + "label": "_publicLockImpls", + "offset": 0, + "slot": "116", + "type": "t_mapping(t_uint16,t_address)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2826" + }, + { + "label": "publicLockLatestVersion", + "offset": 0, + "slot": "117", + "type": "t_uint16", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2827" + }, + { + "label": "protocolFee", + "offset": 0, + "slot": "118", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2830" + }, + { + "label": "swapBurnerAddress", + "offset": 0, + "slot": "119", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2833" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IUniswapOracleV3)757": { + "label": "contract IUniswapOracleV3", + "numberOfBytes": "20" + }, + "t_contract(ProxyAdmin)3095": { + "label": "contract ProxyAdmin", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_contract(IUniswapOracleV3)757)": { + "label": "mapping(address => contract IUniswapOracleV3)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(LockBalances)3109_storage)": { + "label": "mapping(address => struct Unlock.LockBalances)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint16)": { + "label": "mapping(address => uint16)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint16,t_address)": { + "label": "mapping(uint16 => address)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(LockBalances)3109_storage": { + "label": "struct Unlock.LockBalances", + "members": [ + { + "label": "deployed", + "type": "t_bool", + "offset": 0, + "slot": "0" + }, + { + "label": "totalSales", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "yieldedDiscountTokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": {} + } + } + } +} From f127639e51bdbf16a39759cd2dfa37294802d33d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 26 Jan 2024 15:32:23 +0100 Subject: [PATCH 37/51] Update provider/src/types.ts --- provider/src/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/provider/src/types.ts b/provider/src/types.ts index e710affbb5c..5e74fa7e3bd 100644 --- a/provider/src/types.ts +++ b/provider/src/types.ts @@ -11,7 +11,6 @@ export interface Env { OPTIMISM_PROVIDER: string POLYGON_PROVIDER: string ZKSYNC_PROVIDER: string - PALM_PROVIDER: string BASE_GOERLI_PROVIDER: string BASE_PROVIDER: string SEPOLIA_PROVIDER: string From 3f09a4a3d61880f6cd7241922a4a82aeeb957e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 1 Feb 2024 16:36:59 +0100 Subject: [PATCH 38/51] parse network name properly --- packages/hardhat-helpers/src/upgrades.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/hardhat-helpers/src/upgrades.js b/packages/hardhat-helpers/src/upgrades.js index aa9ac96bbcd..109f84bbc10 100644 --- a/packages/hardhat-helpers/src/upgrades.js +++ b/packages/hardhat-helpers/src/upgrades.js @@ -30,8 +30,10 @@ async function copyAndBuildContractsAtVersion(dirname, contracts) { ) // re-compile contract (and checking if zksync) - const { zksync } = network.config - const compileArgs = zksync ? { network: 'zksync' } : {} + const { zksync, ethNetwork } = network.config + const compileArgs = zksync + ? { network: ethNetwork === 'mainnet' ? 'zksync' : 'zksyncSepolia' } + : {} await run('compile', compileArgs) // get factory using fully qualified path From dddc6e4dfd721b69d804af52bbea2cccb67b6220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Fri, 2 Feb 2024 14:29:33 +0100 Subject: [PATCH 39/51] add zksync mainnet manifest --- governance/.upgradable/zkSync-era.json | 278 +++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 governance/.upgradable/zkSync-era.json diff --git a/governance/.upgradable/zkSync-era.json b/governance/.upgradable/zkSync-era.json new file mode 100644 index 00000000000..78f77084a43 --- /dev/null +++ b/governance/.upgradable/zkSync-era.json @@ -0,0 +1,278 @@ +{ + "manifestVersion": "3.2", + "admin": { + "address": "0x35DF7c5c1626E81BA62Ef9f1E2342C5DBc5E86ae", + "txHash": "0x89e3e4fed57acd04fd05f61f2820421f357396be886d7e7126afbdf8233552d1" + }, + "proxies": [], + "impls": { + "1e08e5aeb4050c1e4057c7ed73ca81b9710d240e2d74086cc15337008288f4b6": { + "address": "0x020d8F48E56F12C9213007186E2bbdD81Be45034", + "txHash": "0x693f0117a8d6bb47ab7a10f7dd54e3ff41a48b6e6da3546d7a53bb8de67f18a9", + "layout": { + "solcVersion": "0.8.21", + "storage": [ + { + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool", + "contract": "UnlockInitializable", + "src": "contracts/past-versions/UnlockV13.sol:1327" + }, + { + "label": "initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "UnlockInitializable", + "src": "contracts/past-versions/UnlockV13.sol:1332" + }, + { + "label": "______gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "UnlockContextUpgradeable", + "src": "contracts/past-versions/UnlockV13.sol:1406" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "UnlockOwnable", + "src": "contracts/past-versions/UnlockV13.sol:1435" + }, + { + "label": "______gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)50_storage", + "contract": "UnlockOwnable", + "src": "contracts/past-versions/UnlockV13.sol:1501" + }, + { + "label": "grossNetworkProduct", + "offset": 0, + "slot": "102", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2786" + }, + { + "label": "totalDiscountGranted", + "offset": 0, + "slot": "103", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2788" + }, + { + "label": "locks", + "offset": 0, + "slot": "104", + "type": "t_mapping(t_address,t_struct(LockBalances)13715_storage)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2791" + }, + { + "label": "globalBaseTokenURI", + "offset": 0, + "slot": "105", + "type": "t_string_storage", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2795" + }, + { + "label": "globalTokenSymbol", + "offset": 0, + "slot": "106", + "type": "t_string_storage", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2799" + }, + { + "label": "publicLockAddress", + "offset": 0, + "slot": "107", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2802" + }, + { + "label": "uniswapOracles", + "offset": 0, + "slot": "108", + "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)11363)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2806" + }, + { + "label": "weth", + "offset": 0, + "slot": "109", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2809" + }, + { + "label": "udt", + "offset": 0, + "slot": "110", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2812" + }, + { + "label": "estimatedGasForPurchase", + "offset": 0, + "slot": "111", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2815" + }, + { + "label": "chainId", + "offset": 0, + "slot": "112", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2818" + }, + { + "label": "proxyAdminAddress", + "offset": 0, + "slot": "113", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2821" + }, + { + "label": "proxyAdmin", + "offset": 0, + "slot": "114", + "type": "t_contract(ProxyAdmin)13701", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2822" + }, + { + "label": "_publicLockVersions", + "offset": 0, + "slot": "115", + "type": "t_mapping(t_address,t_uint16)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2825" + }, + { + "label": "_publicLockImpls", + "offset": 0, + "slot": "116", + "type": "t_mapping(t_uint16,t_address)", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2826" + }, + { + "label": "publicLockLatestVersion", + "offset": 0, + "slot": "117", + "type": "t_uint16", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2827" + }, + { + "label": "protocolFee", + "offset": 0, + "slot": "118", + "type": "t_uint256", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2830" + }, + { + "label": "swapBurnerAddress", + "offset": 0, + "slot": "119", + "type": "t_address", + "contract": "Unlock", + "src": "contracts/past-versions/UnlockV13.sol:2833" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IUniswapOracleV3)11363": { + "label": "contract IUniswapOracleV3", + "numberOfBytes": "20" + }, + "t_contract(ProxyAdmin)13701": { + "label": "contract ProxyAdmin", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_contract(IUniswapOracleV3)11363)": { + "label": "mapping(address => contract IUniswapOracleV3)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(LockBalances)13715_storage)": { + "label": "mapping(address => struct Unlock.LockBalances)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint16)": { + "label": "mapping(address => uint16)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint16,t_address)": { + "label": "mapping(uint16 => address)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(LockBalances)13715_storage": { + "label": "struct Unlock.LockBalances", + "members": [ + { + "label": "deployed", + "type": "t_bool", + "offset": 0, + "slot": "0" + }, + { + "label": "totalSales", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "yieldedDiscountTokens", + "type": "t_uint256", + "offset": 0, + "slot": "2" + } + ], + "numberOfBytes": "96" + }, + "t_uint16": { + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + } + }, + "namespaces": {} + } + } + } +} From 2946a4d0e2a787acee3cef812b9089da9493de6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 10:50:11 +0100 Subject: [PATCH 40/51] fix issue with `Deployer` - thanks to matter-labs/hardhat-zksync#711 --- governance/hardhat.config.js | 4 ---- packages/hardhat-helpers/src/zkSync.js | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/governance/hardhat.config.js b/governance/hardhat.config.js index 6482642cc04..abdd43c63ad 100644 --- a/governance/hardhat.config.js +++ b/governance/hardhat.config.js @@ -78,10 +78,6 @@ if (process.env.ZK_SYNC) { version: 'latest', settings: {}, } - - // workaround to prevent [HH209] error with tasks being overridden - const { Deployer } = require('@matterlabs/hardhat-zksync-deploy') - config.Deployer = Deployer } module.exports = config diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index 30e6e445169..d2fff8943a8 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -1,6 +1,6 @@ const { Wallet, Provider } = require('zksync-ethers') const { getNetwork } = require('./unlock') - +const { Deployer } = require('@matterlabs/hardhat-zksync-deploy/dist/deployer') const ethers = require('ethers') export async function deployContract( @@ -69,7 +69,6 @@ async function zkSyncSetupDeployer() { } // set deployer - const { Deployer } = hre.config const deployer = new Deployer(hre, wallet) return { provider, wallet, deployer } From 9c29f742467bf19dbaf08372e6b6a4b913f8e25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 10:53:48 +0100 Subject: [PATCH 41/51] bump upgradable lib - fix matter-labs/hardhat-zksync/#753 --- governance/package.json | 2 +- packages/hardhat-helpers/src/zkSync.js | 2 +- yarn.lock | 47 ++++++++++++++++++++------ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/governance/package.json b/governance/package.json index 6cdab4b0668..b698cec935c 100644 --- a/governance/package.json +++ b/governance/package.json @@ -5,7 +5,7 @@ "dependencies": { "@matterlabs/hardhat-zksync-deploy": "1.1.2", "@matterlabs/hardhat-zksync-solc": "1.1.0", - "@matterlabs/hardhat-zksync-upgradable": "1.2.0", + "@matterlabs/hardhat-zksync-upgradable": "1.2.4", "@matterlabs/hardhat-zksync-verify": "1.3.0", "@nomicfoundation/hardhat-ethers": "3.0.5", "@nomicfoundation/hardhat-network-helpers": "1.0.10", diff --git a/packages/hardhat-helpers/src/zkSync.js b/packages/hardhat-helpers/src/zkSync.js index d2fff8943a8..5106d0fe6b6 100644 --- a/packages/hardhat-helpers/src/zkSync.js +++ b/packages/hardhat-helpers/src/zkSync.js @@ -45,7 +45,7 @@ export async function deployUpgradeableContract( await contract.waitForDeployment() const contractAddress = await contract.getAddress() - const { hash } = await contract.deploymentTransaction() + const { hash } = contract.deployTransaction return { contract, diff --git a/yarn.lock b/yarn.lock index 426df0ccbca..0175ce1b7df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9276,29 +9276,38 @@ __metadata: languageName: node linkType: hard -"@matterlabs/hardhat-zksync-upgradable@npm:1.2.0": - version: 1.2.0 - resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.0" +"@matterlabs/hardhat-zksync-upgradable@npm:1.2.1": + version: 1.2.1 + resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.1" dependencies: "@matterlabs/hardhat-zksync-deploy": "npm:^1.1.0" "@matterlabs/hardhat-zksync-solc": "npm:^1.0.3" "@openzeppelin/upgrades-core": "npm:^1.31.0" peerDependencies: "@openzeppelin/contracts-upgradeable": ^4.9.2 - checksum: ec0809b55893dabc4c1c85492691692b0bbe85605b1f7685aa9c96db0f23af173d0f49fd4f9054c7fcf6c4a4d3f41263d9f3c4dd35ae462efa38900c13a086b5 + checksum: 73f59220cd4c2f2b0cddba1b3b5aacfa671a48fc8b6d67dc0a2944010d6f3961290ab82160c76a93e1406b9dc5e150b4d05a73211818fd3149018aff4f844c74 languageName: node linkType: hard -"@matterlabs/hardhat-zksync-upgradable@npm:1.2.1": - version: 1.2.1 - resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.1" +"@matterlabs/hardhat-zksync-upgradable@npm:1.2.4": + version: 1.2.4 + resolution: "@matterlabs/hardhat-zksync-upgradable@npm:1.2.4" dependencies: "@matterlabs/hardhat-zksync-deploy": "npm:^1.1.0" "@matterlabs/hardhat-zksync-solc": "npm:^1.0.3" - "@openzeppelin/upgrades-core": "npm:^1.31.0" + "@openzeppelin/upgrades-core": "npm:^1.31.3" + chalk: "npm:4.1.2" + compare-versions: "npm:^6.0.0" + ethereumjs-util: "npm:^7.1.5" + ethers: "npm:^6.7.1" + fs-extra: "npm:^7.0.1" + hardhat: "npm:^2.19.4" + proper-lockfile: "npm:^4.1.1" + solidity-ast: "npm:^0.4.51" + zksync-ethers: "npm:^6.0.0" peerDependencies: "@openzeppelin/contracts-upgradeable": ^4.9.2 - checksum: 73f59220cd4c2f2b0cddba1b3b5aacfa671a48fc8b6d67dc0a2944010d6f3961290ab82160c76a93e1406b9dc5e150b4d05a73211818fd3149018aff4f844c74 + checksum: 0c912a75fbc365743488e7b5feed35637ddf80e0556cbbdca72d33eeeaa1f6f24edf4b190cecbbfa8993f86f493b14118647fc04919ab0ad206d34a5e98dcf44 languageName: node linkType: hard @@ -11840,6 +11849,24 @@ __metadata: languageName: node linkType: hard +"@openzeppelin/upgrades-core@npm:^1.31.3": + version: 1.32.4 + resolution: "@openzeppelin/upgrades-core@npm:1.32.4" + dependencies: + cbor: "npm:^9.0.0" + chalk: "npm:^4.1.0" + compare-versions: "npm:^6.0.0" + debug: "npm:^4.1.1" + ethereumjs-util: "npm:^7.0.3" + minimist: "npm:^1.2.7" + proper-lockfile: "npm:^4.1.1" + solidity-ast: "npm:^0.4.51" + bin: + openzeppelin-upgrades-core: dist/cli/cli.js + checksum: 8611ec5c5a22cdaa31154ee698cabd1158a7a3c819dbe3a063846cf7c29196fc3b704cbd73b0331a3ed148d83091c6be55f3d242454bc4f31bbc171b2cf30722 + languageName: node + linkType: hard + "@openzeppelin/upgrades@npm:2.8.0": version: 2.8.0 resolution: "@openzeppelin/upgrades@npm:2.8.0" @@ -19691,7 +19718,7 @@ __metadata: dependencies: "@matterlabs/hardhat-zksync-deploy": "npm:1.1.2" "@matterlabs/hardhat-zksync-solc": "npm:1.1.0" - "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.0" + "@matterlabs/hardhat-zksync-upgradable": "npm:1.2.4" "@matterlabs/hardhat-zksync-verify": "npm:1.3.0" "@nomicfoundation/hardhat-ethers": "npm:3.0.5" "@nomicfoundation/hardhat-network-helpers": "npm:1.0.10" From 0daf50cf68a77ef8e0211c91ce7081a5f156b94e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 10:55:15 +0100 Subject: [PATCH 42/51] sepolia manifest - fixed in matter-labs/hardhat-zksync/#696 --- ...fined.json => zkSync-testnet-sepolia.json} | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) rename governance/.upgradable/{undefined.json => zkSync-testnet-sepolia.json} (87%) diff --git a/governance/.upgradable/undefined.json b/governance/.upgradable/zkSync-testnet-sepolia.json similarity index 87% rename from governance/.upgradable/undefined.json rename to governance/.upgradable/zkSync-testnet-sepolia.json index 18f69a34eb6..ef7bd23e1c6 100644 --- a/governance/.upgradable/undefined.json +++ b/governance/.upgradable/zkSync-testnet-sepolia.json @@ -1,14 +1,25 @@ { "manifestVersion": "3.2", "admin": { - "address": "0xb52E38541e709622D86142DC2D50e2eE94017a06", - "txHash": "0x3373bc2809db83dd9ef37e70a3b274df02861ca6941561dafa5b641359f92dec" + "address": "0x73a6EC7A82303A569415e070AD64b23AF8FF098e", + "txHash": "0x0d11a65bdcc93944801d3924bf97c582f4b9e6193a8079c73dd07865a249d65f" }, - "proxies": [], + "proxies": [ + { + "address": "0x0742bA310f0A7d0bE630ac26c1cF8EB31Fc10AdA", + "txHash": "0xcded3c34e3394a964b988df8a049b55a67d0bfb9372aa8ade6f79150a6818c1b", + "kind": "transparent" + }, + { + "address": "0x3d5Dde761A008e752d2a93247E6B672bF60dbdBe", + "txHash": "0xfa56e52ea3bdccdb73e1d67c034fdf66e4ecb0fe0db964eaadb05435ea9740bb", + "kind": "transparent" + } + ], "impls": { "1e08e5aeb4050c1e4057c7ed73ca81b9710d240e2d74086cc15337008288f4b6": { - "address": "0x35DF7c5c1626E81BA62Ef9f1E2342C5DBc5E86ae", - "txHash": "0x26020b35d22a165e4edc6a3568d6abb64e7393bfbcacf6ab0d10343cd4f63b4c", + "address": "0x32CF553582159F12fBb1Ae1649b3670395610F24", + "txHash": "0x3c429fd10c7592f7702dec042ce7442692b54c85d9d4f36c734dfd78635f6f96", "layout": { "solcVersion": "0.8.21", "storage": [ @@ -72,7 +83,7 @@ "label": "locks", "offset": 0, "slot": "104", - "type": "t_mapping(t_address,t_struct(LockBalances)3109_storage)", + "type": "t_mapping(t_address,t_struct(LockBalances)23758_storage)", "contract": "Unlock", "src": "contracts/past-versions/UnlockV13.sol:2791" }, @@ -104,7 +115,7 @@ "label": "uniswapOracles", "offset": 0, "slot": "108", - "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)757)", + "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)21406)", "contract": "Unlock", "src": "contracts/past-versions/UnlockV13.sol:2806" }, @@ -152,7 +163,7 @@ "label": "proxyAdmin", "offset": 0, "slot": "114", - "type": "t_contract(ProxyAdmin)3095", + "type": "t_contract(ProxyAdmin)23744", "contract": "Unlock", "src": "contracts/past-versions/UnlockV13.sol:2822" }, @@ -210,19 +221,19 @@ "label": "bool", "numberOfBytes": "1" }, - "t_contract(IUniswapOracleV3)757": { + "t_contract(IUniswapOracleV3)21406": { "label": "contract IUniswapOracleV3", "numberOfBytes": "20" }, - "t_contract(ProxyAdmin)3095": { + "t_contract(ProxyAdmin)23744": { "label": "contract ProxyAdmin", "numberOfBytes": "20" }, - "t_mapping(t_address,t_contract(IUniswapOracleV3)757)": { + "t_mapping(t_address,t_contract(IUniswapOracleV3)21406)": { "label": "mapping(address => contract IUniswapOracleV3)", "numberOfBytes": "32" }, - "t_mapping(t_address,t_struct(LockBalances)3109_storage)": { + "t_mapping(t_address,t_struct(LockBalances)23758_storage)": { "label": "mapping(address => struct Unlock.LockBalances)", "numberOfBytes": "32" }, @@ -238,7 +249,7 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(LockBalances)3109_storage": { + "t_struct(LockBalances)23758_storage": { "label": "struct Unlock.LockBalances", "members": [ { From 78f1e4aba8ddc71cedac3c040747c3d5f3255757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 11:03:09 +0100 Subject: [PATCH 43/51] add sepolia deployment --- packages/networks/src/networks/zksyncSepolia.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/networks/src/networks/zksyncSepolia.ts b/packages/networks/src/networks/zksyncSepolia.ts index 0ce1666b016..b93598dd03c 100644 --- a/packages/networks/src/networks/zksyncSepolia.ts +++ b/packages/networks/src/networks/zksyncSepolia.ts @@ -77,7 +77,7 @@ export const zksyncSepolia: NetworkConfig = { symbol: 'WBTC', }, ], - unlockAddress: '', + unlockAddress: '0x3d5Dde761A008e752d2a93247E6B672bF60dbdBe', url: 'https://sepolia.era.zksync.dev', } From 6bcd0acef89668ebc224f7f7dbd7918e4b919eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 11:05:20 +0100 Subject: [PATCH 44/51] add zksync deployment --- governance/.upgradable/zkSync-era.json | 32 ++++++++++++++---------- packages/networks/src/networks/zksync.ts | 2 +- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/governance/.upgradable/zkSync-era.json b/governance/.upgradable/zkSync-era.json index 78f77084a43..6faca9bd858 100644 --- a/governance/.upgradable/zkSync-era.json +++ b/governance/.upgradable/zkSync-era.json @@ -1,14 +1,20 @@ { "manifestVersion": "3.2", "admin": { - "address": "0x35DF7c5c1626E81BA62Ef9f1E2342C5DBc5E86ae", - "txHash": "0x89e3e4fed57acd04fd05f61f2820421f357396be886d7e7126afbdf8233552d1" + "address": "0xdab03e5E7f51065F4c41945a0718Bed21Ef9A9EF", + "txHash": "0x86d758ffa577b99326b57d35240cb7904d22f17d7a13460b36cb3ac505f750a6" }, - "proxies": [], + "proxies": [ + { + "address": "0x32CF553582159F12fBb1Ae1649b3670395610F24", + "txHash": "0x7af40bdb7142000fc3fe8aeb942a665d0ee88a5702bdbcfab28a2db49a33a836", + "kind": "transparent" + } + ], "impls": { "1e08e5aeb4050c1e4057c7ed73ca81b9710d240e2d74086cc15337008288f4b6": { - "address": "0x020d8F48E56F12C9213007186E2bbdD81Be45034", - "txHash": "0x693f0117a8d6bb47ab7a10f7dd54e3ff41a48b6e6da3546d7a53bb8de67f18a9", + "address": "0xb52E38541e709622D86142DC2D50e2eE94017a06", + "txHash": "0x4ede332025cc8d43558fa6585e09269e26a6a5ffc880d3aba5c27c4aa0da41a3", "layout": { "solcVersion": "0.8.21", "storage": [ @@ -72,7 +78,7 @@ "label": "locks", "offset": 0, "slot": "104", - "type": "t_mapping(t_address,t_struct(LockBalances)13715_storage)", + "type": "t_mapping(t_address,t_struct(LockBalances)3109_storage)", "contract": "Unlock", "src": "contracts/past-versions/UnlockV13.sol:2791" }, @@ -104,7 +110,7 @@ "label": "uniswapOracles", "offset": 0, "slot": "108", - "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)11363)", + "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)757)", "contract": "Unlock", "src": "contracts/past-versions/UnlockV13.sol:2806" }, @@ -152,7 +158,7 @@ "label": "proxyAdmin", "offset": 0, "slot": "114", - "type": "t_contract(ProxyAdmin)13701", + "type": "t_contract(ProxyAdmin)3095", "contract": "Unlock", "src": "contracts/past-versions/UnlockV13.sol:2822" }, @@ -210,19 +216,19 @@ "label": "bool", "numberOfBytes": "1" }, - "t_contract(IUniswapOracleV3)11363": { + "t_contract(IUniswapOracleV3)757": { "label": "contract IUniswapOracleV3", "numberOfBytes": "20" }, - "t_contract(ProxyAdmin)13701": { + "t_contract(ProxyAdmin)3095": { "label": "contract ProxyAdmin", "numberOfBytes": "20" }, - "t_mapping(t_address,t_contract(IUniswapOracleV3)11363)": { + "t_mapping(t_address,t_contract(IUniswapOracleV3)757)": { "label": "mapping(address => contract IUniswapOracleV3)", "numberOfBytes": "32" }, - "t_mapping(t_address,t_struct(LockBalances)13715_storage)": { + "t_mapping(t_address,t_struct(LockBalances)3109_storage)": { "label": "mapping(address => struct Unlock.LockBalances)", "numberOfBytes": "32" }, @@ -238,7 +244,7 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(LockBalances)13715_storage": { + "t_struct(LockBalances)3109_storage": { "label": "struct Unlock.LockBalances", "members": [ { diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index 077540a5379..e040b69fe88 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -74,7 +74,7 @@ export const zksync: NetworkConfig = { symbol: 'WBTC', }, ], - unlockAddress: '', + unlockAddress: '0x32CF553582159F12fBb1Ae1649b3670395610F24', url: 'https://zksync.io/', } From c119518b96231698dc45f5256c5149043f44bdb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 13:03:38 +0100 Subject: [PATCH 45/51] prevent verification fallback to testnet explorer --- packages/hardhat-helpers/src/networks.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 86295602510..1b6c587f628 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -64,6 +64,9 @@ Object.keys(networks).forEach((key) => { ...hardhatNetworks[key], zksync: true, ethNetwork: networks[key].isTestNetwork ? 'sepolia' : 'mainnet', + verifyURL: networks[key].isTestNetwork + ? 'https://explorer.sepolia.era.zksync.dev/contract_verification' + : 'https://zksync2-mainnet-explorer.zksync.io/contract_verification', } } From 956522722f410a7bfaeb89e6a719109f45b1b21b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 8 Feb 2024 10:57:29 +0100 Subject: [PATCH 46/51] remove sepolia --- packages/networks/src/networks/index.ts | 1 - .../networks/src/networks/zksyncSepolia.ts | 84 ------------------- 2 files changed, 85 deletions(-) delete mode 100644 packages/networks/src/networks/zksyncSepolia.ts diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index df1947b676e..a49bcb7cb0e 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -16,4 +16,3 @@ export * from './sepolia' export * from './zkevm' export * from './scroll' export * from './zksync' -export * from './zksyncSepolia' diff --git a/packages/networks/src/networks/zksyncSepolia.ts b/packages/networks/src/networks/zksyncSepolia.ts deleted file mode 100644 index b93598dd03c..00000000000 --- a/packages/networks/src/networks/zksyncSepolia.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { NetworkConfig } from '@unlock-protocol/types' - -export const zksyncSepolia: NetworkConfig = { - blockScan: { - url: (address: string) => `https://blockscan.com/address/${address}`, - }, - chain: 'zksyncSepolia', - description: - "zkSync is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech. Our mission is not only to merely increase Ethereum's throughput, but to fully preserve its foundational values – freedom, self-sovereignty, decentralization – at scale.", - explorer: { - name: 'zkSync Era Block Explorer - Sepolia', - urls: { - address: (address: string) => - `https://sepolia.explorer.zksync.io/address/${address}`, - base: `https://sepolia.explorer.zksync.io/`, - token: (address: string, holder: string) => - `https://sepolia.explorer.zksync.io/address/${address}?a=${holder}`, - transaction: (hash: string) => `https://explorer.zksync.io/tx/${hash}`, - }, - }, - featured: false, - hooks: {}, - id: 300, - isTestNetwork: true, - maxFreeClaimCost: 1, - multisig: 'TK', - name: 'zkSync Era - Sepolia', - nativeCurrency: { - coingecko: 'zksync-eth', - decimals: 18, - name: 'zkSync Ether', - symbol: 'ETH', - }, - - previousDeploys: [], - // TODO: add to unlock providers - // provider: 'https://rpc.unlock-protocol.com/300', - provider: 'https://sepolia.era.zksync.dev', - publicLockVersionToDeploy: 13, - publicProvider: 'https://sepolia.era.zksync.dev', - startBlock: 0, - subgraph: { - endpoint: '', - endpointV2: '', - networkName: 'matic', - }, - tokens: [ - { - address: '0x000000000000000000000000000000000000800A', - decimals: 18, - name: 'Wrapped Ether', - symbol: 'WETH', - }, - { - address: '0x4B9eb6c0b6ea15176BBF62841C6B2A8a398cb656', - decimals: 18, - name: 'Dai Stablecoin', - symbol: 'DAI', - }, - - { - address: '0x493257fD37EDB34451f62EDf8D2a0C418852bA4C', - decimals: 6, - name: 'Tether USD', - symbol: 'USDT', - }, - { - address: '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', - decimals: 6, - name: 'USD Coin', - symbol: 'USDC', - }, - { - address: '0xBBeB516fb02a01611cBBE0453Fe3c580D7281011', - decimals: 8, - name: 'Wrapped BTC', - symbol: 'WBTC', - }, - ], - unlockAddress: '0x3d5Dde761A008e752d2a93247E6B672bF60dbdBe', - url: 'https://sepolia.era.zksync.dev', -} - -export default zksyncSepolia From c3a3126ea60774ca2158e57d12b80725e59ae489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 8 Feb 2024 10:58:08 +0100 Subject: [PATCH 47/51] remove zksync sepolia manifest --- .../.upgradable/zkSync-testnet-sepolia.json | 289 ------------------ packages/contracts/src/index.ts | 7 +- 2 files changed, 6 insertions(+), 290 deletions(-) delete mode 100644 governance/.upgradable/zkSync-testnet-sepolia.json diff --git a/governance/.upgradable/zkSync-testnet-sepolia.json b/governance/.upgradable/zkSync-testnet-sepolia.json deleted file mode 100644 index ef7bd23e1c6..00000000000 --- a/governance/.upgradable/zkSync-testnet-sepolia.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x73a6EC7A82303A569415e070AD64b23AF8FF098e", - "txHash": "0x0d11a65bdcc93944801d3924bf97c582f4b9e6193a8079c73dd07865a249d65f" - }, - "proxies": [ - { - "address": "0x0742bA310f0A7d0bE630ac26c1cF8EB31Fc10AdA", - "txHash": "0xcded3c34e3394a964b988df8a049b55a67d0bfb9372aa8ade6f79150a6818c1b", - "kind": "transparent" - }, - { - "address": "0x3d5Dde761A008e752d2a93247E6B672bF60dbdBe", - "txHash": "0xfa56e52ea3bdccdb73e1d67c034fdf66e4ecb0fe0db964eaadb05435ea9740bb", - "kind": "transparent" - } - ], - "impls": { - "1e08e5aeb4050c1e4057c7ed73ca81b9710d240e2d74086cc15337008288f4b6": { - "address": "0x32CF553582159F12fBb1Ae1649b3670395610F24", - "txHash": "0x3c429fd10c7592f7702dec042ce7442692b54c85d9d4f36c734dfd78635f6f96", - "layout": { - "solcVersion": "0.8.21", - "storage": [ - { - "label": "initialized", - "offset": 0, - "slot": "0", - "type": "t_bool", - "contract": "UnlockInitializable", - "src": "contracts/past-versions/UnlockV13.sol:1327" - }, - { - "label": "initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "UnlockInitializable", - "src": "contracts/past-versions/UnlockV13.sol:1332" - }, - { - "label": "______gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "UnlockContextUpgradeable", - "src": "contracts/past-versions/UnlockV13.sol:1406" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "UnlockOwnable", - "src": "contracts/past-versions/UnlockV13.sol:1435" - }, - { - "label": "______gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)50_storage", - "contract": "UnlockOwnable", - "src": "contracts/past-versions/UnlockV13.sol:1501" - }, - { - "label": "grossNetworkProduct", - "offset": 0, - "slot": "102", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2786" - }, - { - "label": "totalDiscountGranted", - "offset": 0, - "slot": "103", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2788" - }, - { - "label": "locks", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_struct(LockBalances)23758_storage)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2791" - }, - { - "label": "globalBaseTokenURI", - "offset": 0, - "slot": "105", - "type": "t_string_storage", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2795" - }, - { - "label": "globalTokenSymbol", - "offset": 0, - "slot": "106", - "type": "t_string_storage", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2799" - }, - { - "label": "publicLockAddress", - "offset": 0, - "slot": "107", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2802" - }, - { - "label": "uniswapOracles", - "offset": 0, - "slot": "108", - "type": "t_mapping(t_address,t_contract(IUniswapOracleV3)21406)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2806" - }, - { - "label": "weth", - "offset": 0, - "slot": "109", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2809" - }, - { - "label": "udt", - "offset": 0, - "slot": "110", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2812" - }, - { - "label": "estimatedGasForPurchase", - "offset": 0, - "slot": "111", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2815" - }, - { - "label": "chainId", - "offset": 0, - "slot": "112", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2818" - }, - { - "label": "proxyAdminAddress", - "offset": 0, - "slot": "113", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2821" - }, - { - "label": "proxyAdmin", - "offset": 0, - "slot": "114", - "type": "t_contract(ProxyAdmin)23744", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2822" - }, - { - "label": "_publicLockVersions", - "offset": 0, - "slot": "115", - "type": "t_mapping(t_address,t_uint16)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2825" - }, - { - "label": "_publicLockImpls", - "offset": 0, - "slot": "116", - "type": "t_mapping(t_uint16,t_address)", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2826" - }, - { - "label": "publicLockLatestVersion", - "offset": 0, - "slot": "117", - "type": "t_uint16", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2827" - }, - { - "label": "protocolFee", - "offset": 0, - "slot": "118", - "type": "t_uint256", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2830" - }, - { - "label": "swapBurnerAddress", - "offset": 0, - "slot": "119", - "type": "t_address", - "contract": "Unlock", - "src": "contracts/past-versions/UnlockV13.sol:2833" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_contract(IUniswapOracleV3)21406": { - "label": "contract IUniswapOracleV3", - "numberOfBytes": "20" - }, - "t_contract(ProxyAdmin)23744": { - "label": "contract ProxyAdmin", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_contract(IUniswapOracleV3)21406)": { - "label": "mapping(address => contract IUniswapOracleV3)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(LockBalances)23758_storage)": { - "label": "mapping(address => struct Unlock.LockBalances)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint16)": { - "label": "mapping(address => uint16)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint16,t_address)": { - "label": "mapping(uint16 => address)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(LockBalances)23758_storage": { - "label": "struct Unlock.LockBalances", - "members": [ - { - "label": "deployed", - "type": "t_bool", - "offset": 0, - "slot": "0" - }, - { - "label": "totalSales", - "type": "t_uint256", - "offset": 0, - "slot": "1" - }, - { - "label": "yieldedDiscountTokens", - "type": "t_uint256", - "offset": 0, - "slot": "2" - } - ], - "numberOfBytes": "96" - }, - "t_uint16": { - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - } - }, - "namespaces": {} - } - } - } -} diff --git a/packages/contracts/src/index.ts b/packages/contracts/src/index.ts index a3029bae3c6..078391ede36 100644 --- a/packages/contracts/src/index.ts +++ b/packages/contracts/src/index.ts @@ -77,4 +77,9 @@ export { UnlockDiscountTokenV2 } export { UnlockDiscountTokenV3 } export { GovernorUnlockProtocol } export { GovernorUnlockProtocolTimelock } -export { LockSerializer,UnlockSwapPurchaser,UnlockSwapBurner,UniswapOracleV3 } +export { + LockSerializer, + UnlockSwapPurchaser, + UnlockSwapBurner, + UniswapOracleV3, +} From ac2a5c35b43fa6467abb29a01fc222e0aa3511ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 8 Feb 2024 11:02:03 +0100 Subject: [PATCH 48/51] add startBlock --- packages/networks/src/networks/zksync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index e040b69fe88..d2730f62b50 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -35,7 +35,7 @@ export const zksync: NetworkConfig = { provider: 'https://rpc.unlock-protocol.com/324', publicLockVersionToDeploy: 13, publicProvider: 'https://mainnet.era.zksync.io', - startBlock: 0, + startBlock: 25905168, subgraph: { endpoint: '', endpointV2: '', From 2ce63e324c655e02fcd9973e5dd9690f1cce87e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 8 Feb 2024 11:04:41 +0100 Subject: [PATCH 49/51] add multisig --- packages/networks/src/networks/zksync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index d2730f62b50..12c8627aa25 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -23,7 +23,7 @@ export const zksync: NetworkConfig = { id: 324, isTestNetwork: false, maxFreeClaimCost: 1, - multisig: 'TK', + multisig: '0xFa5592CE9C52FA5214ccEa10cB72Faa88eC80a3c', name: 'zkSync Era', nativeCurrency: { coingecko: 'zksync-eth', From 60598bc7ea5278a8e968c8794e2e5f99166ce998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Thu, 8 Feb 2024 11:12:28 +0100 Subject: [PATCH 50/51] correct subgraph network name --- packages/networks/src/networks/zksync.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index 12c8627aa25..35c2e760d05 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -39,7 +39,7 @@ export const zksync: NetworkConfig = { subgraph: { endpoint: '', endpointV2: '', - networkName: 'matic', + networkName: 'zksync-era', }, tokens: [ { From 743f24bf32dcc943d7f9ae053732d1d564a653d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 12 Feb 2024 14:58:15 +0100 Subject: [PATCH 51/51] add subgraph endpoint --- packages/networks/src/networks/zksync.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/networks/src/networks/zksync.ts b/packages/networks/src/networks/zksync.ts index 35c2e760d05..924ee995f5f 100644 --- a/packages/networks/src/networks/zksync.ts +++ b/packages/networks/src/networks/zksync.ts @@ -37,8 +37,8 @@ export const zksync: NetworkConfig = { publicProvider: 'https://mainnet.era.zksync.io', startBlock: 25905168, subgraph: { - endpoint: '', - endpointV2: '', + endpoint: + 'https://api.studio.thegraph.com/query/65299/unlock-protocol-zksync/version/latest', networkName: 'zksync-era', }, tokens: [