From f7c3ef1875e6b87bcb52c3e94e941f19bfd54c72 Mon Sep 17 00:00:00 2001 From: VGau Date: Fri, 25 Oct 2024 15:36:42 +0200 Subject: [PATCH] fix: remove abi folder in e2e tests + update genesis generator docker image + clean unused functions --- contracts/common/helpers/deployments.ts | 71 +- .../deployL2MessageService.ts | 64 +- .../deployPlonkVerifierAndLineaRollupV5.ts | 60 +- .../IntegrationTestTrueVerifier.json | 0 .../L2MessageService.json | 0 .../LineaRollupV5.json | 0 .../static-artifacts}/DummyContract.json | 0 .../static-artifacts}/L2TestContract.json | 0 .../static-artifacts}/TestContract.json | 0 docker/compose.yml | 17 +- docker/config/l1-node/Dockerfile | 15 +- e2e/package.json | 2 +- e2e/src/abi/L2MessageService.json | 1107 -------- e2e/src/abi/LineaRollup.json | 2356 ---------------- e2e/src/abi/LineaRollupAlphaV4.json | 2362 ----------------- e2e/src/abi/ProxyAdmin.json | 158 -- .../TestPlonkVerifierForDataAggregation.json | 35 - e2e/src/abi/TransparentUpgradeableProxy.json | 81 - e2e/src/common/utils.ts | 8 +- e2e/src/config/tests-config/setup.ts | 8 +- 20 files changed, 94 insertions(+), 6250 deletions(-) rename contracts/local-deployments-artifacts/{shared-artifacts => dynamic-artifacts}/IntegrationTestTrueVerifier.json (100%) rename contracts/local-deployments-artifacts/{shared-artifacts => dynamic-artifacts}/L2MessageService.json (100%) rename contracts/local-deployments-artifacts/{shared-artifacts => dynamic-artifacts}/LineaRollupV5.json (100%) rename {e2e/src/abi => contracts/local-deployments-artifacts/static-artifacts}/DummyContract.json (100%) rename {e2e/src/abi => contracts/local-deployments-artifacts/static-artifacts}/L2TestContract.json (100%) rename {e2e/src/abi => contracts/local-deployments-artifacts/static-artifacts}/TestContract.json (100%) delete mode 100644 e2e/src/abi/L2MessageService.json delete mode 100644 e2e/src/abi/LineaRollup.json delete mode 100644 e2e/src/abi/LineaRollupAlphaV4.json delete mode 100644 e2e/src/abi/ProxyAdmin.json delete mode 100644 e2e/src/abi/TestPlonkVerifierForDataAggregation.json delete mode 100644 e2e/src/abi/TransparentUpgradeableProxy.json diff --git a/contracts/common/helpers/deployments.ts b/contracts/common/helpers/deployments.ts index c22ede442..aaf559d4c 100644 --- a/contracts/common/helpers/deployments.ts +++ b/contracts/common/helpers/deployments.ts @@ -1,13 +1,7 @@ -import { ContractFactory, Overrides, Wallet, ethers } from "ethers"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; -import { GetContractTypeFromFactory } from "../../typechain-types/common"; -import { ProxyAdmin, ProxyAdmin__factory, TransparentUpgradeableProxy__factory } from "../../typechain-types"; +import { AbstractSigner, BytesLike, ethers, Interface, InterfaceAbi } from "ethers"; -export function getInitializerData( - contractInterface: ethers.Interface, - initializerFunctionName: string, - args: unknown[], -) { +export function getInitializerData(contractAbi: InterfaceAbi, initializerFunctionName: string, args: unknown[]) { + const contractInterface = new Interface(contractAbi); const fragment = contractInterface.getFunction(initializerFunctionName); if (!fragment) { @@ -17,55 +11,14 @@ export function getInitializerData( return contractInterface.encodeFunctionData(fragment, args); } -export const deployContract = async ( - contractFactory: TFactory, - deployer: Wallet | HardhatEthersSigner, +export async function deployContractFromArtifacts( + abi: Interface | InterfaceAbi, + bytecode: BytesLike, + wallet: AbstractSigner, // eslint-disable-next-line @typescript-eslint/no-explicit-any - args?: any[], - overrides: Overrides = {}, -): Promise> => { - const deploymentArgs = args || []; - const instance = await contractFactory.connect(deployer).deploy(...deploymentArgs, overrides); - return instance.waitForDeployment() as GetContractTypeFromFactory; -}; - -export const deployUpgradableContract = async ( - contractFactory: TFactory, - deployer: Wallet | HardhatEthersSigner, - admin: ProxyAdmin, - initializerData = "0x", - overrides: Overrides = {}, -): Promise> => { - const instance = await deployContract(contractFactory, deployer, [], overrides); - - const proxy = await deployContract(new TransparentUpgradeableProxy__factory(), deployer, [ - await instance.getAddress(), - await admin.getAddress(), - initializerData, - ]); - - return proxy as GetContractTypeFromFactory; -}; - -export async function deployUpgradableContractWithProxyAdmin( - contractFactory: TFactory, - deployer: Wallet | HardhatEthersSigner, - initializer?: { - functionName: string; - args: unknown[]; - }, - overrides: Overrides = {}, -): Promise> { - const proxyFactory = new ProxyAdmin__factory(deployer); - - const proxyAdmin = await deployContract(proxyFactory, deployer, [], overrides); - - let contract: GetContractTypeFromFactory; - if (initializer) { - const initializerData = getInitializerData(contractFactory.interface, initializer.functionName, initializer.args); - contract = await deployUpgradableContract(contractFactory, deployer, proxyAdmin, initializerData, overrides); - } else { - contract = await deployUpgradableContract(contractFactory, deployer, proxyAdmin, "0x", overrides); - } - return contract; + ...args: ethers.ContractMethodArgs +) { + const factory = new ethers.ContractFactory(abi, bytecode, wallet); + const contract = await factory.deploy(...args); + return await contract.waitForDeployment(); } diff --git a/contracts/local-deployments-artifacts/deployL2MessageService.ts b/contracts/local-deployments-artifacts/deployL2MessageService.ts index f0caaec60..42d0ed926 100644 --- a/contracts/local-deployments-artifacts/deployL2MessageService.ts +++ b/contracts/local-deployments-artifacts/deployL2MessageService.ts @@ -1,9 +1,9 @@ -import { ContractFactory, ethers } from "ethers"; +import { ethers } from "ethers"; import * as dotenv from "dotenv"; import { abi as L2MessageServiceAbi, bytecode as L2MessageServiceBytecode, -} from "./shared-artifacts/L2MessageService.json"; +} from "./dynamic-artifacts/L2MessageService.json"; import { abi as ProxyAdminAbi, bytecode as ProxyAdminBytecode } from "./static-artifacts/ProxyAdmin.json"; import { abi as TransparentUpgradeableProxyAbi, @@ -17,22 +17,10 @@ import { L2_MESSAGE_SERVICE_UNPAUSE_TYPES_ROLES, } from "../common/constants"; import { generateRoleAssignments } from "../common/helpers/roles"; +import { deployContractFromArtifacts, getInitializerData } from "../common/helpers/deployments"; dotenv.config(); -async function deployContract( - abi: ethers.Interface | ethers.InterfaceAbi, - bytecode: ethers.BytesLike, - wallet: ethers.ContractRunner, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ...args: ethers.ContractMethodArgs -) { - const factory = new ethers.ContractFactory(abi, bytecode, wallet); - const contract = await factory.deploy(...args); - await contract.waitForDeployment(); - return contract.getAddress(); -} - async function main() { const messageServiceName = process.env.MESSAGE_SERVICE_CONTRACT_NAME; @@ -44,15 +32,17 @@ async function main() { const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider); const walletNonce = await wallet.getNonce(); - // Deploy the implementation contract - const [implementationAddress, proxyAdminAddress] = await Promise.all([ - deployContract(L2MessageServiceAbi, L2MessageServiceBytecode, wallet, { nonce: walletNonce }), - deployContract(ProxyAdminAbi, ProxyAdminBytecode, wallet, { nonce: walletNonce + 1 }), + const [l2MessageServiceImplementation, proxyAdmin] = await Promise.all([ + deployContractFromArtifacts(L2MessageServiceAbi, L2MessageServiceBytecode, wallet, { nonce: walletNonce }), + deployContractFromArtifacts(ProxyAdminAbi, ProxyAdminBytecode, wallet, { nonce: walletNonce + 1 }), ]); - // Deploy the proxy admin contract - console.log(`Proxy admin contract deployed at ${proxyAdminAddress}`); - console.log(`${messageServiceName} Implementation contract deployed at ${implementationAddress}`); + const proxyAdminAddress = await proxyAdmin.getAddress(); + const l2MessageServiceImplementationAddress = await l2MessageServiceImplementation.getAddress(); + + console.log( + `L2 ProxyAdmin deployed: address=${proxyAdminAddress} blockNumber=${(await proxyAdmin.deploymentTransaction()?.wait())?.blockNumber}`, + ); const pauseTypeRoles = getEnvVarOrDefault("L2MSGSERVICE_PAUSE_TYPE_ROLES", L2_MESSAGE_SERVICE_PAUSE_TYPES_ROLES); const unpauseTypeRoles = getEnvVarOrDefault( @@ -66,29 +56,27 @@ async function main() { ); const roleAddresses = getEnvVarOrDefault("L2MSGSERVICE_ROLE_ADDRESSES", defaultRoleAddresses); // Prepare the initializer data - const initializer = new ContractFactory(L2MessageServiceAbi, L2MessageServiceBytecode).interface.encodeFunctionData( - "initialize", - [ - process.env.L2MSGSERVICE_RATE_LIMIT_PERIOD, - process.env.L2MSGSERVICE_RATE_LIMIT_AMOUNT, - process.env.L2MSGSERVICE_SECURITY_COUNCIL, - roleAddresses, - pauseTypeRoles, - unpauseTypeRoles, - ], - ); - - // Deploy the proxy contract + const initializer = getInitializerData(L2MessageServiceAbi, "initialize", [ + process.env.L2MSGSERVICE_RATE_LIMIT_PERIOD, + process.env.L2MSGSERVICE_RATE_LIMIT_AMOUNT, + process.env.L2MSGSERVICE_SECURITY_COUNCIL, + roleAddresses, + pauseTypeRoles, + unpauseTypeRoles, + ]); - const proxyAddress = await deployContract( + const proxyContract = await deployContractFromArtifacts( TransparentUpgradeableProxyAbi, TransparentUpgradeableProxyBytecode, wallet, - implementationAddress, + l2MessageServiceImplementationAddress, proxyAdminAddress, initializer, ); - console.log(`${messageServiceName} Proxy contract deployed at ${proxyAddress}`); + + console.log( + `${messageServiceName} deployed: address=${await proxyContract.getAddress()} blockNumber=${(await proxyContract.deploymentTransaction()?.wait())?.blockNumber}`, + ); } main().catch((error) => { diff --git a/contracts/local-deployments-artifacts/deployPlonkVerifierAndLineaRollupV5.ts b/contracts/local-deployments-artifacts/deployPlonkVerifierAndLineaRollupV5.ts index ae8aeed54..d4d2a7418 100644 --- a/contracts/local-deployments-artifacts/deployPlonkVerifierAndLineaRollupV5.ts +++ b/contracts/local-deployments-artifacts/deployPlonkVerifierAndLineaRollupV5.ts @@ -1,20 +1,22 @@ -import { ContractFactory, ethers } from "ethers"; +import { ethers } from "ethers"; import fs from "fs"; import path from "path"; import * as dotenv from "dotenv"; +import { abi as LineaRollupV5Abi, bytecode as LineaRollupV5Bytecode } from "./dynamic-artifacts/LineaRollupV5.json"; import { abi as ProxyAdminAbi, bytecode as ProxyAdminBytecode } from "./static-artifacts/ProxyAdmin.json"; import { abi as TransparentUpgradeableProxyAbi, bytecode as TransparentUpgradeableProxyBytecode, } from "./static-artifacts/TransparentUpgradeableProxy.json"; import { getRequiredEnvVar } from "../common/helpers/environment"; +import { deployContractFromArtifacts, getInitializerData } from "../common/helpers/deployments"; dotenv.config(); function findContractArtifacts( folderPath: string, contractName: string, -): { abi: ethers.Interface | ethers.InterfaceAbi; bytecode: ethers.BytesLike } { +): { abi: ethers.InterfaceAbi; bytecode: ethers.BytesLike } { const files = fs.readdirSync(folderPath); const foundFile = files.find((file) => file === `${contractName}.json`); @@ -33,19 +35,6 @@ function findContractArtifacts( return parsedContent; } -async function deployContract( - abi: ethers.Interface | ethers.InterfaceAbi, - bytecode: ethers.BytesLike, - wallet: ethers.ContractRunner, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ...args: ethers.ContractMethodArgs -) { - const factory = new ethers.ContractFactory(abi, bytecode, wallet); - const contract = await factory.deploy(...args); - await contract.waitForDeployment(); - return contract.getAddress(); -} - async function main() { const verifierName = getRequiredEnvVar("VERIFIER_CONTRACT_NAME"); const LineaRollup_initialStateRootHash = getRequiredEnvVar("LINEA_ROLLUP_INITIAL_STATE_ROOT_HASH"); @@ -57,28 +46,35 @@ async function main() { const LineaRollup_genesisTimestamp = getRequiredEnvVar("LINEA_ROLLUP_GENESIS_TIMESTAMP"); const lineaRollupName = "LineaRollupV5"; - const verifierArtifacts = findContractArtifacts(path.join(__dirname, "./shared-artifacts"), verifierName); - const lineaRollupArtifacts = findContractArtifacts(path.join(__dirname, "./shared-artifacts"), lineaRollupName); + const verifierArtifacts = findContractArtifacts(path.join(__dirname, "./dynamic-artifacts"), verifierName); const provider = new ethers.JsonRpcProvider(process.env.RPC_URL); const wallet = new ethers.Wallet(process.env.PRIVATE_KEY!, provider); const walletNonce = await wallet.getNonce(); - const [verifierAddress, lineaRollupImplAddress, proxyAdminAddress] = await Promise.all([ - deployContract(verifierArtifacts.abi, verifierArtifacts.bytecode, wallet, { nonce: walletNonce }), - deployContract(lineaRollupArtifacts.abi, lineaRollupArtifacts.bytecode, wallet, { nonce: walletNonce + 1 }), - deployContract(ProxyAdminAbi, ProxyAdminBytecode, wallet, { nonce: walletNonce + 2 }), + const [verifier, lineaRollupImplementation, proxyAdmin] = await Promise.all([ + deployContractFromArtifacts(verifierArtifacts.abi, verifierArtifacts.bytecode, wallet, { nonce: walletNonce }), + deployContractFromArtifacts(LineaRollupV5Abi, LineaRollupV5Bytecode, wallet, { + nonce: walletNonce + 1, + }), + deployContractFromArtifacts(ProxyAdminAbi, ProxyAdminBytecode, wallet, { nonce: walletNonce + 2 }), ]); - console.log(`${verifierName} contract deployed at ${verifierAddress}`); - console.log(`${lineaRollupName} Implementation contract deployed at ${lineaRollupImplAddress}`); - console.log(`Proxy admin contract deployed at ${proxyAdminAddress}`); + const [verifierAddress, proxyAdminAddress, lineaRollupImplementationAddress] = await Promise.all([ + verifier.getAddress(), + proxyAdmin.getAddress(), + lineaRollupImplementation.getAddress(), + ]); - const initializer = new ContractFactory( - lineaRollupArtifacts.abi, - lineaRollupArtifacts.bytecode, - ).interface.encodeFunctionData("initialize", [ + console.log( + `${verifierName} deployed: address=${verifierAddress} blockNumber=${(await verifier.deploymentTransaction()?.wait())?.blockNumber}`, + ); + console.log( + `L1 ProxyAdmin deployed: address=${proxyAdminAddress} blockNumber=${(await proxyAdmin.deploymentTransaction()?.wait())?.blockNumber}`, + ); + + const initializer = getInitializerData(LineaRollupV5Abi, "initialize", [ LineaRollup_initialStateRootHash, LineaRollup_initialL2BlockNumber, verifierAddress, @@ -89,16 +85,18 @@ async function main() { LineaRollup_genesisTimestamp, ]); - const proxyAddress = await deployContract( + const proxyContract = await deployContractFromArtifacts( TransparentUpgradeableProxyAbi, TransparentUpgradeableProxyBytecode, wallet, - lineaRollupImplAddress, + lineaRollupImplementationAddress, proxyAdminAddress, initializer, ); - console.log(`${lineaRollupName} Proxy contract deployed at ${proxyAddress}`); + console.log( + `${lineaRollupName} deployed: address=${await proxyContract.getAddress()} blockNumber=${(await proxyContract.deploymentTransaction()?.wait())?.blockNumber}`, + ); } main().catch((error) => { diff --git a/contracts/local-deployments-artifacts/shared-artifacts/IntegrationTestTrueVerifier.json b/contracts/local-deployments-artifacts/dynamic-artifacts/IntegrationTestTrueVerifier.json similarity index 100% rename from contracts/local-deployments-artifacts/shared-artifacts/IntegrationTestTrueVerifier.json rename to contracts/local-deployments-artifacts/dynamic-artifacts/IntegrationTestTrueVerifier.json diff --git a/contracts/local-deployments-artifacts/shared-artifacts/L2MessageService.json b/contracts/local-deployments-artifacts/dynamic-artifacts/L2MessageService.json similarity index 100% rename from contracts/local-deployments-artifacts/shared-artifacts/L2MessageService.json rename to contracts/local-deployments-artifacts/dynamic-artifacts/L2MessageService.json diff --git a/contracts/local-deployments-artifacts/shared-artifacts/LineaRollupV5.json b/contracts/local-deployments-artifacts/dynamic-artifacts/LineaRollupV5.json similarity index 100% rename from contracts/local-deployments-artifacts/shared-artifacts/LineaRollupV5.json rename to contracts/local-deployments-artifacts/dynamic-artifacts/LineaRollupV5.json diff --git a/e2e/src/abi/DummyContract.json b/contracts/local-deployments-artifacts/static-artifacts/DummyContract.json similarity index 100% rename from e2e/src/abi/DummyContract.json rename to contracts/local-deployments-artifacts/static-artifacts/DummyContract.json diff --git a/e2e/src/abi/L2TestContract.json b/contracts/local-deployments-artifacts/static-artifacts/L2TestContract.json similarity index 100% rename from e2e/src/abi/L2TestContract.json rename to contracts/local-deployments-artifacts/static-artifacts/L2TestContract.json diff --git a/e2e/src/abi/TestContract.json b/contracts/local-deployments-artifacts/static-artifacts/TestContract.json similarity index 100% rename from e2e/src/abi/TestContract.json rename to contracts/local-deployments-artifacts/static-artifacts/TestContract.json diff --git a/docker/compose.yml b/docker/compose.yml index 5900ac1f8..fb6fef1af 100644 --- a/docker/compose.yml +++ b/docker/compose.yml @@ -485,21 +485,16 @@ services: build: context: ./config/l1-node/ profiles: [ "l1", "debug", "external-to-monorepo" ] - entrypoint: - - /bin/sh - - -c - - | - /config/generate-genesis.sh \ - --genesis-time ${L1_GENESIS_TIME} \ - --l1-genesis /config/l1-genesis.json \ - --network-config /config/network-config.yml \ - --mnemonics /config/mnemonics.yaml \ - --output-dir /data/l1-node-config + command: + --genesis-time ${L1_GENESIS_TIME} + --l1-genesis /config/l1-genesis.json + --network-config /config/network-config.yml + --mnemonics /config/mnemonics.yaml + --output-dir /data/l1-node-config volumes: - ./config/l1-node/cl/network-config.yml:/config/network-config.yml:ro - ./config/l1-node/cl/mnemonics.yaml:/config/mnemonics.yaml:ro - ./config/l1-node/el/genesis.json:/config/l1-genesis.json - - ./config/l1-node/generate-genesis.sh:/config/generate-genesis.sh - local-dev:/data l1-blockscout: diff --git a/docker/config/l1-node/Dockerfile b/docker/config/l1-node/Dockerfile index b97e3c518..0db6753fa 100644 --- a/docker/config/l1-node/Dockerfile +++ b/docker/config/l1-node/Dockerfile @@ -1,12 +1,21 @@ -FROM golang:1.22-alpine as builder +FROM golang:1.23-alpine AS builder RUN apk add --no-cache git && git clone https://github.com/protolambda/eth2-testnet-genesis.git \ && cd eth2-testnet-genesis \ - && git checkout 4b3498476f14b872b43080eee319adea45286daf \ && go install . -FROM alpine:3.19.1 +WORKDIR /usr/src/app + +COPY ./generate-genesis.sh . + +FROM alpine:3.20.3 RUN apk add --no-cache bash +WORKDIR /usr/src/app + +COPY --from=builder /usr/src/app/generate-genesis.sh . COPY --from=builder /go/bin/eth2-testnet-genesis /usr/local/bin/ + +ENTRYPOINT ["/bin/sh", "/usr/src/app/generate-genesis.sh"] + diff --git a/e2e/package.json b/e2e/package.json index f3ccdd3e6..14249d1da 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -11,7 +11,7 @@ "test:e2e:local": "TEST_ENV=local npx jest", "test:e2e:dev": "TEST_ENV=dev npx jest --config ./jest.testnet.config.ts --bail --runInBand --testPathIgnorePatterns=restart.spec.ts", "test:e2e:sepolia": "TEST_ENV=sepolia npx jest --config ./jest.testnet.config.ts --bail --runInBand --testPathIgnorePatterns=restart.spec.ts", - "postinstall": "typechain --target ethers-v6 --out-dir ./src/typechain './src/abi/*.json'", + "postinstall": "typechain --target ethers-v6 --out-dir ./src/typechain '../contracts/local-deployments-artifacts/**/*.json'", "lint:fix": "pnpm run lint:ts:fix && pnpm run prettier:fix", "clean": "rimraf node_modules src/typechain" }, diff --git a/e2e/src/abi/L2MessageService.json b/e2e/src/abi/L2MessageService.json deleted file mode 100644 index 11bbeacd8..000000000 --- a/e2e/src/abi/L2MessageService.json +++ /dev/null @@ -1,1107 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "FeePaymentFailed", - "type": "error" - }, - { - "inputs": [], - "name": "FeeTooLow", - "type": "error" - }, - { - "inputs": [], - "name": "FinalRollingHashIsZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "IsNotPaused", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "IsPaused", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "found", - "type": "uint256" - } - ], - "name": "L1MessageNumberSynchronizationWrong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "found", - "type": "bytes32" - } - ], - "name": "L1RollingHashSynchronizationWrong", - "type": "error" - }, - { - "inputs": [], - "name": "LimitIsZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDoesNotExistOrHasAlreadyBeenClaimed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "MessageHashesListLengthHigherThanOneHundred", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "name": "MessageSendingFailed", - "type": "error" - }, - { - "inputs": [], - "name": "PeriodIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimitExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ServiceHasMigratedToRollingHashes", - "type": "error" - }, - { - "inputs": [], - "name": "ValueSentTooLow", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "resettingAddress", - "type": "address" - } - ], - "name": "AmountUsedInPeriodReset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "L1L2MessageHashesAddedToInbox", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "amountChangeBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "amountUsedLoweredToLimit", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "usedAmountResetToZero", - "type": "bool" - } - ], - "name": "LimitAmountChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "_messageHash", - "type": "bytes32" - } - ], - "name": "MessageClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_messageHash", - "type": "bytes32" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previousMinimumFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimumFee", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "calledBy", - "type": "address" - } - ], - "name": "MinimumFeeChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageSender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "periodInSeconds", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "limitInWei", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentPeriodEnd", - "type": "uint256" - } - ], - "name": "RateLimitInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "name": "RollingHashUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "version", - "type": "uint256" - } - ], - "name": "ServiceVersionMigrated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageSender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "UnPaused", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENERAL_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_CLAIMED", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_RECEIVED", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_UNKNOWN", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L1_L2_MESSAGE_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L1_L2_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_L1_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINIMUM_FEE_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PAUSE_MANAGER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVING_SYSTEM_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RATE_LIMIT_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_messageHashes", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "_startingMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_finalMessageNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_finalRollingHash", - "type": "bytes32" - } - ], - "name": "anchorL1L2MessageHashes", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_feeRecipient", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "currentPeriodAmountInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentPeriodEnd", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "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": "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": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "inboxL1L2MessageStatus", - "outputs": [ - { - "internalType": "uint256", - "name": "messageStatus", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_securityCouncil", - "type": "address" - }, - { - "internalType": "address", - "name": "_l1l2MessageSetter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_rateLimitPeriod", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rateLimitAmount", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "isPaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - } - ], - "name": "l1RollingHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastAnchoredL1MessageNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "limitInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minimumFeeInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nextMessageNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "pauseByType", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "pauseType", - "type": "bytes32" - } - ], - "name": "pauseTypeStatuses", - "outputs": [ - { - "internalType": "bool", - "name": "pauseStatus", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "periodInSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "resetAmountUsedInPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "resetRateLimitAmount", - "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": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "sender", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_feeInWei", - "type": "uint256" - } - ], - "name": "setMinimumFee", - "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": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "unPauseByType", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6127f480620000f36000396000f3fe6080604052600436106102a05760003560e01c806391d148541161016e578063bc61e733116100cb578063cc5782f61161007f578063d84f91e811610064578063d84f91e81461074e578063e196fb5d14610782578063eb990c59146107a257600080fd5b8063cc5782f6146106fe578063d547741f1461072e57600080fd5b8063bf3e7505116100b0578063bf3e75051461069e578063c0729ab1146106d2578063c1dc0f07146106e857600080fd5b8063bc61e7331461063b578063bcbd6fcd1461066a57600080fd5b8063abd6230d11610122578063aea4f74511610107578063aea4f745146105fa578063b4a5a4b71461060f578063b837dbe91461062457600080fd5b8063abd6230d146105cf578063ad422ff0146105e457600080fd5b80639340a1d1116101535780639340a1d1146105905780639f3ce55a146105a7578063a217fddf146105ba57600080fd5b806391d148541461053d57806391f7b9011461033757600080fd5b806348922ab71161021c5780636a637967116101d05780637d1e8c55116101b55780637d1e8c55146104e35780637fe335d3146104f8578063899458831461052657600080fd5b80636a6379671461040e57806374377a34146104af57600080fd5b8063557eac7311610201578063557eac7314610443578063587944561461046357806367e404ce1461047957600080fd5b806348922ab71461040e578063491e09361461042357600080fd5b8063182a7506116102735780632f2ff15d116102585780632f2ff15d146103ae57806336568abe146103ce5780633c362146146103ee57600080fd5b8063182a75061461035e578063248a9ca31461037e57600080fd5b806301ffc9a7146102a55780630f6893ca146102da5780631065a3991461031557806311314d0f14610337575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612180565b6107c2565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506103076102f53660046121c2565b60b06020526000908152604090205481565b6040519081526020016102d1565b34801561032157600080fd5b506103356103303660046121db565b61085b565b005b34801561034357600080fd5b5061034c600281565b60405160ff90911681526020016102d1565b34801561036a57600080fd5b506103356103793660046121c2565b610933565b34801561038a57600080fd5b506103076103993660046121c2565b60009081526065602052604090206001015490565b3480156103ba57600080fd5b506103356103c9366004612220565b6109a6565b3480156103da57600080fd5b506103356103e9366004612220565b6109d0565b3480156103fa57600080fd5b50610335610409366004612250565b610a83565b34801561041a57600080fd5b5061034c600181565b34801561042f57600080fd5b5061033561043e366004612324565b610d45565b34801561044f57600080fd5b5061033561045e3660046121c2565b611072565b34801561046f57600080fd5b5061030760995481565b34801561048557600080fd5b506101155460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d1565b3480156104bb57600080fd5b506103077f4705265620026983c754c5288b65446d794a03174326ec6d7c0b5c7f1fd6741581565b3480156104ef57600080fd5b5061034c600081565b34801561050457600080fd5b506103076105133660046121c2565b6101196020526000908152604090205481565b34801561053257600080fd5b506103076101175481565b34801561054957600080fd5b506102c5610558366004612220565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561059c57600080fd5b506103076101185481565b6103356105b53660046123ba565b61113a565b3480156105c657600080fd5b50610307600081565b3480156105db57600080fd5b5061034c600381565b3480156105f057600080fd5b5061030760985481565b34801561060657600080fd5b50610335611385565b34801561061b57600080fd5b5061034c600481565b34801561063057600080fd5b506103076101165481565b34801561064757600080fd5b506102c56106563660046121db565b60a654600160ff9092169190911b16151590565b34801561067657600080fd5b506103077fcc6ce8bb749b4b07d2f635ce95747506096d0737f9abf10cc8f4a14384603ba281565b3480156106aa57600080fd5b506103077f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8281565b3480156106de57600080fd5b50610307609a5481565b3480156106f457600080fd5b5061030760975481565b34801561070a57600080fd5b506102c56107193660046121c2565b60a56020526000908152604090205460ff1681565b34801561073a57600080fd5b50610335610749366004612220565b6113e1565b34801561075a57600080fd5b506103077f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2681565b34801561078e57600080fd5b5061033561079d3660046121db565b611406565b3480156107ae57600080fd5b506103356107bd366004612416565b6114b1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061085557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26610885816117c2565b60a654600160ff84161b166108d0576040517fb015579f00000000000000000000000000000000000000000000000000000000815260ff831660048201526024015b60405180910390fd5b60a68054600160ff851690811b199091169091557fef04ba2036ccaeab3a59717b51d2b9146b0b0904077177f1148a5418bf1eae23335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25050565b7fcc6ce8bb749b4b07d2f635ce95747506096d0737f9abf10cc8f4a14384603ba261095d816117c2565b610117805490839055604080518281526020810185905233917f6d8040017e56a6d91bb242def14af5d7eae1eaff7475e45c678dac5d49d35498910160405180910390a2505050565b6000828152606560205260409020600101546109c1816117c2565b6109cb83836117cf565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108c7565b610a7f82826118c3565b5050565b6001610a8e8161197e565b7f4705265620026983c754c5288b65446d794a03174326ec6d7c0b5c7f1fd67415610ab8816117c2565b856064811115610af7576040517f3b174434000000000000000000000000000000000000000000000000000000008152600481018290526024016108c7565b6000849003610b32576040517f36a4bb9400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101185480610b4260018961248b565b14610b8f57610b5260018861248b565b6040517fd39e75f90000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016108c7565b6000818152610119602052604081205490805b84811015610c27578b8b82818110610bbc57610bbc61249e565b905060200201359150600060ff1660b060008481526020019081526020016000205403610c1757600082815260b06020526040902060019055610c09838360009182526020526040902090565b9250610c14846124cd565b93505b610c20816124cd565b9050610ba2565b50878314610c6b576040517fd39e75f900000000000000000000000000000000000000000000000000000000815260048101899052602481018490526044016108c7565b818714610cae576040517f7557a60a00000000000000000000000000000000000000000000000000000000815260048101889052602481018390526044016108c7565b610118548314610d38576101188390556000838152610119602052604090819020839055517f9995fb3da0c2de4012f2b814b6fc29ce7507571dcb20b8d0bd38621a842df1eb90610d02908d908d90612505565b60405180910390a1604051829084907f99b65a4301b38c09fb6a5f27052d73e8372bbe8f6779d678bfe8a41b66cce7ac90600090a35b5050505050505050505050565b610d4d6119c5565b858784848760005a9050610d616002611a38565b60008e8e8e8e8b8e8e604051602001610d8097969594939291906125a0565b604051602081830303815290604052805190602001209050610da181611abe565b8e61011560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808f73ffffffffffffffffffffffffffffffffffffffff168e8d8d604051610e0e9291906125f9565b60006040518083038185875af1925050503d8060008114610e4b576040519150601f19603f3d011682016040523d82523d6000602084013e610e50565b606091505b509150915081610eba57805115610e6a5780518082602001fd5b8f6040517f546134430000000000000000000000000000000000000000000000000000000081526004016108c7919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b61011580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd1517905560405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e90600090a250508615905061105857856000849003610fa457853b158015610fa2573a5a610f3f61ae3486612609565b610f49919061248b565b610f53919061261c565b915081881115610f9e5773ffffffffffffffffffffffffffffffffffffffff87166108fc610f81848b61248b565b6040518115909202916000818181858888f1935050505050610fa2565b8791505b505b600073ffffffffffffffffffffffffffffffffffffffff841615610fc85783610fca565b335b905060008173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050905080611054576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108c7565b5050505b505050505050611068600160b155565b5050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8261109c816117c2565b60008060004260995410156110c3576097546110b89042612609565b6099555060016110d5565b609a548510156110d557849250600191505b609885905580806110e35750815b156110ee57609a8390555b60408051868152831515602082015282151581830152905133917fbc3dc0cb5c15c51c81316450d44048838bb478b9809447d01c766a06f3e9f2c8919081900360600190a25050505050565b6111446003611a38565b73ffffffffffffffffffffffffffffffffffffffff8416611191576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b348311156111cb576040517fb03b693200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101175480841015611209576040517f732f941300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611216838761248b565b9150611222863461248b565b61011680549192506000919082611238836124cd565b90915550905061125061124b8484612609565b611b1d565b600033898585858b8b60405160200161126f97969594939291906125a0565b604051602081830303815290604052805190602001209050808973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe856c2b8bd4eb0027ce32eeaf595c21b0b6b4644b326e5b7bd80a1cf8db72e6c8787878d8d6040516112ed959493929190612633565b60405180910390a4604051600090419087908381818185875af1925050503d8060008114611337576040519150601f19603f3d011682016040523d82523d6000602084013e61133c565b606091505b5050905080611379576040517fa57c4df40000000000000000000000000000000000000000000000000000000081524160048201526024016108c7565b50505050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d826113af816117c2565b6000609a81905560405133917fba88c025b0cbb77022c0c487beef24f759f1e4be2f51a205bc427cee19c2eaa691a250565b6000828152606560205260409020600101546113fc816117c2565b6109cb83836118c3565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26611430816117c2565b60a654600160ff84161b1615611477576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff831660048201526024016108c7565b60a68054600160ff851690811b9091179091557fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d33610907565b600054610100900460ff16158080156114d15750600054600160ff909116105b806114eb5750303b1580156114eb575060005460ff166001145b611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108c7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156115d557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8516611622576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841661166f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611677611b93565b61167f611b93565b611687611b93565b6116918383611c2c565b61169a84611d9c565b6001610116556116ab6000866117cf565b6116d57fcc6ce8bb749b4b07d2f635ce95747506096d0737f9abf10cc8f4a14384603ba2866117cf565b6116ff7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82866117cf565b6117297f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26866117cf565b61011580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd1517905580156117bb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6117cc8133611e5d565b50565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a7f57600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118653390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610a7f57600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60a654600160ff83161b16156117cc576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff821660048201526024016108c7565b600260b15403611a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108c7565b600260b155565b60a654600160ff83161b811615611a80576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff831660048201526024016108c7565b6002811615610a7f576040517fdb246dde000000000000000000000000000000000000000000000000000000008152600160048201526024016108c7565b600081815260b06020526040902054600114611b09576040517f992d87c3000000000000000000000000000000000000000000000000000000008152600481018290526024016108c7565b600090815260b06020526040902060029055565b6000426099541015611b4057609754611b369042612609565b6099555080611b51565b81609a54611b4e9190612609565b90505b609854811115611b8d576040517fa74c1c5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609a5550565b600054610100900460ff16611c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c7565b565b600054610100900460ff16611cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c7565b81600003611cfd576040517fb5ed5a3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611d37576040517fd10d72bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60978290556098819055611d4b8242612609565b60998190556097546098546040805192835260208301919091528101919091527f8f805c372b66240792580418b7328c0c554ae235f0932475c51b026887fe26a99060600160405180910390a15050565b600054610100900460ff16611e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c7565b6117cc7f4705265620026983c754c5288b65446d794a03174326ec6d7c0b5c7f1fd67415826117cf565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a7f57611e9d81611f17565b611ea8836020611f36565b604051602001611eb9929190612688565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108c791600401612709565b606061085573ffffffffffffffffffffffffffffffffffffffff831660145b60606000611f4583600261261c565b611f50906002612609565b67ffffffffffffffff811115611f6857611f6861275a565b6040519080825280601f01601f191660200182016040528015611f92576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611fc957611fc961249e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061202c5761202c61249e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061206884600261261c565b612073906001612609565b90505b6001811115612110577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106120b4576120b461249e565b1a60f81b8282815181106120ca576120ca61249e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361210981612789565b9050612076565b508315612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108c7565b9392505050565b60006020828403121561219257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217957600080fd5b6000602082840312156121d457600080fd5b5035919050565b6000602082840312156121ed57600080fd5b813560ff8116811461217957600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146117cc57600080fd5b6000806040838503121561223357600080fd5b823591506020830135612245816121fe565b809150509250929050565b60008060008060006080868803121561226857600080fd5b853567ffffffffffffffff8082111561228057600080fd5b818801915088601f83011261229457600080fd5b8135818111156122a357600080fd5b8960208260051b85010111156122b857600080fd5b60209283019a909950918801359760408101359750606001359550909350505050565b60008083601f8401126122ed57600080fd5b50813567ffffffffffffffff81111561230557600080fd5b60208301915083602082850101111561231d57600080fd5b9250929050565b60008060008060008060008060e0898b03121561234057600080fd5b883561234b816121fe565b9750602089013561235b816121fe565b965060408901359550606089013594506080890135612379816121fe565b935060a089013567ffffffffffffffff81111561239557600080fd5b6123a18b828c016122db565b999c989b50969995989497949560c00135949350505050565b600080600080606085870312156123d057600080fd5b84356123db816121fe565b935060208501359250604085013567ffffffffffffffff8111156123fe57600080fd5b61240a878288016122db565b95989497509550505050565b6000806000806080858703121561242c57600080fd5b8435612437816121fe565b93506020850135612447816121fe565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156108555761085561245c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124fe576124fe61245c565b5060010190565b6020815281602082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561253e57600080fd5b8260051b80856040850137919091016040019392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808a16835280891660208401525086604083015285606083015284608083015260c060a08301526125ec60c083018486612557565b9998505050505050505050565b8183823760009101908152919050565b808201808211156108555761085561245c565b80820281158282048414176108555761085561245c565b858152846020820152836040820152608060608201526000612659608083018486612557565b979650505050505050565b60005b8381101561267f578181015183820152602001612667565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516126c0816017850160208801612664565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516126fd816028840160208801612664565b01602801949350505050565b6020815260008251806020840152612728816040850160208701612664565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000816127985761279861245c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122017cf86a9c68413ebd5a3989438a1b8e0790020c1619afa2937bc73ce4abda97964736f6c63430008130033", - "deployedBytecode": "0x6080604052600436106102a05760003560e01c806391d148541161016e578063bc61e733116100cb578063cc5782f61161007f578063d84f91e811610064578063d84f91e81461074e578063e196fb5d14610782578063eb990c59146107a257600080fd5b8063cc5782f6146106fe578063d547741f1461072e57600080fd5b8063bf3e7505116100b0578063bf3e75051461069e578063c0729ab1146106d2578063c1dc0f07146106e857600080fd5b8063bc61e7331461063b578063bcbd6fcd1461066a57600080fd5b8063abd6230d11610122578063aea4f74511610107578063aea4f745146105fa578063b4a5a4b71461060f578063b837dbe91461062457600080fd5b8063abd6230d146105cf578063ad422ff0146105e457600080fd5b80639340a1d1116101535780639340a1d1146105905780639f3ce55a146105a7578063a217fddf146105ba57600080fd5b806391d148541461053d57806391f7b9011461033757600080fd5b806348922ab71161021c5780636a637967116101d05780637d1e8c55116101b55780637d1e8c55146104e35780637fe335d3146104f8578063899458831461052657600080fd5b80636a6379671461040e57806374377a34146104af57600080fd5b8063557eac7311610201578063557eac7314610443578063587944561461046357806367e404ce1461047957600080fd5b806348922ab71461040e578063491e09361461042357600080fd5b8063182a7506116102735780632f2ff15d116102585780632f2ff15d146103ae57806336568abe146103ce5780633c362146146103ee57600080fd5b8063182a75061461035e578063248a9ca31461037e57600080fd5b806301ffc9a7146102a55780630f6893ca146102da5780631065a3991461031557806311314d0f14610337575b600080fd5b3480156102b157600080fd5b506102c56102c0366004612180565b6107c2565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506103076102f53660046121c2565b60b06020526000908152604090205481565b6040519081526020016102d1565b34801561032157600080fd5b506103356103303660046121db565b61085b565b005b34801561034357600080fd5b5061034c600281565b60405160ff90911681526020016102d1565b34801561036a57600080fd5b506103356103793660046121c2565b610933565b34801561038a57600080fd5b506103076103993660046121c2565b60009081526065602052604090206001015490565b3480156103ba57600080fd5b506103356103c9366004612220565b6109a6565b3480156103da57600080fd5b506103356103e9366004612220565b6109d0565b3480156103fa57600080fd5b50610335610409366004612250565b610a83565b34801561041a57600080fd5b5061034c600181565b34801561042f57600080fd5b5061033561043e366004612324565b610d45565b34801561044f57600080fd5b5061033561045e3660046121c2565b611072565b34801561046f57600080fd5b5061030760995481565b34801561048557600080fd5b506101155460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d1565b3480156104bb57600080fd5b506103077f4705265620026983c754c5288b65446d794a03174326ec6d7c0b5c7f1fd6741581565b3480156104ef57600080fd5b5061034c600081565b34801561050457600080fd5b506103076105133660046121c2565b6101196020526000908152604090205481565b34801561053257600080fd5b506103076101175481565b34801561054957600080fd5b506102c5610558366004612220565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561059c57600080fd5b506103076101185481565b6103356105b53660046123ba565b61113a565b3480156105c657600080fd5b50610307600081565b3480156105db57600080fd5b5061034c600381565b3480156105f057600080fd5b5061030760985481565b34801561060657600080fd5b50610335611385565b34801561061b57600080fd5b5061034c600481565b34801561063057600080fd5b506103076101165481565b34801561064757600080fd5b506102c56106563660046121db565b60a654600160ff9092169190911b16151590565b34801561067657600080fd5b506103077fcc6ce8bb749b4b07d2f635ce95747506096d0737f9abf10cc8f4a14384603ba281565b3480156106aa57600080fd5b506103077f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8281565b3480156106de57600080fd5b50610307609a5481565b3480156106f457600080fd5b5061030760975481565b34801561070a57600080fd5b506102c56107193660046121c2565b60a56020526000908152604090205460ff1681565b34801561073a57600080fd5b50610335610749366004612220565b6113e1565b34801561075a57600080fd5b506103077f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2681565b34801561078e57600080fd5b5061033561079d3660046121db565b611406565b3480156107ae57600080fd5b506103356107bd366004612416565b6114b1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061085557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26610885816117c2565b60a654600160ff84161b166108d0576040517fb015579f00000000000000000000000000000000000000000000000000000000815260ff831660048201526024015b60405180910390fd5b60a68054600160ff851690811b199091169091557fef04ba2036ccaeab3a59717b51d2b9146b0b0904077177f1148a5418bf1eae23335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25050565b7fcc6ce8bb749b4b07d2f635ce95747506096d0737f9abf10cc8f4a14384603ba261095d816117c2565b610117805490839055604080518281526020810185905233917f6d8040017e56a6d91bb242def14af5d7eae1eaff7475e45c678dac5d49d35498910160405180910390a2505050565b6000828152606560205260409020600101546109c1816117c2565b6109cb83836117cf565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108c7565b610a7f82826118c3565b5050565b6001610a8e8161197e565b7f4705265620026983c754c5288b65446d794a03174326ec6d7c0b5c7f1fd67415610ab8816117c2565b856064811115610af7576040517f3b174434000000000000000000000000000000000000000000000000000000008152600481018290526024016108c7565b6000849003610b32576040517f36a4bb9400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101185480610b4260018961248b565b14610b8f57610b5260018861248b565b6040517fd39e75f90000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016108c7565b6000818152610119602052604081205490805b84811015610c27578b8b82818110610bbc57610bbc61249e565b905060200201359150600060ff1660b060008481526020019081526020016000205403610c1757600082815260b06020526040902060019055610c09838360009182526020526040902090565b9250610c14846124cd565b93505b610c20816124cd565b9050610ba2565b50878314610c6b576040517fd39e75f900000000000000000000000000000000000000000000000000000000815260048101899052602481018490526044016108c7565b818714610cae576040517f7557a60a00000000000000000000000000000000000000000000000000000000815260048101889052602481018390526044016108c7565b610118548314610d38576101188390556000838152610119602052604090819020839055517f9995fb3da0c2de4012f2b814b6fc29ce7507571dcb20b8d0bd38621a842df1eb90610d02908d908d90612505565b60405180910390a1604051829084907f99b65a4301b38c09fb6a5f27052d73e8372bbe8f6779d678bfe8a41b66cce7ac90600090a35b5050505050505050505050565b610d4d6119c5565b858784848760005a9050610d616002611a38565b60008e8e8e8e8b8e8e604051602001610d8097969594939291906125a0565b604051602081830303815290604052805190602001209050610da181611abe565b8e61011560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808f73ffffffffffffffffffffffffffffffffffffffff168e8d8d604051610e0e9291906125f9565b60006040518083038185875af1925050503d8060008114610e4b576040519150601f19603f3d011682016040523d82523d6000602084013e610e50565b606091505b509150915081610eba57805115610e6a5780518082602001fd5b8f6040517f546134430000000000000000000000000000000000000000000000000000000081526004016108c7919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b61011580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd1517905560405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e90600090a250508615905061105857856000849003610fa457853b158015610fa2573a5a610f3f61ae3486612609565b610f49919061248b565b610f53919061261c565b915081881115610f9e5773ffffffffffffffffffffffffffffffffffffffff87166108fc610f81848b61248b565b6040518115909202916000818181858888f1935050505050610fa2565b8791505b505b600073ffffffffffffffffffffffffffffffffffffffff841615610fc85783610fca565b335b905060008173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050905080611054576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108c7565b5050505b505050505050611068600160b155565b5050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8261109c816117c2565b60008060004260995410156110c3576097546110b89042612609565b6099555060016110d5565b609a548510156110d557849250600191505b609885905580806110e35750815b156110ee57609a8390555b60408051868152831515602082015282151581830152905133917fbc3dc0cb5c15c51c81316450d44048838bb478b9809447d01c766a06f3e9f2c8919081900360600190a25050505050565b6111446003611a38565b73ffffffffffffffffffffffffffffffffffffffff8416611191576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b348311156111cb576040517fb03b693200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101175480841015611209576040517f732f941300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611216838761248b565b9150611222863461248b565b61011680549192506000919082611238836124cd565b90915550905061125061124b8484612609565b611b1d565b600033898585858b8b60405160200161126f97969594939291906125a0565b604051602081830303815290604052805190602001209050808973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe856c2b8bd4eb0027ce32eeaf595c21b0b6b4644b326e5b7bd80a1cf8db72e6c8787878d8d6040516112ed959493929190612633565b60405180910390a4604051600090419087908381818185875af1925050503d8060008114611337576040519150601f19603f3d011682016040523d82523d6000602084013e61133c565b606091505b5050905080611379576040517fa57c4df40000000000000000000000000000000000000000000000000000000081524160048201526024016108c7565b50505050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d826113af816117c2565b6000609a81905560405133917fba88c025b0cbb77022c0c487beef24f759f1e4be2f51a205bc427cee19c2eaa691a250565b6000828152606560205260409020600101546113fc816117c2565b6109cb83836118c3565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26611430816117c2565b60a654600160ff84161b1615611477576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff831660048201526024016108c7565b60a68054600160ff851690811b9091179091557fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d33610907565b600054610100900460ff16158080156114d15750600054600160ff909116105b806114eb5750303b1580156114eb575060005460ff166001145b611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016108c7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156115d557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8516611622576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841661166f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611677611b93565b61167f611b93565b611687611b93565b6116918383611c2c565b61169a84611d9c565b6001610116556116ab6000866117cf565b6116d57fcc6ce8bb749b4b07d2f635ce95747506096d0737f9abf10cc8f4a14384603ba2866117cf565b6116ff7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82866117cf565b6117297f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26866117cf565b61011580547fffffffffffffffffffffffff00000000000000000000000000000000000000001663075bcd1517905580156117bb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6117cc8133611e5d565b50565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a7f57600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556118653390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610a7f57600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60a654600160ff83161b16156117cc576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff821660048201526024016108c7565b600260b15403611a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108c7565b600260b155565b60a654600160ff83161b811615611a80576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff831660048201526024016108c7565b6002811615610a7f576040517fdb246dde000000000000000000000000000000000000000000000000000000008152600160048201526024016108c7565b600081815260b06020526040902054600114611b09576040517f992d87c3000000000000000000000000000000000000000000000000000000008152600481018290526024016108c7565b600090815260b06020526040902060029055565b6000426099541015611b4057609754611b369042612609565b6099555080611b51565b81609a54611b4e9190612609565b90505b609854811115611b8d576040517fa74c1c5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609a5550565b600054610100900460ff16611c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c7565b565b600054610100900460ff16611cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c7565b81600003611cfd576040517fb5ed5a3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611d37576040517fd10d72bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60978290556098819055611d4b8242612609565b60998190556097546098546040805192835260208301919091528101919091527f8f805c372b66240792580418b7328c0c554ae235f0932475c51b026887fe26a99060600160405180910390a15050565b600054610100900460ff16611e33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108c7565b6117cc7f4705265620026983c754c5288b65446d794a03174326ec6d7c0b5c7f1fd67415826117cf565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610a7f57611e9d81611f17565b611ea8836020611f36565b604051602001611eb9929190612688565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526108c791600401612709565b606061085573ffffffffffffffffffffffffffffffffffffffff831660145b60606000611f4583600261261c565b611f50906002612609565b67ffffffffffffffff811115611f6857611f6861275a565b6040519080825280601f01601f191660200182016040528015611f92576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611fc957611fc961249e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061202c5761202c61249e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061206884600261261c565b612073906001612609565b90505b6001811115612110577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106120b4576120b461249e565b1a60f81b8282815181106120ca576120ca61249e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361210981612789565b9050612076565b508315612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108c7565b9392505050565b60006020828403121561219257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461217957600080fd5b6000602082840312156121d457600080fd5b5035919050565b6000602082840312156121ed57600080fd5b813560ff8116811461217957600080fd5b73ffffffffffffffffffffffffffffffffffffffff811681146117cc57600080fd5b6000806040838503121561223357600080fd5b823591506020830135612245816121fe565b809150509250929050565b60008060008060006080868803121561226857600080fd5b853567ffffffffffffffff8082111561228057600080fd5b818801915088601f83011261229457600080fd5b8135818111156122a357600080fd5b8960208260051b85010111156122b857600080fd5b60209283019a909950918801359760408101359750606001359550909350505050565b60008083601f8401126122ed57600080fd5b50813567ffffffffffffffff81111561230557600080fd5b60208301915083602082850101111561231d57600080fd5b9250929050565b60008060008060008060008060e0898b03121561234057600080fd5b883561234b816121fe565b9750602089013561235b816121fe565b965060408901359550606089013594506080890135612379816121fe565b935060a089013567ffffffffffffffff81111561239557600080fd5b6123a18b828c016122db565b999c989b50969995989497949560c00135949350505050565b600080600080606085870312156123d057600080fd5b84356123db816121fe565b935060208501359250604085013567ffffffffffffffff8111156123fe57600080fd5b61240a878288016122db565b95989497509550505050565b6000806000806080858703121561242c57600080fd5b8435612437816121fe565b93506020850135612447816121fe565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156108555761085561245c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124fe576124fe61245c565b5060010190565b6020815281602082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561253e57600080fd5b8260051b80856040850137919091016040019392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808a16835280891660208401525086604083015285606083015284608083015260c060a08301526125ec60c083018486612557565b9998505050505050505050565b8183823760009101908152919050565b808201808211156108555761085561245c565b80820281158282048414176108555761085561245c565b858152846020820152836040820152608060608201526000612659608083018486612557565b979650505050505050565b60005b8381101561267f578181015183820152602001612667565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516126c0816017850160208801612664565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516126fd816028840160208801612664565b01602801949350505050565b6020815260008251806020840152612728816040850160208701612664565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000816127985761279861245c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea264697066735822122017cf86a9c68413ebd5a3989438a1b8e0790020c1619afa2937bc73ce4abda97964736f6c63430008130033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/e2e/src/abi/LineaRollup.json b/e2e/src/abi/LineaRollup.json deleted file mode 100644 index 5cd05a244..000000000 --- a/e2e/src/abi/LineaRollup.json +++ /dev/null @@ -1,2356 +0,0 @@ -{ - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "BlobSubmissionDataIsMissing", - "type": "error" - }, - { - "inputs": [], - "name": "BytesLengthNotMultipleOf32", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "bytesLength", - "type": "uint256" - } - ], - "name": "BytesLengthNotMultipleOfTwo", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "currentDataHash", - "type": "bytes32" - } - ], - "name": "DataAlreadySubmitted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "DataStartingBlockDoesNotMatch", - "type": "error" - }, - { - "inputs": [], - "name": "EmptyBlobData", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "EmptyBlobDataAtIndex", - "type": "error" - }, - { - "inputs": [], - "name": "EmptySubmissionData", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "FeePaymentFailed", - "type": "error" - }, - { - "inputs": [], - "name": "FeeTooLow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "FinalBlockDoesNotMatchShnarfFinalBlock", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "finalBlockNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastFinalizedBlock", - "type": "uint256" - } - ], - "name": "FinalBlockNumberLessThanOrEqualToLastFinalizedBlock", - "type": "error" - }, - { - "inputs": [], - "name": "FinalBlockStateEqualsZeroHash", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "value", - "type": "bytes32" - } - ], - "name": "FinalShnarfWrong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2BlockTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentBlockTimestamp", - "type": "uint256" - } - ], - "name": "FinalizationInTheFuture", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "value", - "type": "bytes32" - } - ], - "name": "FinalizationStateIncorrect", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "firstBlockNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockNumber", - "type": "uint256" - } - ], - "name": "FirstBlockGreaterThanFinalBlock", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "firstBlockNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastFinalizedBlock", - "type": "uint256" - } - ], - "name": "FirstBlockLessThanOrEqualToLastFinalizedBlock", - "type": "error" - }, - { - "inputs": [], - "name": "FirstByteIsNotZero", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidMerkleProof", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidProof", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidProofType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "IsNotPaused", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "IsPaused", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "name": "L1RollingHashDoesNotExistOnL1", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - } - ], - "name": "L2MerkleRootAlreadyAnchored", - "type": "error" - }, - { - "inputs": [], - "name": "L2MerkleRootDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "actual", - "type": "bytes32" - } - ], - "name": "LastFinalizedShnarfWrong", - "type": "error" - }, - { - "inputs": [], - "name": "LimitIsZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageIndex", - "type": "uint256" - } - ], - "name": "MessageAlreadyClaimed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDoesNotExistOrHasAlreadyBeenClaimed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "name": "MessageSendingFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "name": "MissingMessageNumberForRollingHash", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - } - ], - "name": "MissingRollingHashForMessageNumber", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "actual", - "type": "bytes32" - } - ], - "name": "ParentStateRootHashInvalid", - "type": "error" - }, - { - "inputs": [], - "name": "PeriodIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "PointEvaluationFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fieldElements", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "blsCurveModulus", - "type": "uint256" - } - ], - "name": "PointEvaluationResponseInvalid", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "PrecompileReturnDataLengthWrong", - "type": "error" - }, - { - "inputs": [], - "name": "ProofIsEmpty", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "ProofLengthDifferentThanMerkleDepth", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimitExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shnarfsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockNumbers", - "type": "uint256" - } - ], - "name": "ShnarfAndFinalBlockNumberLengthsMismatched", - "type": "error" - }, - { - "inputs": [], - "name": "SnarkHashIsZeroHash", - "type": "error" - }, - { - "inputs": [], - "name": "StartingRootHashDoesNotMatch", - "type": "error" - }, - { - "inputs": [], - "name": "ValueSentTooLow", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "resettingAddress", - "type": "address" - } - ], - "name": "AmountUsedInPeriodReset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "stateRootHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "finalizedWithProof", - "type": "bool" - } - ], - "name": "BlockFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "lastBlockFinalized", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "startingRootHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "finalRootHash", - "type": "bytes32" - } - ], - "name": "BlocksVerificationDone", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "lastBlockFinalized", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "startingRootHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "finalRootHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "withProof", - "type": "bool" - } - ], - "name": "DataFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "shnarf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "startBlock", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endBlock", - "type": "uint256" - } - ], - "name": "DataSubmittedV2", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "L1L2MessagesReceivedOnL2", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "L2L1MessageHashAddedToInbox", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "l2MerkleRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "treeDepth", - "type": "uint256" - } - ], - "name": "L2MerkleRootAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "l2Block", - "type": "uint256" - } - ], - "name": "L2MessagingBlockAnchored", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "amountChangeBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "amountUsedLoweredToLimit", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "usedAmountResetToZero", - "type": "bool" - } - ], - "name": "LimitAmountChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "_messageHash", - "type": "bytes32" - } - ], - "name": "MessageClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_messageHash", - "type": "bytes32" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageSender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "periodInSeconds", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "limitInWei", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentPeriodEnd", - "type": "uint256" - } - ], - "name": "RateLimitInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "RollingHashUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "systemMigrationBlock", - "type": "uint256" - } - ], - "name": "SystemMigrationBlockInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageSender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "UnPaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "verifierAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "proofType", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifierSetBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldVerifierAddress", - "type": "address" - } - ], - "name": "VerifierAddressChanged", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENERAL_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENESIS_SHNARF", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_RECEIVED", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_UNKNOWN", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L1_L2_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_L1_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPERATOR_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OUTBOX_STATUS_RECEIVED", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OUTBOX_STATUS_SENT", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OUTBOX_STATUS_UNKNOWN", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PAUSE_MANAGER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVING_SYSTEM_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RATE_LIMIT_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERIFIER_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_feeRecipient", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "leafIndex", - "type": "uint32" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "feeRecipient", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct IL1MessageService.ClaimMessageWithProofParams", - "name": "_params", - "type": "tuple" - } - ], - "name": "claimMessageWithProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "currentFinalizedShnarf", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentFinalizedState", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentL2BlockNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentL2StoredL1MessageNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentL2StoredL1RollingHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentPeriodAmountInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentPeriodEnd", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataEndingBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "endingBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataFinalStateRootHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataParents", - "outputs": [ - { - "internalType": "bytes32", - "name": "parentHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataShnarfHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "shnarfHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataStartingBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "startingBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_aggregatedProof", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_proofType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedShnarf", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationPoint", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationClaim", - "type": "bytes32" - } - ], - "internalType": "struct ILineaRollup.ShnarfData", - "name": "shnarfData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "lastFinalizedTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedL1RollingHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "l1RollingHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "lastFinalizedL1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2MerkleTreesDepth", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "l2MerkleRoots", - "type": "bytes32[]" - }, - { - "internalType": "bytes", - "name": "l2MessagingBlocksOffsets", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.FinalizationDataV2", - "name": "_finalizationData", - "type": "tuple" - } - ], - "name": "finalizeBlocksWithProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "parentStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedShnarf", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationPoint", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationClaim", - "type": "bytes32" - } - ], - "internalType": "struct ILineaRollup.ShnarfData", - "name": "shnarfData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "lastFinalizedTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedL1RollingHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "l1RollingHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "lastFinalizedL1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2MerkleTreesDepth", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "l2MerkleRoots", - "type": "bytes32[]" - }, - { - "internalType": "bytes", - "name": "l2MessagingBlocksOffsets", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.FinalizationDataV2", - "name": "_finalizationData", - "type": "tuple" - } - ], - "name": "finalizeBlocksWithoutProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "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": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "inboxL2L1MessageStatus", - "outputs": [ - { - "internalType": "uint256", - "name": "messageStatus", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_initialStateRootHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_initialL2BlockNumber", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_defaultVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "_securityCouncil", - "type": "address" - }, - { - "internalType": "address[]", - "name": "_operators", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_rateLimitPeriodInSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rateLimitAmountInWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_genesisTimestamp", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_shnarfs", - "type": "bytes32[]" - }, - { - "internalType": "uint256[]", - "name": "_finalBlockNumbers", - "type": "uint256[]" - } - ], - "name": "initializeParentShnarfsAndFinalizedState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_messageNumber", - "type": "uint256" - } - ], - "name": "isMessageClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "isPaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - } - ], - "name": "l2MerkleRootsDepths", - "outputs": [ - { - "internalType": "uint256", - "name": "treeDepth", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "limitInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nextMessageNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "outboxL1L2MessageStatus", - "outputs": [ - { - "internalType": "uint256", - "name": "messageStatus", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "pauseByType", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "pauseType", - "type": "bytes32" - } - ], - "name": "pauseTypeStatuses", - "outputs": [ - { - "internalType": "bool", - "name": "pauseStatus", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "periodInSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "resetAmountUsedInPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "resetRateLimitAmount", - "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": "uint256", - "name": "messageNumber", - "type": "uint256" - } - ], - "name": "rollingHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "sender", - "outputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newVerifierAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_proofType", - "type": "uint256" - } - ], - "name": "setVerifierAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "shnarf", - "type": "bytes32" - } - ], - "name": "shnarfFinalBlockNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "finalBlockNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "stateRootHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "stateRootHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "firstBlockInData", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - } - ], - "internalType": "struct ILineaRollup.SupportingSubmissionDataV2", - "name": "submissionData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "dataEvaluationClaim", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "kzgCommitment", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "kzgProof", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.BlobSubmissionData[]", - "name": "_blobSubmissionData", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_finalBlobShnarf", - "type": "bytes32" - } - ], - "name": "submitBlobs", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "firstBlockInData", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "compressedData", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.SubmissionDataV2", - "name": "_submissionData", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_expectedShnarf", - "type": "bytes32" - } - ], - "name": "submitDataAsCalldata", - "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": "systemMigrationBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "unPauseByType", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_proofType", - "type": "uint256" - } - ], - "name": "unsetVerifierAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proofType", - "type": "uint256" - } - ], - "name": "verifiers", - "outputs": [ - { - "internalType": "address", - "name": "verifierAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} \ No newline at end of file diff --git a/e2e/src/abi/LineaRollupAlphaV4.json b/e2e/src/abi/LineaRollupAlphaV4.json deleted file mode 100644 index 4358fbf73..000000000 --- a/e2e/src/abi/LineaRollupAlphaV4.json +++ /dev/null @@ -1,2362 +0,0 @@ -{ - "contractName": "LineaRollup", - "sourceName": "contracts/LineaRollup.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "BlobSubmissionDataIsMissing", - "type": "error" - }, - { - "inputs": [], - "name": "BytesLengthNotMultipleOf32", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "bytesLength", - "type": "uint256" - } - ], - "name": "BytesLengthNotMultipleOfTwo", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "currentDataHash", - "type": "bytes32" - } - ], - "name": "DataAlreadySubmitted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "DataStartingBlockDoesNotMatch", - "type": "error" - }, - { - "inputs": [], - "name": "EmptyBlobData", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "EmptyBlobDataAtIndex", - "type": "error" - }, - { - "inputs": [], - "name": "EmptySubmissionData", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "FeePaymentFailed", - "type": "error" - }, - { - "inputs": [], - "name": "FeeTooLow", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "FinalBlockDoesNotMatchShnarfFinalBlock", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "finalBlockNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastFinalizedBlock", - "type": "uint256" - } - ], - "name": "FinalBlockNumberLessThanOrEqualToLastFinalizedBlock", - "type": "error" - }, - { - "inputs": [], - "name": "FinalBlockStateEqualsZeroHash", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "value", - "type": "bytes32" - } - ], - "name": "FinalShnarfWrong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "l2BlockTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentBlockTimestamp", - "type": "uint256" - } - ], - "name": "FinalizationInTheFuture", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "value", - "type": "bytes32" - } - ], - "name": "FinalizationStateIncorrect", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "firstBlockNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockNumber", - "type": "uint256" - } - ], - "name": "FirstBlockGreaterThanFinalBlock", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "firstBlockNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastFinalizedBlock", - "type": "uint256" - } - ], - "name": "FirstBlockLessThanOrEqualToLastFinalizedBlock", - "type": "error" - }, - { - "inputs": [], - "name": "FirstByteIsNotZero", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidMerkleProof", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidProof", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidProofType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "IsNotPaused", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "IsPaused", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "name": "L1RollingHashDoesNotExistOnL1", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - } - ], - "name": "L2MerkleRootAlreadyAnchored", - "type": "error" - }, - { - "inputs": [], - "name": "L2MerkleRootDoesNotExist", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "actual", - "type": "bytes32" - } - ], - "name": "LastFinalizedShnarfWrong", - "type": "error" - }, - { - "inputs": [], - "name": "LimitIsZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageIndex", - "type": "uint256" - } - ], - "name": "MessageAlreadyClaimed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "MessageDoesNotExistOrHasAlreadyBeenClaimed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - } - ], - "name": "MessageSendingFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "name": "MissingMessageNumberForRollingHash", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - } - ], - "name": "MissingRollingHashForMessageNumber", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "actual", - "type": "bytes32" - } - ], - "name": "ParentStateRootHashInvalid", - "type": "error" - }, - { - "inputs": [], - "name": "PeriodIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "PointEvaluationFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fieldElements", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "blsCurveModulus", - "type": "uint256" - } - ], - "name": "PointEvaluationResponseInvalid", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "PrecompileReturnDataLengthWrong", - "type": "error" - }, - { - "inputs": [], - "name": "ProofIsEmpty", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "ProofLengthDifferentThanMerkleDepth", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimitExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "ReentrantCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shnarfsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockNumbers", - "type": "uint256" - } - ], - "name": "ShnarfAndFinalBlockNumberLengthsMismatched", - "type": "error" - }, - { - "inputs": [], - "name": "SnarkHashIsZeroHash", - "type": "error" - }, - { - "inputs": [], - "name": "StartingRootHashDoesNotMatch", - "type": "error" - }, - { - "inputs": [], - "name": "ValueSentTooLow", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddressNotAllowed", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "resettingAddress", - "type": "address" - } - ], - "name": "AmountUsedInPeriodReset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "stateRootHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bool", - "name": "finalizedWithProof", - "type": "bool" - } - ], - "name": "BlockFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "lastBlockFinalized", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "startingRootHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "finalRootHash", - "type": "bytes32" - } - ], - "name": "BlocksVerificationDone", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "lastBlockFinalized", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "startingRootHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "finalRootHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "withProof", - "type": "bool" - } - ], - "name": "DataFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "shnarf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "startBlock", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endBlock", - "type": "uint256" - } - ], - "name": "DataSubmittedV2", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32[]", - "name": "messageHashes", - "type": "bytes32[]" - } - ], - "name": "L1L2MessagesReceivedOnL2", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "L2L1MessageHashAddedToInbox", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "l2MerkleRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "treeDepth", - "type": "uint256" - } - ], - "name": "L2MerkleRootAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "l2Block", - "type": "uint256" - } - ], - "name": "L2MessagingBlockAnchored", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "amountChangeBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "amountUsedLoweredToLimit", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bool", - "name": "usedAmountResetToZero", - "type": "bool" - } - ], - "name": "LimitAmountChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "_messageHash", - "type": "bytes32" - } - ], - "name": "MessageClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "_messageHash", - "type": "bytes32" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageSender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "periodInSeconds", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "limitInWei", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "currentPeriodEnd", - "type": "uint256" - } - ], - "name": "RateLimitInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "RollingHashUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "systemMigrationBlock", - "type": "uint256" - } - ], - "name": "SystemMigrationBlockInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "messageSender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "pauseType", - "type": "uint256" - } - ], - "name": "UnPaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "verifierAddress", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "proofType", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "verifierSetBy", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldVerifierAddress", - "type": "address" - } - ], - "name": "VerifierAddressChanged", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENERAL_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GENESIS_SHNARF", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_RECEIVED", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INBOX_STATUS_UNKNOWN", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L1_L2_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "L2_L1_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPERATOR_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OUTBOX_STATUS_RECEIVED", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OUTBOX_STATUS_SENT", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OUTBOX_STATUS_UNKNOWN", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PAUSE_MANAGER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROVING_SYSTEM_PAUSE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RATE_LIMIT_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VERIFIER_SETTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_feeRecipient", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32[]", - "name": "proof", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "messageNumber", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "leafIndex", - "type": "uint32" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "feeRecipient", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct IL1MessageService.ClaimMessageWithProofParams", - "name": "_params", - "type": "tuple" - } - ], - "name": "claimMessageWithProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "currentFinalizedShnarf", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentFinalizedState", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentL2BlockNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentL2StoredL1MessageNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentL2StoredL1RollingHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentPeriodAmountInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentPeriodEnd", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "currentTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataEndingBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "endingBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataFinalStateRootHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataParents", - "outputs": [ - { - "internalType": "bytes32", - "name": "parentHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataShnarfHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "shnarfHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "dataHash", - "type": "bytes32" - } - ], - "name": "dataStartingBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "startingBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_aggregatedProof", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_proofType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedShnarf", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationPoint", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationClaim", - "type": "bytes32" - } - ], - "internalType": "struct ILineaRollup.ShnarfData", - "name": "shnarfData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "lastFinalizedTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedL1RollingHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "l1RollingHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "lastFinalizedL1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2MerkleTreesDepth", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "l2MerkleRoots", - "type": "bytes32[]" - }, - { - "internalType": "bytes", - "name": "l2MessagingBlocksOffsets", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.FinalizationDataV2", - "name": "_finalizationData", - "type": "tuple" - } - ], - "name": "finalizeBlocksWithProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "parentStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedShnarf", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationPoint", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "dataEvaluationClaim", - "type": "bytes32" - } - ], - "internalType": "struct ILineaRollup.ShnarfData", - "name": "shnarfData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "lastFinalizedTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "lastFinalizedL1RollingHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "l1RollingHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "lastFinalizedL1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1RollingHashMessageNumber", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2MerkleTreesDepth", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "l2MerkleRoots", - "type": "bytes32[]" - }, - { - "internalType": "bytes", - "name": "l2MessagingBlocksOffsets", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.FinalizationDataV2", - "name": "_finalizationData", - "type": "tuple" - } - ], - "name": "finalizeBlocksWithoutProof", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "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": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "inboxL2L1MessageStatus", - "outputs": [ - { - "internalType": "uint256", - "name": "messageStatus", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_initialStateRootHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_initialL2BlockNumber", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_defaultVerifier", - "type": "address" - }, - { - "internalType": "address", - "name": "_securityCouncil", - "type": "address" - }, - { - "internalType": "address[]", - "name": "_operators", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_rateLimitPeriodInSeconds", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rateLimitAmountInWei", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_genesisTimestamp", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_shnarfs", - "type": "bytes32[]" - }, - { - "internalType": "uint256[]", - "name": "_finalBlockNumbers", - "type": "uint256[]" - } - ], - "name": "initializeParentShnarfsAndFinalizedState", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_messageNumber", - "type": "uint256" - } - ], - "name": "isMessageClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "isPaused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - } - ], - "name": "l2MerkleRootsDepths", - "outputs": [ - { - "internalType": "uint256", - "name": "treeDepth", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "limitInWei", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nextMessageNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "name": "outboxL1L2MessageStatus", - "outputs": [ - { - "internalType": "uint256", - "name": "messageStatus", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "pauseByType", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "pauseType", - "type": "bytes32" - } - ], - "name": "pauseTypeStatuses", - "outputs": [ - { - "internalType": "bool", - "name": "pauseStatus", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "periodInSeconds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "resetAmountUsedInPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "resetRateLimitAmount", - "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": "uint256", - "name": "messageNumber", - "type": "uint256" - } - ], - "name": "rollingHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "rollingHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "sender", - "outputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newVerifierAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_proofType", - "type": "uint256" - } - ], - "name": "setVerifierAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "shnarf", - "type": "bytes32" - } - ], - "name": "shnarfFinalBlockNumbers", - "outputs": [ - { - "internalType": "uint256", - "name": "finalBlockNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "stateRootHashes", - "outputs": [ - { - "internalType": "bytes32", - "name": "stateRootHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "firstBlockInData", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - } - ], - "internalType": "struct ILineaRollup.SupportingSubmissionDataV2", - "name": "submissionData", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "dataEvaluationClaim", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "kzgCommitment", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "kzgProof", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.BlobSubmissionData[]", - "name": "_blobSubmissionData", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_finalBlobShnarf", - "type": "bytes32" - } - ], - "name": "submitBlobs", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "finalStateRootHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "firstBlockInData", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalBlockInData", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "snarkHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "compressedData", - "type": "bytes" - } - ], - "internalType": "struct ILineaRollup.SubmissionDataV2", - "name": "_submissionData", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_parentShnarf", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_expectedShnarf", - "type": "bytes32" - } - ], - "name": "submitDataAsCalldata", - "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": "systemMigrationBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_pauseType", - "type": "uint8" - } - ], - "name": "unPauseByType", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_proofType", - "type": "uint256" - } - ], - "name": "unsetVerifierAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proofType", - "type": "uint256" - } - ], - "name": "verifiers", - "outputs": [ - { - "internalType": "address", - "name": "verifierAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801562000010575f80fd5b506200001b62000021565b620000df565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614620000dd575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614d0980620000ed5f395ff3fe6080604052600436106103b3575f3560e01c80637d1e8c55116101e9578063b837dbe911610108578063d05d9c3d1161009d578063e196fb5d1161006d578063e196fb5d14610b42578063e97a1e9e14610b61578063f5b541a614610bd3578063f93e985714610c06575f80fd5b8063d05d9c3d14610abb578063d547741f14610ada578063d5d4b83514610af9578063d84f91e814610b0f575f80fd5b8063c1dc0f07116100d8578063c1dc0f0714610a43578063c211697414610a58578063cc5782f614610a77578063cd9b9e9a14610aa5575f80fd5b8063b837dbe9146109b8578063bc61e733146109cd578063bf3e7505146109fb578063c0729ab114610a2e575f80fd5b80639f3ce55a1161017e578063ac1eff681161014e578063ac1eff6814610939578063ad422ff01461097b578063aea4f74514610990578063b4a5a4b7146109a4575f80fd5b80639f3ce55a146108e0578063a217fddf146108f3578063abd6230d14610906578063abffac321461091a575f80fd5b806391d14854116101b957806391d148541461085a578063921b278e146108ab578063986fcddd146107d05780639ee8b211146108c1575f80fd5b80637d1e8c55146107d05780638116d995146107e35780638be745d114610802578063914e57eb1461082e575f80fd5b80635355420e116102d557806363a283931161026a578063695378f51161023a578063695378f5146107875780636a637967146105835780636e6738431461079d57806373bd07b714610430575f80fd5b806363a28393146106e45780636463fb2a1461070357806366f96e981461072257806367e404ce1461074e575f80fd5b80635c721a0c116102a55780635c721a0c146106355780635ed73ceb146106605780636078bfd81461068c57806360e83cf3146106b8575f80fd5b80635355420e146105e2578063557eac731461060157806358794456146106205780635b7eb4bd14610583575f80fd5b80632c70645c1161034b57806342fbe8421161031b57806342fbe8421461056457806348922ab714610583578063491e0936146105975780634cdd389b146105b6575f80fd5b80632c70645c146104e55780632f2ff15d146104fb57806336568abe1461051a5780633fc08b6514610539575f80fd5b80631e2ff94f116103865780631e2ff94f146104565780631f443da01461046c578063248a9ca31461049857806328958174146104c6575f80fd5b806301ffc9a7146103b757806305861180146103eb5780631065a3991461040f57806311314d0f14610430575b5f80fd5b3480156103c2575f80fd5b506103d66103d136600461412d565b610c32565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b506104016101bb5481565b6040519081526020016103e2565b34801561041a575f80fd5b5061042e61042936600461416c565b610cca565b005b34801561043b575f80fd5b50610444600281565b60405160ff90911681526020016103e2565b348015610461575f80fd5b506104016101185481565b348015610477575f80fd5b5061040161048636600461418c565b6101b96020525f908152604090205481565b3480156104a3575f80fd5b506104016104b236600461418c565b5f9081526065602052604090206001015490565b3480156104d1575f80fd5b5061042e6104e036600461418c565b610da2565b3480156104f0575f80fd5b506104016101835481565b348015610506575f80fd5b5061042e6105153660046141c4565b610e62565b348015610525575f80fd5b5061042e6105343660046141c4565b610e8b565b348015610544575f80fd5b5061040161055336600461418c565b60a56020525f908152604090205481565b34801561056f575f80fd5b5061042e61057e36600461423a565b610f3e565b34801561058e575f80fd5b50610444600181565b3480156105a2575f80fd5b5061042e6105b13660046142c5565b611209565b3480156105c1575f80fd5b506104016105d036600461418c565b6101b76020525f908152604090205481565b3480156105ed575f80fd5b5061042e6105fc366004614355565b611531565b34801561060c575f80fd5b5061042e61061b36600461418c565b611968565b34801561062b575f80fd5b5061040160995481565b348015610640575f80fd5b5061040161064f36600461418c565b60a66020525f908152604090205481565b34801561066b575f80fd5b5061040161067a36600461418c565b6101ba6020525f908152604090205481565b348015610697575f80fd5b506104016106a636600461418c565b6101b66020525f908152604090205481565b3480156106c3575f80fd5b506104016106d236600461418c565b6101506020525f908152604090205481565b3480156106ef575f80fd5b5061042e6106fe3660046143fa565b611a2e565b34801561070e575f80fd5b5061042e61071d366004614434565b611a57565b34801561072d575f80fd5b5061040161073c36600461418c565b6101b86020525f908152604090205481565b348015610759575f80fd5b50610762611f3f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103e2565b348015610792575f80fd5b506104016101195481565b3480156107a8575f80fd5b506104017f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c81565b3480156107db575f80fd5b506104445f81565b3480156107ee575f80fd5b5061042e6107fd36600461446c565b611f77565b34801561080d575f80fd5b5061040161081c36600461418c565b61011a6020525f908152604090205481565b348015610839575f80fd5b5061040161084836600461418c565b61014e6020525f908152604090205481565b348015610865575f80fd5b506103d66108743660046141c4565b5f91825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156108b6575f80fd5b506104016101bf5481565b3480156108cc575f80fd5b506103d66108db36600461418c565b61217c565b61042e6108ee3660046144d3565b61219f565b3480156108fe575f80fd5b506104015f81565b348015610911575f80fd5b50610444600381565b348015610925575f80fd5b5061042e61093436600461451f565b61230c565b348015610944575f80fd5b5061076261095336600461418c565b61011b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015610986575f80fd5b5061040160985481565b34801561099b575f80fd5b5061042e61244b565b3480156109af575f80fd5b50610444600481565b3480156109c3575f80fd5b5061040160e45481565b3480156109d8575f80fd5b506103d66109e736600461416c565b60da54600160ff9092169190911b16151590565b348015610a06575f80fd5b506104017f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8281565b348015610a39575f80fd5b50610401609a5481565b348015610a4e575f80fd5b5061040160975481565b348015610a63575f80fd5b5061042e610a7236600461458d565b6124a6565b348015610a82575f80fd5b506103d6610a9136600461418c565b60d96020525f908152604090205460ff1681565b348015610ab0575f80fd5b506104016101bd5481565b348015610ac6575f80fd5b5061042e610ad53660046145b7565b6125d3565b348015610ae5575f80fd5b5061042e610af43660046141c4565b612808565b348015610b04575f80fd5b506104016101bc5481565b348015610b1a575f80fd5b506104017f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2681565b348015610b4d575f80fd5b5061042e610b5c36600461416c565b61282c565b348015610b6c575f80fd5b50610401604080515f602082018190529181018290527f072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd60608201526080810182905260a081019190915260c0016040516020818303038152906040528051906020012081565b348015610bde575f80fd5b506104017f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b348015610c11575f80fd5b50610401610c2036600461418c565b6101be6020525f908152604090205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26610cf4816128d7565b60da54600160ff84161b16610d3f576040517fb015579f00000000000000000000000000000000000000000000000000000000815260ff831660048201526024015b60405180910390fd5b60da8054600160ff851690811b199091169091557fef04ba2036ccaeab3a59717b51d2b9146b0b0904077177f1148a5418bf1eae23335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25050565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c610dcc816128d7565b5f82815261011b6020908152604080832054905173ffffffffffffffffffffffffffffffffffffffff90911681523392859290917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b5f82815260656020526040902060010154610e7c816128d7565b610e8683836128e1565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610d36565b610f3a82826129d3565b5050565b6004610f4981612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610f73816128d7565b845f819003610fae576040517fb1504a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f908190610ffa60408051610100810182525f6080820181815260a0830182905260c0830182905260e083018290528252602082015260609181018290528181019190915290565b5f8981526101be60205260408120548a915b87811015611106578d8d8281811061102657611026614605565b90506020028101906110389190614632565b6110419061476b565b81499650935085611081576040517fc0e41e1d00000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b835161108e908387612b12565b8351606001515f90815260208790526040902096506110be86885f1c866020015187604001518860600151612c79565b83516060808201519151602080880151604080519889529188019490945286810191909152908501899052608085019190915260a0909320845190930151915060010161100c565b50818a1461114a576040517fd3664fb3000000000000000000000000000000000000000000000000000000008152600481018b905260248101839052604401610d36565b5f8281526101be602052604090205415611193576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f8281526101be6020526040812082905581908e908e90816111b7576111b7614605565b90506020028101906111c99190614632565b6040516020909101359084907f52bd912b0041a6ec8554b0ffae3cc1cb7b137bade0dc9e3f8f0b6758466d5df9905f90a450505050505050505050505050565b611211612e51565b85878484875f5a90506112246003612a8c565b61125861125260017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b8f612eee565b5f8e8e8e8e8b8e8e60405160200161127697969594939291906148aa565b60405160208183030381529060405280519060200120905061129781612ef5565b6112a96112a48d8f614902565b612f4f565b5f808f73ffffffffffffffffffffffffffffffffffffffff168e8d8d6040516112d3929190614915565b5f6040518083038185875af1925050503d805f811461130d576040519150601f19603f3d011682016040523d82523d5f602084013e611312565b606091505b50915091508161137c5780511561132c5780518082602001fd5b8f6040517f54613443000000000000000000000000000000000000000000000000000000008152600401610d36919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6113b06113aa60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b5f612eee565b60405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a250508615905061151957855f84900361146857853b158015611466573a5a61140461bc7c86614902565b61140e9190614850565b6114189190614924565b9150818811156114625773ffffffffffffffffffffffffffffffffffffffff87166108fc611446848b614850565b6040518115909202915f818181858888f1935050505050611466565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff84161561148b578361148d565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611515576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610d36565b5050505b505050505050611527612fc4565b5050505050505050565b5f54610100900460ff161580801561154f57505f54600160ff909116105b806115685750303b15801561156857505f5460ff166001145b6115f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d36565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611650575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff881661169d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b85811015611774575f8787838181106116ba576116ba614605565b90506020020160208101906116cf919061493b565b73ffffffffffffffffffffffffffffffffffffffff160361171c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176c7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92988888481811061175257611752614605565b9050602002016020810190611767919061493b565b6128e1565b60010161169f565b5061177f5f886128e1565b6117a97f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c886128e1565b6117b587888686612ff2565b7f033d11f27e62ab919708ec716731da80d261a6e4253259b7acde9bf89d28ec1880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556101198990555f89815261011a602090815260408083208d905580518083018490528082018490527f072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd60608083018290526080830186905260a08084018790528451808503909101815260c08401855280519086012086526101be85528386208f905560e08301869052610100830186905261012083019190915261014082018590526101608083018690528351808403909101815261018083019384905280519401939093206101bd558382526101a08101939093526101c090920184905290206101bf55801561195c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82611992816128d7565b5f805f4260995410156119b7576097546119ac9042614902565b6099555060016119c9565b609a548510156119c957849250600191505b609885905580806119d75750815b156119e257609a8390555b60408051868152831515602082015282151581830152905133917fbc3dc0cb5c15c51c81316450d44048838bb478b9809447d01c766a06f3e9f2c8919081900360600190a25050505050565b6001611a39816131a3565b5f611a43816128d7565b611a5183610119545f6131ea565b50505050565b611a5f612e51565b60a08101803590611a73906080840161493b565b611a81610120840184614956565b611a92610100860160e0870161493b565b5f5a9050611aa06003612a8c565b6101008701355f908152610150602052604081205490819003611aef576040517f4e68667500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af988806149b7565b90508114611b485780611b0c89806149b7565b6040517f5e3fd6ad0000000000000000000000000000000000000000000000000000000081526004810193909352602483015250604401610d36565b611b5588602001356134df565b611b6a6112a460c08a013560a08b0135614902565b5f611b7b60808a0160608b0161493b565b611b8b60a08b0160808c0161493b565b60a08b013560c08c013560208d0135611ba86101208f018f614956565b604051602001611bbe97969594939291906148aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050611c1f81611c048b806149b7565b611c1460608e0160408f01614a1b565b8d6101000135613557565b611c55576040517fb05e92fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c98611c8360017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b611c9360808c0160608d0161493b565b612eee565b5f80611caa60a08c0160808d0161493b565b73ffffffffffffffffffffffffffffffffffffffff1660c08c0135611cd36101208e018e614956565b604051611ce1929190614915565b5f6040518083038185875af1925050503d805f8114611d1b576040519150601f19603f3d011682016040523d82523d5f602084013e611d20565b606091505b509150915081611d9557805115611d3a5780518082602001fd5b611d4a60a08c0160808d0161493b565b6040517f5461344300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d36565b611dc36113aa60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b60405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a2505050505f861115611f2e57855f849003611e7d57853b158015611e7b573a5a611e1961bc7c86614902565b611e239190614850565b611e2d9190614924565b915081881115611e775773ffffffffffffffffffffffffffffffffffffffff87166108fc611e5b848b614850565b6040518115909202915f818181858888f1935050505050611e7b565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff841615611ea05783611ea2565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611f2a576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610d36565b5050505b505050505050611f3c612fc4565b50565b5f611f72611f6e60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b5c90565b905090565b5f54600590610100900460ff16158015611f9757505f5460ff8083169116105b612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d36565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055838214612096576040517f2526f1080000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401610d36565b5f5b848110156120f0578383828181106120b2576120b2614605565b905060200201356101be5f8888858181106120cf576120cf614605565b602090810292909201358352508101919091526040015f2055600101612098565b506101bb546101bc546101185460408051938452602084019290925290820152606090206101bf555f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600881901c5f90815261014f6020526040812054600160ff84161b161515610cc4565b60026121aa81612a8c565b73ffffffffffffffffffffffffffffffffffffffff85166121f7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34841115612231576040517fb03b693200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e480545f918261224183614a3e565b9091555090505f6122528634614850565b90505f33888884868a8a60405160200161227297969594939291906148aa565b60405160208183030381529060405280519060200120905061229483826135eb565b808873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe856c2b8bd4eb0027ce32eeaf595c21b0b6b4644b326e5b7bd80a1cf8db72e6c8a86888c8c6040516122fa959493929190614a75565b60405180910390a45050505050505050565b600461231781612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612341816128d7565b5f85900361237b576040517f7907d79b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f81815261011a60205260409020548435146123c7576040517fead4c30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101bd5460208501358114612415576040517f2f22b98a0000000000000000000000000000000000000000000000000000000081526004810182905260208601356024820152604401610d36565b5f612422868460016131ea565b90505f61243187848487613667565b905061195c81898c8c8b3560408d013560a08e01356136ef565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82612475816128d7565b5f609a81905560405133917fba88c025b0cbb77022c0c487beef24f759f1e4be2f51a205bc427cee19c2eaa691a250565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c6124d0816128d7565b73ffffffffffffffffffffffffffffffffffffffff831661251d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815261011b602090815260409182902054915173ffffffffffffffffffffffffffffffffffffffff928316815233928592908716917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60046125de81612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612608816128d7565b6126156080860186614956565b90505f0361264f576040517fc01eab5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608080820183528735825260208089013590830152878301359282019290925260608088013590820152905f9061268c90880188614956565b60405161269a929190614915565b604051809103902090506126c4826101be5f8981526020019081526020015f205461011954612b12565b60608701355f90815260208290526040812090505f612727888a606001358b5f0135856127008e80608001906126fa9190614956565b896138a6565b604080519586526020860194909452928401919091526060830152608082015260a0902090565b905080871461276c576040517fd3664fb30000000000000000000000000000000000000000000000000000000081526004810188905260248101829052604401610d36565b5f8181526101be6020526040902054156127b5576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b5f8181526101be60209081526040808320818d01359081905590519092918c01359184917f52bd912b0041a6ec8554b0ffae3cc1cb7b137bade0dc9e3f8f0b6758466d5df99190a4505050505050505050565b5f82815260656020526040902060010154612822816128d7565b610e8683836129d3565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26612856816128d7565b60da54600160ff84161b161561289d576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d36565b60da8054600160ff851690811b9091179091557fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d33610d76565b611f3c81336139a7565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f3a575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556129753390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610f3a575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60da54600160ff83161b811615612ad4576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d36565b6002811615610f3a576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260016004820152602401610d36565b8251612b4a576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060830151612b85576040517f7dc2487d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82602001518260010114612bd75760208301516040517fabefa5e80000000000000000000000000000000000000000000000000000000081526001840160048201526024810191909152604401610d36565b80836020015111612c245760208301516040517fa386ed70000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610d36565b826040015183602001511115610e8657602083015160408085015190517fcbbd795300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d36565b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001840693505f80600a73ffffffffffffffffffffffffffffffffffffffff168787878787604051602001612cd1959493929190614ac7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612d0991614b10565b5f60405180830381855afa9150503d805f8114612d41576040519150601f19603f3d011682016040523d82523d5f602084013e612d46565b606091505b509150915081612d82576040517fa71194af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040815114612dca578051604080517ff75db381000000000000000000000000000000000000000000000000000000008152610d369290600401918252602082015260400190565b6020810151604082015161100082141580612e0557507f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018114155b15612e46576040517f68dcad5f0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d36565b505050505050505050565b5f612e80611f6e60017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b14612eb7576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eec612ee560017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b6001612eee565b565b80825d5050565b5f81815260a66020526040902054600114612f3f576040517f992d87c300000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b5f90815260a66020526040812055565b5f426099541015612f7157609754612f679042614902565b6099555080612f82565b81609a54612f7f9190614902565b90505b609854811115612fbe576040517fa74c1c5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609a5550565b612eec6113aa60017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b5f54610100900460ff16613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b73ffffffffffffffffffffffffffffffffffffffff84166130d5576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316613122576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312a613a60565b613132613a60565b61313a613a60565b6131448282613af6565b61316e7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82856128e1565b6131987f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26846128e1565b5050600160e4555050565b60da54600160ff83161b1615611f3c576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610d36565b5f8284604001351161323557604080517f7061440500000000000000000000000000000000000000000000000000000000815290850135600482015260248101849052604401610d36565b613249846101a00135856101600135613c63565b6101bf5460408051610180870135815261014087013560208201526101008701359181019190915260609020146132e157604080516101808601358152610140860135602082015261010086013591810191909152606090206101bf546040517fbc5aad1100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d36565b428461012001351061332c576040517fbf81c6e00000000000000000000000000000000000000000000000000000000081526101208501356004820152426024820152604401610d36565b60a0840135613367576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060868101358252608080880135602084015260a0808901359484019490945260c08801359183019190915260e087013590820152205f8181526101be6020526040908190205491925085013514613409575f8181526101be6020526040908190205481517ffb4cd6ef0000000000000000000000000000000000000000000000000000000081529186013560048301526024820152604401610d36565b61342561341a6101e08601866149b7565b866101c00135613d30565b61343c613436610200860186614956565b85613e36565b6040808501355f81815261011a6020529190912060a08601359055610119556101bd8190556134906101a0850135610160860135610120870135604080519384526020840192909252908201526060902090565b6101bf5560408051831515815260a08601359186359190870135907f1335f1a2b3ff25f07f5fef07dd35d8fb4312c3c73b138e2fad9347b3319ab53c9060200160405180910390a49392505050565b600881901c5f90815261014f6020526040902054600160ff83161b1615613535576040517f335a4a9000000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b600881901c5f90815261014f602052604090208054600160ff84161b17905550565b5f85815b858110156135de57600163ffffffff8616821c811690036135a8576135a187878381811061358b5761358b614605565b90506020020135835f9182526020526040902090565b91506135d6565b6135d3828888848181106135be576135be614605565b905060200201355f9182526020526040902090565b91505b60010161355b565b5090911495945050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015f90815261014e60208181526040808420548452848252808420868552929091528083208290555190918391839186917fea3b023b4c8680d4b4824f0143132c95476359a2bb70a81d6c5a36f6918f63399190a4505050565b5f60405184815283602082015260406101008701604083013782608082015260206040870160a083013760a0610140870160c083013761018081016102208701356020810261024089018337602002902061016082015261018090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900695945050505050565b6040805160018082528183019092525f916020808301908036833701905050905087815f8151811061372357613723614605565b6020908102919091018101919091525f88815261011b909152604090205473ffffffffffffffffffffffffffffffffffffffff168061378e576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7e4f7a8a0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff831690637e4f7a8a906137e6908b908b908890600401614b21565b6020604051808303815f875af1158015613802573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138269190614b78565b90508061385f576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518781526020810186905286917f5c885a794662ebe3b08ae0874fc2c88b5343b0223ba9cd2cad92b69c0d0c901f910160405180910390a250505050505050505050565b5f6138b2602084614b97565b156138e9576040517f6426c6c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f729eebce00000000000000000000000000000000000000000000000000000000835b801561399e57602081039050808601357fff0000000000000000000000000000000000000000000000000000000000000081161561394f57604051838152600481fd5b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001817f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018787090893505061390c565b50509392505050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f3a576139e681613eca565b6139f1836020613ee9565b604051602001613a02929190614bcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610d3691600401614c4f565b5f54610100900460ff16612eec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b5f54610100900460ff16613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b815f03613bc5576040517fb5ed5a3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03613bfe576040517fd10d72bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60978290556098819055613c128242614902565b60998190556097546098546040805192835260208301919091528101919091527f8f805c372b66240792580418b7328c0c554ae235f0932475c51b026887fe26a99060600160405180910390a15050565b815f03613ca5578015610f3a576040517f0c25659200000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b80613cdf576040517f5228f4c800000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f82815261014e60205260409020548114610f3a576040517f36459fa00000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d36565b5f5b82811015611a51576101505f858584818110613d5057613d50614605565b9050602002013581526020019081526020015f20545f14613db957838382818110613d7d57613d7d614605565b905060200201356040517fe5d14425000000000000000000000000000000000000000000000000000000008152600401610d3691815260200190565b816101505f868685818110613dd057613dd0614605565b9050602002013581526020019081526020015f208190555081848483818110613dfb57613dfb614605565b905060200201357f300e6f978eee6a4b0bba78dd8400dc64fd5652dbfc868a2258e16d0977be222b60405160405180910390a3600101613d32565b613e41600283614b97565b15613e7b576040517f0c91d77600000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f805b83811015613ec3576040518582013560f01c9250838301907f3c116827db9db3a30c1a25db8b0ee4bab9d2b223560209cfd839601b621c726d905f90a2600201613e7e565b5050505050565b6060610cc473ffffffffffffffffffffffffffffffffffffffff831660145b60605f613ef7836002614924565b613f02906002614902565b67ffffffffffffffff811115613f1a57613f1a61466e565b6040519080825280601f01601f191660200182016040528015613f44576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110613f7a57613f7a614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613fdc57613fdc614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f614016846002614924565b614021906001614902565b90505b60018111156140bd577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061406257614062614605565b1a60f81b82828151811061407857614078614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c936140b681614c9f565b9050614024565b508315614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d36565b9392505050565b5f6020828403121561413d575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114614126575f80fd5b5f6020828403121561417c575f80fd5b813560ff81168114614126575f80fd5b5f6020828403121561419c575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611f3c575f80fd5b5f80604083850312156141d5575f80fd5b8235915060208301356141e7816141a3565b809150509250929050565b5f8083601f840112614202575f80fd5b50813567ffffffffffffffff811115614219575f80fd5b6020830191508360208260051b8501011115614233575f80fd5b9250929050565b5f805f806060858703121561424d575f80fd5b843567ffffffffffffffff811115614263575f80fd5b61426f878288016141f2565b90989097506020870135966040013595509350505050565b5f8083601f840112614297575f80fd5b50813567ffffffffffffffff8111156142ae575f80fd5b602083019150836020828501011115614233575f80fd5b5f805f805f805f8060e0898b0312156142dc575f80fd5b88356142e7816141a3565b975060208901356142f7816141a3565b965060408901359550606089013594506080890135614315816141a3565b935060a089013567ffffffffffffffff811115614330575f80fd5b61433c8b828c01614287565b999c989b50969995989497949560c00135949350505050565b5f805f805f805f805f6101008a8c03121561436e575f80fd5b8935985060208a0135975060408a0135614387816141a3565b965060608a0135614397816141a3565b955060808a013567ffffffffffffffff8111156143b2575f80fd5b6143be8c828d016141f2565b9a9d999c50979a9699979860a08801359760c0810135975060e0013595509350505050565b5f61022082840312156143f4575f80fd5b50919050565b5f6020828403121561440a575f80fd5b813567ffffffffffffffff811115614420575f80fd5b61442c848285016143e3565b949350505050565b5f60208284031215614444575f80fd5b813567ffffffffffffffff81111561445a575f80fd5b82016101408185031215614126575f80fd5b5f805f806040858703121561447f575f80fd5b843567ffffffffffffffff80821115614496575f80fd5b6144a2888389016141f2565b909650945060208701359150808211156144ba575f80fd5b506144c7878288016141f2565b95989497509550505050565b5f805f80606085870312156144e6575f80fd5b84356144f1816141a3565b935060208501359250604085013567ffffffffffffffff811115614513575f80fd5b6144c787828801614287565b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b61455588838901614287565b9096509450602087013593506040870135915080821115614574575f80fd5b50614581878288016143e3565b91505092959194509250565b5f806040838503121561459e575f80fd5b82356145a9816141a3565b946020939093013593505050565b5f805f606084860312156145c9575f80fd5b833567ffffffffffffffff8111156145df575f80fd5b840160a081870312156145f0575f80fd5b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21833603018112614664575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156146be576146be61466e565b60405290565b5f82601f8301126146d3575f80fd5b813567ffffffffffffffff808211156146ee576146ee61466e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156147345761473461466e565b8160405283815286602085880101111561474c575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f81360360e081121561477c575f80fd5b61478461469b565b6080821215614791575f80fd5b61479961469b565b9150833582526020840135602083015260408401356040830152606084013560608301528181526080840135602082015260a0840135915067ffffffffffffffff808311156147e6575f80fd5b6147f2368487016146c4565b604083015260c085013592508083111561480a575f80fd5b50614817368386016146c4565b60608201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610cc457610cc4614823565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff808a16835280891660208401525086604083015285606083015284608083015260c060a08301526148f560c083018486614863565b9998505050505050505050565b80820180821115610cc457610cc4614823565b818382375f9101908152919050565b8082028115828204841417610cc457610cc4614823565b5f6020828403121561494b575f80fd5b8135614126816141a3565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614989575f80fd5b83018035915067ffffffffffffffff8211156149a3575f80fd5b602001915036819003821315614233575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126149ea575f80fd5b83018035915067ffffffffffffffff821115614a04575f80fd5b6020019150600581901b3603821315614233575f80fd5b5f60208284031215614a2b575f80fd5b813563ffffffff81168114614126575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6e57614a6e614823565b5060010190565b858152846020820152836040820152608060608201525f614a9a608083018486614863565b979650505050505050565b5f5b83811015614abf578181015183820152602001614aa7565b50505f910152565b8581528460208201528360408201525f8351614aea816060850160208801614aa5565b835190830190614b01816060840160208801614aa5565b01606001979650505050505050565b5f8251614664818460208701614aa5565b604081525f614b34604083018587614863565b8281036020848101919091528451808352858201928201905f5b81811015614b6a57845183529383019391830191600101614b4e565b509098975050505050505050565b5f60208284031215614b88575f80fd5b81518015158114614126575f80fd5b5f82614bca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614c06816017850160208801614aa5565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614c43816028840160208801614aa5565b01602801949350505050565b602081525f8251806020840152614c6d816040850160208701614aa5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f81614cad57614cad614823565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220e76e56676b2ceca04f884882f6f2cc812cb4d93334bb0fd187d9d040cd25b8fd64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106103b3575f3560e01c80637d1e8c55116101e9578063b837dbe911610108578063d05d9c3d1161009d578063e196fb5d1161006d578063e196fb5d14610b42578063e97a1e9e14610b61578063f5b541a614610bd3578063f93e985714610c06575f80fd5b8063d05d9c3d14610abb578063d547741f14610ada578063d5d4b83514610af9578063d84f91e814610b0f575f80fd5b8063c1dc0f07116100d8578063c1dc0f0714610a43578063c211697414610a58578063cc5782f614610a77578063cd9b9e9a14610aa5575f80fd5b8063b837dbe9146109b8578063bc61e733146109cd578063bf3e7505146109fb578063c0729ab114610a2e575f80fd5b80639f3ce55a1161017e578063ac1eff681161014e578063ac1eff6814610939578063ad422ff01461097b578063aea4f74514610990578063b4a5a4b7146109a4575f80fd5b80639f3ce55a146108e0578063a217fddf146108f3578063abd6230d14610906578063abffac321461091a575f80fd5b806391d14854116101b957806391d148541461085a578063921b278e146108ab578063986fcddd146107d05780639ee8b211146108c1575f80fd5b80637d1e8c55146107d05780638116d995146107e35780638be745d114610802578063914e57eb1461082e575f80fd5b80635355420e116102d557806363a283931161026a578063695378f51161023a578063695378f5146107875780636a637967146105835780636e6738431461079d57806373bd07b714610430575f80fd5b806363a28393146106e45780636463fb2a1461070357806366f96e981461072257806367e404ce1461074e575f80fd5b80635c721a0c116102a55780635c721a0c146106355780635ed73ceb146106605780636078bfd81461068c57806360e83cf3146106b8575f80fd5b80635355420e146105e2578063557eac731461060157806358794456146106205780635b7eb4bd14610583575f80fd5b80632c70645c1161034b57806342fbe8421161031b57806342fbe8421461056457806348922ab714610583578063491e0936146105975780634cdd389b146105b6575f80fd5b80632c70645c146104e55780632f2ff15d146104fb57806336568abe1461051a5780633fc08b6514610539575f80fd5b80631e2ff94f116103865780631e2ff94f146104565780631f443da01461046c578063248a9ca31461049857806328958174146104c6575f80fd5b806301ffc9a7146103b757806305861180146103eb5780631065a3991461040f57806311314d0f14610430575b5f80fd5b3480156103c2575f80fd5b506103d66103d136600461412d565b610c32565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b506104016101bb5481565b6040519081526020016103e2565b34801561041a575f80fd5b5061042e61042936600461416c565b610cca565b005b34801561043b575f80fd5b50610444600281565b60405160ff90911681526020016103e2565b348015610461575f80fd5b506104016101185481565b348015610477575f80fd5b5061040161048636600461418c565b6101b96020525f908152604090205481565b3480156104a3575f80fd5b506104016104b236600461418c565b5f9081526065602052604090206001015490565b3480156104d1575f80fd5b5061042e6104e036600461418c565b610da2565b3480156104f0575f80fd5b506104016101835481565b348015610506575f80fd5b5061042e6105153660046141c4565b610e62565b348015610525575f80fd5b5061042e6105343660046141c4565b610e8b565b348015610544575f80fd5b5061040161055336600461418c565b60a56020525f908152604090205481565b34801561056f575f80fd5b5061042e61057e36600461423a565b610f3e565b34801561058e575f80fd5b50610444600181565b3480156105a2575f80fd5b5061042e6105b13660046142c5565b611209565b3480156105c1575f80fd5b506104016105d036600461418c565b6101b76020525f908152604090205481565b3480156105ed575f80fd5b5061042e6105fc366004614355565b611531565b34801561060c575f80fd5b5061042e61061b36600461418c565b611968565b34801561062b575f80fd5b5061040160995481565b348015610640575f80fd5b5061040161064f36600461418c565b60a66020525f908152604090205481565b34801561066b575f80fd5b5061040161067a36600461418c565b6101ba6020525f908152604090205481565b348015610697575f80fd5b506104016106a636600461418c565b6101b66020525f908152604090205481565b3480156106c3575f80fd5b506104016106d236600461418c565b6101506020525f908152604090205481565b3480156106ef575f80fd5b5061042e6106fe3660046143fa565b611a2e565b34801561070e575f80fd5b5061042e61071d366004614434565b611a57565b34801561072d575f80fd5b5061040161073c36600461418c565b6101b86020525f908152604090205481565b348015610759575f80fd5b50610762611f3f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103e2565b348015610792575f80fd5b506104016101195481565b3480156107a8575f80fd5b506104017f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c81565b3480156107db575f80fd5b506104445f81565b3480156107ee575f80fd5b5061042e6107fd36600461446c565b611f77565b34801561080d575f80fd5b5061040161081c36600461418c565b61011a6020525f908152604090205481565b348015610839575f80fd5b5061040161084836600461418c565b61014e6020525f908152604090205481565b348015610865575f80fd5b506103d66108743660046141c4565b5f91825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156108b6575f80fd5b506104016101bf5481565b3480156108cc575f80fd5b506103d66108db36600461418c565b61217c565b61042e6108ee3660046144d3565b61219f565b3480156108fe575f80fd5b506104015f81565b348015610911575f80fd5b50610444600381565b348015610925575f80fd5b5061042e61093436600461451f565b61230c565b348015610944575f80fd5b5061076261095336600461418c565b61011b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015610986575f80fd5b5061040160985481565b34801561099b575f80fd5b5061042e61244b565b3480156109af575f80fd5b50610444600481565b3480156109c3575f80fd5b5061040160e45481565b3480156109d8575f80fd5b506103d66109e736600461416c565b60da54600160ff9092169190911b16151590565b348015610a06575f80fd5b506104017f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8281565b348015610a39575f80fd5b50610401609a5481565b348015610a4e575f80fd5b5061040160975481565b348015610a63575f80fd5b5061042e610a7236600461458d565b6124a6565b348015610a82575f80fd5b506103d6610a9136600461418c565b60d96020525f908152604090205460ff1681565b348015610ab0575f80fd5b506104016101bd5481565b348015610ac6575f80fd5b5061042e610ad53660046145b7565b6125d3565b348015610ae5575f80fd5b5061042e610af43660046141c4565b612808565b348015610b04575f80fd5b506104016101bc5481565b348015610b1a575f80fd5b506104017f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2681565b348015610b4d575f80fd5b5061042e610b5c36600461416c565b61282c565b348015610b6c575f80fd5b50610401604080515f602082018190529181018290527f072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd60608201526080810182905260a081019190915260c0016040516020818303038152906040528051906020012081565b348015610bde575f80fd5b506104017f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b348015610c11575f80fd5b50610401610c2036600461418c565b6101be6020525f908152604090205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26610cf4816128d7565b60da54600160ff84161b16610d3f576040517fb015579f00000000000000000000000000000000000000000000000000000000815260ff831660048201526024015b60405180910390fd5b60da8054600160ff851690811b199091169091557fef04ba2036ccaeab3a59717b51d2b9146b0b0904077177f1148a5418bf1eae23335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25050565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c610dcc816128d7565b5f82815261011b6020908152604080832054905173ffffffffffffffffffffffffffffffffffffffff90911681523392859290917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b5f82815260656020526040902060010154610e7c816128d7565b610e8683836128e1565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610d36565b610f3a82826129d3565b5050565b6004610f4981612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610f73816128d7565b845f819003610fae576040517fb1504a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f908190610ffa60408051610100810182525f6080820181815260a0830182905260c0830182905260e083018290528252602082015260609181018290528181019190915290565b5f8981526101be60205260408120548a915b87811015611106578d8d8281811061102657611026614605565b90506020028101906110389190614632565b6110419061476b565b81499650935085611081576040517fc0e41e1d00000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b835161108e908387612b12565b8351606001515f90815260208790526040902096506110be86885f1c866020015187604001518860600151612c79565b83516060808201519151602080880151604080519889529188019490945286810191909152908501899052608085019190915260a0909320845190930151915060010161100c565b50818a1461114a576040517fd3664fb3000000000000000000000000000000000000000000000000000000008152600481018b905260248101839052604401610d36565b5f8281526101be602052604090205415611193576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f8281526101be6020526040812082905581908e908e90816111b7576111b7614605565b90506020028101906111c99190614632565b6040516020909101359084907f52bd912b0041a6ec8554b0ffae3cc1cb7b137bade0dc9e3f8f0b6758466d5df9905f90a450505050505050505050505050565b611211612e51565b85878484875f5a90506112246003612a8c565b61125861125260017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b8f612eee565b5f8e8e8e8e8b8e8e60405160200161127697969594939291906148aa565b60405160208183030381529060405280519060200120905061129781612ef5565b6112a96112a48d8f614902565b612f4f565b5f808f73ffffffffffffffffffffffffffffffffffffffff168e8d8d6040516112d3929190614915565b5f6040518083038185875af1925050503d805f811461130d576040519150601f19603f3d011682016040523d82523d5f602084013e611312565b606091505b50915091508161137c5780511561132c5780518082602001fd5b8f6040517f54613443000000000000000000000000000000000000000000000000000000008152600401610d36919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6113b06113aa60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b5f612eee565b60405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a250508615905061151957855f84900361146857853b158015611466573a5a61140461bc7c86614902565b61140e9190614850565b6114189190614924565b9150818811156114625773ffffffffffffffffffffffffffffffffffffffff87166108fc611446848b614850565b6040518115909202915f818181858888f1935050505050611466565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff84161561148b578361148d565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611515576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610d36565b5050505b505050505050611527612fc4565b5050505050505050565b5f54610100900460ff161580801561154f57505f54600160ff909116105b806115685750303b15801561156857505f5460ff166001145b6115f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d36565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611650575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff881661169d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b85811015611774575f8787838181106116ba576116ba614605565b90506020020160208101906116cf919061493b565b73ffffffffffffffffffffffffffffffffffffffff160361171c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176c7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92988888481811061175257611752614605565b9050602002016020810190611767919061493b565b6128e1565b60010161169f565b5061177f5f886128e1565b6117a97f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c886128e1565b6117b587888686612ff2565b7f033d11f27e62ab919708ec716731da80d261a6e4253259b7acde9bf89d28ec1880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556101198990555f89815261011a602090815260408083208d905580518083018490528082018490527f072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd60608083018290526080830186905260a08084018790528451808503909101815260c08401855280519086012086526101be85528386208f905560e08301869052610100830186905261012083019190915261014082018590526101608083018690528351808403909101815261018083019384905280519401939093206101bd558382526101a08101939093526101c090920184905290206101bf55801561195c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82611992816128d7565b5f805f4260995410156119b7576097546119ac9042614902565b6099555060016119c9565b609a548510156119c957849250600191505b609885905580806119d75750815b156119e257609a8390555b60408051868152831515602082015282151581830152905133917fbc3dc0cb5c15c51c81316450d44048838bb478b9809447d01c766a06f3e9f2c8919081900360600190a25050505050565b6001611a39816131a3565b5f611a43816128d7565b611a5183610119545f6131ea565b50505050565b611a5f612e51565b60a08101803590611a73906080840161493b565b611a81610120840184614956565b611a92610100860160e0870161493b565b5f5a9050611aa06003612a8c565b6101008701355f908152610150602052604081205490819003611aef576040517f4e68667500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af988806149b7565b90508114611b485780611b0c89806149b7565b6040517f5e3fd6ad0000000000000000000000000000000000000000000000000000000081526004810193909352602483015250604401610d36565b611b5588602001356134df565b611b6a6112a460c08a013560a08b0135614902565b5f611b7b60808a0160608b0161493b565b611b8b60a08b0160808c0161493b565b60a08b013560c08c013560208d0135611ba86101208f018f614956565b604051602001611bbe97969594939291906148aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050611c1f81611c048b806149b7565b611c1460608e0160408f01614a1b565b8d6101000135613557565b611c55576040517fb05e92fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c98611c8360017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b611c9360808c0160608d0161493b565b612eee565b5f80611caa60a08c0160808d0161493b565b73ffffffffffffffffffffffffffffffffffffffff1660c08c0135611cd36101208e018e614956565b604051611ce1929190614915565b5f6040518083038185875af1925050503d805f8114611d1b576040519150601f19603f3d011682016040523d82523d5f602084013e611d20565b606091505b509150915081611d9557805115611d3a5780518082602001fd5b611d4a60a08c0160808d0161493b565b6040517f5461344300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d36565b611dc36113aa60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b60405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a2505050505f861115611f2e57855f849003611e7d57853b158015611e7b573a5a611e1961bc7c86614902565b611e239190614850565b611e2d9190614924565b915081881115611e775773ffffffffffffffffffffffffffffffffffffffff87166108fc611e5b848b614850565b6040518115909202915f818181858888f1935050505050611e7b565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff841615611ea05783611ea2565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611f2a576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610d36565b5050505b505050505050611f3c612fc4565b50565b5f611f72611f6e60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b5c90565b905090565b5f54600590610100900460ff16158015611f9757505f5460ff8083169116105b612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d36565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055838214612096576040517f2526f1080000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401610d36565b5f5b848110156120f0578383828181106120b2576120b2614605565b905060200201356101be5f8888858181106120cf576120cf614605565b602090810292909201358352508101919091526040015f2055600101612098565b506101bb546101bc546101185460408051938452602084019290925290820152606090206101bf555f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600881901c5f90815261014f6020526040812054600160ff84161b161515610cc4565b60026121aa81612a8c565b73ffffffffffffffffffffffffffffffffffffffff85166121f7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34841115612231576040517fb03b693200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e480545f918261224183614a3e565b9091555090505f6122528634614850565b90505f33888884868a8a60405160200161227297969594939291906148aa565b60405160208183030381529060405280519060200120905061229483826135eb565b808873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe856c2b8bd4eb0027ce32eeaf595c21b0b6b4644b326e5b7bd80a1cf8db72e6c8a86888c8c6040516122fa959493929190614a75565b60405180910390a45050505050505050565b600461231781612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612341816128d7565b5f85900361237b576040517f7907d79b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f81815261011a60205260409020548435146123c7576040517fead4c30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101bd5460208501358114612415576040517f2f22b98a0000000000000000000000000000000000000000000000000000000081526004810182905260208601356024820152604401610d36565b5f612422868460016131ea565b90505f61243187848487613667565b905061195c81898c8c8b3560408d013560a08e01356136ef565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82612475816128d7565b5f609a81905560405133917fba88c025b0cbb77022c0c487beef24f759f1e4be2f51a205bc427cee19c2eaa691a250565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c6124d0816128d7565b73ffffffffffffffffffffffffffffffffffffffff831661251d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815261011b602090815260409182902054915173ffffffffffffffffffffffffffffffffffffffff928316815233928592908716917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60046125de81612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612608816128d7565b6126156080860186614956565b90505f0361264f576040517fc01eab5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608080820183528735825260208089013590830152878301359282019290925260608088013590820152905f9061268c90880188614956565b60405161269a929190614915565b604051809103902090506126c4826101be5f8981526020019081526020015f205461011954612b12565b60608701355f90815260208290526040812090505f612727888a606001358b5f0135856127008e80608001906126fa9190614956565b896138a6565b604080519586526020860194909452928401919091526060830152608082015260a0902090565b905080871461276c576040517fd3664fb30000000000000000000000000000000000000000000000000000000081526004810188905260248101829052604401610d36565b5f8181526101be6020526040902054156127b5576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b5f8181526101be60209081526040808320818d01359081905590519092918c01359184917f52bd912b0041a6ec8554b0ffae3cc1cb7b137bade0dc9e3f8f0b6758466d5df99190a4505050505050505050565b5f82815260656020526040902060010154612822816128d7565b610e8683836129d3565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26612856816128d7565b60da54600160ff84161b161561289d576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d36565b60da8054600160ff851690811b9091179091557fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d33610d76565b611f3c81336139a7565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f3a575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556129753390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610f3a575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60da54600160ff83161b811615612ad4576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d36565b6002811615610f3a576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260016004820152602401610d36565b8251612b4a576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060830151612b85576040517f7dc2487d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82602001518260010114612bd75760208301516040517fabefa5e80000000000000000000000000000000000000000000000000000000081526001840160048201526024810191909152604401610d36565b80836020015111612c245760208301516040517fa386ed70000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610d36565b826040015183602001511115610e8657602083015160408085015190517fcbbd795300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d36565b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001840693505f80600a73ffffffffffffffffffffffffffffffffffffffff168787878787604051602001612cd1959493929190614ac7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612d0991614b10565b5f60405180830381855afa9150503d805f8114612d41576040519150601f19603f3d011682016040523d82523d5f602084013e612d46565b606091505b509150915081612d82576040517fa71194af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040815114612dca578051604080517ff75db381000000000000000000000000000000000000000000000000000000008152610d369290600401918252602082015260400190565b6020810151604082015161100082141580612e0557507f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018114155b15612e46576040517f68dcad5f0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d36565b505050505050505050565b5f612e80611f6e60017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b14612eb7576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eec612ee560017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b6001612eee565b565b80825d5050565b5f81815260a66020526040902054600114612f3f576040517f992d87c300000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b5f90815260a66020526040812055565b5f426099541015612f7157609754612f679042614902565b6099555080612f82565b81609a54612f7f9190614902565b90505b609854811115612fbe576040517fa74c1c5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609a5550565b612eec6113aa60017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b5f54610100900460ff16613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b73ffffffffffffffffffffffffffffffffffffffff84166130d5576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316613122576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312a613a60565b613132613a60565b61313a613a60565b6131448282613af6565b61316e7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82856128e1565b6131987f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26846128e1565b5050600160e4555050565b60da54600160ff83161b1615611f3c576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610d36565b5f8284604001351161323557604080517f7061440500000000000000000000000000000000000000000000000000000000815290850135600482015260248101849052604401610d36565b613249846101a00135856101600135613c63565b6101bf5460408051610180870135815261014087013560208201526101008701359181019190915260609020146132e157604080516101808601358152610140860135602082015261010086013591810191909152606090206101bf546040517fbc5aad1100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d36565b428461012001351061332c576040517fbf81c6e00000000000000000000000000000000000000000000000000000000081526101208501356004820152426024820152604401610d36565b60a0840135613367576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060868101358252608080880135602084015260a0808901359484019490945260c08801359183019190915260e087013590820152205f8181526101be6020526040908190205491925085013514613409575f8181526101be6020526040908190205481517ffb4cd6ef0000000000000000000000000000000000000000000000000000000081529186013560048301526024820152604401610d36565b61342561341a6101e08601866149b7565b866101c00135613d30565b61343c613436610200860186614956565b85613e36565b6040808501355f81815261011a6020529190912060a08601359055610119556101bd8190556134906101a0850135610160860135610120870135604080519384526020840192909252908201526060902090565b6101bf5560408051831515815260a08601359186359190870135907f1335f1a2b3ff25f07f5fef07dd35d8fb4312c3c73b138e2fad9347b3319ab53c9060200160405180910390a49392505050565b600881901c5f90815261014f6020526040902054600160ff83161b1615613535576040517f335a4a9000000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b600881901c5f90815261014f602052604090208054600160ff84161b17905550565b5f85815b858110156135de57600163ffffffff8616821c811690036135a8576135a187878381811061358b5761358b614605565b90506020020135835f9182526020526040902090565b91506135d6565b6135d3828888848181106135be576135be614605565b905060200201355f9182526020526040902090565b91505b60010161355b565b5090911495945050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015f90815261014e60208181526040808420548452848252808420868552929091528083208290555190918391839186917fea3b023b4c8680d4b4824f0143132c95476359a2bb70a81d6c5a36f6918f63399190a4505050565b5f60405184815283602082015260406101008701604083013782608082015260206040870160a083013760a0610140870160c083013761018081016102208701356020810261024089018337602002902061016082015261018090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900695945050505050565b6040805160018082528183019092525f916020808301908036833701905050905087815f8151811061372357613723614605565b6020908102919091018101919091525f88815261011b909152604090205473ffffffffffffffffffffffffffffffffffffffff168061378e576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7e4f7a8a0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff831690637e4f7a8a906137e6908b908b908890600401614b21565b6020604051808303815f875af1158015613802573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138269190614b78565b90508061385f576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518781526020810186905286917f5c885a794662ebe3b08ae0874fc2c88b5343b0223ba9cd2cad92b69c0d0c901f910160405180910390a250505050505050505050565b5f6138b2602084614b97565b156138e9576040517f6426c6c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f729eebce00000000000000000000000000000000000000000000000000000000835b801561399e57602081039050808601357fff0000000000000000000000000000000000000000000000000000000000000081161561394f57604051838152600481fd5b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001817f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018787090893505061390c565b50509392505050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f3a576139e681613eca565b6139f1836020613ee9565b604051602001613a02929190614bcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610d3691600401614c4f565b5f54610100900460ff16612eec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b5f54610100900460ff16613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b815f03613bc5576040517fb5ed5a3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03613bfe576040517fd10d72bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60978290556098819055613c128242614902565b60998190556097546098546040805192835260208301919091528101919091527f8f805c372b66240792580418b7328c0c554ae235f0932475c51b026887fe26a99060600160405180910390a15050565b815f03613ca5578015610f3a576040517f0c25659200000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b80613cdf576040517f5228f4c800000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f82815261014e60205260409020548114610f3a576040517f36459fa00000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d36565b5f5b82811015611a51576101505f858584818110613d5057613d50614605565b9050602002013581526020019081526020015f20545f14613db957838382818110613d7d57613d7d614605565b905060200201356040517fe5d14425000000000000000000000000000000000000000000000000000000008152600401610d3691815260200190565b816101505f868685818110613dd057613dd0614605565b9050602002013581526020019081526020015f208190555081848483818110613dfb57613dfb614605565b905060200201357f300e6f978eee6a4b0bba78dd8400dc64fd5652dbfc868a2258e16d0977be222b60405160405180910390a3600101613d32565b613e41600283614b97565b15613e7b576040517f0c91d77600000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f805b83811015613ec3576040518582013560f01c9250838301907f3c116827db9db3a30c1a25db8b0ee4bab9d2b223560209cfd839601b621c726d905f90a2600201613e7e565b5050505050565b6060610cc473ffffffffffffffffffffffffffffffffffffffff831660145b60605f613ef7836002614924565b613f02906002614902565b67ffffffffffffffff811115613f1a57613f1a61466e565b6040519080825280601f01601f191660200182016040528015613f44576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110613f7a57613f7a614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613fdc57613fdc614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f614016846002614924565b614021906001614902565b90505b60018111156140bd577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061406257614062614605565b1a60f81b82828151811061407857614078614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c936140b681614c9f565b9050614024565b508315614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d36565b9392505050565b5f6020828403121561413d575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114614126575f80fd5b5f6020828403121561417c575f80fd5b813560ff81168114614126575f80fd5b5f6020828403121561419c575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611f3c575f80fd5b5f80604083850312156141d5575f80fd5b8235915060208301356141e7816141a3565b809150509250929050565b5f8083601f840112614202575f80fd5b50813567ffffffffffffffff811115614219575f80fd5b6020830191508360208260051b8501011115614233575f80fd5b9250929050565b5f805f806060858703121561424d575f80fd5b843567ffffffffffffffff811115614263575f80fd5b61426f878288016141f2565b90989097506020870135966040013595509350505050565b5f8083601f840112614297575f80fd5b50813567ffffffffffffffff8111156142ae575f80fd5b602083019150836020828501011115614233575f80fd5b5f805f805f805f8060e0898b0312156142dc575f80fd5b88356142e7816141a3565b975060208901356142f7816141a3565b965060408901359550606089013594506080890135614315816141a3565b935060a089013567ffffffffffffffff811115614330575f80fd5b61433c8b828c01614287565b999c989b50969995989497949560c00135949350505050565b5f805f805f805f805f6101008a8c03121561436e575f80fd5b8935985060208a0135975060408a0135614387816141a3565b965060608a0135614397816141a3565b955060808a013567ffffffffffffffff8111156143b2575f80fd5b6143be8c828d016141f2565b9a9d999c50979a9699979860a08801359760c0810135975060e0013595509350505050565b5f61022082840312156143f4575f80fd5b50919050565b5f6020828403121561440a575f80fd5b813567ffffffffffffffff811115614420575f80fd5b61442c848285016143e3565b949350505050565b5f60208284031215614444575f80fd5b813567ffffffffffffffff81111561445a575f80fd5b82016101408185031215614126575f80fd5b5f805f806040858703121561447f575f80fd5b843567ffffffffffffffff80821115614496575f80fd5b6144a2888389016141f2565b909650945060208701359150808211156144ba575f80fd5b506144c7878288016141f2565b95989497509550505050565b5f805f80606085870312156144e6575f80fd5b84356144f1816141a3565b935060208501359250604085013567ffffffffffffffff811115614513575f80fd5b6144c787828801614287565b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b61455588838901614287565b9096509450602087013593506040870135915080821115614574575f80fd5b50614581878288016143e3565b91505092959194509250565b5f806040838503121561459e575f80fd5b82356145a9816141a3565b946020939093013593505050565b5f805f606084860312156145c9575f80fd5b833567ffffffffffffffff8111156145df575f80fd5b840160a081870312156145f0575f80fd5b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21833603018112614664575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156146be576146be61466e565b60405290565b5f82601f8301126146d3575f80fd5b813567ffffffffffffffff808211156146ee576146ee61466e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156147345761473461466e565b8160405283815286602085880101111561474c575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f81360360e081121561477c575f80fd5b61478461469b565b6080821215614791575f80fd5b61479961469b565b9150833582526020840135602083015260408401356040830152606084013560608301528181526080840135602082015260a0840135915067ffffffffffffffff808311156147e6575f80fd5b6147f2368487016146c4565b604083015260c085013592508083111561480a575f80fd5b50614817368386016146c4565b60608201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610cc457610cc4614823565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff808a16835280891660208401525086604083015285606083015284608083015260c060a08301526148f560c083018486614863565b9998505050505050505050565b80820180821115610cc457610cc4614823565b818382375f9101908152919050565b8082028115828204841417610cc457610cc4614823565b5f6020828403121561494b575f80fd5b8135614126816141a3565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614989575f80fd5b83018035915067ffffffffffffffff8211156149a3575f80fd5b602001915036819003821315614233575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126149ea575f80fd5b83018035915067ffffffffffffffff821115614a04575f80fd5b6020019150600581901b3603821315614233575f80fd5b5f60208284031215614a2b575f80fd5b813563ffffffff81168114614126575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6e57614a6e614823565b5060010190565b858152846020820152836040820152608060608201525f614a9a608083018486614863565b979650505050505050565b5f5b83811015614abf578181015183820152602001614aa7565b50505f910152565b8581528460208201528360408201525f8351614aea816060850160208801614aa5565b835190830190614b01816060840160208801614aa5565b01606001979650505050505050565b5f8251614664818460208701614aa5565b604081525f614b34604083018587614863565b8281036020848101919091528451808352858201928201905f5b81811015614b6a57845183529383019391830191600101614b4e565b509098975050505050505050565b5f60208284031215614b88575f80fd5b81518015158114614126575f80fd5b5f82614bca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614c06816017850160208801614aa5565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614c43816028840160208801614aa5565b01602801949350505050565b602081525f8251806020840152614c6d816040850160208701614aa5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f81614cad57614cad614823565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220e76e56676b2ceca04f884882f6f2cc812cb4d93334bb0fd187d9d040cd25b8fd64736f6c63430008180033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/e2e/src/abi/ProxyAdmin.json b/e2e/src/abi/ProxyAdmin.json deleted file mode 100644 index b6e181e2a..000000000 --- a/e2e/src/abi/ProxyAdmin.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "contractName": "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 ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "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 ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ITransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61069a8061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212207ad53e1008cce369999f6b5f2f77109510b404ff1de9b47b639981fd68e6239264736f6c63430008090033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610499565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d1610215565b005b3480156100df57600080fd5b506100d16100ee3660046104bd565b610229565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f36600461050c565b610291565b34801561013057600080fd5b506100d161013f3660046104bd565b610300565b34801561015057600080fd5b506100d161015f366004610499565b610336565b34801561017057600080fd5b506100a061017f366004610499565b6103b4565b6000806000836001600160a01b03166040516101aa90635c60da1b60e01b815260040190565b600060405180830381855afa9150503d80600081146101e5576040519150601f19603f3d011682016040523d82523d6000602084013e6101ea565b606091505b5091509150816101f957600080fd5b8080602001905181019061020d91906105e2565b949350505050565b61021d6103da565b6102276000610434565b565b6102316103da565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561027557600080fd5b505af1158015610289573d6000803e3d6000fd5b505050505050565b6102996103da565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102c990869086906004016105ff565b6000604051808303818588803b1580156102e257600080fd5b505af11580156102f6573d6000803e3d6000fd5b5050505050505050565b6103086103da565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161025b565b61033e6103da565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6103b181610434565b50565b6000806000836001600160a01b03166040516101aa906303e1469160e61b815260040190565b6000546001600160a01b031633146102275760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146103b157600080fd5b6000602082840312156104ab57600080fd5b81356104b681610484565b9392505050565b600080604083850312156104d057600080fd5b82356104db81610484565b915060208301356104eb81610484565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561052157600080fd5b833561052c81610484565b9250602084013561053c81610484565b9150604084013567ffffffffffffffff8082111561055957600080fd5b818601915086601f83011261056d57600080fd5b81358181111561057f5761057f6104f6565b604051601f8201601f19908116603f011681019083821181831017156105a7576105a76104f6565b816040528281528960208487010111156105c057600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156105f457600080fd5b81516104b681610484565b60018060a01b038316815260006020604081840152835180604085015260005b8181101561063b5785810183015185820160600152820161061f565b8181111561064d576000606083870101525b50601f01601f19169290920160600194935050505056fea26469706673582212207ad53e1008cce369999f6b5f2f77109510b404ff1de9b47b639981fd68e6239264736f6c63430008090033", - "linkReferences": {}, - "deployedLinkReferences": {} - } \ No newline at end of file diff --git a/e2e/src/abi/TestPlonkVerifierForDataAggregation.json b/e2e/src/abi/TestPlonkVerifierForDataAggregation.json deleted file mode 100644 index 8c0111f9c..000000000 --- a/e2e/src/abi/TestPlonkVerifierForDataAggregation.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TestPlonkVerifierForDataAggregation", - "sourceName": "contracts/verifiers/test/TestPlonkVerifierForDataAggregation.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "proof", - "type": "bytes" - }, - { - "internalType": "uint256[]", - "name": "public_inputs", - "type": "uint256[]" - } - ], - "name": "Verify", - "outputs": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506129b4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80637e4f7a8a14610030575b600080fd5b61004361003e3660046128b9565b610057565b604051901515815260200160405180910390f35b6000604051610220810161006a8461043a565b610074858561044d565b61007d8661049d565b610086876104b3565b600061009386868a6106bc565b905061009e816109f4565b90506100aa8189610a5b565b90506100b68189610aea565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061010a8460108561284d565b086101a08401525061011d818587610b55565b61012882868a610ed1565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101808401525061015f905061127c565b610168866123c5565b61017186612358565b61017a86611f72565b61018386611a71565b61018c86611789565b610195866113cd565b6101e0015190506128b1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b6001811461044a5761044a6101a1565b50565b60005b81811015610498577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000833511156104895761048961025f565b60209290920191600101610450565b505050565b6103a08181146104af576104af6102be565b5050565b6102a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156104e9576104e961031d565b5061028081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105205761052061031d565b5061018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105575761055761031d565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561058e5761058e61031d565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105c5576105c561031d565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105fc576105fc61031d565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156106335761063361031d565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561066a5761066a61031d565b50610340810160005b6001811015610498577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000823511156106ad576106ad61031d565b60209190910190600101610673565b600060405161022081016467616d6d6181527f02b433cd99b33b9fdba96401bbf39bd0f5f67e77ab109892fd462a1a4bb4c77d60208201527f09185e84da16e93455517004ed7c4407cf02c9e877d9137029602a8fbd608d5160408201527f015cfb53cb67714080757255dca722254b9f02473adc68ffad8fed99ffcec84f60608201527f1ad16c51ef408d7dfa401c8e4957c3c88ed42be7b10f16dcbc31160bc73f0b6e60808201527f0f8b1f59a0d05259ef250ac4ad1fbf7a7b92d00cd2ee6d16a461736190c8e5b560a08201527f2140af9a35d0c1f2cb2a36e0422ac0a0ab3deedade996f3c25da12ab4f64a8d060c08201527f176483729ec70267f31944f44d8fd2b46bb449b053ab28a088ca0c9374b8514560e08201527f073766ef0bf4fb51ce28e3fba9579f978c4d59403d6e7eed6285ea4ea43142676101008201527f1d1931153ed9e8bdfbddcb626cad05f92b8c18b063e5693fd15e65f33321f13a6101208201527f2fb060b2a580e4aa0b3414e4bf76eec714e85149eb17cc588471a55dfdf502e46101408201527f1df6e9e9a3ffca4e632577bf42848a21344ffdba31c3be584fc36e99de7d95646101608201527f1d19f23ff924846cb4598a0ec9a60f429198685e5d8cb444c7c26d6cfb79a90c6101808201527f0cfd83155387d72f55c1cb7cb5c1f124a0880f81c081ccf13c6f49ffe99f86a36101a08201527f180fdb19efe9161e6c9a8c917e2f0120c0a45d15c07e7d8194122f3b349cca196101c08201527f0b27e9c9e5631b28b452193fad7ff3753f82fa2b46712d74637a7eaeaf9949ba6101e08201527f1a03ed6446a3730033f3ca7f642c750bed84add29e07a0d92df48a09cf1e14586102008201527f135730fd4e7aa6fe43bb647c6e831f8852117cc63cc5c3576df5de31226e84246102208201527f02e22b2b0dd77d1248713cca10efb21d39456b820bd9c635fcbe13f97090d42d610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa9050806109be576109be61037c565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b600060405161022060405101636265746181528360208201526020816024601c840160025afa80610a2757610a2761037c565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b600060405161022060405101606564616c7068618252602082018681526020810190506103608601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610abb57610abb61037c565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161022060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610b2557610b2561037c565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b600060405160608101516101a0820151915085610b7481878585610bf1565b60009250600091505b85821015610be7577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610b7d565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab1000001830960018560005b86811015610ce0577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b8409925060209190910190600101610c3b565b50610cec818789610da5565b50600190508560005b86811015610d9b577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b84099250600101610cf5565b5050505050505050565b600183526000805b83811015610dfb5781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818309905060208401935080848801525050600181019050610dad565b506020810382019150808401935050610e3c6020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103855161284d565b60005b83811015610eca5760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101610e3f565b5050505050565b600060405160608101516101a082015191506103608401600080610efb896020850135853561107e565b9150610f0c8960058a018787610f42565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b6000610f6f85857f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b61284d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab100000182099050611028867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff8761284d565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b600083526000602084015280604084015250806060830152506000608082015360306081820153600060828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201536000602082608f8460025afa806111195761111961037c565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa91508161118f5761118f61037c565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806112105761121061037c565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610220604051016101a08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103606085015108611302837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff8361284d565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab1000001820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b6040516102208101610140820151815261016082015160208201526102c083013560408201526102e08301356060820152610220830135608082015261024083013560a082015261030083013560c082015261032083013560e082015260608201516101008201526101c08201516101208201526020816101408360025afa80611459576114596103db565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018251069050816040810192506102c085013581526102e085013560208201526114a983836103008801846127b4565b61014084016114be84846102208901846127b4565b61012085016114d2846102608901836127fb565b6001855260026020860152805160408087019182529095908160608160075afa9150816115015761150161037c565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47038252611539868285866126a3565b5050836040850194506115568560608801516102c08a0184612742565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186850993506115d685856103008a01846127b4565b6115e2858284856126a3565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f12740934ba9615b77b6a49b06fcce83ce90d67b1d0e2a530069e3a7306569a916101008401527f116da8c89a0d090f3d8644ada33a5f1c8013ba7204aeca62d66d931b99afe6e76101208401527f25222d9816e5f86b4a7dedd00d04acc5c979c18bd22b834ea8c6d07c0ba441db6101408401527f076441042e77b6309644b56251f059cf14befc72ac8a6157d30924e58dc4c1726101608401529250610498905081604051602060006101808460085afa6000516101e09290920180519190921616905250565b6040516102206040510160208101604082016101c084015180610140860160a087015161014088015260c08701516101608801526102808801356101208801526117d8868360e08a018461276d565b6117eb826102a08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838309915061182186838a6101408b016127b4565b611834826101808a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611869868360408b01846127b4565b61187c826101a08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991506118b1868360808b01846127b4565b6118c4826101c08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f02b433cd99b33b9fdba96401bbf39bd0f5f67e77ab109892fd462a1a4bb4c77d86527f09185e84da16e93455517004ed7c4407cf02c9e877d9137029602a8fbd608d51855261193c8483888461276d565b61194f826101e08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f015cfb53cb67714080757255dca722254b9f02473adc68ffad8fed99ffcec84f86527f1ad16c51ef408d7dfa401c8e4957c3c88ed42be7b10f16dcbc31160bc73f0b6e85526119c78483888461276d565b6119da826102008a016101208a016127fb565b61034088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f135730fd4e7aa6fe43bb647c6e831f8852117cc63cc5c3576df5de31226e842487527f02e22b2b0dd77d1248713cca10efb21d39456b820bd9c635fcbe13f97090d42d8652611a578584898561276d565b611a6683826101208b016127fb565b505050505050505050565b6040516467616d6d616102208201908152606082015161024083015260a082015161026083015260c08083015161028084015260e08301516102a08401526101008301516102c0840152836102e08401377f02b433cd99b33b9fdba96401bbf39bd0f5f67e77ab109892fd462a1a4bb4c77d610180828101919091527f09185e84da16e93455517004ed7c4407cf02c9e877d9137029602a8fbd608d516101a0808401919091527f015cfb53cb67714080757255dca722254b9f02473adc68ffad8fed99ffcec84f6101c0808501919091527f1ad16c51ef408d7dfa401c8e4957c3c88ed42be7b10f16dcbc31160bc73f0b6e6101e0808601919091527f135730fd4e7aa6fe43bb647c6e831f8852117cc63cc5c3576df5de31226e8424610200808701919091527f02e22b2b0dd77d1248713cca10efb21d39456b820bd9c635fcbe13f97090d42d610220870152610280888101356102408801526102a0808a0135610260890152958901359087015292870135938501939093528501356102c0840152908401356102e08301528301356103008201526103208101610340840160005b6001811015611c35578135835260209283019290910190600101611c16565b50506102608401359052601b61034560206101c085018285850160025afa9250505080611c6457611c6461037c565b506101c00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610220604051017f176483729ec70267f31944f44d8fd2b46bb449b053ab28a088ca0c9374b8514581527f073766ef0bf4fb51ce28e3fba9579f978c4d59403d6e7eed6285ea4ea43142676020820152611cfd604082016101808501358360e08601612717565b7f1d1931153ed9e8bdfbddcb626cad05f92b8c18b063e5693fd15e65f33321f13a81527f2fb060b2a580e4aa0b3414e4bf76eec714e85149eb17cc588471a55dfdf502e46020820152611d5d604082016101a08501358360e0860161276d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f1df6e9e9a3ffca4e632577bf42848a21344ffdba31c3be584fc36e99de7d956482527f1d19f23ff924846cb4598a0ec9a60f429198685e5d8cb444c7c26d6cfb79a90c6020830152611de660408301828460e0870161276d565b507f0cfd83155387d72f55c1cb7cb5c1f124a0880f81c081ccf13c6f49ffe99f86a381527f180fdb19efe9161e6c9a8c917e2f0120c0a45d15c07e7d8194122f3b349cca196020820152611e47604082016101c08501358360e0860161276d565b7f0b27e9c9e5631b28b452193fad7ff3753f82fa2b46712d74637a7eaeaf9949ba81527f1a03ed6446a3730033f3ca7f642c750bed84add29e07a0d92df48a09cf1e14586020820152611ea2604082018260e08501806126a3565b6103408301610360840160005b6001811015611eef578135845260208201356020850152611ed96040850184358660e0890161276d565b6020929092019160409190910190600101611eaf565b5050507f0f8b1f59a0d05259ef250ac4ad1fbf7a7b92d00cd2ee6d16a461736190c8e5b581527f2140af9a35d0c1f2cb2a36e0422ac0a0ab3deedade996f3c25da12ab4f64a8d06020820152611f4d60408201858360e0860161276d565b61022083013581526102408301356020820152610eca60408201868360e0860161276d565b60405160208101516040820151606083015160008401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061234c88828c611c93565b50505050505050505050565b6040516002601001610220604051016123768183606086015161284d565b915061238b8183610140870160a08701612742565b61239e81610100860160a08601806126dd565b6123ad818360a0860180612717565b6123bf8160c0860160a08601806126dd565b50505050565b604051610220604051017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350981527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604083015182510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808401358251088152602081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350981527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604084015182510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08501358251088152604082017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001825184510983527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001815184510980845284517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019250900982527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102608501358351098252606082017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808501516102a08701350881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001835182510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010382510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a085015161028087013509825281518151146101e08501525050505050565b604051508151845260208201516020850152825160408501526020830151606085015260408160808660065afa80610eca57610eca610200565b604051508151845260208201516020850152823560408501526020830135606085015260408160808660065afa80610eca57610eca610200565b815184526020808301519085015260408481018490528160608660075afa80610eca57610eca610200565b813584526020808301359085015260408481018490528160608660075afa80610eca57610eca610200565b815184526020808301519085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa1680610eca57610eca610200565b813584526020808301359085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa1680610eca57610eca610200565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a0820152600060208260c08460055afa806128ab576128ab61037c565b50505190565b949350505050565b600080600080604085870312156128cf57600080fd5b843567ffffffffffffffff808211156128e757600080fd5b818701915087601f8301126128fb57600080fd5b81358181111561290a57600080fd5b88602082850101111561291c57600080fd5b60209283019650945090860135908082111561293757600080fd5b818701915087601f83011261294b57600080fd5b81358181111561295a57600080fd5b8860208260051b850101111561296f57600080fd5b9598949750506020019450505056fea26469706673582212203a34f7f888032ffffe0341df30be2ff1e4f37f98cf4034382bb92e38185b951e64736f6c63430008160033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80637e4f7a8a14610030575b600080fd5b61004361003e3660046128b9565b610057565b604051901515815260200160405180910390f35b6000604051610220810161006a8461043a565b610074858561044d565b61007d8661049d565b610086876104b3565b600061009386868a6106bc565b905061009e816109f4565b90506100aa8189610a5b565b90506100b68189610aea565b5060608201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000061010a8460108561284d565b086101a08401525061011d818587610b55565b61012882868a610ed1565b91507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183086101808401525061015f905061127c565b610168866123c5565b61017186612358565b61017a86611f72565b61018386611a71565b61018c86611789565b610195866113cd565b6101e0015190506128b1565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f77726f6e67206e756d626572206f66207075626c696320696e707574730000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6572726f72206563206f7065726174696f6e00000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e707574732061726520626967676572207468616e207200000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f77726f6e672070726f6f662073697a65000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6f70656e696e677320626967676572207468616e2072000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6572726f722076657269667900000000000000000000000000000000000000006044820152606481fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6572726f722072616e646f6d2067656e206b7a670000000000000000000000006044820152606481fd5b6001811461044a5761044a6101a1565b50565b60005b81811015610498577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000833511156104895761048961025f565b60209290920191600101610450565b505050565b6103a08181146104af576104af6102be565b5050565b6102a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156104e9576104e961031d565b5061028081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105205761052061031d565b5061018081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105575761055761031d565b506101a081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561058e5761058e61031d565b506101c081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105c5576105c561031d565b506101e081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156105fc576105fc61031d565b5061020081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000813511156106335761063361031d565b5061026081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008135111561066a5761066a61031d565b50610340810160005b6001811015610498577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000823511156106ad576106ad61031d565b60209190910190600101610673565b600060405161022081016467616d6d6181527f02b433cd99b33b9fdba96401bbf39bd0f5f67e77ab109892fd462a1a4bb4c77d60208201527f09185e84da16e93455517004ed7c4407cf02c9e877d9137029602a8fbd608d5160408201527f015cfb53cb67714080757255dca722254b9f02473adc68ffad8fed99ffcec84f60608201527f1ad16c51ef408d7dfa401c8e4957c3c88ed42be7b10f16dcbc31160bc73f0b6e60808201527f0f8b1f59a0d05259ef250ac4ad1fbf7a7b92d00cd2ee6d16a461736190c8e5b560a08201527f2140af9a35d0c1f2cb2a36e0422ac0a0ab3deedade996f3c25da12ab4f64a8d060c08201527f176483729ec70267f31944f44d8fd2b46bb449b053ab28a088ca0c9374b8514560e08201527f073766ef0bf4fb51ce28e3fba9579f978c4d59403d6e7eed6285ea4ea43142676101008201527f1d1931153ed9e8bdfbddcb626cad05f92b8c18b063e5693fd15e65f33321f13a6101208201527f2fb060b2a580e4aa0b3414e4bf76eec714e85149eb17cc588471a55dfdf502e46101408201527f1df6e9e9a3ffca4e632577bf42848a21344ffdba31c3be584fc36e99de7d95646101608201527f1d19f23ff924846cb4598a0ec9a60f429198685e5d8cb444c7c26d6cfb79a90c6101808201527f0cfd83155387d72f55c1cb7cb5c1f124a0880f81c081ccf13c6f49ffe99f86a36101a08201527f180fdb19efe9161e6c9a8c917e2f0120c0a45d15c07e7d8194122f3b349cca196101c08201527f0b27e9c9e5631b28b452193fad7ff3753f82fa2b46712d74637a7eaeaf9949ba6101e08201527f1a03ed6446a3730033f3ca7f642c750bed84add29e07a0d92df48a09cf1e14586102008201527f135730fd4e7aa6fe43bb647c6e831f8852117cc63cc5c3576df5de31226e84246102208201527f02e22b2b0dd77d1248713cca10efb21d39456b820bd9c635fcbe13f97090d42d610240820152610260810160208602808883379081019060c0808784375061030501905060208282601b820160025afa9050806109be576109be61037c565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182066040820152509392505050565b600060405161022060405101636265746181528360208201526020816024601c840160025afa80610a2757610a2761037c565b5080519250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018206602082015250919050565b600060405161022060405101606564616c7068618252602082018681526020810190506103608601600160400280828437928301929190910190506040610220870182375060208282601b850160025afa905080610abb57610abb61037c565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181069091529392505050565b60405161022060405101637a657461815283602082015260c0808401604083013760208160e4601c840160025afa80610b2557610b2561037c565b50517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006606091909101525050565b600060405160608101516101a0820151915085610b7481878585610bf1565b60009250600091505b85821015610be7577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001853582510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018385086020958601959094506001929092019101610b7d565b5050509392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab1000001830960018560005b86811015610ce0577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103860882527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b8409925060209190910190600101610c3b565b50610cec818789610da5565b50600190508560005b86811015610d9b577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001868551090982526020820191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b84099250600101610cf5565b5050505050505050565b600183526000805b83811015610dfb5781850151828401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818309905060208401935080848801525050600181019050610dad565b506020810382019150808401935050610e3c6020840160027f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103855161284d565b60005b83811015610eca5760208503945082517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018651840984527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090940193925050600101610e3f565b5050505050565b600060405160608101516101a082015191506103608401600080610efb896020850135853561107e565b9150610f0c8960058a018787610f42565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018082840987089998505050505050505050565b6000610f6f85857f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b61284d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001817f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103840894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab100000182099050611028867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff8761284d565b94507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018482099695505050505050565b600083526000602084015280604084015250806060830152506000608082015360306081820153600060828201536042608382015360536084820153604260858201536032608682015360326087820153602d608882015360506089820153606c608a820153606f608b820153606e608c820153606b608d820153600b608e8201536000602082608f8460025afa806111195761111961037c565b8251600160208501536042602185015360536022850153604260238501536032602485015360326025850153602d602685015360506027850153606c6028850153606f6029850153606e602a850153606b602b850153600b602c850153602084602d8660025afa91508161118f5761118f61037c565b8351186020840152600260408401536042604184015360536042840153604260438401536032604484015360326045840153602d604684015360506047840153606c6048840153606f6049840153606e604a840153606b604b840153600b604c84015360208301602081602d8360025afa915050806112105761121061037c565b507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017001000000000000000000000000000000008351099050602082015160801c7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018183089392505050565b604051610220604051016101a08201517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103606085015108611302837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff8361284d565b90507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab1000001820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282098451935091507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001905082820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018282099050806080840152505050565b6040516102208101610140820151815261016082015160208201526102c083013560408201526102e08301356060820152610220830135608082015261024083013560a082015261030083013560c082015261032083013560e082015260608201516101008201526101c08201516101208201526020816101408360025afa80611459576114596103db565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018251069050816040810192506102c085013581526102e085013560208201526114a983836103008801846127b4565b61014084016114be84846102208901846127b4565b61012085016114d2846102608901836127fb565b6001855260026020860152805160408087019182529095908160608160075afa9150816115015761150161037c565b60208101915081517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47038252611539868285866126a3565b5050836040850194506115568560608801516102c08a0184612742565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b60608801510995507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186850993506115d685856103008a01846127b4565b6115e2858284856126a3565b50602082810180517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd470381528251865291810151908501527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260408501527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60608501527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60808501527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60a0850152905160c0840152805160e08401527f12740934ba9615b77b6a49b06fcce83ce90d67b1d0e2a530069e3a7306569a916101008401527f116da8c89a0d090f3d8644ada33a5f1c8013ba7204aeca62d66d931b99afe6e76101208401527f25222d9816e5f86b4a7dedd00d04acc5c979c18bd22b834ea8c6d07c0ba441db6101408401527f076441042e77b6309644b56251f059cf14befc72ac8a6157d30924e58dc4c1726101608401529250610498905081604051602060006101808460085afa6000516101e09290920180519190921616905250565b6040516102206040510160208101604082016101c084015180610140860160a087015161014088015260c08701516101608801526102808801356101208801526117d8868360e08a018461276d565b6117eb826102a08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838309915061182186838a6101408b016127b4565b611834826101808a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018383099150611869868360408b01846127b4565b61187c826101a08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991506118b1868360808b01846127b4565b6118c4826101c08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f02b433cd99b33b9fdba96401bbf39bd0f5f67e77ab109892fd462a1a4bb4c77d86527f09185e84da16e93455517004ed7c4407cf02c9e877d9137029602a8fbd608d51855261193c8483888461276d565b61194f826101e08a016101208a016127fb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183830991507f015cfb53cb67714080757255dca722254b9f02473adc68ffad8fed99ffcec84f86527f1ad16c51ef408d7dfa401c8e4957c3c88ed42be7b10f16dcbc31160bc73f0b6e85526119c78483888461276d565b6119da826102008a016101208a016127fb565b61034088017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184840992507f135730fd4e7aa6fe43bb647c6e831f8852117cc63cc5c3576df5de31226e842487527f02e22b2b0dd77d1248713cca10efb21d39456b820bd9c635fcbe13f97090d42d8652611a578584898561276d565b611a6683826101208b016127fb565b505050505050505050565b6040516467616d6d616102208201908152606082015161024083015260a082015161026083015260c08083015161028084015260e08301516102a08401526101008301516102c0840152836102e08401377f02b433cd99b33b9fdba96401bbf39bd0f5f67e77ab109892fd462a1a4bb4c77d610180828101919091527f09185e84da16e93455517004ed7c4407cf02c9e877d9137029602a8fbd608d516101a0808401919091527f015cfb53cb67714080757255dca722254b9f02473adc68ffad8fed99ffcec84f6101c0808501919091527f1ad16c51ef408d7dfa401c8e4957c3c88ed42be7b10f16dcbc31160bc73f0b6e6101e0808601919091527f135730fd4e7aa6fe43bb647c6e831f8852117cc63cc5c3576df5de31226e8424610200808701919091527f02e22b2b0dd77d1248713cca10efb21d39456b820bd9c635fcbe13f97090d42d610220870152610280888101356102408801526102a0808a0135610260890152958901359087015292870135938501939093528501356102c0840152908401356102e08301528301356103008201526103208101610340840160005b6001811015611c35578135835260209283019290910190600101611c16565b50506102608401359052601b61034560206101c085018285850160025afa9250505080611c6457611c6461037c565b506101c00180517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019006905250565b604051610220604051017f176483729ec70267f31944f44d8fd2b46bb449b053ab28a088ca0c9374b8514581527f073766ef0bf4fb51ce28e3fba9579f978c4d59403d6e7eed6285ea4ea43142676020820152611cfd604082016101808501358360e08601612717565b7f1d1931153ed9e8bdfbddcb626cad05f92b8c18b063e5693fd15e65f33321f13a81527f2fb060b2a580e4aa0b3414e4bf76eec714e85149eb17cc588471a55dfdf502e46020820152611d5d604082016101a08501358360e0860161276d565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a0840135610180850135097f1df6e9e9a3ffca4e632577bf42848a21344ffdba31c3be584fc36e99de7d956482527f1d19f23ff924846cb4598a0ec9a60f429198685e5d8cb444c7c26d6cfb79a90c6020830152611de660408301828460e0870161276d565b507f0cfd83155387d72f55c1cb7cb5c1f124a0880f81c081ccf13c6f49ffe99f86a381527f180fdb19efe9161e6c9a8c917e2f0120c0a45d15c07e7d8194122f3b349cca196020820152611e47604082016101c08501358360e0860161276d565b7f0b27e9c9e5631b28b452193fad7ff3753f82fa2b46712d74637a7eaeaf9949ba81527f1a03ed6446a3730033f3ca7f642c750bed84add29e07a0d92df48a09cf1e14586020820152611ea2604082018260e08501806126a3565b6103408301610360840160005b6001811015611eef578135845260208201356020850152611ed96040850184358660e0890161276d565b6020929092019160409190910190600101611eaf565b5050507f0f8b1f59a0d05259ef250ac4ad1fbf7a7b92d00cd2ee6d16a461736190c8e5b581527f2140af9a35d0c1f2cb2a36e0422ac0a0ab3deedade996f3c25da12ab4f64a8d06020820152611f4d60408201858360e0860161276d565b61022083013581526102408301356020820152610eca60408201868360e0860161276d565b60405160208101516040820151606083015160008401517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184610260880135097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101e088013586097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180890135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161020089013587097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08a0135820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000186820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018284097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000185820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600580097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878a0998507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808c01358a0894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188860894507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160058a0993507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08c0135850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000188850893507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001818a099250507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101c08b0135830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000187830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183850997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018289097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001908103985085890997507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808a01518908975061234c88828c611c93565b50505050505050505050565b6040516002601001610220604051016123768183606086015161284d565b915061238b8183610140870160a08701612742565b61239e81610100860160a08601806126dd565b6123ad818360a0860180612717565b6123bf8160c0860160a08601806126dd565b50505050565b604051610220604051017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208301516101e08501350981527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604083015182510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808401358251088152602081017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208401516102008601350981527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604084015182510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08501358251088152604082017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408501516101c08701350881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001825184510983527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001815184510980845284517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019250900982527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102608501358351098252606082017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101808501516102a08701350881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001835182510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160808501517f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000010382510881527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a085015161028087013509825281518151146101e08501525050505050565b604051508151845260208201516020850152825160408501526020830151606085015260408160808660065afa80610eca57610eca610200565b604051508151845260208201516020850152823560408501526020830135606085015260408160808660065afa80610eca57610eca610200565b815184526020808301519085015260408481018490528160608660075afa80610eca57610eca610200565b813584526020808301359085015260408481018490528160608660075afa80610eca57610eca610200565b815184526020808301519085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa1680610eca57610eca610200565b813584526020808301359085015260408481018490528460608160075afa815160408601526020820151606086015260408260808760065afa1680610eca57610eca610200565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838335097f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181835108825250505050565b602083526020808401526020604084015280606084015250806080830152507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a0820152600060208260c08460055afa806128ab576128ab61037c565b50505190565b949350505050565b600080600080604085870312156128cf57600080fd5b843567ffffffffffffffff808211156128e757600080fd5b818701915087601f8301126128fb57600080fd5b81358181111561290a57600080fd5b88602082850101111561291c57600080fd5b60209283019650945090860135908082111561293757600080fd5b818701915087601f83011261294b57600080fd5b81358181111561295a57600080fd5b8860208260051b850101111561296f57600080fd5b9598949750506020019450505056fea26469706673582212203a34f7f888032ffffe0341df30be2ff1e4f37f98cf4034382bb92e38185b951e64736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/e2e/src/abi/TransparentUpgradeableProxy.json b/e2e/src/abi/TransparentUpgradeableProxy.json deleted file mode 100644 index be5fb6065..000000000 --- a/e2e/src/abi/TransparentUpgradeableProxy.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "contractName": "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" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000eda38038062000eda83398101604081905262000026916200049d565b828162000036828260006200004d565b50620000449050826200008a565b505050620005d0565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001791760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000eb360279139620002f8565b9392505050565b60006200018060008051602062000e9383398151915260001b6200037760201b620001a51760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e9383398151915260001b6200037760201b620001a51760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001a81760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001a51760201c565b6060600080856001600160a01b0316856040516200031791906200057d565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fa578251620003f2576001600160a01b0385163b620003f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000406565b6200040683836200040e565b949350505050565b8151156200041f5781518083602001fd5b8060405162461bcd60e51b8152600401620001f191906200059b565b80516001600160a01b03811681146200045357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048b57818101518382015260200162000471565b83811115620000835750506000910152565b600080600060608486031215620004b357600080fd5b620004be846200043b565b9250620004ce602085016200043b565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000458565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000458565b816040528281528960208487010111156200055b57600080fd5b6200056e8360208301602088016200046e565b80955050505050509250925092565b60008251620005918184602087016200046e565b9190910192915050565b6020815260008251806020840152620005bc8160408501602087016200046e565b601f01601f19169190910160400192915050565b6108b380620005e06000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846106a2565b81019061021091906106e8565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846106a2565b8101906102609190610719565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846106a2565b8101906102ad91906106e8565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b0316856040516103399190610807565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e9190610823565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b600080858511156106b257600080fd5b838611156106bf57600080fd5b5050820193919092039150565b80356001600160a01b03811681146106e357600080fd5b919050565b6000602082840312156106fa57600080fd5b61019e826106cc565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561072c57600080fd5b610735836106cc565b9150602083013567ffffffffffffffff8082111561075257600080fd5b818501915085601f83011261076657600080fd5b81358181111561077857610778610703565b604051601f8201601f19908116603f011681019083821181831017156107a0576107a0610703565b816040528281528860208487010111156107b957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107f65781810151838201526020016107de565b838111156103c45750506000910152565b600082516108198184602087016107db565b9190910192915050565b60208152600082518060208401526108428160408501602087016107db565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122012bb4f564f73959a03513dc74fc3c6e40e8386e6f02c16b78d6db00ce0aa16af64736f6c63430008090033" - } \ No newline at end of file diff --git a/e2e/src/common/utils.ts b/e2e/src/common/utils.ts index 719485954..0c229353f 100644 --- a/e2e/src/common/utils.ts +++ b/e2e/src/common/utils.ts @@ -3,7 +3,7 @@ import assert from "assert"; import { AbstractSigner, BaseContract, BlockTag, TransactionReceipt, TransactionRequest, Wallet, ethers } from "ethers"; import path from "path"; import { exec } from "child_process"; -import { L2MessageService, LineaRollup } from "../typechain"; +import { L2MessageService, LineaRollupV5 } from "../typechain"; import { PayableOverrides, TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog } from "../typechain/common"; import { MessageEvent, SendMessageArgs } from "./types"; @@ -147,7 +147,7 @@ export async function getBlockByNumberOrBlockTag(rpcUrl: URL, blockTag: BlockTag } } -export async function getEvents( +export async function getEvents( contract: TContract, eventFilter: TypedDeferredTopicFilter, fromBlock?: BlockTag, @@ -168,7 +168,7 @@ export async function getEvents( contract: TContract, @@ -294,7 +294,7 @@ export function getMessageSentEventFromLogs( }); } -export const sendMessage = async ( +export const sendMessage = async ( signer: AbstractSigner, contract: T, args: SendMessageArgs, diff --git a/e2e/src/config/tests-config/setup.ts b/e2e/src/config/tests-config/setup.ts index 95e4f1ead..314f2316f 100644 --- a/e2e/src/config/tests-config/setup.ts +++ b/e2e/src/config/tests-config/setup.ts @@ -5,8 +5,8 @@ import { DummyContract__factory, L2MessageService, L2MessageService__factory, - LineaRollup, - LineaRollup__factory, + LineaRollupV5, + LineaRollupV5__factory, TestContract, TestContract__factory, } from "../../typechain"; @@ -73,8 +73,8 @@ export default class TestSetup { return this.config.L2.transactionExclusionEndpoint; } - public getLineaRollupContract(signer?: AbstractSigner): LineaRollup { - const lineaRollup: LineaRollup = LineaRollup__factory.connect( + public getLineaRollupContract(signer?: AbstractSigner): LineaRollupV5 { + const lineaRollup: LineaRollupV5 = LineaRollupV5__factory.connect( this.config.L1.lineaRollupAddress, this.getL1Provider(), );