1.1k txs
1.7k calls
constructor
constructor(address crossChainController, uint256 gasLimit, uint256 l1VotingPortalChainId, address votingStrategy, address l1VotingPortal, address governance)
functions
CROSS_CHAIN_CONTROLLER
viewfunction CROSS_CHAIN_CONTROLLER() view returns (address)
DATA_WAREHOUSE
viewfunction DATA_WAREHOUSE() view returns (address)
decodeMessage
purefunction decodeMessage(bytes message) pure returns (uint8, bytes)
decodeProposalMessage
purefunction decodeProposalMessage(bytes message) pure returns (uint256, bytes32, uint24)
decodeVoteMessage
purefunction decodeVoteMessage(bytes message) pure returns (uint256, address, bool, tuple[])
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getGasLimit
viewfunction getGasLimit() view returns (uint256)
getProposalById
viewfunction getProposalById(uint256 proposalId) view returns (tuple)
getProposalState
viewfunction getProposalState(uint256 proposalId) view returns (uint8)
getProposalsVoteConfigurationIds
viewfunction getProposalsVoteConfigurationIds(uint256 skip, uint256 size) view returns (uint256[])
getProposalVoteConfiguration
viewfunction getProposalVoteConfiguration(uint256 proposalId) view returns (tuple)
getUserProposalVote
viewfunction getUserProposalVote(address user, uint256 proposalId) view returns (tuple)
GOVERNANCE
viewfunction GOVERNANCE() view returns (address)
L1_VOTING_PORTAL_CHAIN_ID
viewfunction L1_VOTING_PORTAL_CHAIN_ID() view returns (uint256)
L1_VOTING_PORTAL
viewfunction L1_VOTING_PORTAL() view returns (address)
NAME
viewfunction NAME() view returns (string)
owner
viewfunction owner() view returns (address)
REPRESENTATIVES_SLOT
viewfunction REPRESENTATIVES_SLOT() view returns (uint256)
VOTE_SUBMITTED_BY_REPRESENTATIVE_TYPEHASH
viewfunction VOTE_SUBMITTED_BY_REPRESENTATIVE_TYPEHASH() view returns (bytes32)
VOTE_SUBMITTED_TYPEHASH
viewfunction VOTE_SUBMITTED_TYPEHASH() view returns (bytes32)
VOTING_ASSET_WITH_SLOT_RAW
viewfunction VOTING_ASSET_WITH_SLOT_RAW() view returns (string)
VOTING_ASSET_WITH_SLOT_TYPEHASH
viewfunction VOTING_ASSET_WITH_SLOT_TYPEHASH() view returns (bytes32)
VOTING_STRATEGY
viewfunction VOTING_STRATEGY() view returns (address)
closeAndSendVote
nonpayablefunction closeAndSendVote(uint256 proposalId)
receiveCrossChainMessage
nonpayablefunction receiveCrossChainMessage(address originSender, uint256 originChainId, bytes messageWithType)
renounceOwnership
nonpayablefunction renounceOwnership()
startProposalVote
nonpayablefunction startProposalVote(uint256 proposalId) returns (uint256)
submitVote
nonpayablefunction submitVote(uint256 proposalId, bool support, tuple[] votingBalanceProofs)
submitVoteAsRepresentative
nonpayablefunction submitVoteAsRepresentative(uint256 proposalId, bool support, address voter, bytes proofOfRepresentation, tuple[] votingBalanceProofs)
submitVoteAsRepresentativeBySignature
nonpayablefunction submitVoteAsRepresentativeBySignature(uint256 proposalId, address voter, address representative, bool support, bytes proofOfRepresentation, tuple[] votingBalanceProofs, tuple signatureParams)
submitVoteBySignature
nonpayablefunction submitVoteBySignature(uint256 proposalId, address voter, bool support, tuple[] votingBalanceProofs, uint8 v, bytes32 r, bytes32 s)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateGasLimit
nonpayablefunction updateGasLimit(uint256 gasLimit)
events
EIP712DomainChanged
event EIP712DomainChanged()
GasLimitUpdated
event GasLimitUpdated(uint256 indexed gasLimit)
IncorrectTypeMessageReceived
event IncorrectTypeMessageReceived(address indexed originSender, uint256 indexed originChainId, bytes message, bytes reason)
MessageReceived
event MessageReceived(address indexed originSender, uint256 indexed originChainId, bool indexed delivered, uint8 messageType, bytes message, bytes reason)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProposalResultsSent
event ProposalResultsSent(uint256 indexed proposalId, uint256 forVotes, uint256 againstVotes)
ProposalVoteConfigurationBridged
event ProposalVoteConfigurationBridged(uint256 indexed proposalId, bytes32 indexed blockHash, uint24 votingDuration, bool indexed voteCreated)
ProposalVoteStarted
event ProposalVoteStarted(uint256 indexed proposalId, bytes32 indexed l1BlockHash, uint256 startTime, uint256 endTime)
VoteEmitted
event VoteEmitted(uint256 indexed proposalId, address indexed voter, bool indexed support, uint256 votingPower)
errors
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
InvalidShortString
error InvalidShortString()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
StringTooLong
error StringTooLong(string str)
creation bytecode
0x61022060405234801562000011575f80fd5b5060405162003ecc38038062003ecc833981016040819052620000349162000485565b828133604080518082018252601381527f4161766520566f74696e67204d616368696e650000000000000000000000000060208083019190915282518084019093526002835261563160f01b908301529062000091825f62000370565b61012052620000a281600162000370565b61014052815160208084019190912060e052815190820120610100524660a0526200012f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b0381166200016757604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200017281620003a8565b506040805180820190915260028152611b9960f11b60208201526001600160a01b038316620001b65760405162461bcd60e51b81526004016200015e9190620004fe565b50604080518082019091526002815261393760f01b60208201526001600160a01b038216620001fa5760405162461bcd60e51b81526004016200015e9190620004fe565b506001600160a01b03821661016081905260408051636f35e84160e11b8152905163de6bd082916004808201926020929091908290030181865afa15801562000245573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026b91906200054c565b6001600160a01b03908116610180529081166101a052604080518082019091526002815261363960f01b602082015291508716620002be5760405162461bcd60e51b81526004016200015e9190620004fe565b50604080518082019091526002815261373160f01b602082015284620002f95760405162461bcd60e51b81526004016200015e9190620004fe565b50604080518082019091526002815261070760f31b60208201526001600160a01b0383166200033d5760405162461bcd60e51b81526004016200015e9190620004fe565b506001600160a01b038087166101c0526101e08590528216610200526200036485620003f9565b505050505050620006ff565b5f6020835110156200038f5762000387836200042b565b9050620003a2565b816200039c84826200060f565b5060ff90505b92915050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600681905560405181907f3d1394ba0f6fca9c1e344f10a3efe1bfca63bc591232bb0d76755690f409450c905f90a250565b5f80829050601f8151111562000458578260405163305a27a960e01b81526004016200015e9190620004fe565b80516200046582620006db565b179392505050565b6001600160a01b038116811462000482575f80fd5b50565b5f805f805f8060c087890312156200049b575f80fd5b8651620004a8816200046d565b8096505060208701519450604087015193506060870151620004ca816200046d565b6080880151909350620004dd816200046d565b60a0880151909250620004f0816200046d565b809150509295509295509295565b5f602080835283518060208501525f5b818110156200052c578581018301518582016040015282016200050e565b505f604082860101526040601f19601f8301168501019250505092915050565b5f602082840312156200055d575f80fd5b81516200056a816200046d565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200059a57607f821691505b602082108103620005b957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200060a57805f5260205f20601f840160051c81016020851015620005e65750805b601f840160051c820191505b8181101562000607575f8155600101620005f2565b50505b505050565b81516001600160401b038111156200062b576200062b62000571565b62000643816200063c845462000585565b84620005bf565b602080601f83116001811462000679575f8415620006615750858301515b5f19600386901b1c1916600185901b178555620006d3565b5f85815260208120601f198616915b82811015620006a95788860151825594840194600190910190840162000688565b5085821015620006c757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80516020808301519190811015620005b9575f1960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516136e4620007e85f395f81816104b6015281816107c0015261222101525f818161054a015281816107fd01526121ff01525f81816105a70152818161079601526121ca01525f8181610277015281816122a8015261246b01525f81816105e901528181611c01015281816122d9015261243e01525f81816103ff015281816110680152611dbb01525f6120fd01525f6120d101525f6118ed01525f6118c501525f61182001525f61184a01525f61187401526136e45ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c80639a39ada311610114578063c4956366116100a9578063f2709a5c11610079578063f2709a5c1461060b578063f2fde38b1461067a578063f4b7223b1461068d578063f687d12a146106ad578063fd1bd2e9146106c0575f80fd5b8063c4956366146105a2578063d53d9b10146105c9578063dbb8f60a146105d1578063de6bd082146105e4575f80fd5b8063aa1da0d2116100e4578063aa1da0d21461053d578063b34a5e6b14610545578063b6b0f0e01461056c578063bc5ee6a81461057f575f80fd5b80639a39ada3146104b1578063a3f4df7e146104d8578063a69d4b2814610517578063a7f8451c1461052a575f80fd5b80633be191df1161019557806384b0196e1161016557806384b0196e1461044a578063867b96c21461046557806389aa5905146104785780638da5cb5b146104805780639080936f14610491575f80fd5b80633be191df146103e75780634916963e146103fa578063634d45b214610421578063715018a614610442575f80fd5b806315034cba116101d057806315034cba146102c75780631a93d1c3146102dc5780633644e515146102e45780633656de21146102ec575f80fd5b80630def040214610201578063129c5b961461023f5780631462783414610272578063147c11ea146102b1575b5f80fd5b61021461020f366004612886565b6106c8565b604080518251151581526020928301516001600160f81b031692810192909252015b60405180910390f35b61025261024d3660046129b6565b610725565b60408051938452602084019290925262ffffff1690820152606001610236565b6102997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610236565b6102b9610749565b604051908152602001610236565b6102da6102d53660046129ef565b61078b565b005b6006546102b9565b6102b9610afe565b6103da6102fa366004612a43565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152505f81815260036020818152604092839020835161012081018552948552600181015460ff811615159286019290925264ffffffffff610100808404821695870195909552600160301b830481166060870152600160581b83041660808601526001600160801b03600160801b909204821660a0860152600281015490911660c08501529081015460e0840152600401549082015290565b6040516102369190612a5a565b6102da6103f5366004612b6b565b610b0c565b6102997f000000000000000000000000000000000000000000000000000000000000000081565b61043461042f3660046129b6565b610dba565b604051610236929190612c6f565b6102da610dda565b610452610ded565b6040516102369796959493929190612cc8565b6102da610473366004612a43565b610e2f565b6102b9610f46565b6002546001600160a01b0316610299565b6104a461049f366004612a43565b610f6f565b6040516102369190612d37565b6102997f000000000000000000000000000000000000000000000000000000000000000081565b61050a604051806040016040528060138152602001724161766520566f74696e67204d616368696e6560681b81525081565b6040516102369190612d51565b6102b9610525366004612a43565b610f85565b6102da610538366004612d6a565b611184565b6102b9611197565b6102b97f000000000000000000000000000000000000000000000000000000000000000081565b6102da61057a366004612dc1565b6111c0565b61059261058d3660046129b6565b6111cf565b6040516102369493929190612e53565b6102997f000000000000000000000000000000000000000000000000000000000000000081565b61050a6111f7565b6102da6105df366004612ed2565b611213565b6102997f000000000000000000000000000000000000000000000000000000000000000081565b61065a610619366004612a43565b604080518082019091525f8082526020820152505f908152600460209081526040918290208251808401909352805462ffffff168352600101549082015290565b60408051825162ffffff1681526020928301519281019290925201610236565b6102da610688366004612fba565b6114b2565b6106a061069b366004612fd5565b6114ef565b6040516102369190612ff5565b6102da6106bb366004612a43565b6115f3565b6102b9600981565b6040805180820182525f8082526020918201819052838152600382528281206001600160a01b0386168252600501825282902082518084019093525460ff81161515835261010090046001600160f81b0316908201525b92915050565b5f805f8380602001905181019061073c9190613007565b9250925092509193909250565b60405180606001604052806039815260200161369f603991396040516020016107729190613044565b6040516020818303038152906040528051906020012081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156107f457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b801561081f57507f000000000000000000000000000000000000000000000000000000000000000082145b604051806040016040528060028152602001610c4d60f21b815250906108615760405162461bcd60e51b81526004016108589190612d51565b60405180910390fd5b506040516331a6a2d960e11b8152309063634d45b290610885908490600401612d51565b5f60405180830381865afa9250505080156108c157506040513d5f823e601f3d908101601f191682016040526108be91908101906130e1565b60015b61093e573d8080156108ee576040519150601f19603f3d011682016040523d82523d5f602084013e6108f3565b606091505b5082846001600160a01b03167f8b1e20717f068e39458a6f9c1626ff855155e9b16c044581dc9648e8fbd51e8e848460405161093092919061316b565b60405180910390a350505050565b6060600183600181111561095457610954612bfa565b03610a945760405163094e2dcb60e11b8152309063129c5b969061097c908590600401612d51565b606060405180830381865afa9250505080156109b5575060408051601f3d908101601f191682019092526109b291810190613007565b60015b610a37573d8080156109e2576040519150601f19603f3d011682016040523d82523d5f602084013e6109e7565b606091505b505f151586886001600160a01b03167f91ff2d4d8e24ff9dab08471142a75c2f2ad08f79dc01c8b273d6e42700a4e2dd878786604051610a2993929190613198565b60405180910390a450610af6565b610a42838383611604565b60011515888a6001600160a01b03167f91ff2d4d8e24ff9dab08471142a75c2f2ad08f79dc01c8b273d6e42700a4e2dd898989604051610a8493929190613198565b60405180910390a4505050610af6565b84866001600160a01b03167f8b1e20717f068e39458a6f9c1626ff855155e9b16c044581dc9648e8fbd51e8e8686604051602001610ad291906131d3565b60408051601f1981840301815290829052610aed929161316b565b60405180910390a35b505050505050565b5f610b07611814565b905090565b5f846001600160401b03811115610b2557610b256128b0565b604051908082528060200260200182016040528015610b4e578160200160208202803683370190505b5090505f5b85811015610c715760405180606001604052806039815260200161369f60399139604051602001610b849190613219565b60405160208183030381529060405280519060200120878783818110610bac57610bac613234565b9050602002810190610bbe9190613248565b610bcc906020810190612fba565b888884818110610bde57610bde613234565b9050602002810190610bf09190613248565b610c01906040810190602001613270565b604051602001610c36939291909283526001600160a01b039190911660208301526001600160801b0316604082015260600190565b60405160208183030381529060405280519060200120828281518110610c5e57610c5e613234565b6020908102919091010152600101610b53565b505f610d2c60405180606001604052806039815260200161369f60399139604051602001610c9f9190613044565b604051602081830303815290604052805190602001208b8b8b86604051602001610cc9919061328b565b60408051601f198184030181528282528051602091820120908301969096528101939093526001600160a01b0390911660608301521515608082015260a081019190915260c0015b6040516020818303038152906040528051906020012061193d565b90505f610d3b82878787611969565b9050896001600160a01b0316816001600160a01b0316148015610d6657506001600160a01b03811615155b60405180604001604052806002815260200161313760f01b81525090610d9f5760405162461bcd60e51b81526004016108589190612d51565b50610dad818c8b8b8b611995565b5050505050505050505050565b5f606082806020019051810190610dd191906130e1565b91509150915091565b610de261204c565b610deb5f612079565b565b5f6060805f805f6060610dfe6120ca565b610e066120f6565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f8181526003602052604090206002610e4782612123565b6003811115610e5857610e58612bfa565b1460405180604001604052806002815260200161062760f31b81525090610e925760405162461bcd60e51b81526004016108589190612d51565b504360048201554260018083018054600285015460ff1964ffffffffff95909516600160581b029485166fffffffffff00000000000000000000ff198316179093179091556001600160801b03600160801b64ffffffffff60581b19909216939093170482169116610f0584838361218f565b604080518381526020810183905285917f57595374ff15e29915354c26ba858db8ad6934a534ba31596cd613581aa3b99c910160405180910390a250505050565b60405180606001604052806039815260200161369f603991396040516020016107729190613219565b5f81815260036020526040812061071f90612123565b5f81815260046020908152604080832081518083018352815462ffffff16815260019091015481840181905282518084019093526002835261066760f31b9383019390935291610fe85760405162461bcd60e51b81526004016108589190612d51565b505f8381526003602052604081209061100082612123565b600381111561101157611011612bfa565b1460405180604001604052806002815260200161189b60f11b8152509061104b5760405162461bcd60e51b81526004016108589190612d51565b5060208201516040516317c1aadb60e31b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063be0d56d8906024015f6040518083038186803b1580156110b0575f80fd5b505afa1580156110c2573d5f803e3d5ffd5b505050506110d38260200151612291565b815142905f906110e89062ffffff16836132d4565b8684554360038501556001840180546affffffffffffffffffff00191661010064ffffffffff8681169182026affffffffff000000000000191692909217600160301b9285169283021790925560208781015160408051948552918401929092529293509188917f4a35ebd1b3d3106a86d022fa35dfeaefd17695e3c7cd99d39841db619106ade2910160405180910390a35093949350505050565b6111913385858585611995565b50505050565b60405180606001604052806039815260200161369f6039913960405160200161077291906132f9565b610af686868633878787612383565b5f805f6060848060200190518101906111e891906133c3565b93509350935093509193509193565b60405180606001604052806039815260200161369f6039913981565b5f826001600160401b0381111561122c5761122c6128b0565b604051908082528060200260200182016040528015611255578160200160208202803683370190505b5090505f5b838110156113785760405180606001604052806039815260200161369f6039913960405160200161128b9190613219565b604051602081830303815290604052805190602001208585838181106112b3576112b3613234565b90506020028101906112c59190613248565b6112d3906020810190612fba565b8686848181106112e5576112e5613234565b90506020028101906112f79190613248565b611308906040810190602001613270565b60405160200161133d939291909283526001600160a01b039190911660208301526001600160801b0316604082015260600190565b6040516020818303038152906040528051906020012082828151811061136557611365613234565b602090810291909101015260010161125a565b505f61142460405180606001604052806039815260200161369f603991396040516020016113a691906132f9565b604051602081830303815290604052805190602001208b8b8b8b876040516020016113d1919061328b565b60408051601f198184030181528282528051602091820120908301979097528101949094526001600160a01b03928316606085015291166080830152151560a082015260c081019190915260e001610d11565b90505f61143e82855f015186602001518760400151611969565b9050886001600160a01b0316816001600160a01b031614801561146957506001600160a01b03811615155b60405180604001604052806002815260200161313760f01b815250906114a25760405162461bcd60e51b81526004016108589190612d51565b50610dad8b898c8c8b8b8b612383565b6114ba61204c565b6001600160a01b0381166114e357604051631e4fbdf760e01b81525f6004820152602401610858565b6114ec81612079565b50565b6005546060908015806115025750838111155b1561151c575050604080515f81526020810190915261071f565b61152684846134ca565b81101561153a5761153784826134dd565b92505b5f836001600160401b03811115611553576115536128b0565b60405190808252806020026020018201604052801561157c578160200160208202803683370190505b5090505f5b848110156115ea57600560018261159889876134dd565b6115a291906134dd565b6115ac91906134dd565b815481106115bc576115bc613234565b905f5260205f2001548282815181106115d7576115d7613234565b6020908102919091010152600101611581565b50949350505050565b6115fb61204c565b6114ec81612549565b604080518082019091526002815261373360f01b60208201528261163b5760405162461bcd60e51b81526004016108589190612d51565b506040805180820190915260028152610dcd60f21b602082015262ffffff82166116785760405162461bcd60e51b81526004016108589190612d51565b505f838152600460209081526040918290206001015482518084019093526002835261333960f01b91830191909152156116c55760405162461bcd60e51b81526004016108589190612d51565b5060408051808201825262ffffff838116825260208083018681525f8881526004928390528581209451855462ffffff191694169390931784555160019384015560058054938401815582527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090920186905591516314d3a96560e31b8152908101859052309063a69d4b28906024016020604051808303815f875af192505050801561178f575060408051601f3d908101601f1916820190925261178c918101906134f0565b60015b6117c8573d8080156117bc576040519150601f19603f3d011682016040523d82523d5f602084013e6117c1565b606091505b50506117ce565b50600190505b60405162ffffff8316815281151590849086907fb97f85602e54244368524a04b5db9a67dbbbfa909eace9334c79b7c0c1d255e59060200160405180910390a450505050565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561186c57507f000000000000000000000000000000000000000000000000000000000000000046145b1561189657507f000000000000000000000000000000000000000000000000000000000000000090565b610b07604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f61071f611949611814565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f806119798888888861257b565b9250925092506119898282612643565b50909695505050505050565b5f84815260036020526040902060016119ad82612123565b60038111156119be576119be612bfa565b1460405180604001604052806002815260200161313960f01b815250906119f85760405162461bcd60e51b81526004016108589190612d51565b506001600160a01b0386165f908152600582016020908152604091829020805483518085019094526002845261032360f41b92840192909252919061010090046001600160f81b031615611a5f5760405162461bcd60e51b81526004016108589190612d51565b505f86815260046020908152604080832081518083018352815462ffffff1681526001909101548184015281518083019092528382529181018390529091905f5b86811015611eee575f611ab48260016134ca565b90505b87811015611bfe57888882818110611ad157611ad1613234565b9050602002810190611ae39190613248565b611af4906040810190602001613270565b6001600160801b0316898984818110611b0f57611b0f613234565b9050602002810190611b219190613248565b611b32906040810190602001613270565b6001600160801b0316141580611bbc5750888882818110611b5557611b55613234565b9050602002810190611b679190613248565b611b75906020810190612fba565b6001600160a01b0316898984818110611b9057611b90613234565b9050602002810190611ba29190613248565b611bb0906020810190612fba565b6001600160a01b031614155b60405180604001604052806002815260200161323160f01b81525090611bf55760405162461bcd60e51b81526004016108589190612d51565b50600101611ab7565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e50d420c898984818110611c4057611c40613234565b9050602002810190611c529190613248565b611c60906020810190612fba565b8660200151611ce38f8d8d88818110611c7b57611c7b613234565b9050602002810190611c8d9190613248565b611c9e906040810190602001613270565b6001600160801b0316604080516001600160a01b03841660208201529081018290525f9060600160405160208183030381529060405280519060200120905092915050565b8c8c87818110611cf557611cf5613234565b9050602002810190611d079190613248565b611d15906040810190613507565b6040518663ffffffff1660e01b8152600401611d35959493929190613549565b6040805180830381865afa158015611d4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d739190613594565b8051604080518082019091526002815261191960f11b6020820152919350611dae5760405162461bcd60e51b81526004016108589190612d51565b50602082015115611ee6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632a71f953898984818110611dfa57611dfa613234565b9050602002810190611e0c9190613248565b611e1a906020810190612fba565b8a8a85818110611e2c57611e2c613234565b9050602002810190611e3e9190613248565b611e4f906040810190602001613270565b602080870151908901516040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526001600160801b03909216602484015260448301526064820152608401602060405180830381865afa158015611eb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ed991906134f0565b611ee390846134ca565b92505b600101611aa0565b50604080518082019091526002815261323360f01b602082015282611f265760405162461bcd60e51b81526004016108589190612d51565b508715611f8357611f36826126fb565b600186018054601090611f5a908490600160801b90046001600160801b03166135cc565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550611fcd565b611f8c826126fb565b6002860180545f90611fa89084906001600160801b03166135cc565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b835460ff1916881515178455611fe282612732565b84546001600160f81b03919091166101000260ff909116178455604051828152881515906001600160a01b038c16908b907f0c611e7b6ae0de26f4772260e1bbdb5f58cbb7c275fe2de14671968d29add8d69060200160405180910390a450505050505050505050565b6002546001600160a01b03163314610deb5760405163118cdaa760e01b8152336004820152602401610858565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060610b077f00000000000000000000000000000000000000000000000000000000000000005f612765565b6060610b077f00000000000000000000000000000000000000000000000000000000000000006001612765565b60018101545f90600160301b900464ffffffffff16810361214557505f919050565b6001820154600160301b900464ffffffffff164264ffffffffff161161216d57506001919050565b600182015460ff161561218257506003919050565b506002919050565b919050565b600654604080516020810186905280820185905260608082018590528251808303909101815260808201928390526315713fb560e21b9092527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316926355c4fed49261224b927f0000000000000000000000000000000000000000000000000000000000000000927f00000000000000000000000000000000000000000000000000000000000000009290916084016135ec565b60408051808303815f875af1158015612266573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228a9190613618565b5050505050565b6040516381ac42b560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390525f917f0000000000000000000000000000000000000000000000000000000000000000909116906381ac42b590604401602060405180830381865afa158015612320573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234491906134f0565b141560405180604001604052806002815260200161393560f01b8152509061237f5760405162461bcd60e51b81526004016108589190612d51565b5050565b604080518082019091526002815261363760f01b60208201526001600160a01b0386166123c35760405162461bcd60e51b81526004016108589190612d51565b505f8781526004602090815260408083206001015481516001600160a01b038a81168286015260098285015283518083038501815260608301855280519086012046608084015260a0808401919091528451808403909101815260c08301948590528051950194909420633943508360e21b909352909391927f0000000000000000000000000000000000000000000000000000000000000000169063e50d420c90612499907f000000000000000000000000000000000000000000000000000000000000000090879087908c9060c40161363a565b6040805180830381865afa1580156124b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d79190613594565b60208101519091506001600160a01b0388811690821614801561250257506001600160a01b03881615155b604051806040016040528060028152602001611c9b60f11b8152509061253b5760405162461bcd60e51b81526004016108589190612d51565b50610dad898c8c8989611995565b600681905560405181907f3d1394ba0f6fca9c1e344f10a3efe1bfca63bc591232bb0d76755690f409450c905f90a250565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156125b457505f91506003905082612639565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612605573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661263057505f925060019150829050612639565b92505f91508190505b9450945094915050565b5f82600381111561265657612656612bfa565b0361265f575050565b600182600381111561267357612673612bfa565b036126915760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156126a5576126a5612bfa565b036126c65760405163fce698f760e01b815260048101829052602401610858565b60038260038111156126da576126da612bfa565b0361237f576040516335e2f38360e21b815260048101829052602401610858565b5f6001600160801b0382111561272e576040516306dfcc6560e41b81526080600482015260248101839052604401610858565b5090565b5f6001600160f81b0382111561272e576040516306dfcc6560e41b815260f8600482015260248101839052604401610858565b606060ff831461277f576127788361280e565b905061071f565b81805461278b90613666565b80601f01602080910402602001604051908101604052809291908181526020018280546127b790613666565b80156128025780601f106127d957610100808354040283529160200191612802565b820191905f5260205f20905b8154815290600101906020018083116127e557829003601f168201915b5050505050905061071f565b60605f61281a8361284b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561071f57604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b03811681146114ec575f80fd5b5f8060408385031215612897575f80fd5b82356128a281612872565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156128e6576128e66128b0565b60405290565b604080519081016001600160401b03811182821017156128e6576128e66128b0565b604051601f8201601f191681016001600160401b0381118282101715612936576129366128b0565b604052919050565b5f6001600160401b03821115612956576129566128b0565b50601f01601f191660200190565b5f82601f830112612973575f80fd5b81356129866129818261293e565b61290e565b81815284602083860101111561299a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156129c6575f80fd5b81356001600160401b038111156129db575f80fd5b6129e784828501612964565b949350505050565b5f805f60608486031215612a01575f80fd5b8335612a0c81612872565b92506020840135915060408401356001600160401b03811115612a2d575f80fd5b612a3986828701612964565b9150509250925092565b5f60208284031215612a53575f80fd5b5035919050565b5f610120820190508251825260208301511515602083015264ffffffffff60408401511660408301526060830151612a9b606084018264ffffffffff169052565b506080830151612ab4608084018264ffffffffff169052565b5060a0830151612acf60a08401826001600160801b03169052565b5060c0830151612aea60c08401826001600160801b03169052565b5060e083015160e083015261010080840151818401525092915050565b80151581146114ec575f80fd5b5f8083601f840112612b24575f80fd5b5081356001600160401b03811115612b3a575f80fd5b6020830191508360208260051b8501011115612b54575f80fd5b9250929050565b803560ff8116811461218a575f80fd5b5f805f805f805f8060e0898b031215612b82575f80fd5b883597506020890135612b9481612872565b96506040890135612ba481612b07565b955060608901356001600160401b03811115612bbe575f80fd5b612bca8b828c01612b14565b9096509450612bdd905060808a01612b5b565b925060a0890135915060c089013590509295985092959890939650565b634e487b7160e01b5f52602160045260245ffd5b60028110612c1e57612c1e612bfa565b9052565b5f5b83811015612c3c578181015183820152602001612c24565b50505f910152565b5f8151808452612c5b816020860160208601612c22565b601f01601f19169290920160200192915050565b612c798184612c0e565b604060208201525f6129e76040830184612c44565b5f815180845260208085019450602084015f5b83811015612cbd57815187529582019590820190600101612ca1565b509495945050505050565b60ff60f81b8816815260e060208201525f612ce660e0830189612c44565b8281036040840152612cf88189612c44565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050612d298185612c8e565b9a9950505050505050505050565b6020810160048310612d4b57612d4b612bfa565b91905290565b602081525f612d636020830184612c44565b9392505050565b5f805f8060608587031215612d7d575f80fd5b843593506020850135612d8f81612b07565b925060408501356001600160401b03811115612da9575f80fd5b612db587828801612b14565b95989497509550505050565b5f805f805f8060a08789031215612dd6575f80fd5b863595506020870135612de881612b07565b94506040870135612df881612872565b935060608701356001600160401b0380821115612e13575f80fd5b612e1f8a838b01612964565b94506080890135915080821115612e34575f80fd5b50612e4189828a01612b14565b979a9699509497509295939492505050565b5f60808201868352602060018060a01b038088166020860152604087151560408701526080606087015283875180865260a0880191506020890195505f5b81811015612ec15786518051861684528601516001600160801b0316868401529585019591830191600101612e91565b50909b9a5050505050505050505050565b5f805f805f805f80888a03610120811215612eeb575f80fd5b8935985060208a0135612efd81612872565b975060408a0135612f0d81612872565b965060608a0135612f1d81612b07565b955060808a01356001600160401b0380821115612f38575f80fd5b612f448d838e01612964565b965060a08c0135915080821115612f59575f80fd5b50612f668c828d01612b14565b909550935050606060bf1982011215612f7d575f80fd5b50612f866128c4565b612f9260c08b01612b5b565b815260e08a013560208201526101008a01356040820152809150509295985092959890939650565b5f60208284031215612fca575f80fd5b8135612d6381612872565b5f8060408385031215612fe6575f80fd5b50508035926020909101359150565b602081525f612d636020830184612c8e565b5f805f60608486031215613019575f80fd5b8351925060208401519150604084015162ffffff81168114613039575f80fd5b809150509250925092565b7f5375626d6974566f74652875696e743235362070726f706f73616c49642c616481527f647265737320766f7465722c626f6f6c20737570706f72742c566f74696e674160208201527f7373657457697468536c6f745b5d20766f74696e6741737365747357697468536040820152636c6f742960e01b60608201525f82516130d4816064850160208701612c22565b9190910160640192915050565b5f80604083850312156130f2575f80fd5b825160028110613100575f80fd5b60208401519092506001600160401b0381111561311b575f80fd5b8301601f8101851361312b575f80fd5b80516131396129818261293e565b81815286602083850101111561314d575f80fd5b61315e826020830160208601612c22565b8093505050509250929050565b604081525f61317d6040830185612c44565b828103602084015261318f8185612c44565b95945050505050565b6131a28185612c0e565b606060208201525f6131b76060830185612c44565b82810360408401526131c98185612c44565b9695505050505050565b7f756e737570706f72746564206d65737361676520747970653a2000000000000081525f6002831061320757613207612bfa565b5060f89190911b601a820152601b0190565b5f825161322a818460208701612c22565b9190910192915050565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261322a575f80fd5b6001600160801b03811681146114ec575f80fd5b5f60208284031215613280575f80fd5b8135612d638161325c565b81515f9082906020808601845b838110156132b457815185529382019390820190600101613298565b50929695505050505050565b634e487b7160e01b5f52601160045260245ffd5b64ffffffffff8181168382160190808211156132f2576132f26132c0565b5092915050565b7f5375626d6974566f74654173526570726573656e7461746976652875696e743281527f35362070726f706f73616c49642c6164647265737320766f7465722c6164647260208201527f65737320726570726573656e7461746976652c626f6f6c20737570706f72742c60408201527f566f74696e67417373657457697468536c6f745b5d20766f74696e674173736560608201526a747357697468536c6f742960a81b60808201525f82516133b681608b850160208701612c22565b91909101608b0192915050565b5f805f80608085870312156133d6575f80fd5b845193506020808601516133e981612872565b809450506040808701516133fc81612b07565b60608801519094506001600160401b0380821115613418575f80fd5b818901915089601f83011261342b575f80fd5b81518181111561343d5761343d6128b0565b61344b858260051b0161290e565b818152858101925060069190911b83018501908b82111561346a575f80fd5b928501925b818410156134ba5784848d031215613485575f80fd5b61348d6128ec565b845161349881612872565b8152848701516134a78161325c565b818801528352928401929185019161346f565b989b979a50959850505050505050565b8082018082111561071f5761071f6132c0565b8181038181111561071f5761071f6132c0565b5f60208284031215613500575f80fd5b5051919050565b5f808335601e1984360301811261351c575f80fd5b8301803591506001600160401b03821115613535575f80fd5b602001915036819003821315612b54575f80fd5b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f604082840312156135a4575f80fd5b6135ac6128ec565b82516135b781612b07565b81526020928301519281019290925250919050565b6001600160801b038181168382160190808211156132f2576132f26132c0565b84815260018060a01b0384166020820152826040820152608060608201525f6131c96080830184612c44565b5f8060408385031215613629575f80fd5b505080516020909101519092909150565b60018060a01b0385168152836020820152826040820152608060608201525f6131c96080830184612c44565b600181811c9082168061367a57607f821691505b60208210810361369857634e487b7160e01b5f52602260045260245ffd5b5091905056fe566f74696e67417373657457697468536c6f74286164647265737320756e6465726c79696e6741737365742c75696e7431323820736c6f7429a164736f6c6343000816000a000000000000000000000000f6b99959f0b5e79e1cc7062e12af632ceb18ef0d000000000000000000000000000000000000000000000000000000000003d0900000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d755f1ca351e989391a5bacdec8f780dfd76f5d2000000000000000000000000fe4683c18aaad791b6afdf0a8e1ed5c6e2c9ecd60000000000000000000000009aee0b04504cef83a65ac3f0e838d0593bcb2bc7