Overview
ETH Balance
0.01 ETH
Eth Value
$26.58 (@ $2,657.61/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 27,596 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Authorize Execut... | 21606091 | 32 days ago | IN | 0 ETH | 0.00004089 | ||||
Submit Vote | 19836435 | 279 days ago | IN | 0 ETH | 0.00029447 | ||||
Submit Vote | 19829069 | 280 days ago | IN | 0 ETH | 0.00029902 | ||||
Submit Vote | 19829069 | 280 days ago | IN | 0 ETH | 0.00029905 | ||||
Submit Vote | 19735846 | 293 days ago | IN | 0 ETH | 0.00048902 | ||||
Submit Vote | 19707019 | 297 days ago | IN | 0 ETH | 0.00047933 | ||||
Submit Vote | 19700691 | 298 days ago | IN | 0 ETH | 0.00048058 | ||||
Submit Vote | 19700689 | 298 days ago | IN | 0 ETH | 0.00048726 | ||||
Submit Vote | 19700673 | 298 days ago | IN | 0 ETH | 0.00050151 | ||||
Submit Vote | 19693325 | 299 days ago | IN | 0 ETH | 0.00052005 | ||||
Submit Vote | 19693308 | 299 days ago | IN | 0 ETH | 0.00052548 | ||||
Submit Vote | 19693149 | 299 days ago | IN | 0 ETH | 0.00053599 | ||||
Submit Vote | 19693149 | 299 days ago | IN | 0 ETH | 0.00053695 | ||||
Submit Vote | 19693133 | 299 days ago | IN | 0 ETH | 0.00053886 | ||||
Submit Vote | 18919021 | 408 days ago | IN | 0 ETH | 0.0018927 | ||||
Submit Vote | 18903770 | 410 days ago | IN | 0 ETH | 0.00108741 | ||||
Submit Vote | 18903770 | 410 days ago | IN | 0 ETH | 0.00108741 | ||||
Submit Vote | 18903770 | 410 days ago | IN | 0 ETH | 0.00108756 | ||||
Submit Vote | 18903741 | 410 days ago | IN | 0 ETH | 0.00108258 | ||||
Submit Vote | 18866785 | 415 days ago | IN | 0 ETH | 0.00101791 | ||||
Submit Vote | 18865215 | 415 days ago | IN | 0 ETH | 0.00130673 | ||||
Execute | 18864956 | 415 days ago | IN | 0 ETH | 0.00424333 | ||||
Execute | 18863192 | 416 days ago | IN | 0 ETH | 0.06675184 | ||||
Queue | 18855787 | 417 days ago | IN | 0 ETH | 0.0052579 | ||||
Submit Vote | 18848030 | 418 days ago | IN | 0 ETH | 0.00193242 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AaveGovernanceV2
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-10 */ // SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.5; pragma abicoder v2; function getChainId() pure returns (uint256) { uint256 chainId; assembly { chainId := chainid() } return chainId; } function isContract(address account) view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } interface IVotingStrategy { function getVotingPowerAt(address user, uint256 blockNumber) external view returns (uint256); } interface IProposalValidator { /** * @dev Called to validate a proposal (e.g when creating new proposal in Governance) * @param governance Governance Contract * @param user Address of the proposal creator * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). * @return boolean, true if can be created **/ function validateCreatorOfProposal( IAaveGovernanceV2 governance, address user, uint256 blockNumber ) external view returns (bool); /** * @dev Called to validate the cancellation of a proposal * @param governance Governance Contract * @param user Address of the proposal creator * @param blockNumber Block Number against which to make the test (e.g proposal creation block -1). * @return boolean, true if can be cancelled **/ function validateProposalCancellation( IAaveGovernanceV2 governance, address user, uint256 blockNumber ) external view returns (bool); /** * @dev Returns whether a user has enough Proposition Power to make a proposal. * @param governance Governance Contract * @param user Address of the user to be challenged. * @param blockNumber Block Number against which to make the challenge. * @return true if user has enough power **/ function isPropositionPowerEnough( IAaveGovernanceV2 governance, address user, uint256 blockNumber ) external view returns (bool); /** * @dev Returns the minimum Proposition Power needed to create a proposition. * @param governance Governance Contract * @param blockNumber Blocknumber at which to evaluate * @return minimum Proposition Power needed **/ function getMinimumPropositionPowerNeeded(IAaveGovernanceV2 governance, uint256 blockNumber) external view returns (uint256); /** * @dev Returns whether a proposal passed or not * @param governance Governance Contract * @param proposalId Id of the proposal to set * @return true if proposal passed **/ function isProposalPassed(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Check whether a proposal has reached quorum, ie has enough FOR-voting-power * Here quorum is not to understand as number of votes reached, but number of for-votes reached * @param governance Governance Contract * @param proposalId Id of the proposal to verify * @return voting power needed for a proposal to pass **/ function isQuorumValid(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Check whether a proposal has enough extra FOR-votes than AGAINST-votes * FOR VOTES - AGAINST VOTES > VOTE_DIFFERENTIAL * voting supply * @param governance Governance Contract * @param proposalId Id of the proposal to verify * @return true if enough For-Votes **/ function isVoteDifferentialValid(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Calculates the minimum amount of Voting Power needed for a proposal to Pass * @param votingSupply Total number of oustanding voting tokens * @return voting power needed for a proposal to pass **/ function getMinimumVotingPowerNeeded(uint256 votingSupply) external view returns (uint256); /** * @dev Get proposition threshold constant value * @return the proposition threshold value (100 <=> 1%) **/ function PROPOSITION_THRESHOLD() external view returns (uint256); /** * @dev Get voting duration constant value * @return the voting duration value in seconds **/ function VOTING_DURATION() external view returns (uint256); /** * @dev Get the vote differential threshold constant value * to compare with % of for votes/total supply - % of against votes/total supply * @return the vote differential threshold value (100 <=> 1%) **/ function VOTE_DIFFERENTIAL() external view returns (uint256); /** * @dev Get quorum threshold constant value * to compare with % of for votes/total supply * @return the quorum threshold value (100 <=> 1%) **/ function MINIMUM_QUORUM() external view returns (uint256); /** * @dev precision helper: 100% = 10000 * @return one hundred percents with our chosen precision **/ function ONE_HUNDRED_WITH_PRECISION() external view returns (uint256); } interface IGovernanceStrategy { /** * @dev Returns the Proposition Power of a user at a specific block number. * @param user Address of the user. * @param blockNumber Blocknumber at which to fetch Proposition Power * @return Power number **/ function getPropositionPowerAt(address user, uint256 blockNumber) external view returns (uint256); /** * @dev Returns the total supply of Outstanding Proposition Tokens * @param blockNumber Blocknumber at which to evaluate * @return total supply at blockNumber **/ function getTotalPropositionSupplyAt(uint256 blockNumber) external view returns (uint256); /** * @dev Returns the total supply of Outstanding Voting Tokens * @param blockNumber Blocknumber at which to evaluate * @return total supply at blockNumber **/ function getTotalVotingSupplyAt(uint256 blockNumber) external view returns (uint256); /** * @dev Returns the Vote Power of a user at a specific block number. * @param user Address of the user. * @param blockNumber Blocknumber at which to fetch Vote Power * @return Vote number **/ function getVotingPowerAt(address user, uint256 blockNumber) external view returns (uint256); } interface IExecutorWithTimelock { /** * @dev emitted when a new pending admin is set * @param newPendingAdmin address of the new pending admin **/ event NewPendingAdmin(address newPendingAdmin); /** * @dev emitted when a new admin is set * @param newAdmin address of the new admin **/ event NewAdmin(address newAdmin); /** * @dev emitted when a new delay (between queueing and execution) is set * @param delay new delay **/ event NewDelay(uint256 delay); /** * @dev emitted when a new (trans)action is Queued. * @param actionHash hash of the action * @param target address of the targeted contract * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ event QueuedAction( bytes32 actionHash, address indexed target, uint256 value, string signature, bytes data, uint256 executionTime, bool withDelegatecall ); /** * @dev emitted when an action is Cancelled * @param actionHash hash of the action * @param target address of the targeted contract * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ event CancelledAction( bytes32 actionHash, address indexed target, uint256 value, string signature, bytes data, uint256 executionTime, bool withDelegatecall ); /** * @dev emitted when an action is Cancelled * @param actionHash hash of the action * @param target address of the targeted contract * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target * @param resultData the actual callData used on the target **/ event ExecutedAction( bytes32 actionHash, address indexed target, uint256 value, string signature, bytes data, uint256 executionTime, bool withDelegatecall, bytes resultData ); /** * @dev Getter of the current admin address (should be governance) * @return The address of the current admin **/ function getAdmin() external view returns (address); /** * @dev Getter of the current pending admin address * @return The address of the pending admin **/ function getPendingAdmin() external view returns (address); /** * @dev Getter of the delay between queuing and execution * @return The delay in seconds **/ function getDelay() external view returns (uint256); /** * @dev Returns whether an action (via actionHash) is queued * @param actionHash hash of the action to be checked * keccak256(abi.encode(target, value, signature, data, executionTime, withDelegatecall)) * @return true if underlying action of actionHash is queued **/ function isActionQueued(bytes32 actionHash) external view returns (bool); /** * @dev Checks whether a proposal is over its grace period * @param governance Governance contract * @param proposalId Id of the proposal against which to test * @return true of proposal is over grace period **/ function isProposalOverGracePeriod(IAaveGovernanceV2 governance, uint256 proposalId) external view returns (bool); /** * @dev Getter of grace period constant * @return grace period in seconds **/ function GRACE_PERIOD() external view returns (uint256); /** * @dev Getter of minimum delay constant * @return minimum delay in seconds **/ function MINIMUM_DELAY() external view returns (uint256); /** * @dev Getter of maximum delay constant * @return maximum delay in seconds **/ function MAXIMUM_DELAY() external view returns (uint256); /** * @dev Function, called by Governance, that queue a transaction, returns action hash * @param target smart contract target * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ function queueTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) external returns (bytes32); /** * @dev Function, called by Governance, that cancels a transaction, returns the callData executed * @param target smart contract target * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ function executeTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) external payable returns (bytes memory); /** * @dev Function, called by Governance, that cancels a transaction, returns action hash * @param target smart contract target * @param value wei value of the transaction * @param signature function signature of the transaction * @param data function arguments of the transaction or callData if signature empty * @param executionTime time at which to execute the transaction * @param withDelegatecall boolean, true = transaction delegatecalls the target, else calls the target **/ function cancelTransaction( address target, uint256 value, string memory signature, bytes memory data, uint256 executionTime, bool withDelegatecall ) external returns (bytes32); } interface IAaveGovernanceV2 { enum ProposalState {Pending, Canceled, Active, Failed, Succeeded, Queued, Expired, Executed} struct Vote { bool support; uint248 votingPower; } struct Proposal { uint256 id; address creator; IExecutorWithTimelock executor; address[] targets; uint256[] values; string[] signatures; bytes[] calldatas; bool[] withDelegatecalls; uint256 startBlock; uint256 endBlock; uint256 executionTime; uint256 forVotes; uint256 againstVotes; bool executed; bool canceled; address strategy; bytes32 ipfsHash; mapping(address => Vote) votes; } struct ProposalWithoutVotes { uint256 id; address creator; IExecutorWithTimelock executor; address[] targets; uint256[] values; string[] signatures; bytes[] calldatas; bool[] withDelegatecalls; uint256 startBlock; uint256 endBlock; uint256 executionTime; uint256 forVotes; uint256 againstVotes; bool executed; bool canceled; address strategy; bytes32 ipfsHash; } /** * @dev emitted when a new proposal is created * @param id Id of the proposal * @param creator address of the creator * @param executor The ExecutorWithTimelock contract that will execute the proposal * @param targets list of contracts called by proposal's associated transactions * @param values list of value in wei for each propoposal's associated transaction * @param signatures list of function signatures (can be empty) to be used when created the callData * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments * @param withDelegatecalls boolean, true = transaction delegatecalls the taget, else calls the target * @param startBlock block number when vote starts * @param endBlock block number when vote ends * @param strategy address of the governanceStrategy contract * @param ipfsHash IPFS hash of the proposal **/ event ProposalCreated( uint256 id, address indexed creator, IExecutorWithTimelock indexed executor, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, bool[] withDelegatecalls, uint256 startBlock, uint256 endBlock, address strategy, bytes32 ipfsHash ); /** * @dev emitted when a proposal is canceled * @param id Id of the proposal **/ event ProposalCanceled(uint256 id); /** * @dev emitted when a proposal is queued * @param id Id of the proposal * @param executionTime time when proposal underlying transactions can be executed * @param initiatorQueueing address of the initiator of the queuing transaction **/ event ProposalQueued(uint256 id, uint256 executionTime, address indexed initiatorQueueing); /** * @dev emitted when a proposal is executed * @param id Id of the proposal * @param initiatorExecution address of the initiator of the execution transaction **/ event ProposalExecuted(uint256 id, address indexed initiatorExecution); /** * @dev emitted when a vote is registered * @param id Id of the proposal * @param voter address of the voter * @param support boolean, true = vote for, false = vote against * @param votingPower Power of the voter/vote **/ event VoteEmitted(uint256 id, address indexed voter, bool support, uint256 votingPower); event GovernanceStrategyChanged(address indexed newStrategy, address indexed initiatorChange); event VotingDelayChanged(uint256 newVotingDelay, address indexed initiatorChange); event ExecutorAuthorized(address executor); event ExecutorUnauthorized(address executor); /** * @dev Creates a Proposal (needs Proposition Power of creator > Threshold) * @param executor The ExecutorWithTimelock contract that will execute the proposal * @param targets list of contracts called by proposal's associated transactions * @param values list of value in wei for each propoposal's associated transaction * @param signatures list of function signatures (can be empty) to be used when created the callData * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments * @param withDelegatecalls if true, transaction delegatecalls the taget, else calls the target * @param ipfsHash IPFS hash of the proposal **/ function create( IExecutorWithTimelock executor, address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, bool[] memory withDelegatecalls, bytes32 ipfsHash ) external returns (uint256); /** * @dev Cancels a Proposal, * either at anytime by guardian * or when proposal is Pending/Active and threshold no longer reached * @param proposalId id of the proposal **/ function cancel(uint256 proposalId) external; /** * @dev Queue the proposal (If Proposal Succeeded) * @param proposalId id of the proposal to queue **/ function queue(uint256 proposalId) external; /** * @dev Execute the proposal (If Proposal Queued) * @param proposalId id of the proposal to execute **/ function execute(uint256 proposalId) external payable; /** * @dev Function allowing msg.sender to vote for/against a proposal * @param proposalId id of the proposal * @param support boolean, true = vote for, false = vote against **/ function submitVote(uint256 proposalId, bool support) external; /** * @dev Function to register the vote of user that has voted offchain via signature * @param proposalId id of the proposal * @param support boolean, true = vote for, false = vote against * @param v v part of the voter signature * @param r r part of the voter signature * @param s s part of the voter signature **/ function submitVoteBySignature( uint256 proposalId, bool support, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Set new GovernanceStrategy * Note: owner should be a timelocked executor, so needs to make a proposal * @param governanceStrategy new Address of the GovernanceStrategy contract **/ function setGovernanceStrategy(address governanceStrategy) external; /** * @dev Set new Voting Delay (delay before a newly created proposal can be voted on) * Note: owner should be a timelocked executor, so needs to make a proposal * @param votingDelay new voting delay in seconds **/ function setVotingDelay(uint256 votingDelay) external; /** * @dev Add new addresses to the list of authorized executors * @param executors list of new addresses to be authorized executors **/ function authorizeExecutors(address[] memory executors) external; /** * @dev Remove addresses to the list of authorized executors * @param executors list of addresses to be removed as authorized executors **/ function unauthorizeExecutors(address[] memory executors) external; /** * @dev Let the guardian abdicate from its priviledged rights **/ function __abdicate() external; /** * @dev Getter of the current GovernanceStrategy address * @return The address of the current GovernanceStrategy contracts **/ function getGovernanceStrategy() external view returns (address); /** * @dev Getter of the current Voting Delay (delay before a created proposal can be voted on) * Different from the voting duration * @return The voting delay in seconds **/ function getVotingDelay() external view returns (uint256); /** * @dev Returns whether an address is an authorized executor * @param executor address to evaluate as authorized executor * @return true if authorized **/ function isExecutorAuthorized(address executor) external view returns (bool); /** * @dev Getter the address of the guardian, that can mainly cancel proposals * @return The address of the guardian **/ function getGuardian() external view returns (address); /** * @dev Getter of the proposal count (the current number of proposals ever created) * @return the proposal count **/ function getProposalsCount() external view returns (uint256); /** * @dev Getter of a proposal by id * @param proposalId id of the proposal to get * @return the proposal as ProposalWithoutVotes memory object **/ function getProposalById(uint256 proposalId) external view returns (ProposalWithoutVotes memory); /** * @dev Getter of the Vote of a voter about a proposal * Note: Vote is a struct: ({bool support, uint248 votingPower}) * @param proposalId id of the proposal * @param voter address of the voter * @return The associated Vote memory object **/ function getVoteOnProposal(uint256 proposalId, address voter) external view returns (Vote memory); /** * @dev Get the current state of a proposal * @param proposalId id of the proposal * @return The current state if the proposal **/ function getProposalState(uint256 proposalId) external view returns (ProposalState); } /** * @title Governance V2 contract * @dev Main point of interaction with Aave protocol's governance * - Create a Proposal * - Cancel a Proposal * - Queue a Proposal * - Execute a Proposal * - Submit Vote to a Proposal * Proposal States : Pending => Active => Succeeded(/Failed) => Queued => Executed(/Expired) * The transition to "Canceled" can appear in multiple states * @author Aave **/ contract AaveGovernanceV2 is Ownable, IAaveGovernanceV2 { using SafeMath for uint256; address private _governanceStrategy; uint256 private _votingDelay; uint256 private _proposalsCount; mapping(uint256 => Proposal) private _proposals; mapping(address => bool) private _authorizedExecutors; address private _guardian; bytes32 public constant DOMAIN_TYPEHASH = keccak256( 'EIP712Domain(string name,uint256 chainId,address verifyingContract)' ); bytes32 public constant VOTE_EMITTED_TYPEHASH = keccak256('VoteEmitted(uint256 id,bool support)'); string public constant NAME = 'Aave Governance v2'; modifier onlyGuardian() { require(msg.sender == _guardian, 'ONLY_BY_GUARDIAN'); _; } constructor( address governanceStrategy, uint256 votingDelay, address guardian, address[] memory executors ) { _setGovernanceStrategy(governanceStrategy); _setVotingDelay(votingDelay); _guardian = guardian; authorizeExecutors(executors); } struct CreateVars { uint256 startBlock; uint256 endBlock; uint256 previousProposalsCount; } /** * @dev Creates a Proposal (needs to be validated by the Proposal Validator) * @param executor The ExecutorWithTimelock contract that will execute the proposal * @param targets list of contracts called by proposal's associated transactions * @param values list of value in wei for each propoposal's associated transaction * @param signatures list of function signatures (can be empty) to be used when created the callData * @param calldatas list of calldatas: if associated signature empty, calldata ready, else calldata is arguments * @param withDelegatecalls boolean, true = transaction delegatecalls the taget, else calls the target * @param ipfsHash IPFS hash of the proposal **/ function create( IExecutorWithTimelock executor, address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, bool[] memory withDelegatecalls, bytes32 ipfsHash ) external override returns (uint256) { require(targets.length != 0, 'INVALID_EMPTY_TARGETS'); require( targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length && targets.length == withDelegatecalls.length, 'INCONSISTENT_PARAMS_LENGTH' ); require(isExecutorAuthorized(address(executor)), 'EXECUTOR_NOT_AUTHORIZED'); require( IProposalValidator(address(executor)).validateCreatorOfProposal( this, msg.sender, block.number - 1 ), 'PROPOSITION_CREATION_INVALID' ); CreateVars memory vars; vars.startBlock = block.number.add(_votingDelay); vars.endBlock = vars.startBlock.add(IProposalValidator(address(executor)).VOTING_DURATION()); vars.previousProposalsCount = _proposalsCount; Proposal storage newProposal = _proposals[vars.previousProposalsCount]; newProposal.id = vars.previousProposalsCount; newProposal.creator = msg.sender; newProposal.executor = executor; newProposal.targets = targets; newProposal.values = values; newProposal.signatures = signatures; newProposal.calldatas = calldatas; newProposal.withDelegatecalls = withDelegatecalls; newProposal.startBlock = vars.startBlock; newProposal.endBlock = vars.endBlock; newProposal.strategy = _governanceStrategy; newProposal.ipfsHash = ipfsHash; _proposalsCount++; emit ProposalCreated( vars.previousProposalsCount, msg.sender, executor, targets, values, signatures, calldatas, withDelegatecalls, vars.startBlock, vars.endBlock, _governanceStrategy, ipfsHash ); return newProposal.id; } /** * @dev Cancels a Proposal. * - Callable by the _guardian with relaxed conditions, or by anybody if the conditions of * cancellation on the executor are fulfilled * @param proposalId id of the proposal **/ function cancel(uint256 proposalId) external override { ProposalState state = getProposalState(proposalId); require( state != ProposalState.Executed && state != ProposalState.Canceled && state != ProposalState.Expired, 'ONLY_BEFORE_EXECUTED' ); Proposal storage proposal = _proposals[proposalId]; require( msg.sender == _guardian || IProposalValidator(address(proposal.executor)).validateProposalCancellation( this, proposal.creator, block.number - 1 ), 'PROPOSITION_CANCELLATION_INVALID' ); proposal.canceled = true; for (uint256 i = 0; i < proposal.targets.length; i++) { proposal.executor.cancelTransaction( proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.executionTime, proposal.withDelegatecalls[i] ); } emit ProposalCanceled(proposalId); } /** * @dev Queue the proposal (If Proposal Succeeded) * @param proposalId id of the proposal to queue **/ function queue(uint256 proposalId) external override { require(getProposalState(proposalId) == ProposalState.Succeeded, 'INVALID_STATE_FOR_QUEUE'); Proposal storage proposal = _proposals[proposalId]; uint256 executionTime = block.timestamp.add(proposal.executor.getDelay()); for (uint256 i = 0; i < proposal.targets.length; i++) { _queueOrRevert( proposal.executor, proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], executionTime, proposal.withDelegatecalls[i] ); } proposal.executionTime = executionTime; emit ProposalQueued(proposalId, executionTime, msg.sender); } /** * @dev Execute the proposal (If Proposal Queued) * @param proposalId id of the proposal to execute **/ function execute(uint256 proposalId) external payable override { require(getProposalState(proposalId) == ProposalState.Queued, 'ONLY_QUEUED_PROPOSALS'); Proposal storage proposal = _proposals[proposalId]; proposal.executed = true; for (uint256 i = 0; i < proposal.targets.length; i++) { proposal.executor.executeTransaction{value: proposal.values[i]}( proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.executionTime, proposal.withDelegatecalls[i] ); } emit ProposalExecuted(proposalId, msg.sender); } /** * @dev Function allowing msg.sender to vote for/against a proposal * @param proposalId id of the proposal * @param support boolean, true = vote for, false = vote against **/ function submitVote(uint256 proposalId, bool support) external override { return _submitVote(msg.sender, proposalId, support); } /** * @dev Function to register the vote of user that has voted offchain via signature * @param proposalId id of the proposal * @param support boolean, true = vote for, false = vote against * @param v v part of the voter signature * @param r r part of the voter signature * @param s s part of the voter signature **/ function submitVoteBySignature( uint256 proposalId, bool support, uint8 v, bytes32 r, bytes32 s ) external override { bytes32 digest = keccak256( abi.encodePacked( '\x19\x01', keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(NAME)), getChainId(), address(this))), keccak256(abi.encode(VOTE_EMITTED_TYPEHASH, proposalId, support)) ) ); address signer = ecrecover(digest, v, r, s); require(signer != address(0), 'INVALID_SIGNATURE'); return _submitVote(signer, proposalId, support); } /** * @dev Set new GovernanceStrategy * Note: owner should be a timelocked executor, so needs to make a proposal * @param governanceStrategy new Address of the GovernanceStrategy contract **/ function setGovernanceStrategy(address governanceStrategy) external override onlyOwner { _setGovernanceStrategy(governanceStrategy); } /** * @dev Set new Voting Delay (delay before a newly created proposal can be voted on) * Note: owner should be a timelocked executor, so needs to make a proposal * @param votingDelay new voting delay in terms of blocks **/ function setVotingDelay(uint256 votingDelay) external override onlyOwner { _setVotingDelay(votingDelay); } /** * @dev Add new addresses to the list of authorized executors * @param executors list of new addresses to be authorized executors **/ function authorizeExecutors(address[] memory executors) public override onlyOwner { for (uint256 i = 0; i < executors.length; i++) { _authorizeExecutor(executors[i]); } } /** * @dev Remove addresses to the list of authorized executors * @param executors list of addresses to be removed as authorized executors **/ function unauthorizeExecutors(address[] memory executors) public override onlyOwner { for (uint256 i = 0; i < executors.length; i++) { _unauthorizeExecutor(executors[i]); } } /** * @dev Let the guardian abdicate from its priviledged rights **/ function __abdicate() external override onlyGuardian { _guardian = address(0); } /** * @dev Getter of the current GovernanceStrategy address * @return The address of the current GovernanceStrategy contracts **/ function getGovernanceStrategy() external view override returns (address) { return _governanceStrategy; } /** * @dev Getter of the current Voting Delay (delay before a created proposal can be voted on) * Different from the voting duration * @return The voting delay in number of blocks **/ function getVotingDelay() external view override returns (uint256) { return _votingDelay; } /** * @dev Returns whether an address is an authorized executor * @param executor address to evaluate as authorized executor * @return true if authorized **/ function isExecutorAuthorized(address executor) public view override returns (bool) { return _authorizedExecutors[executor]; } /** * @dev Getter the address of the guardian, that can mainly cancel proposals * @return The address of the guardian **/ function getGuardian() external view override returns (address) { return _guardian; } /** * @dev Getter of the proposal count (the current number of proposals ever created) * @return the proposal count **/ function getProposalsCount() external view override returns (uint256) { return _proposalsCount; } /** * @dev Getter of a proposal by id * @param proposalId id of the proposal to get * @return the proposal as ProposalWithoutVotes memory object **/ function getProposalById(uint256 proposalId) external view override returns (ProposalWithoutVotes memory) { Proposal storage proposal = _proposals[proposalId]; ProposalWithoutVotes memory proposalWithoutVotes = ProposalWithoutVotes({ id: proposal.id, creator: proposal.creator, executor: proposal.executor, targets: proposal.targets, values: proposal.values, signatures: proposal.signatures, calldatas: proposal.calldatas, withDelegatecalls: proposal.withDelegatecalls, startBlock: proposal.startBlock, endBlock: proposal.endBlock, executionTime: proposal.executionTime, forVotes: proposal.forVotes, againstVotes: proposal.againstVotes, executed: proposal.executed, canceled: proposal.canceled, strategy: proposal.strategy, ipfsHash: proposal.ipfsHash }); return proposalWithoutVotes; } /** * @dev Getter of the Vote of a voter about a proposal * Note: Vote is a struct: ({bool support, uint248 votingPower}) * @param proposalId id of the proposal * @param voter address of the voter * @return The associated Vote memory object **/ function getVoteOnProposal(uint256 proposalId, address voter) external view override returns (Vote memory) { return _proposals[proposalId].votes[voter]; } /** * @dev Get the current state of a proposal * @param proposalId id of the proposal * @return The current state if the proposal **/ function getProposalState(uint256 proposalId) public view override returns (ProposalState) { require(_proposalsCount >= proposalId, 'INVALID_PROPOSAL_ID'); Proposal storage proposal = _proposals[proposalId]; if (proposal.canceled) { return ProposalState.Canceled; } else if (block.number <= proposal.startBlock) { return ProposalState.Pending; } else if (block.number <= proposal.endBlock) { return ProposalState.Active; } else if (!IProposalValidator(address(proposal.executor)).isProposalPassed(this, proposalId)) { return ProposalState.Failed; } else if (proposal.executionTime == 0) { return ProposalState.Succeeded; } else if (proposal.executed) { return ProposalState.Executed; } else if (proposal.executor.isProposalOverGracePeriod(this, proposalId)) { return ProposalState.Expired; } else { return ProposalState.Queued; } } function _queueOrRevert( IExecutorWithTimelock executor, address target, uint256 value, string memory signature, bytes memory callData, uint256 executionTime, bool withDelegatecall ) internal { require( !executor.isActionQueued( keccak256(abi.encode(target, value, signature, callData, executionTime, withDelegatecall)) ), 'DUPLICATED_ACTION' ); executor.queueTransaction(target, value, signature, callData, executionTime, withDelegatecall); } function _submitVote( address voter, uint256 proposalId, bool support ) internal { require(getProposalState(proposalId) == ProposalState.Active, 'VOTING_CLOSED'); Proposal storage proposal = _proposals[proposalId]; Vote storage vote = proposal.votes[voter]; require(vote.votingPower == 0, 'VOTE_ALREADY_SUBMITTED'); uint256 votingPower = IVotingStrategy(proposal.strategy).getVotingPowerAt( voter, proposal.startBlock ); if (support) { proposal.forVotes = proposal.forVotes.add(votingPower); } else { proposal.againstVotes = proposal.againstVotes.add(votingPower); } vote.support = support; vote.votingPower = uint248(votingPower); emit VoteEmitted(proposalId, voter, support, votingPower); } function _setGovernanceStrategy(address governanceStrategy) internal { _governanceStrategy = governanceStrategy; emit GovernanceStrategyChanged(governanceStrategy, msg.sender); } function _setVotingDelay(uint256 votingDelay) internal { _votingDelay = votingDelay; emit VotingDelayChanged(votingDelay, msg.sender); } function _authorizeExecutor(address executor) internal { _authorizedExecutors[executor] = true; emit ExecutorAuthorized(executor); } function _unauthorizeExecutor(address executor) internal { _authorizedExecutors[executor] = false; emit ExecutorUnauthorized(executor); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"governanceStrategy","type":"address"},{"internalType":"uint256","name":"votingDelay","type":"uint256"},{"internalType":"address","name":"guardian","type":"address"},{"internalType":"address[]","name":"executors","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"executor","type":"address"}],"name":"ExecutorAuthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"executor","type":"address"}],"name":"ExecutorUnauthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newStrategy","type":"address"},{"indexed":true,"internalType":"address","name":"initiatorChange","type":"address"}],"name":"GovernanceStrategyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"contract IExecutorWithTimelock","name":"executor","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"address","name":"strategy","type":"address"},{"indexed":false,"internalType":"bytes32","name":"ipfsHash","type":"bytes32"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"initiatorExecution","type":"address"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"executionTime","type":"uint256"},{"indexed":true,"internalType":"address","name":"initiatorQueueing","type":"address"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votingPower","type":"uint256"}],"name":"VoteEmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newVotingDelay","type":"uint256"},{"indexed":true,"internalType":"address","name":"initiatorChange","type":"address"}],"name":"VotingDelayChanged","type":"event"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTE_EMITTED_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"__abdicate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"executors","type":"address[]"}],"name":"authorizeExecutors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IExecutorWithTimelock","name":"executor","type":"address"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"internalType":"bytes32","name":"ipfsHash","type":"bytes32"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getGovernanceStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalById","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"contract IExecutorWithTimelock","name":"executor","type":"address"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bool[]","name":"withDelegatecalls","type":"bool[]"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"executionTime","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"address","name":"strategy","type":"address"},{"internalType":"bytes32","name":"ipfsHash","type":"bytes32"}],"internalType":"struct IAaveGovernanceV2.ProposalWithoutVotes","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalState","outputs":[{"internalType":"enum IAaveGovernanceV2.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProposalsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getVoteOnProposal","outputs":[{"components":[{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint248","name":"votingPower","type":"uint248"}],"internalType":"struct IAaveGovernanceV2.Vote","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVotingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"}],"name":"isExecutorAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"governanceStrategy","type":"address"}],"name":"setGovernanceStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"votingDelay","type":"uint256"}],"name":"setVotingDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"submitVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"submitVoteBySignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"executors","type":"address[]"}],"name":"unauthorizeExecutors","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200356838038062003568833981016040819052620000349162000264565b600062000040620000d0565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009584620000d4565b620000a08362000121565b600680546001600160a01b0319166001600160a01b038416179055620000c68162000165565b50505050620003bc565b3390565b600180546001600160a01b0319166001600160a01b0383169081179091556040513391907f9e8e9f668db69a2cefb172dabe284d0d3aea2b7ee64212a205bd033bd03a3d5590600090a350565b600281905560405133907fc46fc23e244f0720a98ddbac6efb5bb40d212cf15e6478fc4b3017648715289d906200015a9084906200038f565b60405180910390a250565b6200016f620000d0565b6000546001600160a01b03908116911614620001a85760405162461bcd60e51b81526004016200019f906200035a565b60405180910390fd5b60005b8151811015620001e357620001da828281518110620001c657fe5b6020026020010151620001e760201b60201c565b600101620001ab565b5050565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517f52762435f58790076157ea2a4914a5a4d0aa0eb421588891377692f7fd3bc082906200023c90839062000346565b60405180910390a150565b80516001600160a01b03811681146200025f57600080fd5b919050565b600080600080608085870312156200027a578384fd5b620002858562000247565b935060208086015193506200029d6040870162000247565b60608701519093506001600160401b0380821115620002ba578384fd5b818801915088601f830112620002ce578384fd5b815181811115620002db57fe5b8381029150620002ed84830162000398565b8181528481019084860184860187018d101562000308578788fd5b8795505b838610156200033557620003208162000247565b8352600195909501949186019186016200030c565b50989b979a50959850505050505050565b6001600160a01b0391909116815260200190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b6040518181016001600160401b0381118282101715620003b457fe5b604052919050565b61319c80620003cc6000396000f3fe6080604052600436106101665760003560e01c8063760fbc13116100d1578063a3f4df7e1161008a578063ddf0b00911610064578063ddf0b00914610403578063f2fde38b14610423578063f8741a9c14610443578063fe0d94c11461046357610166565b8063a3f4df7e146103ac578063a75b87d2146103ce578063af1e0bd3146103e357610166565b8063760fbc131461030b5780638da5cb5b146103205780639080936f1461033557806398e527d3146103625780639aad6f6a14610377578063a2b170b01461039757610166565b80634185ff83116101235780634185ff831461023c578063548b514e14610269578063612c56fa1461029657806364c786d9146102b657806370b0f660146102d6578063715018a6146102f657610166565b806306be3e8e1461016b5780631a1caf7f1461019657806320606b70146101b857806334b18c26146101da5780633656de21146101ef57806340e58ee51461021c575b600080fd5b34801561017757600080fd5b50610180610476565b60405161018d919061299e565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004612542565b610485565b005b3480156101c457600080fd5b506101cd6104f7565b60405161018d9190612a63565b3480156101e657600080fd5b506101cd61051b565b3480156101fb57600080fd5b5061020f61020a36600461270a565b61053f565b60405161018d9190612e64565b34801561022857600080fd5b506101b661023736600461270a565b6108f0565b34801561024857600080fd5b5061025c610257366004612722565b610bc2565b60405161018d9190612fbe565b34801561027557600080fd5b50610289610284366004612526565b610c1b565b60405161018d9190612a58565b3480156102a257600080fd5b506101b66102b1366004612751565b610c39565b3480156102c257600080fd5b506101b66102d1366004612542565b610c44565b3480156102e257600080fd5b506101b66102f136600461270a565b610ca9565b34801561030257600080fd5b506101b6610cea565b34801561031757600080fd5b506101b6610d69565b34801561032c57600080fd5b50610180610da5565b34801561034157600080fd5b5061035561035036600461270a565b610db4565b60405161018d9190612aea565b34801561036e57600080fd5b506101cd610f85565b34801561038357600080fd5b506101b6610392366004612526565b610f8b565b3480156103a357600080fd5b506101cd610fc9565b3480156103b857600080fd5b506103c1610fcf565b60405161018d9190612afe565b3480156103da57600080fd5b50610180610ffd565b3480156103ef57600080fd5b506101b66103fe366004612775565b61100c565b34801561040f57600080fd5b506101b661041e36600461270a565b6111ae565b34801561042f57600080fd5b506101b661043e366004612526565b6114aa565b34801561044f57600080fd5b506101cd61045e366004612624565b611560565b6101b661047136600461270a565b6118e9565b6001546001600160a01b031690565b61048d611ae8565b6000546001600160a01b039081169116146104c35760405162461bcd60e51b81526004016104ba90612d39565b60405180910390fd5b60005b81518110156104f3576104eb8282815181106104de57fe5b6020026020010151611aec565b6001016104c6565b5050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b7f4e031542a9553ed1c4e810c54674ab4b984243e335b246aa3de73663bf4c11ee81565b610547611f6e565b600082815260046020526040902061055d611f6e565b60408051610220810182528354815260018401546001600160a01b039081166020808401919091526002860154909116828401526003850180548451818402810184019095528085529293606085019390928301828280156105e857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105ca575b505050505081526020018360040180548060200260200160405190810160405280929190818152602001828054801561064057602002820191906000526020600020905b81548152602001906001019080831161062c575b5050505050815260200183600501805480602002602001604051908101604052809291908181526020016000905b828210156107195760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107055780601f106106da57610100808354040283529160200191610705565b820191906000526020600020905b8154815290600101906020018083116106e857829003601f168201915b50505050508152602001906001019061066e565b50505050815260200183600601805480602002602001604051908101604052809291908181526020016000905b828210156107f15760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107dd5780601f106107b2576101008083540402835291602001916107dd565b820191906000526020600020905b8154815290600101906020018083116107c057829003601f168201915b505050505081526020019060010190610746565b5050505081526020018360070180548060200260200160405190810160405280929190818152602001828054801561086857602002820191906000526020600020906000905b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116108375790505b50505091835250506008840154602082015260098401546040820152600a8401546060820152600b8401546080820152600c84015460a0820152600d84015460ff808216151560c0840152610100808304909116151560e0840152620100009091046001600160a01b031690820152600e90930154610120909301929092525090505b919050565b60006108fb82610db4565b9050600781600781111561090b57fe5b141580156109255750600181600781111561092257fe5b14155b801561093d5750600681600781111561093a57fe5b14155b6109595760405162461bcd60e51b81526004016104ba90612dda565b60008281526004602052604090206006546001600160a01b0316331480610a0c5750600281015460018201546040516331a7bc4160e01b81526001600160a01b03928316926331a7bc41926109bc92309290911690436000190190600401612ac6565b60206040518083038186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c919061257d565b610a285760405162461bcd60e51b81526004016104ba90612da5565b600d8101805461ff00191661010017905560005b6003820154811015610b855760028201546003830180546001600160a01b0390921691631dc40b51919084908110610a7057fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610a9857fe5b9060005260206000200154856005018581548110610ab257fe5b90600052602060002001866006018681548110610acb57fe5b9060005260206000200187600a0154886007018881548110610ae957fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518763ffffffff1660e01b8152600401610b2a96959493929190612a1f565b602060405180830381600087803b158015610b4457600080fd5b505af1158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190612599565b50600101610a3c565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610bb59190612a63565b60405180910390a1505050565b610bca612014565b5060008281526004602090815260408083206001600160a01b0385168452600f0182529182902082518084019093525460ff8116151583526001600160f81b03610100909104169082015292915050565b6001600160a01b031660009081526005602052604090205460ff1690565b6104f3338383611b47565b610c4c611ae8565b6000546001600160a01b03908116911614610c795760405162461bcd60e51b81526004016104ba90612d39565b60005b81518110156104f357610ca1828281518110610c9457fe5b6020026020010151611d01565b600101610c7c565b610cb1611ae8565b6000546001600160a01b03908116911614610cde5760405162461bcd60e51b81526004016104ba90612d39565b610ce781611d54565b50565b610cf2611ae8565b6000546001600160a01b03908116911614610d1f5760405162461bcd60e51b81526004016104ba90612d39565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6006546001600160a01b03163314610d935760405162461bcd60e51b81526004016104ba90612d0f565b600680546001600160a01b0319169055565b6000546001600160a01b031690565b6000816003541015610dd85760405162461bcd60e51b81526004016104ba90612e08565b6000828152600460205260409020600d810154610100900460ff1615610e025760019150506108eb565b80600801544311610e175760009150506108eb565b80600901544311610e2c5760029150506108eb565b60028101546040516306fbb3ab60e01b81526001600160a01b03909116906306fbb3ab90610e6090309087906004016129b2565b60206040518083038186803b158015610e7857600080fd5b505afa158015610e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb0919061257d565b610ebe5760039150506108eb565b600a810154610ed15760049150506108eb565b600d81015460ff1615610ee85760079150506108eb565b600281015460405163f670a5f960e01b81526001600160a01b039091169063f670a5f990610f1c90309087906004016129b2565b60206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c919061257d565b15610f7b5760069150506108eb565b60059150506108eb565b60035490565b610f93611ae8565b6000546001600160a01b03908116911614610fc05760405162461bcd60e51b81526004016104ba90612d39565b610ce781611d96565b60025490565b6040518060400160405280601281526020017120b0bb329023b7bb32b93730b731b2903b1960711b81525081565b6006546001600160a01b031690565b60408051808201909152601281527120b0bb329023b7bb32b93730b731b2903b1960711b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f4cc6f35bf1a450a8f51b0719ea5910c789b7b914b5c4f0451867c8a5475a4982611082611de3565b306040516020016110969493929190612a6c565b604051602081830303815290604052805190602001207f4e031542a9553ed1c4e810c54674ab4b984243e335b246aa3de73663bf4c11ee87876040516020016110e193929190612a90565b60405160208183030381529060405280519060200120604051602001611108929190612983565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516111459493929190612aa8565b6020604051602081039080840390855afa158015611167573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661119a5760405162461bcd60e51b81526004016104ba90612c7d565b6111a5818888611b47565b50505050505050565b60046111b982610db4565b60078111156111c457fe5b146111e15760405162461bcd60e51b81526004016104ba90612bec565b60008181526004602081815260408084206002810154825163675e4d4160e11b81529251919594611278946001600160a01b039092169363cebc9a829381830193929091829003018186803b15801561123957600080fd5b505afa15801561124d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112719190612599565b4290611de7565b905060005b6003830154811015611461576002830154600384018054611459926001600160a01b03169190849081106112ad57fe5b6000918252602090912001546004860180546001600160a01b0390921691859081106112d557fe5b90600052602060002001548660050185815481106112ef57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561137d5780601f106113525761010080835404028352916020019161137d565b820191906000526020600020905b81548152906001019060200180831161136057829003601f168201915b505050505087600601868154811061139157fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561141f5780601f106113f45761010080835404028352916020019161141f565b820191906000526020600020905b81548152906001019060200180831161140257829003601f168201915b50505050508789600701888154811061143457fe5b90600052602060002090602091828204019190069054906101000a900460ff16611e13565b60010161127d565b50600a820181905560405133907f11a0b38e70585e4b09b794bd1d9f9b1a51a802eb8ee2101eeee178d0349e73fe9061149d9086908590613095565b60405180910390a2505050565b6114b2611ae8565b6000546001600160a01b039081169116146114df5760405162461bcd60e51b81526004016104ba90612d39565b6001600160a01b0381166115055760405162461bcd60e51b81526004016104ba90612b11565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008651600014156115845760405162461bcd60e51b81526004016104ba90612c4e565b85518751148015611596575084518751145b80156115a3575083518751145b80156115b0575082518751145b6115cc5760405162461bcd60e51b81526004016104ba90612d6e565b6115d588610c1b565b6115f15760405162461bcd60e51b81526004016104ba90612cd8565b604051631a1b205360e31b81526001600160a01b0389169063d0d90298906116259030903390600019430190600401612ac6565b60206040518083038186803b15801561163d57600080fd5b505afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611675919061257d565b6116915760405162461bcd60e51b81526004016104ba90612b57565b61169961202b565b6002546116a7904390611de7565b81600001818152505061172c896001600160a01b031663a438d2086040518163ffffffff1660e01b815260040160206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190612599565b825190611de7565b602082810191909152600380546040808501828152600092835260048552912090518155600181018054336001600160a01b0319918216179091556002820180549091166001600160a01b038e161790558a51909261179192840191908c019061204c565b5087516117a790600483019060208b01906120b1565b5086516117bd90600583019060208a01906120ec565b5085516117d39060068301906020890190612145565b5084516117e9906007830190602088019061219e565b508160000151816008018190555081602001518160090181905550600160009054906101000a90046001600160a01b031681600d0160026101000a8154816001600160a01b0302191690836001600160a01b031602179055508381600e0181905550600360008154809291906001019190505550896001600160a01b0316336001600160a01b03167fd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec84604001518c8c8c8c8c8a600001518b60200151600160009054906101000a90046001600160a01b03168f6040516118d39a99989796959493929190612fe0565b60405180910390a3549998505050505050505050565b60056118f482610db4565b60078111156118ff57fe5b1461191c5760405162461bcd60e51b81526004016104ba90612e35565b6000818152600460205260408120600d8101805460ff19166001179055905b6003820154811015611aa25760028201546004830180546001600160a01b0390921691638902ab6591908490811061196f57fe5b906000526020600020015484600301848154811061198957fe5b6000918252602090912001546004860180546001600160a01b0390921691869081106119b157fe5b90600052602060002001548660050186815481106119cb57fe5b906000526020600020018760060187815481106119e457fe5b9060005260206000200188600a0154896007018981548110611a0257fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518863ffffffff1660e01b8152600401611a4396959493929190612a1f565b6000604051808303818588803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611a9991908101906125b1565b5060010161193b565b50336001600160a01b03167f9c85b616f29fca57a17eafe71cf9ff82ffef41766e2cf01ea7f8f7878dd3ec2483604051611adc9190612a63565b60405180910390a25050565b3390565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f5e8105a2af24345971359d2289f43efa80d093f4a7123561b8d63836b98724f490611b3c90839061299e565b60405180910390a150565b6002611b5283610db4565b6007811115611b5d57fe5b14611b7a5760405162461bcd60e51b81526004016104ba90612bc5565b60008281526004602090815260408083206001600160a01b0387168452600f8101909252909120805461010090046001600160f81b031615611bce5760405162461bcd60e51b81526004016104ba90612ca8565b600d820154600883015460405163eaeded5f60e01b81526000926201000090046001600160a01b03169163eaeded5f91611c0c918a916004016129b2565b60206040518083038186803b158015611c2457600080fd5b505afa158015611c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5c9190612599565b90508315611c7d57600b830154611c739082611de7565b600b840155611c92565b600c830154611c8c9082611de7565b600c8401555b815460ff60ff1990911685151517166101006001600160f81b038316021782556040516001600160a01b038716907f0c611e7b6ae0de26f4772260e1bbdb5f58cbb7c275fe2de14671968d29add8d690611cf19088908890869061307f565b60405180910390a2505050505050565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517f52762435f58790076157ea2a4914a5a4d0aa0eb421588891377692f7fd3bc08290611b3c90839061299e565b600281905560405133907fc46fc23e244f0720a98ddbac6efb5bb40d212cf15e6478fc4b3017648715289d90611d8b908490612a63565b60405180910390a250565b600180546001600160a01b0319166001600160a01b0383169081179091556040513391907f9e8e9f668db69a2cefb172dabe284d0d3aea2b7ee64212a205bd033bd03a3d5590600090a350565b4690565b600082820183811015611e0c5760405162461bcd60e51b81526004016104ba90612b8e565b9392505050565b866001600160a01b031663b1fc8796878787878787604051602001611e3d969594939291906129cb565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611e6f9190612a63565b60206040518083038186803b158015611e8757600080fd5b505afa158015611e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebf919061257d565b15611edc5760405162461bcd60e51b81526004016104ba90612c23565b604051638d8fe2e360e01b81526001600160a01b03881690638d8fe2e390611f12908990899089908990899089906004016129cb565b602060405180830381600087803b158015611f2c57600080fd5b505af1158015611f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f649190612599565b5050505050505050565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b604080518082019091526000808252602082015290565b60405180606001604052806000815260200160008152602001600081525090565b8280548282559060005260206000209081019282156120a1579160200282015b828111156120a157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061206c565b506120ad92915061223a565b5090565b8280548282559060005260206000209081019282156120a1579160200282015b828111156120a15782518255916020019190600101906120d1565b828054828255906000526020600020908101928215612139579160200282015b82811115612139578251805161212991849160209091019061224f565b509160200191906001019061210c565b506120ad9291506122ca565b828054828255906000526020600020908101928215612192579160200282015b82811115612192578251805161218291849160209091019061224f565b5091602001919060010190612165565b506120ad9291506122e7565b82805482825590600052602060002090601f016020900481019282156120a15791602002820160005b8382111561220457835183826101000a81548160ff02191690831515021790555092602001926001016020816000010492830192600103026121c7565b80156122315782816101000a81549060ff0219169055600101602081600001049283019260010302612204565b50506120ad9291505b5b808211156120ad576000815560010161223b565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261228557600085556120a1565b82601f1061229e57805160ff19168380011785556120a1565b828001600101855582156120a157918201828111156120a15782518255916020019190600101906120d1565b808211156120ad5760006122de8282612304565b506001016122ca565b808211156120ad5760006122fb8282612304565b506001016122e7565b50805460018160011615610100020316600290046000825580601f1061232a5750610ce7565b601f016020900490600052602060002090810190610ce7919061223a565b600082601f830112612358578081fd5b813561236b612366826130c7565b6130a3565b81815291506020808301908481018184028601820187101561238c57600080fd5b60005b848110156123b45781356123a281613143565b8452928201929082019060010161238f565b505050505092915050565b600082601f8301126123cf578081fd5b81356123dd612366826130c7565b8181529150602080830190848101818402860182018710156123fe57600080fd5b60005b848110156123b457813561241481613158565b84529282019290820190600101612401565b600082601f830112612436578081fd5b8135612444612366826130c7565b818152915060208083019084810160005b848110156123b4578135870188603f82011261247057600080fd5b83810135612480612366826130e5565b81815260408b8184860101111561249657600080fd5b82818501888401375060009181018601919091528552509282019290820190600101612455565b600082601f8301126124cd578081fd5b81356124db612366826130c7565b8181529150602080830190848101818402860182018710156124fc57600080fd5b60005b848110156123b4578135845292820192908201906001016124ff565b80356108eb81613143565b600060208284031215612537578081fd5b8135611e0c81613143565b600060208284031215612553578081fd5b813567ffffffffffffffff811115612569578182fd5b61257584828501612348565b949350505050565b60006020828403121561258e578081fd5b8151611e0c81613158565b6000602082840312156125aa578081fd5b5051919050565b6000602082840312156125c2578081fd5b815167ffffffffffffffff8111156125d8578182fd5b8201601f810184136125e8578182fd5b80516125f6612366826130e5565b81815285602083850101111561260a578384fd5b61261b826020830160208601613113565b95945050505050565b600080600080600080600060e0888a03121561263e578283fd5b6126478861251b565b9650602088013567ffffffffffffffff80821115612663578485fd5b61266f8b838c01612348565b975060408a0135915080821115612684578485fd5b6126908b838c016124bd565b965060608a01359150808211156126a5578485fd5b6126b18b838c01612426565b955060808a01359150808211156126c6578485fd5b6126d28b838c01612426565b945060a08a01359150808211156126e7578384fd5b506126f48a828b016123bf565b92505060c0880135905092959891949750929550565b60006020828403121561271b578081fd5b5035919050565b60008060408385031215612734578182fd5b82359150602083013561274681613143565b809150509250929050565b60008060408385031215612763578182fd5b82359150602083013561274681613158565b600080600080600060a0868803121561278c578283fd5b85359450602086013561279e81613158565b9350604086013560ff811681146127b3578384fd5b94979396509394606081013594506080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156128105781516001600160a01b0316875295820195908201906001016127eb565b509495945050505050565b6000815180845260208085019450808401835b8381101561281057815115158752958201959082019060010161282e565b6000815180845260208085018081965082840281019150828601855b858110156128925782840389526128808483516128d4565b98850198935090840190600101612868565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612810578151875295820195908201906001016128b2565b15159052565b600081518084526128ec816020860160208601613113565b601f01601f19169290920160200192915050565b6000815460018082166000811461291e576001811461293c5761297a565b60028304607f16865260ff198316602087015260408601935061297a565b6002830480875261294c86613107565b60005b828110156129705781546020828b010152848201915060208101905061294f565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038816825286602083015260c060408301526129f260c08301876128d4565b8281036060840152612a0481876128d4565b6080840195909552505090151560a090910152949350505050565b600060018060a01b038816825286602083015260c06040830152612a4660c0830187612900565b8281036060840152612a048187612900565b901515815260200190565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020810160088310612af857fe5b91905290565b600060208252611e0c60208301846128d4565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f50524f504f534954494f4e5f4352454154494f4e5f494e56414c494400000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600d908201526c1593d5125391d7d0d313d4d151609a1b604082015260600190565b60208082526017908201527f494e56414c49445f53544154455f464f525f5155455545000000000000000000604082015260600190565b602080825260119082015270222aa82624a1a0aa22a22fa0a1aa24a7a760791b604082015260600190565b602080825260159082015274494e56414c49445f454d5054595f5441524745545360581b604082015260600190565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b6020808252601690820152751593d51157d053149150511657d4d55093525515115160521b604082015260600190565b60208082526017908201527f4558454355544f525f4e4f545f415554484f52495a4544000000000000000000604082015260600190565b60208082526010908201526f27a7262cafa12cafa3aaa0a92224a0a760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f494e434f4e53495354454e545f504152414d535f4c454e475448000000000000604082015260600190565b6020808252818101527f50524f504f534954494f4e5f43414e43454c4c4154494f4e5f494e56414c4944604082015260600190565b60208082526014908201527313d3931657d0915193d49157d1561150d555115160621b604082015260600190565b6020808252601390820152721253959053125117d41493d413d4d05317d251606a1b604082015260600190565b6020808252601590820152744f4e4c595f5155455545445f50524f504f53414c5360581b604082015260600190565b600060208252825160208301526020830151612e8360408401826127cb565b506040830151612e9660608401826127cb565b506060830151610220806080850152612eb36102408501836127d8565b91506080850151601f19808685030160a0870152612ed1848361289f565b935060a08701519150808685030160c0870152612eee848361284c565b935060c08701519150808685030160e0870152612f0b848361284c565b935060e08701519150610100818786030181880152612f2a858461281b565b90880151610120888101919091528801516101408089019190915288015161016080890191909152880151610180808901919091528801516101a08089019190915288015190945091506101c09050612f85818701836128ce565b86015190506101e0612f99868201836128ce565b8601519050610200612fad868201836127cb565b959095015193019290925250919050565b8151151581526020918201516001600160f81b03169181019190915260400190565b60006101408c8352806020840152612ffa8184018d6127d8565b9050828103604084015261300e818c61289f565b90508281036060840152613022818b61284c565b90508281036080840152613036818a61284c565b905082810360a084015261304a818961281b565b60c0840197909752505060e08101939093526001600160a01b0391909116610100830152610120909101529695505050505050565b9283529015156020830152604082015260600190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156130bf57fe5b604052919050565b600067ffffffffffffffff8211156130db57fe5b5060209081020190565b600067ffffffffffffffff8211156130f957fe5b50601f01601f191660200190565b60009081526020902090565b60005b8381101561312e578181015183820152602001613116565b8381111561313d576000848401525b50505050565b6001600160a01b0381168114610ce757600080fd5b8015158114610ce757600080fdfea26469706673582212203255f14330cf43fabb4281e87def734f660a2374d36a74dbd177480523c8dfc664736f6c6343000705003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca76ebd8617a03126b6fb84f9b1c1a0fb71c263300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101665760003560e01c8063760fbc13116100d1578063a3f4df7e1161008a578063ddf0b00911610064578063ddf0b00914610403578063f2fde38b14610423578063f8741a9c14610443578063fe0d94c11461046357610166565b8063a3f4df7e146103ac578063a75b87d2146103ce578063af1e0bd3146103e357610166565b8063760fbc131461030b5780638da5cb5b146103205780639080936f1461033557806398e527d3146103625780639aad6f6a14610377578063a2b170b01461039757610166565b80634185ff83116101235780634185ff831461023c578063548b514e14610269578063612c56fa1461029657806364c786d9146102b657806370b0f660146102d6578063715018a6146102f657610166565b806306be3e8e1461016b5780631a1caf7f1461019657806320606b70146101b857806334b18c26146101da5780633656de21146101ef57806340e58ee51461021c575b600080fd5b34801561017757600080fd5b50610180610476565b60405161018d919061299e565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004612542565b610485565b005b3480156101c457600080fd5b506101cd6104f7565b60405161018d9190612a63565b3480156101e657600080fd5b506101cd61051b565b3480156101fb57600080fd5b5061020f61020a36600461270a565b61053f565b60405161018d9190612e64565b34801561022857600080fd5b506101b661023736600461270a565b6108f0565b34801561024857600080fd5b5061025c610257366004612722565b610bc2565b60405161018d9190612fbe565b34801561027557600080fd5b50610289610284366004612526565b610c1b565b60405161018d9190612a58565b3480156102a257600080fd5b506101b66102b1366004612751565b610c39565b3480156102c257600080fd5b506101b66102d1366004612542565b610c44565b3480156102e257600080fd5b506101b66102f136600461270a565b610ca9565b34801561030257600080fd5b506101b6610cea565b34801561031757600080fd5b506101b6610d69565b34801561032c57600080fd5b50610180610da5565b34801561034157600080fd5b5061035561035036600461270a565b610db4565b60405161018d9190612aea565b34801561036e57600080fd5b506101cd610f85565b34801561038357600080fd5b506101b6610392366004612526565b610f8b565b3480156103a357600080fd5b506101cd610fc9565b3480156103b857600080fd5b506103c1610fcf565b60405161018d9190612afe565b3480156103da57600080fd5b50610180610ffd565b3480156103ef57600080fd5b506101b66103fe366004612775565b61100c565b34801561040f57600080fd5b506101b661041e36600461270a565b6111ae565b34801561042f57600080fd5b506101b661043e366004612526565b6114aa565b34801561044f57600080fd5b506101cd61045e366004612624565b611560565b6101b661047136600461270a565b6118e9565b6001546001600160a01b031690565b61048d611ae8565b6000546001600160a01b039081169116146104c35760405162461bcd60e51b81526004016104ba90612d39565b60405180910390fd5b60005b81518110156104f3576104eb8282815181106104de57fe5b6020026020010151611aec565b6001016104c6565b5050565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b7f4e031542a9553ed1c4e810c54674ab4b984243e335b246aa3de73663bf4c11ee81565b610547611f6e565b600082815260046020526040902061055d611f6e565b60408051610220810182528354815260018401546001600160a01b039081166020808401919091526002860154909116828401526003850180548451818402810184019095528085529293606085019390928301828280156105e857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105ca575b505050505081526020018360040180548060200260200160405190810160405280929190818152602001828054801561064057602002820191906000526020600020905b81548152602001906001019080831161062c575b5050505050815260200183600501805480602002602001604051908101604052809291908181526020016000905b828210156107195760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107055780601f106106da57610100808354040283529160200191610705565b820191906000526020600020905b8154815290600101906020018083116106e857829003601f168201915b50505050508152602001906001019061066e565b50505050815260200183600601805480602002602001604051908101604052809291908181526020016000905b828210156107f15760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156107dd5780601f106107b2576101008083540402835291602001916107dd565b820191906000526020600020905b8154815290600101906020018083116107c057829003601f168201915b505050505081526020019060010190610746565b5050505081526020018360070180548060200260200160405190810160405280929190818152602001828054801561086857602002820191906000526020600020906000905b825461010083900a900460ff1615158152602060019283018181049485019490930390920291018084116108375790505b50505091835250506008840154602082015260098401546040820152600a8401546060820152600b8401546080820152600c84015460a0820152600d84015460ff808216151560c0840152610100808304909116151560e0840152620100009091046001600160a01b031690820152600e90930154610120909301929092525090505b919050565b60006108fb82610db4565b9050600781600781111561090b57fe5b141580156109255750600181600781111561092257fe5b14155b801561093d5750600681600781111561093a57fe5b14155b6109595760405162461bcd60e51b81526004016104ba90612dda565b60008281526004602052604090206006546001600160a01b0316331480610a0c5750600281015460018201546040516331a7bc4160e01b81526001600160a01b03928316926331a7bc41926109bc92309290911690436000190190600401612ac6565b60206040518083038186803b1580156109d457600080fd5b505afa1580156109e8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0c919061257d565b610a285760405162461bcd60e51b81526004016104ba90612da5565b600d8101805461ff00191661010017905560005b6003820154811015610b855760028201546003830180546001600160a01b0390921691631dc40b51919084908110610a7057fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610a9857fe5b9060005260206000200154856005018581548110610ab257fe5b90600052602060002001866006018681548110610acb57fe5b9060005260206000200187600a0154886007018881548110610ae957fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518763ffffffff1660e01b8152600401610b2a96959493929190612a1f565b602060405180830381600087803b158015610b4457600080fd5b505af1158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190612599565b50600101610a3c565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610bb59190612a63565b60405180910390a1505050565b610bca612014565b5060008281526004602090815260408083206001600160a01b0385168452600f0182529182902082518084019093525460ff8116151583526001600160f81b03610100909104169082015292915050565b6001600160a01b031660009081526005602052604090205460ff1690565b6104f3338383611b47565b610c4c611ae8565b6000546001600160a01b03908116911614610c795760405162461bcd60e51b81526004016104ba90612d39565b60005b81518110156104f357610ca1828281518110610c9457fe5b6020026020010151611d01565b600101610c7c565b610cb1611ae8565b6000546001600160a01b03908116911614610cde5760405162461bcd60e51b81526004016104ba90612d39565b610ce781611d54565b50565b610cf2611ae8565b6000546001600160a01b03908116911614610d1f5760405162461bcd60e51b81526004016104ba90612d39565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6006546001600160a01b03163314610d935760405162461bcd60e51b81526004016104ba90612d0f565b600680546001600160a01b0319169055565b6000546001600160a01b031690565b6000816003541015610dd85760405162461bcd60e51b81526004016104ba90612e08565b6000828152600460205260409020600d810154610100900460ff1615610e025760019150506108eb565b80600801544311610e175760009150506108eb565b80600901544311610e2c5760029150506108eb565b60028101546040516306fbb3ab60e01b81526001600160a01b03909116906306fbb3ab90610e6090309087906004016129b2565b60206040518083038186803b158015610e7857600080fd5b505afa158015610e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb0919061257d565b610ebe5760039150506108eb565b600a810154610ed15760049150506108eb565b600d81015460ff1615610ee85760079150506108eb565b600281015460405163f670a5f960e01b81526001600160a01b039091169063f670a5f990610f1c90309087906004016129b2565b60206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c919061257d565b15610f7b5760069150506108eb565b60059150506108eb565b60035490565b610f93611ae8565b6000546001600160a01b03908116911614610fc05760405162461bcd60e51b81526004016104ba90612d39565b610ce781611d96565b60025490565b6040518060400160405280601281526020017120b0bb329023b7bb32b93730b731b2903b1960711b81525081565b6006546001600160a01b031690565b60408051808201909152601281527120b0bb329023b7bb32b93730b731b2903b1960711b60209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f4cc6f35bf1a450a8f51b0719ea5910c789b7b914b5c4f0451867c8a5475a4982611082611de3565b306040516020016110969493929190612a6c565b604051602081830303815290604052805190602001207f4e031542a9553ed1c4e810c54674ab4b984243e335b246aa3de73663bf4c11ee87876040516020016110e193929190612a90565b60405160208183030381529060405280519060200120604051602001611108929190612983565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516111459493929190612aa8565b6020604051602081039080840390855afa158015611167573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661119a5760405162461bcd60e51b81526004016104ba90612c7d565b6111a5818888611b47565b50505050505050565b60046111b982610db4565b60078111156111c457fe5b146111e15760405162461bcd60e51b81526004016104ba90612bec565b60008181526004602081815260408084206002810154825163675e4d4160e11b81529251919594611278946001600160a01b039092169363cebc9a829381830193929091829003018186803b15801561123957600080fd5b505afa15801561124d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112719190612599565b4290611de7565b905060005b6003830154811015611461576002830154600384018054611459926001600160a01b03169190849081106112ad57fe5b6000918252602090912001546004860180546001600160a01b0390921691859081106112d557fe5b90600052602060002001548660050185815481106112ef57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561137d5780601f106113525761010080835404028352916020019161137d565b820191906000526020600020905b81548152906001019060200180831161136057829003601f168201915b505050505087600601868154811061139157fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561141f5780601f106113f45761010080835404028352916020019161141f565b820191906000526020600020905b81548152906001019060200180831161140257829003601f168201915b50505050508789600701888154811061143457fe5b90600052602060002090602091828204019190069054906101000a900460ff16611e13565b60010161127d565b50600a820181905560405133907f11a0b38e70585e4b09b794bd1d9f9b1a51a802eb8ee2101eeee178d0349e73fe9061149d9086908590613095565b60405180910390a2505050565b6114b2611ae8565b6000546001600160a01b039081169116146114df5760405162461bcd60e51b81526004016104ba90612d39565b6001600160a01b0381166115055760405162461bcd60e51b81526004016104ba90612b11565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008651600014156115845760405162461bcd60e51b81526004016104ba90612c4e565b85518751148015611596575084518751145b80156115a3575083518751145b80156115b0575082518751145b6115cc5760405162461bcd60e51b81526004016104ba90612d6e565b6115d588610c1b565b6115f15760405162461bcd60e51b81526004016104ba90612cd8565b604051631a1b205360e31b81526001600160a01b0389169063d0d90298906116259030903390600019430190600401612ac6565b60206040518083038186803b15801561163d57600080fd5b505afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611675919061257d565b6116915760405162461bcd60e51b81526004016104ba90612b57565b61169961202b565b6002546116a7904390611de7565b81600001818152505061172c896001600160a01b031663a438d2086040518163ffffffff1660e01b815260040160206040518083038186803b1580156116ec57600080fd5b505afa158015611700573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117249190612599565b825190611de7565b602082810191909152600380546040808501828152600092835260048552912090518155600181018054336001600160a01b0319918216179091556002820180549091166001600160a01b038e161790558a51909261179192840191908c019061204c565b5087516117a790600483019060208b01906120b1565b5086516117bd90600583019060208a01906120ec565b5085516117d39060068301906020890190612145565b5084516117e9906007830190602088019061219e565b508160000151816008018190555081602001518160090181905550600160009054906101000a90046001600160a01b031681600d0160026101000a8154816001600160a01b0302191690836001600160a01b031602179055508381600e0181905550600360008154809291906001019190505550896001600160a01b0316336001600160a01b03167fd272d67d2c8c66de43c1d2515abb064978a5020c173e15903b6a2ab3bf7440ec84604001518c8c8c8c8c8a600001518b60200151600160009054906101000a90046001600160a01b03168f6040516118d39a99989796959493929190612fe0565b60405180910390a3549998505050505050505050565b60056118f482610db4565b60078111156118ff57fe5b1461191c5760405162461bcd60e51b81526004016104ba90612e35565b6000818152600460205260408120600d8101805460ff19166001179055905b6003820154811015611aa25760028201546004830180546001600160a01b0390921691638902ab6591908490811061196f57fe5b906000526020600020015484600301848154811061198957fe5b6000918252602090912001546004860180546001600160a01b0390921691869081106119b157fe5b90600052602060002001548660050186815481106119cb57fe5b906000526020600020018760060187815481106119e457fe5b9060005260206000200188600a0154896007018981548110611a0257fe5b90600052602060002090602091828204019190069054906101000a900460ff166040518863ffffffff1660e01b8152600401611a4396959493929190612a1f565b6000604051808303818588803b158015611a5c57600080fd5b505af1158015611a70573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611a9991908101906125b1565b5060010161193b565b50336001600160a01b03167f9c85b616f29fca57a17eafe71cf9ff82ffef41766e2cf01ea7f8f7878dd3ec2483604051611adc9190612a63565b60405180910390a25050565b3390565b6001600160a01b03811660009081526005602052604090819020805460ff19169055517f5e8105a2af24345971359d2289f43efa80d093f4a7123561b8d63836b98724f490611b3c90839061299e565b60405180910390a150565b6002611b5283610db4565b6007811115611b5d57fe5b14611b7a5760405162461bcd60e51b81526004016104ba90612bc5565b60008281526004602090815260408083206001600160a01b0387168452600f8101909252909120805461010090046001600160f81b031615611bce5760405162461bcd60e51b81526004016104ba90612ca8565b600d820154600883015460405163eaeded5f60e01b81526000926201000090046001600160a01b03169163eaeded5f91611c0c918a916004016129b2565b60206040518083038186803b158015611c2457600080fd5b505afa158015611c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5c9190612599565b90508315611c7d57600b830154611c739082611de7565b600b840155611c92565b600c830154611c8c9082611de7565b600c8401555b815460ff60ff1990911685151517166101006001600160f81b038316021782556040516001600160a01b038716907f0c611e7b6ae0de26f4772260e1bbdb5f58cbb7c275fe2de14671968d29add8d690611cf19088908890869061307f565b60405180910390a2505050505050565b6001600160a01b03811660009081526005602052604090819020805460ff19166001179055517f52762435f58790076157ea2a4914a5a4d0aa0eb421588891377692f7fd3bc08290611b3c90839061299e565b600281905560405133907fc46fc23e244f0720a98ddbac6efb5bb40d212cf15e6478fc4b3017648715289d90611d8b908490612a63565b60405180910390a250565b600180546001600160a01b0319166001600160a01b0383169081179091556040513391907f9e8e9f668db69a2cefb172dabe284d0d3aea2b7ee64212a205bd033bd03a3d5590600090a350565b4690565b600082820183811015611e0c5760405162461bcd60e51b81526004016104ba90612b8e565b9392505050565b866001600160a01b031663b1fc8796878787878787604051602001611e3d969594939291906129cb565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611e6f9190612a63565b60206040518083038186803b158015611e8757600080fd5b505afa158015611e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebf919061257d565b15611edc5760405162461bcd60e51b81526004016104ba90612c23565b604051638d8fe2e360e01b81526001600160a01b03881690638d8fe2e390611f12908990899089908990899089906004016129cb565b602060405180830381600087803b158015611f2c57600080fd5b505af1158015611f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f649190612599565b5050505050505050565b6040518061022001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b03168152602001600080191681525090565b604080518082019091526000808252602082015290565b60405180606001604052806000815260200160008152602001600081525090565b8280548282559060005260206000209081019282156120a1579160200282015b828111156120a157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061206c565b506120ad92915061223a565b5090565b8280548282559060005260206000209081019282156120a1579160200282015b828111156120a15782518255916020019190600101906120d1565b828054828255906000526020600020908101928215612139579160200282015b82811115612139578251805161212991849160209091019061224f565b509160200191906001019061210c565b506120ad9291506122ca565b828054828255906000526020600020908101928215612192579160200282015b82811115612192578251805161218291849160209091019061224f565b5091602001919060010190612165565b506120ad9291506122e7565b82805482825590600052602060002090601f016020900481019282156120a15791602002820160005b8382111561220457835183826101000a81548160ff02191690831515021790555092602001926001016020816000010492830192600103026121c7565b80156122315782816101000a81549060ff0219169055600101602081600001049283019260010302612204565b50506120ad9291505b5b808211156120ad576000815560010161223b565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261228557600085556120a1565b82601f1061229e57805160ff19168380011785556120a1565b828001600101855582156120a157918201828111156120a15782518255916020019190600101906120d1565b808211156120ad5760006122de8282612304565b506001016122ca565b808211156120ad5760006122fb8282612304565b506001016122e7565b50805460018160011615610100020316600290046000825580601f1061232a5750610ce7565b601f016020900490600052602060002090810190610ce7919061223a565b600082601f830112612358578081fd5b813561236b612366826130c7565b6130a3565b81815291506020808301908481018184028601820187101561238c57600080fd5b60005b848110156123b45781356123a281613143565b8452928201929082019060010161238f565b505050505092915050565b600082601f8301126123cf578081fd5b81356123dd612366826130c7565b8181529150602080830190848101818402860182018710156123fe57600080fd5b60005b848110156123b457813561241481613158565b84529282019290820190600101612401565b600082601f830112612436578081fd5b8135612444612366826130c7565b818152915060208083019084810160005b848110156123b4578135870188603f82011261247057600080fd5b83810135612480612366826130e5565b81815260408b8184860101111561249657600080fd5b82818501888401375060009181018601919091528552509282019290820190600101612455565b600082601f8301126124cd578081fd5b81356124db612366826130c7565b8181529150602080830190848101818402860182018710156124fc57600080fd5b60005b848110156123b4578135845292820192908201906001016124ff565b80356108eb81613143565b600060208284031215612537578081fd5b8135611e0c81613143565b600060208284031215612553578081fd5b813567ffffffffffffffff811115612569578182fd5b61257584828501612348565b949350505050565b60006020828403121561258e578081fd5b8151611e0c81613158565b6000602082840312156125aa578081fd5b5051919050565b6000602082840312156125c2578081fd5b815167ffffffffffffffff8111156125d8578182fd5b8201601f810184136125e8578182fd5b80516125f6612366826130e5565b81815285602083850101111561260a578384fd5b61261b826020830160208601613113565b95945050505050565b600080600080600080600060e0888a03121561263e578283fd5b6126478861251b565b9650602088013567ffffffffffffffff80821115612663578485fd5b61266f8b838c01612348565b975060408a0135915080821115612684578485fd5b6126908b838c016124bd565b965060608a01359150808211156126a5578485fd5b6126b18b838c01612426565b955060808a01359150808211156126c6578485fd5b6126d28b838c01612426565b945060a08a01359150808211156126e7578384fd5b506126f48a828b016123bf565b92505060c0880135905092959891949750929550565b60006020828403121561271b578081fd5b5035919050565b60008060408385031215612734578182fd5b82359150602083013561274681613143565b809150509250929050565b60008060408385031215612763578182fd5b82359150602083013561274681613158565b600080600080600060a0868803121561278c578283fd5b85359450602086013561279e81613158565b9350604086013560ff811681146127b3578384fd5b94979396509394606081013594506080013592915050565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156128105781516001600160a01b0316875295820195908201906001016127eb565b509495945050505050565b6000815180845260208085019450808401835b8381101561281057815115158752958201959082019060010161282e565b6000815180845260208085018081965082840281019150828601855b858110156128925782840389526128808483516128d4565b98850198935090840190600101612868565b5091979650505050505050565b6000815180845260208085019450808401835b83811015612810578151875295820195908201906001016128b2565b15159052565b600081518084526128ec816020860160208601613113565b601f01601f19169290920160200192915050565b6000815460018082166000811461291e576001811461293c5761297a565b60028304607f16865260ff198316602087015260408601935061297a565b6002830480875261294c86613107565b60005b828110156129705781546020828b010152848201915060208101905061294f565b8801602001955050505b50505092915050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038816825286602083015260c060408301526129f260c08301876128d4565b8281036060840152612a0481876128d4565b6080840195909552505090151560a090910152949350505050565b600060018060a01b038816825286602083015260c06040830152612a4660c0830187612900565b8281036060840152612a048187612900565b901515815260200190565b90815260200190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020810160088310612af857fe5b91905290565b600060208252611e0c60208301846128d4565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f50524f504f534954494f4e5f4352454154494f4e5f494e56414c494400000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252600d908201526c1593d5125391d7d0d313d4d151609a1b604082015260600190565b60208082526017908201527f494e56414c49445f53544154455f464f525f5155455545000000000000000000604082015260600190565b602080825260119082015270222aa82624a1a0aa22a22fa0a1aa24a7a760791b604082015260600190565b602080825260159082015274494e56414c49445f454d5054595f5441524745545360581b604082015260600190565b602080825260119082015270494e56414c49445f5349474e415455524560781b604082015260600190565b6020808252601690820152751593d51157d053149150511657d4d55093525515115160521b604082015260600190565b60208082526017908201527f4558454355544f525f4e4f545f415554484f52495a4544000000000000000000604082015260600190565b60208082526010908201526f27a7262cafa12cafa3aaa0a92224a0a760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f494e434f4e53495354454e545f504152414d535f4c454e475448000000000000604082015260600190565b6020808252818101527f50524f504f534954494f4e5f43414e43454c4c4154494f4e5f494e56414c4944604082015260600190565b60208082526014908201527313d3931657d0915193d49157d1561150d555115160621b604082015260600190565b6020808252601390820152721253959053125117d41493d413d4d05317d251606a1b604082015260600190565b6020808252601590820152744f4e4c595f5155455545445f50524f504f53414c5360581b604082015260600190565b600060208252825160208301526020830151612e8360408401826127cb565b506040830151612e9660608401826127cb565b506060830151610220806080850152612eb36102408501836127d8565b91506080850151601f19808685030160a0870152612ed1848361289f565b935060a08701519150808685030160c0870152612eee848361284c565b935060c08701519150808685030160e0870152612f0b848361284c565b935060e08701519150610100818786030181880152612f2a858461281b565b90880151610120888101919091528801516101408089019190915288015161016080890191909152880151610180808901919091528801516101a08089019190915288015190945091506101c09050612f85818701836128ce565b86015190506101e0612f99868201836128ce565b8601519050610200612fad868201836127cb565b959095015193019290925250919050565b8151151581526020918201516001600160f81b03169181019190915260400190565b60006101408c8352806020840152612ffa8184018d6127d8565b9050828103604084015261300e818c61289f565b90508281036060840152613022818b61284c565b90508281036080840152613036818a61284c565b905082810360a084015261304a818961281b565b60c0840197909752505060e08101939093526001600160a01b0391909116610100830152610120909101529695505050505050565b9283529015156020830152604082015260600190565b918252602082015260400190565b60405181810167ffffffffffffffff811182821017156130bf57fe5b604052919050565b600067ffffffffffffffff8211156130db57fe5b5060209081020190565b600067ffffffffffffffff8211156130f957fe5b50601f01601f191660200190565b60009081526020902090565b60005b8381101561312e578181015183820152602001613116565b8381111561313d576000848401525b50505050565b6001600160a01b0381168114610ce757600080fd5b8015158114610ce757600080fdfea26469706673582212203255f14330cf43fabb4281e87def734f660a2374d36a74dbd177480523c8dfc664736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca76ebd8617a03126b6fb84f9b1c1a0fb71c263300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : governanceStrategy (address): 0x0000000000000000000000000000000000000000
Arg [1] : votingDelay (uint256): 0
Arg [2] : guardian (address): 0xCA76Ebd8617a03126B6FB84F9b1c1A0fB71C2633
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 000000000000000000000000ca76ebd8617a03126b6fb84f9b1c1a0fb71c2633
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31293:15789:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41150:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40631:194;;;;;;;;;;-1:-1:-1;40631:194:0;;;;;:::i;:::-;;:::i;:::-;;31642:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31779:97::-;;;;;;;;;;;;;:::i;42544:953::-;;;;;;;;;;-1:-1:-1;42544:953:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35479:1016::-;;;;;;;;;;-1:-1:-1;35479:1016:0;;;;;:::i;:::-;;:::i;43775:185::-;;;;;;;;;;-1:-1:-1;43775:185:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41754:134::-;;;;;;;;;;-1:-1:-1;41754:134:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;38323:136::-;;;;;;;;;;-1:-1:-1;38323:136:0;;;;;:::i;:::-;;:::i;40277:190::-;;;;;;;;;;-1:-1:-1;40277:190:0;;;;;:::i;:::-;;:::i;40005:114::-;;;;;;;;;;-1:-1:-1;40005:114:0;;;;;:::i;:::-;;:::i;3235:138::-;;;;;;;;;;;;;:::i;40911:88::-;;;;;;;;;;;;;:::i;2633:73::-;;;;;;;;;;;;;:::i;44119:945::-;;;;;;;;;;-1:-1:-1;44119:945:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42265:105::-;;;;;;;;;;;;;:::i;39614:142::-;;;;;;;;;;-1:-1:-1;39614:142:0;;;;;:::i;:::-;;:::i;41472:99::-;;;;;;;;;;;;;:::i;31881:50::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42031:93::-;;;;;;;;;;;;;:::i;38813:584::-;;;;;;;;;;-1:-1:-1;38813:584:0;;;;;:::i;:::-;;:::i;36622:722::-;;;;;;;;;;-1:-1:-1;36622:722:0;;;;;:::i;:::-;;:::i;3518:230::-;;;;;;;;;;-1:-1:-1;3518:230:0;;;;;:::i;:::-;;:::i;33175:2064::-;;;;;;;;;;-1:-1:-1;33175:2064:0;;;;;:::i;:::-;;:::i;37472:648::-;;;;;;:::i;:::-;;:::i;41150:113::-;41238:19;;-1:-1:-1;;;;;41238:19:0;41150:113;:::o;40631:194::-;2837:12;:10;:12::i;:::-;2827:6;;-1:-1:-1;;;;;2827:6:0;;;:22;;;2819:67;;;;-1:-1:-1;;;2819:67:0;;;;;;;:::i;:::-;;;;;;;;;40727:9:::1;40722:98;40746:9;:16;40742:1;:20;40722:98;;;40778:34;40799:9;40809:1;40799:12;;;;;;;;;;;;;;40778:20;:34::i;:::-;40764:3;;40722:98;;;;40631:194:::0;:::o;31642:132::-;31684:90;31642:132;:::o;31779:97::-;31827:49;31779:97;:::o;42544:953::-;42641:27;;:::i;:::-;42680:25;42708:22;;;:10;:22;;;;;42737:48;;:::i;:::-;42788:667;;;;;;;;42822:11;;42788:667;;42851:16;;;;-1:-1:-1;;;;;42851:16:0;;;42788:667;;;;;;;;42886:17;;;;;;;42788:667;;;;42921:16;;;42788:667;;;;;;;;;;;;;;;;;;;;;;;;;;;42921:16;42788:667;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42788:667:0;;;;;;;;;;;;;;;;;;;;;;;;;42954:8;:15;;42788:667;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42990:8;:19;;42788:667;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42788:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43029:8;:18;;42788:667;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42788:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43075:8;:26;;42788:667;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42788:667:0;;;-1:-1:-1;;43122:19:0;;;;42788:667;;;;43160:17;;;;42788:667;;;;43201:22;;;;42788:667;;;;43242:17;;;;42788:667;;;;43282:21;;;;42788:667;;;;43322:17;;;;;;;;42788:667;;;;;;43322:17;43358;;;;;;42788:667;;;;;;43394:17;;;;-1:-1:-1;;;;;43394:17:0;42788:667;;;;43430:17;;;;;42788:667;;;;;;;;-1:-1:-1;42788:667:0;-1:-1:-1;42544:953:0;;;;:::o;35479:1016::-;35540:19;35562:28;35579:10;35562:16;:28::i;:::-;35540:50;-1:-1:-1;35622:22:0;35613:5;:31;;;;;;;;;;:75;;;;-1:-1:-1;35666:22:0;35657:5;:31;;;;;;;;;;35613:75;:118;;;;-1:-1:-1;35710:21:0;35701:5;:30;;;;;;;;;;35613:118;35597:172;;;;-1:-1:-1;;;35597:172:0;;;;;;;:::i;:::-;35778:25;35806:22;;;:10;:22;;;;;35865:9;;-1:-1:-1;;;;;35865:9:0;35851:10;:23;;:197;;-1:-1:-1;35914:17:0;;;;;35992:16;;;35887:161;;-1:-1:-1;;;35887:161:0;;-1:-1:-1;;;;;35914:17:0;;;;35887:75;;:161;;35975:4;;35992:16;;;;36021:12;-1:-1:-1;;36021:16:0;;35887:161;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35835:263;;;;-1:-1:-1;;;35835:263:0;;;;;;;:::i;:::-;36105:17;;;:24;;-1:-1:-1;;36105:24:0;;;;;;36136:312;36160:16;;;:23;36156:27;;36136:312;;;36199:17;;;;36245:16;;;:19;;-1:-1:-1;;;;;36199:17:0;;;;:35;;36245:16;36262:1;;36245:19;;;;;;;;;;;;;;;;36275:15;;;:18;;-1:-1:-1;;;;;36245:19:0;;;;36291:1;;36275:18;;;;;;;;;;;;;;36304:8;:19;;36324:1;36304:22;;;;;;;;;;;;;;;36337:8;:18;;36356:1;36337:21;;;;;;;;;;;;;;;36369:8;:22;;;36402:8;:26;;36429:1;36402:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36199:241;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;36185:3:0;;36136:312;;;;36461:28;36478:10;36461:28;;;;;;:::i;:::-;;;;;;;;35479:1016;;;:::o;43775:185::-;43889:11;;:::i;:::-;-1:-1:-1;43919:22:0;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;43919:35:0;;;;:28;;:35;;;;;;43912:42;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43912:42:0;;;;;;;;;43775:185;;;;:::o;41754:134::-;-1:-1:-1;;;;;41852:30:0;41832:4;41852:30;;;:20;:30;;;;;;;;;41754:134::o;38323:136::-;38409:44;38421:10;38433;38445:7;38409:11;:44::i;40277:190::-;2837:12;:10;:12::i;:::-;2827:6;;-1:-1:-1;;;;;2827:6:0;;;:22;;;2819:67;;;;-1:-1:-1;;;2819:67:0;;;;;;;:::i;:::-;40371:9:::1;40366:96;40390:9;:16;40386:1;:20;40366:96;;;40422:32;40441:9;40451:1;40441:12;;;;;;;;;;;;;;40422:18;:32::i;:::-;40408:3;;40366:96;;40005:114:::0;2837:12;:10;:12::i;:::-;2827:6;;-1:-1:-1;;;;;2827:6:0;;;:22;;;2819:67;;;;-1:-1:-1;;;2819:67:0;;;;;;;:::i;:::-;40085:28:::1;40101:11;40085:15;:28::i;:::-;40005:114:::0;:::o;3235:138::-;2837:12;:10;:12::i;:::-;2827:6;;-1:-1:-1;;;;;2827:6:0;;;:22;;;2819:67;;;;-1:-1:-1;;;2819:67:0;;;;;;;:::i;:::-;3338:1:::1;3322:6:::0;;3301:40:::1;::::0;-1:-1:-1;;;;;3322:6:0;;::::1;::::0;3301:40:::1;::::0;3338:1;;3301:40:::1;3365:1;3348:19:::0;;-1:-1:-1;;;;;;3348:19:0::1;::::0;;3235:138::o;40911:88::-;31991:9;;-1:-1:-1;;;;;31991:9:0;31977:10;:23;31969:52;;;;-1:-1:-1;;;31969:52:0;;;;;;;:::i;:::-;40971:9:::1;:22:::0;;-1:-1:-1;;;;;;40971:22:0::1;::::0;;40911:88::o;2633:73::-;2671:7;2694:6;-1:-1:-1;;;;;2694:6:0;2633:73;:::o;44119:945::-;44195:13;44244:10;44225:15;;:29;;44217:61;;;;-1:-1:-1;;;44217:61:0;;;;;;;:::i;:::-;44285:25;44313:22;;;:10;:22;;;;;44346:17;;;;;;;;;44342:717;;;44381:22;44374:29;;;;;44342:717;44437:8;:19;;;44421:12;:35;44417:642;;44474:21;44467:28;;;;;44417:642;44529:8;:17;;;44513:12;:33;44509:550;;44564:20;44557:27;;;;;44509:550;44630:17;;;;44603:81;;-1:-1:-1;;;44603:81:0;;-1:-1:-1;;;;;44630:17:0;;;;44603:63;;:81;;44667:4;;44673:10;;44603:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44598:461;;44702:20;44695:27;;;;;44598:461;44740:22;;;;44736:323;;44785:23;44778:30;;;;;44736:323;44826:17;;;;;;44822:237;;;44861:22;44854:29;;;;;44822:237;44901:17;;;;:61;;-1:-1:-1;;;44901:61:0;;-1:-1:-1;;;;;44901:17:0;;;;:43;;:61;;44945:4;;44951:10;;44901:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44897:162;;;44980:21;44973:28;;;;;44897:162;45031:20;45024:27;;;;;42265:105;42349:15;;42265:105;:::o;39614:142::-;2837:12;:10;:12::i;:::-;2827:6;;-1:-1:-1;;;;;2827:6:0;;;:22;;;2819:67;;;;-1:-1:-1;;;2819:67:0;;;;;;;:::i;:::-;39708:42:::1;39731:18;39708:22;:42::i;41472:99::-:0;41553:12;;41472:99;:::o;31881:50::-;;;;;;;;;;;;;;-1:-1:-1;;;31881:50:0;;;;:::o;42031:93::-;42109:9;;-1:-1:-1;;;;;42109:9:0;42031:93;:::o;38813:584::-;39101:4;;;;;;;;;;;;-1:-1:-1;;;39101:4:0;;;;;38964:14;31684:90;39085:22;39109:12;:10;:12::i;:::-;39131:4;39057:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39047:91;;;;;;31827:49;39193:10;39205:7;39159:54;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39149:65;;;;;;38999:224;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38981:249;;;;;;38964:266;;39237:14;39254:26;39264:6;39272:1;39275;39278;39254:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39254:26:0;;-1:-1:-1;;39254:26:0;;;-1:-1:-1;;;;;;;39295:20:0;;39287:50;;;;-1:-1:-1;;;39287:50:0;;;;;;;:::i;:::-;39351:40;39363:6;39371:10;39383:7;39351:11;:40::i;:::-;39344:47;;38813:584;;;;;:::o;36622:722::-;36722:23;36690:28;36707:10;36690:16;:28::i;:::-;:55;;;;;;;;;36682:91;;;;-1:-1:-1;;;36682:91:0;;;;;;;:::i;:::-;36780:25;36808:22;;;:10;:22;;;;;;;;36881:17;;;;:28;;-1:-1:-1;;;36881:28:0;;;;36808:22;;36780:25;36861:49;;-1:-1:-1;;;;;36881:17:0;;;;:26;;:28;;;;36808:22;36881:28;;;;;;;:17;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36861:15;;:19;:49::i;:::-;36837:73;;36922:9;36917:310;36941:16;;;:23;36937:27;;36917:310;;;37005:17;;;;37033:16;;;:19;;36980:239;;-1:-1:-1;;;;;37005:17:0;;37033:16;37050:1;;37033:19;;;;;;;;;;;;;;;;37063:15;;;:18;;-1:-1:-1;;;;;37033:19:0;;;;37079:1;;37063:18;;;;;;;;;;;;;;37092:8;:19;;37112:1;37092:22;;;;;;;;;;;;;;;;;;36980:239;;;;;;;-1:-1:-1;;36980:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37092:22;36980:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37125:8;:18;;37144:1;37125:21;;;;;;;;;;;;;;;;;;36980:239;;;;;;;-1:-1:-1;;36980:239:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37125:21;36980:239;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37157:13;37181:8;:26;;37208:1;37181:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36980:14;:239::i;:::-;36966:3;;36917:310;;;-1:-1:-1;37233:22:0;;;:38;;;37285:53;;37327:10;;37285:53;;;;37300:10;;37258:13;;37285:53;:::i;:::-;;;;;;;;36622:722;;;:::o;3518:230::-;2837:12;:10;:12::i;:::-;2827:6;;-1:-1:-1;;;;;2827:6:0;;;:22;;;2819:67;;;;-1:-1:-1;;;2819:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3603:22:0;::::1;3595:73;;;;-1:-1:-1::0;;;3595:73:0::1;;;;;;;:::i;:::-;3701:6;::::0;;3680:38:::1;::::0;-1:-1:-1;;;;;3680:38:0;;::::1;::::0;3701:6;::::1;::::0;3680:38:::1;::::0;::::1;3725:6;:17:::0;;-1:-1:-1;;;;;;3725:17:0::1;-1:-1:-1::0;;;;;3725:17:0;;;::::1;::::0;;;::::1;::::0;;3518:230::o;33175:2064::-;33446:7;33470;:14;33488:1;33470:19;;33462:53;;;;-1:-1:-1;;;33462:53:0;;;;;;;:::i;:::-;33556:6;:13;33538:7;:14;:31;:79;;;;;33600:10;:17;33582:7;:14;:35;33538:79;:126;;;;;33648:9;:16;33630:7;:14;:34;33538:126;:181;;;;;33695:17;:24;33677:7;:14;:42;33538:181;33522:241;;;;-1:-1:-1;;;33522:241:0;;;;;;;:::i;:::-;33780:39;33809:8;33780:20;:39::i;:::-;33772:75;;;;-1:-1:-1;;;33772:75:0;;;;;;;:::i;:::-;33872:135;;-1:-1:-1;;;33872:135:0;;-1:-1:-1;;;;;33872:63:0;;;;;:135;;33946:4;;33961:10;;-1:-1:-1;;33982:12:0;:16;;33872:135;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33856:197;;;;-1:-1:-1;;;33856:197:0;;;;;;;:::i;:::-;34062:22;;:::i;:::-;34128:12;;34111:30;;:12;;:16;:30::i;:::-;34093:4;:15;;:48;;;;;34164:76;34211:8;-1:-1:-1;;;;;34184:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34164:15;;;:19;:76::i;:::-;34148:13;;;;:92;;;;34279:15;;;34249:27;;;;:45;;;-1:-1:-1;34334:39:0;;;:10;:39;;;;34397:27;;34380:44;;34431:19;;;:32;;34453:10;-1:-1:-1;;;;;;34431:32:0;;;;;;;34470:20;;;:31;;;;;-1:-1:-1;;;;;34470:31:0;;;;;34508:29;;34334:39;;34508:29;;:19;;;:29;;;;;:::i;:::-;-1:-1:-1;34544:27:0;;;;:18;;;;:27;;;;;:::i;:::-;-1:-1:-1;34578:35:0;;;;:22;;;;:35;;;;;:::i;:::-;-1:-1:-1;34620:33:0;;;;:21;;;;:33;;;;;:::i;:::-;-1:-1:-1;34660:49:0;;;;:29;;;;:49;;;;;:::i;:::-;;34741:4;:15;;;34716:11;:22;;:40;;;;34786:4;:13;;;34763:11;:20;;:36;;;;34829:19;;;;;;;;;-1:-1:-1;;;;;34829:19:0;34806:11;:20;;;:42;;;;;-1:-1:-1;;;;;34806:42:0;;;;;-1:-1:-1;;;;;34806:42:0;;;;;;34878:8;34855:11;:20;;:31;;;;34893:15;;:17;;;;;;;;;;;;;35003:8;-1:-1:-1;;;;;34924:279:0;34984:10;-1:-1:-1;;;;;34924:279:0;;34948:4;:27;;;35020:7;35036:6;35051:10;35070:9;35088:17;35114:4;:15;;;35138:4;:13;;;35160:19;;;;;;;;;-1:-1:-1;;;;;35160:19:0;35188:8;34924:279;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;35219:14;;33175:2064;-1:-1:-1;;;;;;;;;33175:2064:0:o;37472:648::-;37582:20;37550:28;37567:10;37550:16;:28::i;:::-;:52;;;;;;;;;37542:86;;;;-1:-1:-1;;;37542:86:0;;;;;;;:::i;:::-;37635:25;37663:22;;;:10;:22;;;;;37692:17;;;:24;;-1:-1:-1;;37692:24:0;37712:4;37692:24;;;37663:22;37723:340;37747:16;;;:23;37743:27;;37723:340;;;37786:17;;;;37830:15;;;:18;;-1:-1:-1;;;;;37786:17:0;;;;:36;;37830:15;37846:1;;37830:18;;;;;;;;;;;;;;37860:8;:16;;37877:1;37860:19;;;;;;;;;;;;;;;;;;37890:15;;;:18;;-1:-1:-1;;;;;37860:19:0;;;;37906:1;;37890:18;;;;;;;;;;;;;;37919:8;:19;;37939:1;37919:22;;;;;;;;;;;;;;;37952:8;:18;;37971:1;37952:21;;;;;;;;;;;;;;;37984:8;:22;;;38017:8;:26;;38044:1;38017:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37786:269;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37786:269:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;37772:3:0;;37723:340;;;;38103:10;-1:-1:-1;;;;;38074:40:0;;38091:10;38074:40;;;;;;:::i;:::-;;;;;;;;37472:648;;:::o;1333:100::-;1417:10;1333:100;:::o;46929:150::-;-1:-1:-1;;;;;46993:30:0;;47026:5;46993:30;;;:20;:30;;;;;;;:38;;-1:-1:-1;;46993:38:0;;;47043:30;;;;;47014:8;;47043:30;:::i;:::-;;;;;;;;46929:150;:::o;45605:811::-;45751:20;45719:28;45736:10;45719:16;:28::i;:::-;:52;;;;;;;;;45711:78;;;;-1:-1:-1;;;45711:78:0;;;;;;;:::i;:::-;45796:25;45824:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;45873:21:0;;;;:14;;;:21;;;;;;45911:16;;;;;-1:-1:-1;;;;;45911:16:0;:21;45903:56;;;;-1:-1:-1;;;45903:56:0;;;;;;;:::i;:::-;46006:17;;;;46064:19;;;;45990:100;;-1:-1:-1;;;45990:100:0;;45968:19;;46006:17;;;-1:-1:-1;;;;;46006:17:0;;45990:51;;:100;;46050:5;;45990:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45968:122;;46103:7;46099:169;;;46141:17;;;;:34;;46163:11;46141:21;:34::i;:::-;46121:17;;;:54;46099:169;;;46222:21;;;;:38;;46248:11;46222:25;:38::i;:::-;46198:21;;;:62;46099:169;46276:22;;;-1:-1:-1;;46276:22:0;;;;;;;46305:39;46276:22;-1:-1:-1;;;;;46305:39:0;;;;;;46358:52;;-1:-1:-1;;;;;46358:52:0;;;;;;;46370:10;;46276:22;;46305:39;;46358:52;:::i;:::-;;;;;;;;45605:811;;;;;;:::o;46778:145::-;-1:-1:-1;;;;;46840:30:0;;;;;;:20;:30;;;;;;;:37;;-1:-1:-1;;46840:37:0;46873:4;46840:37;;;46889:28;;;;;46861:8;;46889:28;:::i;46621:151::-;46683:12;:26;;;46723:43;;46755:10;;46723:43;;;;46698:11;;46723:43;:::i;:::-;;;;;;;;46621:151;:::o;46422:193::-;46498:19;:40;;-1:-1:-1;;;;;;46498:40:0;-1:-1:-1;;;;;46498:40:0;;;;;;;;46552:57;;46598:10;;46498:40;46552:57;;-1:-1:-1;;46552:57:0;46422:193;:::o;85:133::-;182:9;85:133;:::o;4567:167::-;4625:7;4653:5;;;4673:6;;;;4665:46;;;;-1:-1:-1;;;4665:46:0;;;;;;;:::i;:::-;4727:1;4567:167;-1:-1:-1;;;4567:167:0:o;45070:529::-;45324:8;-1:-1:-1;;;;;45324:23:0;;45379:6;45387:5;45394:9;45405:8;45415:13;45430:16;45368:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45358:90;;;;;;45324:133;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45323:134;45307:185;;;;-1:-1:-1;;;45307:185:0;;;;;;;:::i;:::-;45499:94;;-1:-1:-1;;;45499:94:0;;-1:-1:-1;;;;;45499:25:0;;;;;:94;;45525:6;;45533:5;;45540:9;;45551:8;;45561:13;;45576:16;;45499:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45070:529;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:769:1:-;;127:3;120:4;112:6;108:17;104:27;94:2;;149:5;142;135:20;94:2;193:6;180:20;218:69;233:53;279:6;233:53;:::i;:::-;218:69;:::i;:::-;321:21;;;209:78;-1:-1:-1;361:4:1;381:14;;;;415:15;;;461;;;449:28;;445:37;;442:46;-1:-1:-1;439:2:1;;;501:1;498;491:12;439:2;523:1;533:244;547:6;544:1;541:13;533:244;;;622:3;609:17;639:33;666:5;639:33;:::i;:::-;685:18;;723:12;;;;755;;;;569:1;562:9;533:244;;;537:3;;;;;84:699;;;;:::o;788:763::-;;898:3;891:4;883:6;879:17;875:27;865:2;;920:5;913;906:20;865:2;964:6;951:20;989:69;1004:53;1050:6;1004:53;:::i;989:69::-;1092:21;;;980:78;-1:-1:-1;1132:4:1;1152:14;;;;1186:15;;;1232;;;1220:28;;1216:37;;1213:46;-1:-1:-1;1210:2:1;;;1272:1;1269;1262:12;1210:2;1294:1;1304:241;1318:6;1315:1;1312:13;1304:241;;;1393:3;1380:17;1410:30;1434:5;1410:30;:::i;:::-;1453:18;;1491:12;;;;1523;;;;1340:1;1333:9;1304:241;;1556:1109;;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1689:5;1682;1675:20;1634:2;1733:6;1720:20;1758:69;1773:53;1819:6;1773:53;:::i;1758:69::-;1861:21;;;1749:78;-1:-1:-1;1901:4:1;1921:14;;;;1955:15;;;1988:1;1998:661;2012:6;2009:1;2006:13;1998:661;;;2096:3;2083:17;2075:6;2071:30;2141:3;2136:2;2132;2128:11;2124:21;2114:2;;2159:1;2156;2149:12;2114:2;2213;2209;2205:11;2192:25;2245:55;2260:39;2290:8;2260:39;:::i;2245:55::-;2329:8;2320:7;2313:25;2361:2;2410:3;2405:2;2394:8;2390:2;2386:17;2382:26;2379:35;2376:2;;;2427:1;2424;2417:12;2376:2;2488:8;2483:2;2479;2475:11;2470:2;2461:7;2457:16;2444:53;-1:-1:-1;2550:1:1;2521:22;;;2517:31;;2510:42;;;;2565:20;;-1:-1:-1;2605:12:1;;;;2637;;;;2034:1;2027:9;1998:661;;2670:692;;2783:3;2776:4;2768:6;2764:17;2760:27;2750:2;;2805:5;2798;2791:20;2750:2;2849:6;2836:20;2874:69;2889:53;2935:6;2889:53;:::i;2874:69::-;2977:21;;;2865:78;-1:-1:-1;3017:4:1;3037:14;;;;3071:15;;;3117;;;3105:28;;3101:37;;3098:46;-1:-1:-1;3095:2:1;;;3157:1;3154;3147:12;3095:2;3179:1;3189:167;3203:6;3200:1;3197:13;3189:167;;;3264:17;;3252:30;;3302:12;;;;3334;;;;3225:1;3218:9;3189:167;;3367:162;3461:20;;3490:33;3461:20;3490:33;:::i;3534:259::-;;3646:2;3634:9;3625:7;3621:23;3617:32;3614:2;;;3667:6;3659;3652:22;3614:2;3711:9;3698:23;3730:33;3757:5;3730:33;:::i;3798:374::-;;3935:2;3923:9;3914:7;3910:23;3906:32;3903:2;;;3956:6;3948;3941:22;3903:2;4001:9;3988:23;4034:18;4026:6;4023:30;4020:2;;;4071:6;4063;4056:22;4020:2;4099:67;4158:7;4149:6;4138:9;4134:22;4099:67;:::i;:::-;4089:77;3893:279;-1:-1:-1;;;;3893:279:1:o;4177:257::-;;4297:2;4285:9;4276:7;4272:23;4268:32;4265:2;;;4318:6;4310;4303:22;4265:2;4355:9;4349:16;4374:30;4398:5;4374:30;:::i;4439:194::-;;4562:2;4550:9;4541:7;4537:23;4533:32;4530:2;;;4583:6;4575;4568:22;4530:2;-1:-1:-1;4611:16:1;;4520:113;-1:-1:-1;4520:113:1:o;4638:695::-;;4770:2;4758:9;4749:7;4745:23;4741:32;4738:2;;;4791:6;4783;4776:22;4738:2;4829:9;4823:16;4862:18;4854:6;4851:30;4848:2;;;4899:6;4891;4884:22;4848:2;4927:22;;4980:4;4972:13;;4968:27;-1:-1:-1;4958:2:1;;5014:6;5006;4999:22;4958:2;5052;5046:9;5077:53;5092:37;5122:6;5092:37;:::i;5077:53::-;5153:6;5146:5;5139:21;5201:7;5196:2;5187:6;5183:2;5179:15;5175:24;5172:37;5169:2;;;5227:6;5219;5212:22;5169:2;5245:58;5296:6;5291:2;5284:5;5280:14;5275:2;5271;5267:11;5245:58;:::i;:::-;5322:5;4728:605;-1:-1:-1;;;;;4728:605:1:o;5338:1573::-;;;;;;;;5722:3;5710:9;5701:7;5697:23;5693:33;5690:2;;;5744:6;5736;5729:22;5690:2;5772:55;5817:9;5772:55;:::i;:::-;5762:65;;5878:2;5867:9;5863:18;5850:32;5901:18;5942:2;5934:6;5931:14;5928:2;;;5963:6;5955;5948:22;5928:2;5991:67;6050:7;6041:6;6030:9;6026:22;5991:67;:::i;:::-;5981:77;;6111:2;6100:9;6096:18;6083:32;6067:48;;6140:2;6130:8;6127:16;6124:2;;;6161:6;6153;6146:22;6124:2;6189:69;6250:7;6239:8;6228:9;6224:24;6189:69;:::i;:::-;6179:79;;6311:2;6300:9;6296:18;6283:32;6267:48;;6340:2;6330:8;6327:16;6324:2;;;6361:6;6353;6346:22;6324:2;6389:67;6448:7;6437:8;6426:9;6422:24;6389:67;:::i;:::-;6379:77;;6509:3;6498:9;6494:19;6481:33;6465:49;;6539:2;6529:8;6526:16;6523:2;;;6560:6;6552;6545:22;6523:2;6588:67;6647:7;6636:8;6625:9;6621:24;6588:67;:::i;:::-;6578:77;;6708:3;6697:9;6693:19;6680:33;6664:49;;6738:2;6728:8;6725:16;6722:2;;;6759:6;6751;6744:22;6722:2;;6787:66;6845:7;6834:8;6823:9;6819:24;6787:66;:::i;:::-;6777:76;;;6900:3;6889:9;6885:19;6872:33;6862:43;;5680:1231;;;;;;;;;;:::o;6916:190::-;;7028:2;7016:9;7007:7;7003:23;6999:32;6996:2;;;7049:6;7041;7034:22;6996:2;-1:-1:-1;7077:23:1;;6986:120;-1:-1:-1;6986:120:1:o;7310:327::-;;;7439:2;7427:9;7418:7;7414:23;7410:32;7407:2;;;7460:6;7452;7445:22;7407:2;7501:9;7488:23;7478:33;;7561:2;7550:9;7546:18;7533:32;7574:33;7601:5;7574:33;:::i;:::-;7626:5;7616:15;;;7397:240;;;;;:::o;7642:321::-;;;7768:2;7756:9;7747:7;7743:23;7739:32;7736:2;;;7789:6;7781;7774:22;7736:2;7830:9;7817:23;7807:33;;7890:2;7879:9;7875:18;7862:32;7903:30;7927:5;7903:30;:::i;7968:634::-;;;;;;8143:3;8131:9;8122:7;8118:23;8114:33;8111:2;;;8165:6;8157;8150:22;8111:2;8206:9;8193:23;8183:33;;8266:2;8255:9;8251:18;8238:32;8279:30;8303:5;8279:30;:::i;:::-;8328:5;-1:-1:-1;8385:2:1;8370:18;;8357:32;8433:4;8420:18;;8408:31;;8398:2;;8458:6;8450;8443:22;8398:2;8101:501;;;;-1:-1:-1;8486:7:1;;8540:2;8525:18;;8512:32;;-1:-1:-1;8591:3:1;8576:19;8563:33;;8101:501;-1:-1:-1;;8101:501:1:o;8607:106::-;-1:-1:-1;;;;;8675:31:1;8663:44;;8653:60::o;8718:469::-;;8815:5;8809:12;8842:6;8837:3;8830:19;8868:4;8897:2;8892:3;8888:12;8881:19;;8934:2;8927:5;8923:14;8955:3;8967:195;8981:6;8978:1;8975:13;8967:195;;;9046:13;;-1:-1:-1;;;;;9042:39:1;9030:52;;9102:12;;;;9137:15;;;;9078:1;8996:9;8967:195;;;-1:-1:-1;9178:3:1;;8785:402;-1:-1:-1;;;;;8785:402:1:o;9192:456::-;;9286:5;9280:12;9313:6;9308:3;9301:19;9339:4;9368:2;9363:3;9359:12;9352:19;;9405:2;9398:5;9394:14;9426:3;9438:185;9452:6;9449:1;9446:13;9438:185;;;9527:13;;9520:21;9513:29;9501:42;;9563:12;;;;9598:15;;;;9474:1;9467:9;9438:185;;9653:625;;9748:5;9742:12;9775:6;9770:3;9763:19;9801:4;9842:2;9837:3;9833:12;9867:11;9894;9887:18;;9949:2;9941:6;9937:15;9930:5;9926:27;9914:39;;9987:2;9980:5;9976:14;10008:3;10020:232;10034:6;10031:1;10028:13;10020:232;;;10105:5;10099:4;10095:16;10090:3;10083:29;10133:39;10167:4;10158:6;10152:13;10133:39;:::i;:::-;10230:12;;;;10125:47;-1:-1:-1;10195:15:1;;;;10056:1;10049:9;10020:232;;;-1:-1:-1;10268:4:1;;9718:560;-1:-1:-1;;;;;;;9718:560:1:o;10283:443::-;;10380:5;10374:12;10407:6;10402:3;10395:19;10433:4;10462:2;10457:3;10453:12;10446:19;;10499:2;10492:5;10488:14;10520:3;10532:169;10546:6;10543:1;10540:13;10532:169;;;10607:13;;10595:26;;10641:12;;;;10676:15;;;;10568:1;10561:9;10532:169;;10731:93;10803:13;10796:21;10784:34;;10774:50::o;10829:259::-;;10910:5;10904:12;10937:6;10932:3;10925:19;10953:63;11009:6;11002:4;10997:3;10993:14;10986:4;10979:5;10975:16;10953:63;:::i;:::-;11070:2;11049:15;-1:-1:-1;;11045:29:1;11036:39;;;;11077:4;11032:50;;10880:208;-1:-1:-1;;10880:208:1:o;11093:756::-;;11185:5;11179:12;11210:1;11242:2;11231:9;11227:18;11259:1;11254:165;;;;11433:1;11428:415;;;;11220:623;;11254:165;11306:1;11291:17;;11310:4;11287:28;11275:41;;-1:-1:-1;;11352:24:1;;11345:4;11336:14;;11329:48;11406:2;11397:12;;;-1:-1:-1;11254:165:1;;11428:415;11478:1;11467:9;11463:17;11505:6;11500:3;11493:19;11540:37;11571:5;11540:37;:::i;:::-;11599:1;11613:178;11627:6;11624:1;11621:13;11613:178;;;11724:7;11718:14;11711:4;11707:1;11702:3;11698:11;11694:22;11687:46;11774:2;11765:7;11761:16;11750:27;;11649:4;11646:1;11642:12;11637:17;;11613:178;;;11815:11;;11828:4;11811:22;;-1:-1:-1;;;11220:623:1;;;;11152:697;;;;:::o;11854:392::-;-1:-1:-1;;;12112:27:1;;12164:1;12155:11;;12148:27;;;;12200:2;12191:12;;12184:28;12237:2;12228:12;;12102:144::o;12251:203::-;-1:-1:-1;;;;;12415:32:1;;;;12397:51;;12385:2;12370:18;;12352:102::o;12459:274::-;-1:-1:-1;;;;;12651:32:1;;;;12633:51;;12715:2;12700:18;;12693:34;12621:2;12606:18;;12588:145::o;12738:707::-;;13068:1;13064;13059:3;13055:11;13051:19;13043:6;13039:32;13028:9;13021:51;13108:6;13103:2;13092:9;13088:18;13081:34;13151:3;13146:2;13135:9;13131:18;13124:31;13178:47;13220:3;13209:9;13205:19;13197:6;13178:47;:::i;:::-;13273:9;13265:6;13261:22;13256:2;13245:9;13241:18;13234:50;13301:34;13328:6;13320;13301:34;:::i;:::-;13366:3;13351:19;;13344:35;;;;-1:-1:-1;;13423:14:1;;13416:22;13410:3;13395:19;;;13388:51;13293:42;13011:434;-1:-1:-1;;;;13011:434:1:o;13450:717::-;;13774:1;13770;13765:3;13761:11;13757:19;13749:6;13745:32;13734:9;13727:51;13814:6;13809:2;13798:9;13794:18;13787:34;13857:3;13852:2;13841:9;13837:18;13830:31;13884:55;13934:3;13923:9;13919:19;13911:6;13884:55;:::i;:::-;13987:9;13979:6;13975:22;13970:2;13959:9;13955:18;13948:50;14015:42;14050:6;14042;14015:42;:::i;14172:187::-;14337:14;;14330:22;14312:41;;14300:2;14285:18;;14267:92::o;14364:177::-;14510:25;;;14498:2;14483:18;;14465:76::o;14546:417::-;14777:25;;;14833:2;14818:18;;14811:34;;;;14876:2;14861:18;;14854:34;-1:-1:-1;;;;;14924:32:1;14919:2;14904:18;;14897:60;14764:3;14749:19;;14731:232::o;14968:329::-;15164:25;;;15220:2;15205:18;;15198:34;;;;15275:14;15268:22;15263:2;15248:18;;15241:50;15152:2;15137:18;;15119:178::o;15302:398::-;15529:25;;;15602:4;15590:17;;;;15585:2;15570:18;;15563:45;15639:2;15624:18;;15617:34;15682:2;15667:18;;15660:34;15516:3;15501:19;;15483:217::o;15705:408::-;-1:-1:-1;;;;;15996:15:1;;;15978:34;;16048:15;;;;16043:2;16028:18;;16021:43;16095:2;16080:18;;16073:34;;;;15928:2;15913:18;;15895:218::o;16827:239::-;16976:2;16961:18;;17009:1;16998:13;;16988:2;;17015:9;16988:2;17035:25;;;16943:123;:::o;17071:221::-;;17220:2;17209:9;17202:21;17240:46;17282:2;17271:9;17267:18;17259:6;17240:46;:::i;17297:402::-;17499:2;17481:21;;;17538:2;17518:18;;;17511:30;17577:34;17572:2;17557:18;;17550:62;-1:-1:-1;;;17643:2:1;17628:18;;17621:36;17689:3;17674:19;;17471:228::o;17704:352::-;17906:2;17888:21;;;17945:2;17925:18;;;17918:30;17984;17979:2;17964:18;;17957:58;18047:2;18032:18;;17878:178::o;18061:351::-;18263:2;18245:21;;;18302:2;18282:18;;;18275:30;18341:29;18336:2;18321:18;;18314:57;18403:2;18388:18;;18235:177::o;18417:337::-;18619:2;18601:21;;;18658:2;18638:18;;;18631:30;-1:-1:-1;;;18692:2:1;18677:18;;18670:43;18745:2;18730:18;;18591:163::o;18759:347::-;18961:2;18943:21;;;19000:2;18980:18;;;18973:30;19039:25;19034:2;19019:18;;19012:53;19097:2;19082:18;;18933:173::o;19111:341::-;19313:2;19295:21;;;19352:2;19332:18;;;19325:30;-1:-1:-1;;;19386:2:1;19371:18;;19364:47;19443:2;19428:18;;19285:167::o;19457:345::-;19659:2;19641:21;;;19698:2;19678:18;;;19671:30;-1:-1:-1;;;19732:2:1;19717:18;;19710:51;19793:2;19778:18;;19631:171::o;19807:341::-;20009:2;19991:21;;;20048:2;20028:18;;;20021:30;-1:-1:-1;;;20082:2:1;20067:18;;20060:47;20139:2;20124:18;;19981:167::o;20153:346::-;20355:2;20337:21;;;20394:2;20374:18;;;20367:30;-1:-1:-1;;;20428:2:1;20413:18;;20406:52;20490:2;20475:18;;20327:172::o;20504:347::-;20706:2;20688:21;;;20745:2;20725:18;;;20718:30;20784:25;20779:2;20764:18;;20757:53;20842:2;20827:18;;20678:173::o;20856:340::-;21058:2;21040:21;;;21097:2;21077:18;;;21070:30;-1:-1:-1;;;21131:2:1;21116:18;;21109:46;21187:2;21172:18;;21030:166::o;21201:356::-;21403:2;21385:21;;;21422:18;;;21415:30;21481:34;21476:2;21461:18;;21454:62;21548:2;21533:18;;21375:182::o;21562:350::-;21764:2;21746:21;;;21803:2;21783:18;;;21776:30;21842:28;21837:2;21822:18;;21815:56;21903:2;21888:18;;21736:176::o;21917:356::-;22119:2;22101:21;;;22138:18;;;22131:30;22197:34;22192:2;22177:18;;22170:62;22264:2;22249:18;;22091:182::o;22278:344::-;22480:2;22462:21;;;22519:2;22499:18;;;22492:30;-1:-1:-1;;;22553:2:1;22538:18;;22531:50;22613:2;22598:18;;22452:170::o;22627:343::-;22829:2;22811:21;;;22868:2;22848:18;;;22841:30;-1:-1:-1;;;22902:2:1;22887:18;;22880:49;22961:2;22946:18;;22801:169::o;22975:345::-;23177:2;23159:21;;;23216:2;23196:18;;;23189:30;-1:-1:-1;;;23250:2:1;23235:18;;23228:51;23311:2;23296:18;;23149:171::o;23325:2587::-;;23528:2;23517:9;23510:21;23573:6;23567:13;23562:2;23551:9;23547:18;23540:41;23628:2;23620:6;23616:15;23610:22;23641:54;23691:2;23680:9;23676:18;23662:12;23641:54;:::i;:::-;;23744:2;23736:6;23732:15;23726:22;23757:56;23809:2;23798:9;23794:18;23778:14;23757:56;:::i;:::-;;23862:2;23854:6;23850:15;23844:22;23885:6;23928:2;23922:3;23911:9;23907:19;23900:31;23954:71;24020:3;24009:9;24005:19;23989:14;23954:71;:::i;:::-;23940:85;;24074:3;24066:6;24062:16;24056:23;24102:2;24098:7;24170:2;24158:9;24150:6;24146:22;24142:31;24136:3;24125:9;24121:19;24114:60;24197:58;24248:6;24232:14;24197:58;:::i;:::-;24183:72;;24304:3;24296:6;24292:16;24286:23;24264:45;;24374:2;24362:9;24354:6;24350:22;24346:31;24340:3;24329:9;24325:19;24318:60;24401:56;24450:6;24434:14;24401:56;:::i;:::-;24387:70;;24506:3;24498:6;24494:16;24488:23;24466:45;;24576:2;24564:9;24556:6;24552:22;24548:31;24542:3;24531:9;24527:19;24520:60;24603:56;24652:6;24636:14;24603:56;:::i;:::-;24589:70;;24708:3;24700:6;24696:16;24690:23;24668:45;;24732:3;24799:2;24787:9;24779:6;24775:22;24771:31;24766:2;24755:9;24751:18;24744:59;24826:55;24874:6;24858:14;24826:55;:::i;:::-;24906:15;;;24900:22;24941:3;24960:18;;;24953:30;;;;25008:15;;25002:22;25043:3;25062:18;;;25055:30;;;;25110:15;;25104:22;25145:3;25164:18;;;25157:30;;;;25213:15;;25207:22;25249:3;25268:19;;;25261:32;;;;25319:16;;25313:23;25356:3;25375:19;;;25368:32;;;;25437:16;;25431:23;24812:69;;-1:-1:-1;25431:23:1;-1:-1:-1;25474:3:1;;-1:-1:-1;25486:54:1;25520:19;;;25431:23;25486:54;:::i;:::-;25577:16;;25571:23;;-1:-1:-1;25614:3:1;25626:54;25660:19;;;25571:23;25626:54;:::i;:::-;25717:16;;25711:23;;-1:-1:-1;25754:3:1;25766:57;25803:19;;;25711:23;25766:57;:::i;:::-;25865:16;;;;25859:23;25839:18;;25832:51;;;;-1:-1:-1;25900:6:1;23500:2412;-1:-1:-1;23500:2412:1:o;25917:331::-;26137:13;;26130:21;26123:29;26105:48;;26213:4;26201:17;;;26195:24;-1:-1:-1;;;;;26191:50:1;26169:20;;;26162:80;;;;26093:2;26078:18;;26060:188::o;26435:1541::-;;27090:3;27120:6;27109:9;27102:25;27163:2;27158;27147:9;27143:18;27136:30;27189:62;27247:2;27236:9;27232:18;27224:6;27189:62;:::i;:::-;27175:76;;27299:9;27291:6;27287:22;27282:2;27271:9;27267:18;27260:50;27333;27376:6;27368;27333:50;:::i;:::-;27319:64;;27431:9;27423:6;27419:22;27414:2;27403:9;27399:18;27392:50;27465:48;27506:6;27498;27465:48;:::i;:::-;27451:62;;27562:9;27554:6;27550:22;27544:3;27533:9;27529:19;27522:51;27596:48;27637:6;27629;27596:48;:::i;:::-;27582:62;;27693:9;27685:6;27681:22;27675:3;27664:9;27660:19;27653:51;27721:47;27761:6;27753;27721:47;:::i;:::-;27799:3;27784:19;;27777:35;;;;-1:-1:-1;;27843:3:1;27828:19;;27821:35;;;;-1:-1:-1;;;;;27893:32:1;;;;27887:3;27872:19;;27865:61;27957:3;27942:19;;;27935:35;27713:55;27070:906;-1:-1:-1;;;;;;27070:906:1:o;27981:329::-;28177:25;;;28245:14;;28238:22;28233:2;28218:18;;28211:50;28292:2;28277:18;;28270:34;28165:2;28150:18;;28132:178::o;28315:248::-;28489:25;;;28545:2;28530:18;;28523:34;28477:2;28462:18;;28444:119::o;28568:242::-;28638:2;28632:9;28668:17;;;28715:18;28700:34;;28736:22;;;28697:62;28694:2;;;28762:9;28694:2;28789;28782:22;28612:198;;-1:-1:-1;28612:198:1:o;28815:183::-;;28914:18;28906:6;28903:30;28900:2;;;28936:9;28900:2;-1:-1:-1;28987:4:1;28968:17;;;28964:28;;28890:108::o;29003:181::-;;29086:18;29078:6;29075:30;29072:2;;;29108:9;29072:2;-1:-1:-1;29167:2:1;29144:17;-1:-1:-1;;29140:31:1;29173:4;29136:42;;29062:122::o;29189:128::-;;29256:17;;;29306:4;29290:21;;;29246:71::o;29322:258::-;29394:1;29404:113;29418:6;29415:1;29412:13;29404:113;;;29494:11;;;29488:18;29475:11;;;29468:39;29440:2;29433:10;29404:113;;;29535:6;29532:1;29529:13;29526:2;;;29570:1;29561:6;29556:3;29552:16;29545:27;29526:2;;29375:205;;;:::o;29585:133::-;-1:-1:-1;;;;;29662:31:1;;29652:42;;29642:2;;29708:1;29705;29698:12;29723:120;29811:5;29804:13;29797:21;29790:5;29787:32;29777:2;;29833:1;29830;29823:12
Swarm Source
ipfs://3255f14330cf43fabb4281e87def734f660a2374d36a74dbd177480523c8dfc6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,657.61 | 0.01 | $26.58 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.