Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GovernorBravoDelegate
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import "./GovernorBravoInterfaces.sol"; contract GovernorBravoDelegate is GovernorBravoDelegateStorageV2, GovernorBravoEvents { /// @notice The name of this contract string public constant name = "Compound Governor Bravo"; /// @notice The minimum setable proposal threshold uint public constant MIN_PROPOSAL_THRESHOLD = 50000e18; // 50,000 Comp /// @notice The maximum setable proposal threshold uint public constant MAX_PROPOSAL_THRESHOLD = 100000e18; //100,000 Comp /// @notice The minimum setable voting period uint public constant MIN_VOTING_PERIOD = 5760; // About 24 hours /// @notice The max setable voting period uint public constant MAX_VOTING_PERIOD = 80640; // About 2 weeks /// @notice The min setable voting delay uint public constant MIN_VOTING_DELAY = 1; /// @notice The max setable voting delay uint public constant MAX_VOTING_DELAY = 40320; // About 1 week /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed uint public constant quorumVotes = 400000e18; // 400,000 = 4% of Comp /// @notice The maximum number of actions that can be included in a proposal uint public constant proposalMaxOperations = 10; // 10 actions /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the ballot struct used by the contract bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,uint8 support)"); /** * @notice Used to initialize the contract during delegator contructor * @param timelock_ The address of the Timelock * @param comp_ The address of the COMP token * @param votingPeriod_ The initial voting period * @param votingDelay_ The initial voting delay * @param proposalThreshold_ The initial proposal threshold */ function initialize(address timelock_, address comp_, uint votingPeriod_, uint votingDelay_, uint proposalThreshold_) public { require(address(timelock) == address(0), "GovernorBravo::initialize: can only initialize once"); require(msg.sender == admin, "GovernorBravo::initialize: admin only"); require(timelock_ != address(0), "GovernorBravo::initialize: invalid timelock address"); require(comp_ != address(0), "GovernorBravo::initialize: invalid comp address"); require(votingPeriod_ >= MIN_VOTING_PERIOD && votingPeriod_ <= MAX_VOTING_PERIOD, "GovernorBravo::initialize: invalid voting period"); require(votingDelay_ >= MIN_VOTING_DELAY && votingDelay_ <= MAX_VOTING_DELAY, "GovernorBravo::initialize: invalid voting delay"); require(proposalThreshold_ >= MIN_PROPOSAL_THRESHOLD && proposalThreshold_ <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::initialize: invalid proposal threshold"); timelock = TimelockInterface(timelock_); comp = CompInterface(comp_); votingPeriod = votingPeriod_; votingDelay = votingDelay_; proposalThreshold = proposalThreshold_; } /** * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold * @param targets Target addresses for proposal calls * @param values Eth values for proposal calls * @param signatures Function signatures for proposal calls * @param calldatas Calldatas for proposal calls * @param description String description of the proposal * @return Proposal id of new proposal */ function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) { // Reject proposals before initiating as Governor require(initialProposalId != 0, "GovernorBravo::propose: Governor Bravo not active"); // Allow addresses above proposal threshold and whitelisted addresses to propose require(comp.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold || isWhitelisted(msg.sender), "GovernorBravo::propose: proposer votes below proposal threshold"); require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorBravo::propose: proposal function information arity mismatch"); require(targets.length != 0, "GovernorBravo::propose: must provide actions"); require(targets.length <= proposalMaxOperations, "GovernorBravo::propose: too many actions"); uint latestProposalId = latestProposalIds[msg.sender]; if (latestProposalId != 0) { ProposalState proposersLatestProposalState = state(latestProposalId); require(proposersLatestProposalState != ProposalState.Active, "GovernorBravo::propose: one live proposal per proposer, found an already active proposal"); require(proposersLatestProposalState != ProposalState.Pending, "GovernorBravo::propose: one live proposal per proposer, found an already pending proposal"); } uint startBlock = add256(block.number, votingDelay); uint endBlock = add256(startBlock, votingPeriod); proposalCount++; Proposal memory newProposal = Proposal({ id: proposalCount, proposer: msg.sender, eta: 0, targets: targets, values: values, signatures: signatures, calldatas: calldatas, startBlock: startBlock, endBlock: endBlock, forVotes: 0, againstVotes: 0, abstainVotes: 0, canceled: false, executed: false }); proposals[newProposal.id] = newProposal; latestProposalIds[newProposal.proposer] = newProposal.id; emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description); return newProposal.id; } /** * @notice Queues a proposal of state succeeded * @param proposalId The id of the proposal to queue */ function queue(uint proposalId) external { require(state(proposalId) == ProposalState.Succeeded, "GovernorBravo::queue: proposal can only be queued if it is succeeded"); Proposal storage proposal = proposals[proposalId]; uint eta = add256(block.timestamp, timelock.delay()); for (uint i = 0; i < proposal.targets.length; i++) { queueOrRevertInternal(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta); } proposal.eta = eta; emit ProposalQueued(proposalId, eta); } function queueOrRevertInternal(address target, uint value, string memory signature, bytes memory data, uint eta) internal { require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta"); timelock.queueTransaction(target, value, signature, data, eta); } /** * @notice Executes a queued proposal if eta has passed * @param proposalId The id of the proposal to execute */ function execute(uint proposalId) external payable { require(state(proposalId) == ProposalState.Queued, "GovernorBravo::execute: proposal can only be executed if it is queued"); Proposal storage proposal = proposals[proposalId]; proposal.executed = true; for (uint i = 0; i < proposal.targets.length; i++) { timelock.executeTransaction.value(proposal.values[i])(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); } emit ProposalExecuted(proposalId); } /** * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold * @param proposalId The id of the proposal to cancel */ function cancel(uint proposalId) external { require(state(proposalId) != ProposalState.Executed, "GovernorBravo::cancel: cannot cancel executed proposal"); Proposal storage proposal = proposals[proposalId]; // Proposer can cancel if(msg.sender != proposal.proposer) { // Whitelisted proposers can't be canceled for falling below proposal threshold if(isWhitelisted(proposal.proposer)) { require((comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold) && msg.sender == whitelistGuardian, "GovernorBravo::cancel: whitelisted proposer"); } else { require((comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold), "GovernorBravo::cancel: proposer above threshold"); } } proposal.canceled = true; for (uint i = 0; i < proposal.targets.length; i++) { timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); } emit ProposalCanceled(proposalId); } /** * @notice Gets actions of a proposal * @param proposalId the id of the proposal * @return Targets, values, signatures, and calldatas of the proposal actions */ function getActions(uint proposalId) external view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) { Proposal storage p = proposals[proposalId]; return (p.targets, p.values, p.signatures, p.calldatas); } /** * @notice Gets the receipt for a voter on a given proposal * @param proposalId the id of proposal * @param voter The address of the voter * @return The voting receipt */ function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) { return proposals[proposalId].receipts[voter]; } /** * @notice Gets the state of a proposal * @param proposalId The id of the proposal * @return Proposal state */ function state(uint proposalId) public view returns (ProposalState) { require(proposalCount >= proposalId && proposalId > initialProposalId, "GovernorBravo::state: 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 (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) { return ProposalState.Defeated; } else if (proposal.eta == 0) { return ProposalState.Succeeded; } else if (proposal.executed) { return ProposalState.Executed; } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) { return ProposalState.Expired; } else { return ProposalState.Queued; } } /** * @notice Cast a vote for a proposal * @param proposalId The id of the proposal to vote on * @param support The support value for the vote. 0=against, 1=for, 2=abstain */ function castVote(uint proposalId, uint8 support) external { emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), ""); } /** * @notice Cast a vote for a proposal with a reason * @param proposalId The id of the proposal to vote on * @param support The support value for the vote. 0=against, 1=for, 2=abstain * @param reason The reason given for the vote by the voter */ function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external { emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason); } /** * @notice Cast a vote for a proposal by signature * @dev External function that accepts EIP-712 signatures for voting on proposals. */ function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external { bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this))); bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "GovernorBravo::castVoteBySig: invalid signature"); emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), ""); } /** * @notice Internal function that caries out voting logic * @param voter The voter that is casting their vote * @param proposalId The id of the proposal to vote on * @param support The support value for the vote. 0=against, 1=for, 2=abstain * @return The number of votes cast */ function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) { require(state(proposalId) == ProposalState.Active, "GovernorBravo::castVoteInternal: voting is closed"); require(support <= 2, "GovernorBravo::castVoteInternal: invalid vote type"); Proposal storage proposal = proposals[proposalId]; Receipt storage receipt = proposal.receipts[voter]; require(receipt.hasVoted == false, "GovernorBravo::castVoteInternal: voter already voted"); uint96 votes = comp.getPriorVotes(voter, proposal.startBlock); if (support == 0) { proposal.againstVotes = add256(proposal.againstVotes, votes); } else if (support == 1) { proposal.forVotes = add256(proposal.forVotes, votes); } else if (support == 2) { proposal.abstainVotes = add256(proposal.abstainVotes, votes); } receipt.hasVoted = true; receipt.support = support; receipt.votes = votes; return votes; } /** * @notice View function which returns if an account is whitelisted * @param account Account to check white list status of * @return If the account is whitelisted */ function isWhitelisted(address account) public view returns (bool) { return (whitelistAccountExpirations[account] > now); } /** * @notice Admin function for setting the voting delay * @param newVotingDelay new voting delay, in blocks */ function _setVotingDelay(uint newVotingDelay) external { require(msg.sender == admin, "GovernorBravo::_setVotingDelay: admin only"); require(newVotingDelay >= MIN_VOTING_DELAY && newVotingDelay <= MAX_VOTING_DELAY, "GovernorBravo::_setVotingDelay: invalid voting delay"); uint oldVotingDelay = votingDelay; votingDelay = newVotingDelay; emit VotingDelaySet(oldVotingDelay,votingDelay); } /** * @notice Admin function for setting the voting period * @param newVotingPeriod new voting period, in blocks */ function _setVotingPeriod(uint newVotingPeriod) external { require(msg.sender == admin, "GovernorBravo::_setVotingPeriod: admin only"); require(newVotingPeriod >= MIN_VOTING_PERIOD && newVotingPeriod <= MAX_VOTING_PERIOD, "GovernorBravo::_setVotingPeriod: invalid voting period"); uint oldVotingPeriod = votingPeriod; votingPeriod = newVotingPeriod; emit VotingPeriodSet(oldVotingPeriod, votingPeriod); } /** * @notice Admin function for setting the proposal threshold * @dev newProposalThreshold must be greater than the hardcoded min * @param newProposalThreshold new proposal threshold */ function _setProposalThreshold(uint newProposalThreshold) external { require(msg.sender == admin, "GovernorBravo::_setProposalThreshold: admin only"); require(newProposalThreshold >= MIN_PROPOSAL_THRESHOLD && newProposalThreshold <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::_setProposalThreshold: invalid proposal threshold"); uint oldProposalThreshold = proposalThreshold; proposalThreshold = newProposalThreshold; emit ProposalThresholdSet(oldProposalThreshold, proposalThreshold); } /** * @notice Admin function for setting the whitelist expiration as a timestamp for an account. Whitelist status allows accounts to propose without meeting threshold * @param account Account address to set whitelist expiration for * @param expiration Expiration for account whitelist status as timestamp (if now < expiration, whitelisted) */ function _setWhitelistAccountExpiration(address account, uint expiration) external { require(msg.sender == admin || msg.sender == whitelistGuardian, "GovernorBravo::_setWhitelistAccountExpiration: admin only"); whitelistAccountExpirations[account] = expiration; emit WhitelistAccountExpirationSet(account, expiration); } /** * @notice Admin function for setting the whitelistGuardian. WhitelistGuardian can cancel proposals from whitelisted addresses * @param account Account to set whitelistGuardian to (0x0 to remove whitelistGuardian) */ function _setWhitelistGuardian(address account) external { require(msg.sender == admin, "GovernorBravo::_setWhitelistGuardian: admin only"); address oldGuardian = whitelistGuardian; whitelistGuardian = account; emit WhitelistGuardianSet(oldGuardian, whitelistGuardian); } /** * @notice Initiate the GovernorBravo contract * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count * @param governorAlpha The address for the Governor to continue the proposal id count from */ function _initiate(address governorAlpha) external { require(msg.sender == admin, "GovernorBravo::_initiate: admin only"); require(initialProposalId == 0, "GovernorBravo::_initiate: can only initiate once"); proposalCount = GovernorAlpha(governorAlpha).proposalCount(); initialProposalId = proposalCount; timelock.acceptAdmin(); } /** * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @param newPendingAdmin New pending admin. */ function _setPendingAdmin(address newPendingAdmin) external { // Check caller = admin require(msg.sender == admin, "GovernorBravo:_setPendingAdmin: admin only"); // Save current value, if any, for inclusion in log address oldPendingAdmin = pendingAdmin; // Store pendingAdmin with value newPendingAdmin pendingAdmin = newPendingAdmin; // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin) emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin); } /** * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin * @dev Admin function for pending admin to accept role and update admin */ function _acceptAdmin() external { // Check caller is pendingAdmin and pendingAdmin ≠ address(0) require(msg.sender == pendingAdmin && msg.sender != address(0), "GovernorBravo:_acceptAdmin: pending admin only"); // Save current values for inclusion in log address oldAdmin = admin; address oldPendingAdmin = pendingAdmin; // Store admin with value pendingAdmin admin = pendingAdmin; // Clear the pending value pendingAdmin = address(0); emit NewAdmin(oldAdmin, admin); emit NewPendingAdmin(oldPendingAdmin, pendingAdmin); } function add256(uint256 a, uint256 b) internal pure returns (uint) { uint c = a + b; require(c >= a, "addition overflow"); return c; } function sub256(uint256 a, uint256 b) internal pure returns (uint) { require(b <= a, "subtraction underflow"); return a - b; } function getChainIdInternal() internal pure returns (uint) { uint chainId; assembly { chainId := chainid() } return chainId; } }
pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; contract GovernorBravoEvents { /// @notice An event emitted when a new proposal is created event ProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, uint startBlock, uint endBlock, string description); /// @notice An event emitted when a vote has been cast on a proposal /// @param voter The address which casted a vote /// @param proposalId The proposal id which was voted on /// @param support Support value for the vote. 0=against, 1=for, 2=abstain /// @param votes Number of votes which were cast by the voter /// @param reason The reason given for the vote by the voter event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason); /// @notice An event emitted when a proposal has been canceled event ProposalCanceled(uint id); /// @notice An event emitted when a proposal has been queued in the Timelock event ProposalQueued(uint id, uint eta); /// @notice An event emitted when a proposal has been executed in the Timelock event ProposalExecuted(uint id); /// @notice An event emitted when the voting delay is set event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay); /// @notice An event emitted when the voting period is set event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod); /// @notice Emitted when implementation is changed event NewImplementation(address oldImplementation, address newImplementation); /// @notice Emitted when proposal threshold is set event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold); /// @notice Emitted when pendingAdmin is changed event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); /// @notice Emitted when pendingAdmin is accepted, which means admin is updated event NewAdmin(address oldAdmin, address newAdmin); /// @notice Emitted when whitelist account expiration is set event WhitelistAccountExpirationSet(address account, uint expiration); /// @notice Emitted when the whitelistGuardian is set event WhitelistGuardianSet(address oldGuardian, address newGuardian); } contract GovernorBravoDelegatorStorage { /// @notice Administrator for this contract address public admin; /// @notice Pending administrator for this contract address public pendingAdmin; /// @notice Active brains of Governor address public implementation; } /** * @title Storage for Governor Bravo Delegate * @notice For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention * GovernorBravoDelegateStorageVX. */ contract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage { /// @notice The delay before voting on a proposal may take place, once proposed, in blocks uint public votingDelay; /// @notice The duration of voting on a proposal, in blocks uint public votingPeriod; /// @notice The number of votes required in order for a voter to become a proposer uint public proposalThreshold; /// @notice Initial proposal id set at become uint public initialProposalId; /// @notice The total number of proposals uint public proposalCount; /// @notice The address of the Compound Protocol Timelock TimelockInterface public timelock; /// @notice The address of the Compound governance token CompInterface public comp; /// @notice The official record of all proposals ever proposed mapping (uint => Proposal) public proposals; /// @notice The latest proposal for each proposer mapping (address => uint) public latestProposalIds; struct Proposal { /// @notice Unique id for looking up a proposal uint id; /// @notice Creator of the proposal address proposer; /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds uint eta; /// @notice the ordered list of target addresses for calls to be made address[] targets; /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made uint[] values; /// @notice The ordered list of function signatures to be called string[] signatures; /// @notice The ordered list of calldata to be passed to each call bytes[] calldatas; /// @notice The block at which voting begins: holders must delegate their votes prior to this block uint startBlock; /// @notice The block at which voting ends: votes must be cast prior to this block uint endBlock; /// @notice Current number of votes in favor of this proposal uint forVotes; /// @notice Current number of votes in opposition to this proposal uint againstVotes; /// @notice Current number of votes for abstaining for this proposal uint abstainVotes; /// @notice Flag marking whether the proposal has been canceled bool canceled; /// @notice Flag marking whether the proposal has been executed bool executed; /// @notice Receipts of ballots for the entire set of voters mapping (address => Receipt) receipts; } /// @notice Ballot receipt record for a voter struct Receipt { /// @notice Whether or not a vote has been cast bool hasVoted; /// @notice Whether or not the voter supports the proposal or abstains uint8 support; /// @notice The number of votes the voter had, which were cast uint96 votes; } /// @notice Possible states that a proposal may be in enum ProposalState { Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed } } contract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 { /// @notice Stores the expiration of account whitelist status as a timestamp mapping (address => uint) public whitelistAccountExpirations; /// @notice Address which manages whitelisted proposals and whitelist accounts address public whitelistGuardian; } interface TimelockInterface { function delay() external view returns (uint); function GRACE_PERIOD() external view returns (uint); function acceptAdmin() external; function queuedTransactions(bytes32 hash) external view returns (bool); function queueTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external returns (bytes32); function cancelTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external; function executeTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external payable returns (bytes memory); } interface CompInterface { function getPriorVotes(address account, uint blockNumber) external view returns (uint96); } interface GovernorAlpha { /// @notice The total number of proposals function proposalCount() external returns (uint); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","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":false,"internalType":"address","name":"proposer","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":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldProposalThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"ProposalThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"VotingDelaySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"VotingPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"WhitelistAccountExpirationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGuardian","type":"address"},{"indexed":false,"internalType":"address","name":"newGuardian","type":"address"}],"name":"WhitelistGuardianSet","type":"event"},{"constant":true,"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"governorAlpha","type":"address"}],"name":"_initiate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"_setProposalThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"_setVotingDelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"_setVotingPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"_setWhitelistAccountExpiration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_setWhitelistGuardian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"}],"name":"castVoteWithReason","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"comp","outputs":[{"internalType":"contract CompInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct GovernorBravoDelegateStorageV1.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"comp_","type":"address"},{"internalType":"uint256","name":"votingPeriod_","type":"uint256"},{"internalType":"uint256","name":"votingDelay_","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold_","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"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":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum GovernorBravoDelegateStorageV1.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistAccountExpirations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061494d806100206000396000f3fe6080604052600436106102725760003560e01c80635c60da1b1161014f578063d33219b4116100c1578063e48083fe1161007a578063e48083fe14610712578063e9c714f214610727578063f851a4401461073c578063f9d28b8014610751578063fc4eee4214610771578063fe0d94c11461078657610272565b8063d33219b414610666578063da35c6641461067b578063da95691a14610690578063ddf0b009146106b0578063deaaa7cc146106d0578063e23a9a52146106e557610272565b8063a64e024a11610113578063a64e024a146105d2578063b1126263146105e7578063b58131b0146105fc578063b71d1a0c14610611578063c5a8425d14610631578063d13f90b41461064657610272565b80635c60da1b14610553578063791f5d23146105685780637b3c71d31461057d5780637bdbe4d01461059d57806399533365146105b257610272565b806325fd935a116101e85780633af32abf116101ac5780633af32abf146104795780633bccf4fd146104a65780633e4f49e6146104c657806340e58ee5146104f35780634d6733d214610513578063567813881461053357610272565b806325fd935a146103dd57806326782247146103f2578063328dd9821461041457806338bd0dda146104445780633932abb11461046457610272565b806317977c611161023a57806317977c611461033e57806317ba1b8b1461035e5780631dfb1b5a1461037e57806320606b701461039e578063215809ca146103b357806324bc1a64146103c857610272565b8063013cf08b1461027757806302a251a3146102b657806306fdde03146102d85780630ea2d98c146102fa578063109d0af81461031c575b600080fd5b34801561028357600080fd5b50610297610292366004612ecb565b610799565b6040516102ad9a99989796959493929190614664565b60405180910390f35b3480156102c257600080fd5b506102cb6107fc565b6040516102ad9190614271565b3480156102e457600080fd5b506102ed610802565b6040516102ad919061432d565b34801561030657600080fd5b5061031a610315366004612ecb565b610835565b005b34801561032857600080fd5b506103316108df565b6040516102ad9190614311565b34801561034a57600080fd5b506102cb610359366004612ca6565b6108ee565b34801561036a57600080fd5b5061031a610379366004612ecb565b610900565b34801561038a57600080fd5b5061031a610399366004612ecb565b6109a4565b3480156103aa57600080fd5b506102cb610a37565b3480156103bf57600080fd5b506102cb610a4e565b3480156103d457600080fd5b506102cb610a54565b3480156103e957600080fd5b506102cb610a62565b3480156103fe57600080fd5b50610407610a70565b6040516102ad9190614129565b34801561042057600080fd5b5061043461042f366004612ecb565b610a7f565b6040516102ad9493929190614216565b34801561045057600080fd5b506102cb61045f366004612ca6565b610d0e565b34801561047057600080fd5b506102cb610d20565b34801561048557600080fd5b50610499610494366004612ca6565b610d26565b6040516102ad9190614263565b3480156104b257600080fd5b5061031a6104c1366004612fb1565b610d47565b3480156104d257600080fd5b506104e66104e1366004612ecb565b610f22565b6040516102ad919061431f565b3480156104ff57600080fd5b5061031a61050e366004612ecb565b6110a7565b34801561051f57600080fd5b5061031a61052e366004612d41565b6113ee565b34801561053f57600080fd5b5061031a61054e366004612f19565b61147a565b34801561055f57600080fd5b506104076114c4565b34801561057457600080fd5b506102cb6114d3565b34801561058957600080fd5b5061031a610598366004612f49565b6114e1565b3480156105a957600080fd5b506102cb611531565b3480156105be57600080fd5b5061031a6105cd366004612ca6565b611536565b3480156105de57600080fd5b506102cb6115b5565b3480156105f357600080fd5b506102cb6115bc565b34801561060857600080fd5b506102cb6115c2565b34801561061d57600080fd5b5061031a61062c366004612ca6565b6115c8565b34801561063d57600080fd5b50610407611645565b34801561065257600080fd5b5061031a610661366004612ccc565b611654565b34801561067257600080fd5b506103316117d1565b34801561068757600080fd5b506102cb6117e0565b34801561069c57600080fd5b506102cb6106ab366004612d7b565b6117e6565b3480156106bc57600080fd5b5061031a6106cb366004612ecb565b611c3d565b3480156106dc57600080fd5b506102cb611eb9565b3480156106f157600080fd5b50610705610700366004612ee9565b611ec5565b6040516102ad91906145ae565b34801561071e57600080fd5b506102cb611f32565b34801561073357600080fd5b5061031a611f37565b34801561074857600080fd5b50610407612015565b34801561075d57600080fd5b5061031a61076c366004612ca6565b612024565b34801561077d57600080fd5b506102cb61214a565b61031a610794366004612ecb565b612150565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b031633146108685760405162461bcd60e51b815260040161085f9061437e565b60405180910390fd5b611680811015801561087d575062013b008111155b6108995760405162461bcd60e51b815260040161085f906143be565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906108d390839085906146ea565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b0316331461092a5760405162461bcd60e51b815260040161085f9061455e565b690a968163f0a57b400000811015801561094e575069152d02c7e14af68000008111155b61096a5760405162461bcd60e51b815260040161085f9061446e565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906108d390839085906146ea565b6000546001600160a01b031633146109ce5760405162461bcd60e51b815260040161085f9061439e565b600181101580156109e15750619d808111155b6109fd5760405162461bcd60e51b815260040161085f906143ee565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906108d390839085906146ea565b604051610a439061411e565b604051809103902081565b61168081565b6954b40b1f852bda00000081565b69152d02c7e14af680000081565b6001546001600160a01b031681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610b0157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ae3575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610b5357602002820191906000526020600020905b815481526020019060010190808311610b3f575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610c265760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610c125780601f10610be757610100808354040283529160200191610c12565b820191906000526020600020905b815481529060010190602001808311610bf557829003601f168201915b505050505081526020019060010190610b7b565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610cf85760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b505050505081526020019060010190610c4d565b5050505090509450945094509450509193509193565b600c6020526000908152604090205481565b60035481565b6001600160a01b0381166000908152600c602052604090205442105b919050565b6000604051610d559061411e565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610db6612309565b30604051602001610dca949392919061427f565b6040516020818303038152906040528051906020012090506000604051610df0906140e2565b604051908190038120610e0991899089906020016142b4565b60405160208183030381529060405280519060200120905060008282604051602001610e369291906140ed565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e7394939291906142dc565b6020604051602081039080840390855afa158015610e95573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ec85760405162461bcd60e51b815260040161085f9061441e565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610f00858e8e61230e565b604051610f0f9392919061473e565b60405180910390a2505050505050505050565b60008160075410158015610f37575060065482115b610f535760405162461bcd60e51b815260040161085f9061456e565b6000828152600a60205260409020600c81015460ff1615610f78576002915050610d42565b80600701544311610f8d576000915050610d42565b80600801544311610fa2576001915050610d42565b80600a01548160090154111580610fc657506954b40b1f852bda0000008160090154105b15610fd5576003915050610d42565b6002810154610fe8576004915050610d42565b600c810154610100900460ff1615611004576007915050610d42565b6002810154600854604080516360d143f160e11b8152905161108d93926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b15801561105057600080fd5b505afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110889190810190612e78565b6124ff565b421061109d576006915050610d42565b6005915050610d42565b60076110b282610f22565b60078111156110bd57fe5b14156110db5760405162461bcd60e51b815260040161085f9061454e565b6000818152600a6020526040902060018101546001600160a01b031633146112b2576001810154611114906001600160a01b0316610d26565b156111f3576005546009546001838101546001600160a01b039283169263782d6fe192911690611145904390612524565b6040518363ffffffff1660e01b815260040161116292919061416d565b60206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111b29190810190612ff7565b6001600160601b03161080156111d25750600d546001600160a01b031633145b6111ee5760405162461bcd60e51b815260040161085f9061459e565b6112b2565b6005546009546001838101546001600160a01b039283169263782d6fe19291169061121f904390612524565b6040518363ffffffff1660e01b815260040161123c92919061416d565b60206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128c9190810190612ff7565b6001600160601b0316106112b25760405162461bcd60e51b815260040161085f906144de565b600c8101805460ff1916600117905560005b60038201548110156113be576008546003830180546001600160a01b039092169163591fcdfe9190849081106112f657fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061131e57fe5b906000526020600020015485600501858154811061133857fe5b9060005260206000200186600601868154811061135157fe5b9060005260206000200187600201546040518663ffffffff1660e01b81526004016113809594939291906141d5565b600060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b5050600190920191506112c49050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516108d39190614271565b6000546001600160a01b03163314806114115750600d546001600160a01b031633145b61142d5760405162461bcd60e51b815260040161085f9061453e565b6001600160a01b0382166000908152600c602052604090819020829055517f4e7b7545bc5744d0e30425959f4687475774b6c7edad77d24cb51c7d967d4515906108d3908490849061416d565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836114a984838361230e565b6040516114b89392919061473e565b60405180910390a25050565b6002546001600160a01b031681565b690a968163f0a57b40000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561151084838361230e565b86866040516115239594939291906146f8565b60405180910390a250505050565b600a81565b6000546001600160a01b031633146115605760405162461bcd60e51b815260040161085f9061443e565b600d80546001600160a01b038381166001600160a01b031983161792839055604051918116927f80a07e73e552148844a9c216d9724212d609cfa54e9c1a2e97203bdd2c4ad341926108d39285921690614152565b62013b0081565b619d8081565b60055481565b6000546001600160a01b031633146115f25760405162461bcd60e51b815260040161085f9061435e565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906108d39083908590614152565b600d546001600160a01b031681565b6008546001600160a01b03161561167d5760405162461bcd60e51b815260040161085f9061434e565b6000546001600160a01b031633146116a75760405162461bcd60e51b815260040161085f9061445e565b6001600160a01b0385166116cd5760405162461bcd60e51b815260040161085f9061438e565b6001600160a01b0384166116f35760405162461bcd60e51b815260040161085f906144ce565b6116808310158015611708575062013b008311155b6117245760405162461bcd60e51b815260040161085f9061457e565b600182101580156117375750619d808211155b6117535760405162461bcd60e51b815260040161085f9061442e565b690a968163f0a57b4000008110158015611777575069152d02c7e14af68000008111155b6117935760405162461bcd60e51b815260040161085f906143fe565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b60006006546000141561180b5760405162461bcd60e51b815260040161085f906143ae565b6005546009546001600160a01b031663782d6fe13361182b436001612524565b6040518363ffffffff1660e01b8152600401611848929190614137565b60206040518083038186803b15801561186057600080fd5b505afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118989190810190612ff7565b6001600160601b031611806118b157506118b133610d26565b6118cd5760405162461bcd60e51b815260040161085f9061452e565b845186511480156118df575083518651145b80156118ec575082518651145b6119085760405162461bcd60e51b815260040161085f9061444e565b85516119265760405162461bcd60e51b815260040161085f906144ae565b600a865111156119485760405162461bcd60e51b815260040161085f906144ee565b336000908152600b602052604090205480156119c557600061196982610f22565b9050600181600781111561197957fe5b14156119975760405162461bcd60e51b815260040161085f9061450e565b60008160078111156119a557fe5b14156119c35760405162461bcd60e51b815260040161085f906144fe565b505b60006119d3436003546124ff565b905060006119e3826004546124ff565b60078054600101905590506119f66126ab565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611ae0929190612727565b5060808201518051611afc91600484019160209091019061278c565b5060a08201518051611b189160058401916020909101906127d3565b5060c08201518051611b3491600684019160209091019061282c565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e604051611c25999897969594939291906145bc565b60405180910390a15193505050505b95945050505050565b6004611c4882610f22565b6007811115611c5357fe5b14611c705760405162461bcd60e51b815260040161085f9061447e565b6000818152600a602090815260408083206008548251630d48571f60e31b81529251919493611cca9342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561105057600080fd5b905060005b6003830154811015611e7257611e6a836003018281548110611ced57fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611d1557fe5b9060005260206000200154856005018481548110611d2f57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611dbd5780601f10611d9257610100808354040283529160200191611dbd565b820191906000526020600020905b815481529060010190602001808311611da057829003601f168201915b5050505050866006018581548110611dd157fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e5f5780601f10611e3457610100808354040283529160200191611e5f565b820191906000526020600020905b815481529060010190602001808311611e4257829003601f168201915b50505050508661254c565b600101611ccf565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611eac90859084906146ea565b60405180910390a1505050565b604051610a43906140e2565b611ecd612885565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611f5057503315155b611f6c5760405162461bcd60e51b815260040161085f906144be565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611fd0928692911690614152565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916108d39184916001600160a01b031690614152565b6000546001600160a01b031681565b6000546001600160a01b0316331461204e5760405162461bcd60e51b815260040161085f9061451e565b6006541561206e5760405162461bcd60e51b815260040161085f9061449e565b806001600160a01b031663da35c6646040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120a957600080fd5b505af11580156120bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120e19190810190612e78565b600781905560065560085460408051630e18b68160e01b815290516001600160a01b0390921691630e18b6819160048082019260009290919082900301818387803b15801561212f57600080fd5b505af1158015612143573d6000803e3d6000fd5b5050505050565b60065481565b600561215b82610f22565b600781111561216657fe5b146121835760405162461bcd60e51b815260040161085f9061440e565b6000818152600a60205260408120600c8101805461ff001916610100179055905b60038201548110156122d9576008546004830180546001600160a01b0390921691630825f38f9190849081106121d657fe5b90600052602060002001548460030184815481106121f057fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061221857fe5b906000526020600020015486600501868154811061223257fe5b9060005260206000200187600601878154811061224b57fe5b9060005260206000200188600201546040518763ffffffff1660e01b815260040161227a9594939291906141d5565b6000604051808303818588803b15801561229357600080fd5b505af11580156122a7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122d09190810190612e96565b506001016121a4565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516108d39190614271565b465b90565b6000600161231b84610f22565b600781111561232657fe5b146123435760405162461bcd60e51b815260040161085f906143ce565b60028260ff1611156123675760405162461bcd60e51b815260040161085f9061433e565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156123b05760405162461bcd60e51b815260040161085f906143de565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe1916123e6918b9160040161416d565b60206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124369190810190612ff7565b905060ff85166124615761245783600a0154826001600160601b03166124ff565b600a8401556124b7565b8460ff166001141561248e576124848360090154826001600160601b03166124ff565b60098401556124b7565b8460ff16600214156124b7576124b183600b0154826001600160601b03166124ff565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b6000828201838110156124f85760405162461bcd60e51b815260040161085f9061448e565b6000828211156125465760405162461bcd60e51b815260040161085f9061458e565b50900390565b6008546040516001600160a01b039091169063f2b065379061257a908890889088908890889060200161417b565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016125ac9190614271565b60206040518083038186803b1580156125c457600080fd5b505afa1580156125d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125fc9190810190612e5a565b156126195760405162461bcd60e51b815260040161085f9061436e565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f90190612651908890889088908890889060040161417b565b602060405180830381600087803b15801561266b57600080fd5b505af115801561267f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126a39190810190612e78565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b82805482825590600052602060002090810192821561277c579160200282015b8281111561277c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612747565b506127889291506128a5565b5090565b8280548282559060005260206000209081019282156127c7579160200282015b828111156127c75782518255916020019190600101906127ac565b506127889291506128c9565b828054828255906000526020600020908101928215612820579160200282015b8281111561282057825180516128109184916020909101906128e3565b50916020019190600101906127f3565b50612788929150612950565b828054828255906000526020600020908101928215612879579160200282015b8281111561287957825180516128699184916020909101906128e3565b509160200191906001019061284c565b50612788929150612973565b604080516060810182526000808252602082018190529181019190915290565b61230b91905b808211156127885780546001600160a01b03191681556001016128ab565b61230b91905b8082111561278857600081556001016128cf565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061292457805160ff19168380011785556127c7565b828001600101855582156127c757918201828111156127c75782518255916020019190600101906127ac565b61230b91905b8082111561278857600061296a8282612996565b50600101612956565b61230b91905b8082111561278857600061298d8282612996565b50600101612979565b50805460018160011615610100020316600290046000825580601f106129bc57506129da565b601f0160209004906000526020600020908101906129da91906128c9565b50565b8035611f2c816148b2565b600082601f8301126129f957600080fd5b8135612a0c612a078261479e565b614777565b91508181835260208401935060208101905083856020840282011115612a3157600080fd5b60005b83811015612a5d5781612a4788826129dd565b8452506020928301929190910190600101612a34565b5050505092915050565b600082601f830112612a7857600080fd5b8135612a86612a078261479e565b81815260209384019390925082018360005b83811015612a5d5781358601612aae8882612bb2565b8452506020928301929190910190600101612a98565b600082601f830112612ad557600080fd5b8135612ae3612a078261479e565b81815260209384019390925082018360005b83811015612a5d5781358601612b0b8882612bb2565b8452506020928301929190910190600101612af5565b600082601f830112612b3257600080fd5b8135612b40612a078261479e565b91508181835260208401935060208101905083856020840282011115612b6557600080fd5b60005b83811015612a5d5781612b7b8882612b9c565b8452506020928301929190910190600101612b68565b8051611f2c816148c6565b8035611f2c816148cf565b8051611f2c816148cf565b600082601f830112612bc357600080fd5b8135612bd1612a07826147bf565b91508082526020830160208301858383011115612bed57600080fd5b612bf8838284614866565b50505092915050565b600082601f830112612c1257600080fd5b8151612c20612a07826147bf565b91508082526020830160208301858383011115612c3c57600080fd5b612bf8838284614872565b60008083601f840112612c5957600080fd5b50813567ffffffffffffffff811115612c7157600080fd5b602083019150836001820283011115612c8957600080fd5b9250929050565b8035611f2c816148d8565b8051611f2c816148e1565b600060208284031215612cb857600080fd5b6000612cc484846129dd565b949350505050565b600080600080600060a08688031215612ce457600080fd5b6000612cf088886129dd565b9550506020612d01888289016129dd565b9450506040612d1288828901612b9c565b9350506060612d2388828901612b9c565b9250506080612d3488828901612b9c565b9150509295509295909350565b60008060408385031215612d5457600080fd5b6000612d6085856129dd565b9250506020612d7185828601612b9c565b9150509250929050565b600080600080600060a08688031215612d9357600080fd5b853567ffffffffffffffff811115612daa57600080fd5b612db6888289016129e8565b955050602086013567ffffffffffffffff811115612dd357600080fd5b612ddf88828901612b21565b945050604086013567ffffffffffffffff811115612dfc57600080fd5b612e0888828901612ac4565b935050606086013567ffffffffffffffff811115612e2557600080fd5b612e3188828901612a67565b925050608086013567ffffffffffffffff811115612e4e57600080fd5b612d3488828901612bb2565b600060208284031215612e6c57600080fd5b6000612cc48484612b91565b600060208284031215612e8a57600080fd5b6000612cc48484612ba7565b600060208284031215612ea857600080fd5b815167ffffffffffffffff811115612ebf57600080fd5b612cc484828501612c01565b600060208284031215612edd57600080fd5b6000612cc48484612b9c565b60008060408385031215612efc57600080fd5b6000612f088585612b9c565b9250506020612d71858286016129dd565b60008060408385031215612f2c57600080fd5b6000612f388585612b9c565b9250506020612d7185828601612c90565b60008060008060608587031215612f5f57600080fd5b6000612f6b8787612b9c565b9450506020612f7c87828801612c90565b935050604085013567ffffffffffffffff811115612f9957600080fd5b612fa587828801612c47565b95989497509550505050565b600080600080600060a08688031215612fc957600080fd5b6000612fd58888612b9c565b9550506020612fe688828901612c90565b9450506040612d1288828901612c90565b60006020828403121561300957600080fd5b6000612cc48484612c9b565b60006130218383613050565b505060200190565b60006124f883836131f2565b600061302183836131d8565b61304a8161483e565b82525050565b61304a81614806565b6000613064826147f9565b61306e81856147fd565b9350613079836147e7565b8060005b838110156130a75781516130918882613015565b975061309c836147e7565b92505060010161307d565b509495945050505050565b60006130bd826147f9565b6130c781856147fd565b9350836020820285016130d9856147e7565b8060005b8581101561311357848403895281516130f68582613029565b9450613101836147e7565b60209a909a01999250506001016130dd565b5091979650505050505050565b600061312b826147f9565b61313581856147fd565b935083602082028501613147856147e7565b8060005b8581101561311357848403895281516131648582613029565b945061316f836147e7565b60209a909a019992505060010161314b565b600061318c826147f9565b61319681856147fd565b93506131a1836147e7565b8060005b838110156130a75781516131b98882613035565b97506131c4836147e7565b9250506001016131a5565b61304a81614811565b61304a8161230b565b61304a6131ed8261230b565b61230b565b60006131fd826147f9565b61320781856147fd565b9350613217818560208601614872565b6132208161489e565b9093019392505050565b600081546001811660008114613247576001811461326d576132ac565b607f600283041661325881876147fd565b60ff19841681529550506020850192506132ac565b6002820461327b81876147fd565b9550613286856147ed565b60005b828110156132a557815488820152600190910190602001613289565b8701945050505b505092915050565b61304a81614845565b61304a81614850565b60006132d283856147fd565b93506132df838584614866565b6132208361489e565b60006132f56032836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000613349602883610d42565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b60006133936033836147fd565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b60006133e8602a836147fd565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006134346055836147fd565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b60006134b1602b836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b60006134fe6033836147fd565b6000805160206148eb83398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613541602a836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b600061358d6031836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b60006135e0600283610d42565b61190160f01b815260020192915050565b60006135fe6036836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b60006136566031836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006136a96034836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b60006136ff6034836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b60006137556035836147fd565b6000805160206148eb8339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b600061379a6045836147fd565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000613807602f836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000613858602f836147fd565b6000805160206148eb83398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006138976030836147fd565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744775617281526f6469616e3a2061646d696e206f6e6c7960801b602082015260400192915050565b60006138e96044836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006139556025836147fd565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b600061399c6040836147fd565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b60006139fb6044836147fd565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b6000613a676011836147fd565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613a94604383610d42565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613aff6030836147fd565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613b51602c836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613b9f602e836147fd565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613bef602f836147fd565b6000805160206148eb83398151915281526e696420636f6d70206164647265737360881b602082015260400192915050565b6000613c2e602f836147fd565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613c7f6028836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000613cc96059836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613d4e6058836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611f2c6000836147fd565b6000613de06024836147fd565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b6000613e26603f836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613e856039836147fd565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744163636f81527f756e7445787069726174696f6e3a2061646d696e206f6e6c7900000000000000602082015260400192915050565b6000613ee46036836147fd565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613f3c6030836147fd565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613f8e6029836147fd565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613fd96030836147fd565b6000805160206148eb83398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b60006140196015836147fd565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b600061404a602b836147fd565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2077686974656c69737481526a32b210383937b837b9b2b960a91b602082015260400192915050565b8051606083019061409b84826131cf565b5060208201516140ae60208501826140c7565b5060408201516140c160408501826140d9565b50505050565b61304a8161482c565b61304a8161485b565b61304a81614832565b6000611f2c8261333c565b60006140f8826135d3565b915061410482856131e1565b60208201915061411482846131e1565b5060200192915050565b6000611f2c82613a87565b60208101611f2c8284613050565b604081016141458285613041565b6124f860208301846131d8565b604081016141608285613050565b6124f86020830184613050565b604081016141458285613050565b60a081016141898288613050565b61419660208301876131d8565b81810360408301526141a881866131f2565b905081810360608301526141bc81856131f2565b90506141cb60808301846131d8565b9695505050505050565b60a081016141e38288613050565b6141f060208301876131d8565b8181036040830152614202818661322a565b905081810360608301526141bc818561322a565b608080825281016142278187613059565b9050818103602083015261423b8186613181565b9050818103604083015261424f8185613120565b905081810360608301526141cb81846130b2565b60208101611f2c82846131cf565b60208101611f2c82846131d8565b6080810161428d82876131d8565b61429a60208301866131d8565b6142a760408301856131d8565b611c346060830184613050565b606081016142c282866131d8565b6142cf60208301856131d8565b612cc460408301846140c7565b608081016142ea82876131d8565b6142f760208301866140c7565b61430460408301856131d8565b611c3460608301846131d8565b60208101611f2c82846132b4565b60208101611f2c82846132bd565b602080825281016124f881846131f2565b60208082528101611f2c816132e8565b60208082528101611f2c81613386565b60208082528101611f2c816133db565b60208082528101611f2c81613427565b60208082528101611f2c816134a4565b60208082528101611f2c816134f1565b60208082528101611f2c81613534565b60208082528101611f2c81613580565b60208082528101611f2c816135f1565b60208082528101611f2c81613649565b60208082528101611f2c8161369c565b60208082528101611f2c816136f2565b60208082528101611f2c81613748565b60208082528101611f2c8161378d565b60208082528101611f2c816137fa565b60208082528101611f2c8161384b565b60208082528101611f2c8161388a565b60208082528101611f2c816138dc565b60208082528101611f2c81613948565b60208082528101611f2c8161398f565b60208082528101611f2c816139ee565b60208082528101611f2c81613a5a565b60208082528101611f2c81613af2565b60208082528101611f2c81613b44565b60208082528101611f2c81613b92565b60208082528101611f2c81613be2565b60208082528101611f2c81613c21565b60208082528101611f2c81613c72565b60208082528101611f2c81613cbc565b60208082528101611f2c81613d41565b60208082528101611f2c81613dd3565b60208082528101611f2c81613e19565b60208082528101611f2c81613e78565b60208082528101611f2c81613ed7565b60208082528101611f2c81613f2f565b60208082528101611f2c81613f81565b60208082528101611f2c81613fcc565b60208082528101611f2c8161400c565b60208082528101611f2c8161403d565b60608101611f2c828461408a565b61012081016145cb828c6131d8565b6145d8602083018b613041565b81810360408301526145ea818a613059565b905081810360608301526145fe8189613181565b905081810360808301526146128188613120565b905081810360a083015261462681876130b2565b905061463560c08301866131d8565b61464260e08301856131d8565b81810361010083015261465581846131f2565b9b9a5050505050505050505050565b6101408101614673828d6131d8565b614680602083018c613050565b61468d604083018b6131d8565b61469a606083018a6131d8565b6146a760808301896131d8565b6146b460a08301886131d8565b6146c160c08301876131d8565b6146ce60e08301866131d8565b6146dc6101008301856131cf565b6146556101208301846131cf565b6040810161414582856131d8565b6080810161470682886131d8565b61471360208301876140c7565b61472060408301866140d0565b81810360608301526147338184866132c6565b979650505050505050565b6080810161474c82866131d8565b61475960208301856140c7565b61476660408301846140d0565b8181036060830152611c3481613dc6565b60405181810167ffffffffffffffff8111828210171561479657600080fd5b604052919050565b600067ffffffffffffffff8211156147b557600080fd5b5060209081020190565b600067ffffffffffffffff8211156147d657600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611f2c82614820565b151590565b80610d42816148a8565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611f2c825b6000611f2c82614806565b6000611f2c82614816565b6000611f2c82614832565b82818337506000910152565b60005b8381101561488d578181015183820152602001614875565b838111156140c15750506000910152565b601f01601f191690565b600881106129da57fe5b6148bb81614806565b81146129da57600080fd5b6148bb81614811565b6148bb8161230b565b6148bb8161482c565b6148bb8161483256fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a72315820219635f954be2e0d41664915d6c45cea74635913b13794f4f062120e27c449166c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode
0x6080604052600436106102725760003560e01c80635c60da1b1161014f578063d33219b4116100c1578063e48083fe1161007a578063e48083fe14610712578063e9c714f214610727578063f851a4401461073c578063f9d28b8014610751578063fc4eee4214610771578063fe0d94c11461078657610272565b8063d33219b414610666578063da35c6641461067b578063da95691a14610690578063ddf0b009146106b0578063deaaa7cc146106d0578063e23a9a52146106e557610272565b8063a64e024a11610113578063a64e024a146105d2578063b1126263146105e7578063b58131b0146105fc578063b71d1a0c14610611578063c5a8425d14610631578063d13f90b41461064657610272565b80635c60da1b14610553578063791f5d23146105685780637b3c71d31461057d5780637bdbe4d01461059d57806399533365146105b257610272565b806325fd935a116101e85780633af32abf116101ac5780633af32abf146104795780633bccf4fd146104a65780633e4f49e6146104c657806340e58ee5146104f35780634d6733d214610513578063567813881461053357610272565b806325fd935a146103dd57806326782247146103f2578063328dd9821461041457806338bd0dda146104445780633932abb11461046457610272565b806317977c611161023a57806317977c611461033e57806317ba1b8b1461035e5780631dfb1b5a1461037e57806320606b701461039e578063215809ca146103b357806324bc1a64146103c857610272565b8063013cf08b1461027757806302a251a3146102b657806306fdde03146102d85780630ea2d98c146102fa578063109d0af81461031c575b600080fd5b34801561028357600080fd5b50610297610292366004612ecb565b610799565b6040516102ad9a99989796959493929190614664565b60405180910390f35b3480156102c257600080fd5b506102cb6107fc565b6040516102ad9190614271565b3480156102e457600080fd5b506102ed610802565b6040516102ad919061432d565b34801561030657600080fd5b5061031a610315366004612ecb565b610835565b005b34801561032857600080fd5b506103316108df565b6040516102ad9190614311565b34801561034a57600080fd5b506102cb610359366004612ca6565b6108ee565b34801561036a57600080fd5b5061031a610379366004612ecb565b610900565b34801561038a57600080fd5b5061031a610399366004612ecb565b6109a4565b3480156103aa57600080fd5b506102cb610a37565b3480156103bf57600080fd5b506102cb610a4e565b3480156103d457600080fd5b506102cb610a54565b3480156103e957600080fd5b506102cb610a62565b3480156103fe57600080fd5b50610407610a70565b6040516102ad9190614129565b34801561042057600080fd5b5061043461042f366004612ecb565b610a7f565b6040516102ad9493929190614216565b34801561045057600080fd5b506102cb61045f366004612ca6565b610d0e565b34801561047057600080fd5b506102cb610d20565b34801561048557600080fd5b50610499610494366004612ca6565b610d26565b6040516102ad9190614263565b3480156104b257600080fd5b5061031a6104c1366004612fb1565b610d47565b3480156104d257600080fd5b506104e66104e1366004612ecb565b610f22565b6040516102ad919061431f565b3480156104ff57600080fd5b5061031a61050e366004612ecb565b6110a7565b34801561051f57600080fd5b5061031a61052e366004612d41565b6113ee565b34801561053f57600080fd5b5061031a61054e366004612f19565b61147a565b34801561055f57600080fd5b506104076114c4565b34801561057457600080fd5b506102cb6114d3565b34801561058957600080fd5b5061031a610598366004612f49565b6114e1565b3480156105a957600080fd5b506102cb611531565b3480156105be57600080fd5b5061031a6105cd366004612ca6565b611536565b3480156105de57600080fd5b506102cb6115b5565b3480156105f357600080fd5b506102cb6115bc565b34801561060857600080fd5b506102cb6115c2565b34801561061d57600080fd5b5061031a61062c366004612ca6565b6115c8565b34801561063d57600080fd5b50610407611645565b34801561065257600080fd5b5061031a610661366004612ccc565b611654565b34801561067257600080fd5b506103316117d1565b34801561068757600080fd5b506102cb6117e0565b34801561069c57600080fd5b506102cb6106ab366004612d7b565b6117e6565b3480156106bc57600080fd5b5061031a6106cb366004612ecb565b611c3d565b3480156106dc57600080fd5b506102cb611eb9565b3480156106f157600080fd5b50610705610700366004612ee9565b611ec5565b6040516102ad91906145ae565b34801561071e57600080fd5b506102cb611f32565b34801561073357600080fd5b5061031a611f37565b34801561074857600080fd5b50610407612015565b34801561075d57600080fd5b5061031a61076c366004612ca6565b612024565b34801561077d57600080fd5b506102cb61214a565b61031a610794366004612ecb565b612150565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b031633146108685760405162461bcd60e51b815260040161085f9061437e565b60405180910390fd5b611680811015801561087d575062013b008111155b6108995760405162461bcd60e51b815260040161085f906143be565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906108d390839085906146ea565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b0316331461092a5760405162461bcd60e51b815260040161085f9061455e565b690a968163f0a57b400000811015801561094e575069152d02c7e14af68000008111155b61096a5760405162461bcd60e51b815260040161085f9061446e565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906108d390839085906146ea565b6000546001600160a01b031633146109ce5760405162461bcd60e51b815260040161085f9061439e565b600181101580156109e15750619d808111155b6109fd5760405162461bcd60e51b815260040161085f906143ee565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906108d390839085906146ea565b604051610a439061411e565b604051809103902081565b61168081565b6954b40b1f852bda00000081565b69152d02c7e14af680000081565b6001546001600160a01b031681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610b0157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ae3575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610b5357602002820191906000526020600020905b815481526020019060010190808311610b3f575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610c265760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610c125780601f10610be757610100808354040283529160200191610c12565b820191906000526020600020905b815481529060010190602001808311610bf557829003601f168201915b505050505081526020019060010190610b7b565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610cf85760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610ce45780601f10610cb957610100808354040283529160200191610ce4565b820191906000526020600020905b815481529060010190602001808311610cc757829003601f168201915b505050505081526020019060010190610c4d565b5050505090509450945094509450509193509193565b600c6020526000908152604090205481565b60035481565b6001600160a01b0381166000908152600c602052604090205442105b919050565b6000604051610d559061411e565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610db6612309565b30604051602001610dca949392919061427f565b6040516020818303038152906040528051906020012090506000604051610df0906140e2565b604051908190038120610e0991899089906020016142b4565b60405160208183030381529060405280519060200120905060008282604051602001610e369291906140ed565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e7394939291906142dc565b6020604051602081039080840390855afa158015610e95573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ec85760405162461bcd60e51b815260040161085f9061441e565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610f00858e8e61230e565b604051610f0f9392919061473e565b60405180910390a2505050505050505050565b60008160075410158015610f37575060065482115b610f535760405162461bcd60e51b815260040161085f9061456e565b6000828152600a60205260409020600c81015460ff1615610f78576002915050610d42565b80600701544311610f8d576000915050610d42565b80600801544311610fa2576001915050610d42565b80600a01548160090154111580610fc657506954b40b1f852bda0000008160090154105b15610fd5576003915050610d42565b6002810154610fe8576004915050610d42565b600c810154610100900460ff1615611004576007915050610d42565b6002810154600854604080516360d143f160e11b8152905161108d93926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b15801561105057600080fd5b505afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110889190810190612e78565b6124ff565b421061109d576006915050610d42565b6005915050610d42565b60076110b282610f22565b60078111156110bd57fe5b14156110db5760405162461bcd60e51b815260040161085f9061454e565b6000818152600a6020526040902060018101546001600160a01b031633146112b2576001810154611114906001600160a01b0316610d26565b156111f3576005546009546001838101546001600160a01b039283169263782d6fe192911690611145904390612524565b6040518363ffffffff1660e01b815260040161116292919061416d565b60206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111b29190810190612ff7565b6001600160601b03161080156111d25750600d546001600160a01b031633145b6111ee5760405162461bcd60e51b815260040161085f9061459e565b6112b2565b6005546009546001838101546001600160a01b039283169263782d6fe19291169061121f904390612524565b6040518363ffffffff1660e01b815260040161123c92919061416d565b60206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128c9190810190612ff7565b6001600160601b0316106112b25760405162461bcd60e51b815260040161085f906144de565b600c8101805460ff1916600117905560005b60038201548110156113be576008546003830180546001600160a01b039092169163591fcdfe9190849081106112f657fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061131e57fe5b906000526020600020015485600501858154811061133857fe5b9060005260206000200186600601868154811061135157fe5b9060005260206000200187600201546040518663ffffffff1660e01b81526004016113809594939291906141d5565b600060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b5050600190920191506112c49050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516108d39190614271565b6000546001600160a01b03163314806114115750600d546001600160a01b031633145b61142d5760405162461bcd60e51b815260040161085f9061453e565b6001600160a01b0382166000908152600c602052604090819020829055517f4e7b7545bc5744d0e30425959f4687475774b6c7edad77d24cb51c7d967d4515906108d3908490849061416d565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836114a984838361230e565b6040516114b89392919061473e565b60405180910390a25050565b6002546001600160a01b031681565b690a968163f0a57b40000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561151084838361230e565b86866040516115239594939291906146f8565b60405180910390a250505050565b600a81565b6000546001600160a01b031633146115605760405162461bcd60e51b815260040161085f9061443e565b600d80546001600160a01b038381166001600160a01b031983161792839055604051918116927f80a07e73e552148844a9c216d9724212d609cfa54e9c1a2e97203bdd2c4ad341926108d39285921690614152565b62013b0081565b619d8081565b60055481565b6000546001600160a01b031633146115f25760405162461bcd60e51b815260040161085f9061435e565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906108d39083908590614152565b600d546001600160a01b031681565b6008546001600160a01b03161561167d5760405162461bcd60e51b815260040161085f9061434e565b6000546001600160a01b031633146116a75760405162461bcd60e51b815260040161085f9061445e565b6001600160a01b0385166116cd5760405162461bcd60e51b815260040161085f9061438e565b6001600160a01b0384166116f35760405162461bcd60e51b815260040161085f906144ce565b6116808310158015611708575062013b008311155b6117245760405162461bcd60e51b815260040161085f9061457e565b600182101580156117375750619d808211155b6117535760405162461bcd60e51b815260040161085f9061442e565b690a968163f0a57b4000008110158015611777575069152d02c7e14af68000008111155b6117935760405162461bcd60e51b815260040161085f906143fe565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b60006006546000141561180b5760405162461bcd60e51b815260040161085f906143ae565b6005546009546001600160a01b031663782d6fe13361182b436001612524565b6040518363ffffffff1660e01b8152600401611848929190614137565b60206040518083038186803b15801561186057600080fd5b505afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118989190810190612ff7565b6001600160601b031611806118b157506118b133610d26565b6118cd5760405162461bcd60e51b815260040161085f9061452e565b845186511480156118df575083518651145b80156118ec575082518651145b6119085760405162461bcd60e51b815260040161085f9061444e565b85516119265760405162461bcd60e51b815260040161085f906144ae565b600a865111156119485760405162461bcd60e51b815260040161085f906144ee565b336000908152600b602052604090205480156119c557600061196982610f22565b9050600181600781111561197957fe5b14156119975760405162461bcd60e51b815260040161085f9061450e565b60008160078111156119a557fe5b14156119c35760405162461bcd60e51b815260040161085f906144fe565b505b60006119d3436003546124ff565b905060006119e3826004546124ff565b60078054600101905590506119f66126ab565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611ae0929190612727565b5060808201518051611afc91600484019160209091019061278c565b5060a08201518051611b189160058401916020909101906127d3565b5060c08201518051611b3491600684019160209091019061282c565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e604051611c25999897969594939291906145bc565b60405180910390a15193505050505b95945050505050565b6004611c4882610f22565b6007811115611c5357fe5b14611c705760405162461bcd60e51b815260040161085f9061447e565b6000818152600a602090815260408083206008548251630d48571f60e31b81529251919493611cca9342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561105057600080fd5b905060005b6003830154811015611e7257611e6a836003018281548110611ced57fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611d1557fe5b9060005260206000200154856005018481548110611d2f57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611dbd5780601f10611d9257610100808354040283529160200191611dbd565b820191906000526020600020905b815481529060010190602001808311611da057829003601f168201915b5050505050866006018581548110611dd157fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e5f5780601f10611e3457610100808354040283529160200191611e5f565b820191906000526020600020905b815481529060010190602001808311611e4257829003601f168201915b50505050508661254c565b600101611ccf565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611eac90859084906146ea565b60405180910390a1505050565b604051610a43906140e2565b611ecd612885565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611f5057503315155b611f6c5760405162461bcd60e51b815260040161085f906144be565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611fd0928692911690614152565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916108d39184916001600160a01b031690614152565b6000546001600160a01b031681565b6000546001600160a01b0316331461204e5760405162461bcd60e51b815260040161085f9061451e565b6006541561206e5760405162461bcd60e51b815260040161085f9061449e565b806001600160a01b031663da35c6646040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120a957600080fd5b505af11580156120bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120e19190810190612e78565b600781905560065560085460408051630e18b68160e01b815290516001600160a01b0390921691630e18b6819160048082019260009290919082900301818387803b15801561212f57600080fd5b505af1158015612143573d6000803e3d6000fd5b5050505050565b60065481565b600561215b82610f22565b600781111561216657fe5b146121835760405162461bcd60e51b815260040161085f9061440e565b6000818152600a60205260408120600c8101805461ff001916610100179055905b60038201548110156122d9576008546004830180546001600160a01b0390921691630825f38f9190849081106121d657fe5b90600052602060002001548460030184815481106121f057fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061221857fe5b906000526020600020015486600501868154811061223257fe5b9060005260206000200187600601878154811061224b57fe5b9060005260206000200188600201546040518763ffffffff1660e01b815260040161227a9594939291906141d5565b6000604051808303818588803b15801561229357600080fd5b505af11580156122a7573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122d09190810190612e96565b506001016121a4565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516108d39190614271565b465b90565b6000600161231b84610f22565b600781111561232657fe5b146123435760405162461bcd60e51b815260040161085f906143ce565b60028260ff1611156123675760405162461bcd60e51b815260040161085f9061433e565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156123b05760405162461bcd60e51b815260040161085f906143de565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe1916123e6918b9160040161416d565b60206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124369190810190612ff7565b905060ff85166124615761245783600a0154826001600160601b03166124ff565b600a8401556124b7565b8460ff166001141561248e576124848360090154826001600160601b03166124ff565b60098401556124b7565b8460ff16600214156124b7576124b183600b0154826001600160601b03166124ff565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b6000828201838110156124f85760405162461bcd60e51b815260040161085f9061448e565b6000828211156125465760405162461bcd60e51b815260040161085f9061458e565b50900390565b6008546040516001600160a01b039091169063f2b065379061257a908890889088908890889060200161417b565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016125ac9190614271565b60206040518083038186803b1580156125c457600080fd5b505afa1580156125d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125fc9190810190612e5a565b156126195760405162461bcd60e51b815260040161085f9061436e565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f90190612651908890889088908890889060040161417b565b602060405180830381600087803b15801561266b57600080fd5b505af115801561267f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506126a39190810190612e78565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b82805482825590600052602060002090810192821561277c579160200282015b8281111561277c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612747565b506127889291506128a5565b5090565b8280548282559060005260206000209081019282156127c7579160200282015b828111156127c75782518255916020019190600101906127ac565b506127889291506128c9565b828054828255906000526020600020908101928215612820579160200282015b8281111561282057825180516128109184916020909101906128e3565b50916020019190600101906127f3565b50612788929150612950565b828054828255906000526020600020908101928215612879579160200282015b8281111561287957825180516128699184916020909101906128e3565b509160200191906001019061284c565b50612788929150612973565b604080516060810182526000808252602082018190529181019190915290565b61230b91905b808211156127885780546001600160a01b03191681556001016128ab565b61230b91905b8082111561278857600081556001016128cf565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061292457805160ff19168380011785556127c7565b828001600101855582156127c757918201828111156127c75782518255916020019190600101906127ac565b61230b91905b8082111561278857600061296a8282612996565b50600101612956565b61230b91905b8082111561278857600061298d8282612996565b50600101612979565b50805460018160011615610100020316600290046000825580601f106129bc57506129da565b601f0160209004906000526020600020908101906129da91906128c9565b50565b8035611f2c816148b2565b600082601f8301126129f957600080fd5b8135612a0c612a078261479e565b614777565b91508181835260208401935060208101905083856020840282011115612a3157600080fd5b60005b83811015612a5d5781612a4788826129dd565b8452506020928301929190910190600101612a34565b5050505092915050565b600082601f830112612a7857600080fd5b8135612a86612a078261479e565b81815260209384019390925082018360005b83811015612a5d5781358601612aae8882612bb2565b8452506020928301929190910190600101612a98565b600082601f830112612ad557600080fd5b8135612ae3612a078261479e565b81815260209384019390925082018360005b83811015612a5d5781358601612b0b8882612bb2565b8452506020928301929190910190600101612af5565b600082601f830112612b3257600080fd5b8135612b40612a078261479e565b91508181835260208401935060208101905083856020840282011115612b6557600080fd5b60005b83811015612a5d5781612b7b8882612b9c565b8452506020928301929190910190600101612b68565b8051611f2c816148c6565b8035611f2c816148cf565b8051611f2c816148cf565b600082601f830112612bc357600080fd5b8135612bd1612a07826147bf565b91508082526020830160208301858383011115612bed57600080fd5b612bf8838284614866565b50505092915050565b600082601f830112612c1257600080fd5b8151612c20612a07826147bf565b91508082526020830160208301858383011115612c3c57600080fd5b612bf8838284614872565b60008083601f840112612c5957600080fd5b50813567ffffffffffffffff811115612c7157600080fd5b602083019150836001820283011115612c8957600080fd5b9250929050565b8035611f2c816148d8565b8051611f2c816148e1565b600060208284031215612cb857600080fd5b6000612cc484846129dd565b949350505050565b600080600080600060a08688031215612ce457600080fd5b6000612cf088886129dd565b9550506020612d01888289016129dd565b9450506040612d1288828901612b9c565b9350506060612d2388828901612b9c565b9250506080612d3488828901612b9c565b9150509295509295909350565b60008060408385031215612d5457600080fd5b6000612d6085856129dd565b9250506020612d7185828601612b9c565b9150509250929050565b600080600080600060a08688031215612d9357600080fd5b853567ffffffffffffffff811115612daa57600080fd5b612db6888289016129e8565b955050602086013567ffffffffffffffff811115612dd357600080fd5b612ddf88828901612b21565b945050604086013567ffffffffffffffff811115612dfc57600080fd5b612e0888828901612ac4565b935050606086013567ffffffffffffffff811115612e2557600080fd5b612e3188828901612a67565b925050608086013567ffffffffffffffff811115612e4e57600080fd5b612d3488828901612bb2565b600060208284031215612e6c57600080fd5b6000612cc48484612b91565b600060208284031215612e8a57600080fd5b6000612cc48484612ba7565b600060208284031215612ea857600080fd5b815167ffffffffffffffff811115612ebf57600080fd5b612cc484828501612c01565b600060208284031215612edd57600080fd5b6000612cc48484612b9c565b60008060408385031215612efc57600080fd5b6000612f088585612b9c565b9250506020612d71858286016129dd565b60008060408385031215612f2c57600080fd5b6000612f388585612b9c565b9250506020612d7185828601612c90565b60008060008060608587031215612f5f57600080fd5b6000612f6b8787612b9c565b9450506020612f7c87828801612c90565b935050604085013567ffffffffffffffff811115612f9957600080fd5b612fa587828801612c47565b95989497509550505050565b600080600080600060a08688031215612fc957600080fd5b6000612fd58888612b9c565b9550506020612fe688828901612c90565b9450506040612d1288828901612c90565b60006020828403121561300957600080fd5b6000612cc48484612c9b565b60006130218383613050565b505060200190565b60006124f883836131f2565b600061302183836131d8565b61304a8161483e565b82525050565b61304a81614806565b6000613064826147f9565b61306e81856147fd565b9350613079836147e7565b8060005b838110156130a75781516130918882613015565b975061309c836147e7565b92505060010161307d565b509495945050505050565b60006130bd826147f9565b6130c781856147fd565b9350836020820285016130d9856147e7565b8060005b8581101561311357848403895281516130f68582613029565b9450613101836147e7565b60209a909a01999250506001016130dd565b5091979650505050505050565b600061312b826147f9565b61313581856147fd565b935083602082028501613147856147e7565b8060005b8581101561311357848403895281516131648582613029565b945061316f836147e7565b60209a909a019992505060010161314b565b600061318c826147f9565b61319681856147fd565b93506131a1836147e7565b8060005b838110156130a75781516131b98882613035565b97506131c4836147e7565b9250506001016131a5565b61304a81614811565b61304a8161230b565b61304a6131ed8261230b565b61230b565b60006131fd826147f9565b61320781856147fd565b9350613217818560208601614872565b6132208161489e565b9093019392505050565b600081546001811660008114613247576001811461326d576132ac565b607f600283041661325881876147fd565b60ff19841681529550506020850192506132ac565b6002820461327b81876147fd565b9550613286856147ed565b60005b828110156132a557815488820152600190910190602001613289565b8701945050505b505092915050565b61304a81614845565b61304a81614850565b60006132d283856147fd565b93506132df838584614866565b6132208361489e565b60006132f56032836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000613349602883610d42565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b60006133936033836147fd565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b60006133e8602a836147fd565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006134346055836147fd565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b60006134b1602b836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b60006134fe6033836147fd565b6000805160206148eb83398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613541602a836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b600061358d6031836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b60006135e0600283610d42565b61190160f01b815260020192915050565b60006135fe6036836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b60006136566031836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006136a96034836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b60006136ff6034836147fd565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b60006137556035836147fd565b6000805160206148eb8339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b600061379a6045836147fd565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000613807602f836147fd565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b6000613858602f836147fd565b6000805160206148eb83398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006138976030836147fd565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744775617281526f6469616e3a2061646d696e206f6e6c7960801b602082015260400192915050565b60006138e96044836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006139556025836147fd565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b600061399c6040836147fd565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b60006139fb6044836147fd565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b6000613a676011836147fd565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613a94604383610d42565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613aff6030836147fd565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613b51602c836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613b9f602e836147fd565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613bef602f836147fd565b6000805160206148eb83398151915281526e696420636f6d70206164647265737360881b602082015260400192915050565b6000613c2e602f836147fd565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613c7f6028836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000613cc96059836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613d4e6058836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611f2c6000836147fd565b6000613de06024836147fd565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b6000613e26603f836147fd565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613e856039836147fd565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744163636f81527f756e7445787069726174696f6e3a2061646d696e206f6e6c7900000000000000602082015260400192915050565b6000613ee46036836147fd565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613f3c6030836147fd565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613f8e6029836147fd565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613fd96030836147fd565b6000805160206148eb83398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b60006140196015836147fd565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b600061404a602b836147fd565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2077686974656c69737481526a32b210383937b837b9b2b960a91b602082015260400192915050565b8051606083019061409b84826131cf565b5060208201516140ae60208501826140c7565b5060408201516140c160408501826140d9565b50505050565b61304a8161482c565b61304a8161485b565b61304a81614832565b6000611f2c8261333c565b60006140f8826135d3565b915061410482856131e1565b60208201915061411482846131e1565b5060200192915050565b6000611f2c82613a87565b60208101611f2c8284613050565b604081016141458285613041565b6124f860208301846131d8565b604081016141608285613050565b6124f86020830184613050565b604081016141458285613050565b60a081016141898288613050565b61419660208301876131d8565b81810360408301526141a881866131f2565b905081810360608301526141bc81856131f2565b90506141cb60808301846131d8565b9695505050505050565b60a081016141e38288613050565b6141f060208301876131d8565b8181036040830152614202818661322a565b905081810360608301526141bc818561322a565b608080825281016142278187613059565b9050818103602083015261423b8186613181565b9050818103604083015261424f8185613120565b905081810360608301526141cb81846130b2565b60208101611f2c82846131cf565b60208101611f2c82846131d8565b6080810161428d82876131d8565b61429a60208301866131d8565b6142a760408301856131d8565b611c346060830184613050565b606081016142c282866131d8565b6142cf60208301856131d8565b612cc460408301846140c7565b608081016142ea82876131d8565b6142f760208301866140c7565b61430460408301856131d8565b611c3460608301846131d8565b60208101611f2c82846132b4565b60208101611f2c82846132bd565b602080825281016124f881846131f2565b60208082528101611f2c816132e8565b60208082528101611f2c81613386565b60208082528101611f2c816133db565b60208082528101611f2c81613427565b60208082528101611f2c816134a4565b60208082528101611f2c816134f1565b60208082528101611f2c81613534565b60208082528101611f2c81613580565b60208082528101611f2c816135f1565b60208082528101611f2c81613649565b60208082528101611f2c8161369c565b60208082528101611f2c816136f2565b60208082528101611f2c81613748565b60208082528101611f2c8161378d565b60208082528101611f2c816137fa565b60208082528101611f2c8161384b565b60208082528101611f2c8161388a565b60208082528101611f2c816138dc565b60208082528101611f2c81613948565b60208082528101611f2c8161398f565b60208082528101611f2c816139ee565b60208082528101611f2c81613a5a565b60208082528101611f2c81613af2565b60208082528101611f2c81613b44565b60208082528101611f2c81613b92565b60208082528101611f2c81613be2565b60208082528101611f2c81613c21565b60208082528101611f2c81613c72565b60208082528101611f2c81613cbc565b60208082528101611f2c81613d41565b60208082528101611f2c81613dd3565b60208082528101611f2c81613e19565b60208082528101611f2c81613e78565b60208082528101611f2c81613ed7565b60208082528101611f2c81613f2f565b60208082528101611f2c81613f81565b60208082528101611f2c81613fcc565b60208082528101611f2c8161400c565b60208082528101611f2c8161403d565b60608101611f2c828461408a565b61012081016145cb828c6131d8565b6145d8602083018b613041565b81810360408301526145ea818a613059565b905081810360608301526145fe8189613181565b905081810360808301526146128188613120565b905081810360a083015261462681876130b2565b905061463560c08301866131d8565b61464260e08301856131d8565b81810361010083015261465581846131f2565b9b9a5050505050505050505050565b6101408101614673828d6131d8565b614680602083018c613050565b61468d604083018b6131d8565b61469a606083018a6131d8565b6146a760808301896131d8565b6146b460a08301886131d8565b6146c160c08301876131d8565b6146ce60e08301866131d8565b6146dc6101008301856131cf565b6146556101208301846131cf565b6040810161414582856131d8565b6080810161470682886131d8565b61471360208301876140c7565b61472060408301866140d0565b81810360608301526147338184866132c6565b979650505050505050565b6080810161474c82866131d8565b61475960208301856140c7565b61476660408301846140d0565b8181036060830152611c3481613dc6565b60405181810167ffffffffffffffff8111828210171561479657600080fd5b604052919050565b600067ffffffffffffffff8211156147b557600080fd5b5060209081020190565b600067ffffffffffffffff8211156147d657600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611f2c82614820565b151590565b80610d42816148a8565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611f2c825b6000611f2c82614806565b6000611f2c82614816565b6000611f2c82614832565b82818337506000910152565b60005b8381101561488d578181015183820152602001614875565b838111156140c15750506000910152565b601f01601f191690565b600881106129da57fe5b6148bb81614806565b81146129da57600080fd5b6148bb81614811565b6148bb8161230b565b6148bb8161482c565b6148bb8161483256fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a72315820219635f954be2e0d41664915d6c45cea74635913b13794f4f062120e27c449166c6578706572696d656e74616cf564736f6c63430005110040
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.