Source Code
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
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GovernorBravoDelegate
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.16;
pragma experimental ABIEncoderV2;
import "./GovernorBravoInterfaces.sol";
contract GovernorBravoDelegate is GovernorBravoDelegateStorageV1, GovernorBravoEvents {
/// @notice The name of this contract
string public constant name = "Uniswap Governor Bravo";
/// @notice The minimum setable proposal threshold
uint public constant MIN_PROPOSAL_THRESHOLD = 1000000e18; // 1,000,000 Uni
/// @notice The maximum setable proposal threshold
uint public constant MAX_PROPOSAL_THRESHOLD = 10000000e18; //10,000,000 Uni
/// @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 = 40000000e18; // 40,000,000 = 4% of Uni
/// @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 uni_ The address of the Uni token
* @param votingPeriod_ The initial voting period
* @param votingDelay_ The initial voting delay
* @param proposalThreshold_ The initial proposal threshold
*/
function initialize(address timelock_, address uni_, 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(uni_ != address(0), "GovernorBravo::initialize: invalid uni 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_);
uni = UniInterface(uni_);
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");
require(uni.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold, "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];
require(msg.sender == proposal.proposer || uni.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 = uni.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 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 Initiate the GovernorBravo contract
* @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count
* @param proposalCount proposal id to initialize from
*/
function _initiate(uint proposalCount) external {
require(msg.sender == admin, "GovernorBravo::_initiate: admin only");
require(initialProposalId == 0, "GovernorBravo::_initiate: can only initiate once");
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);
}
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 Uniswap Protocol Timelock
TimelockInterface public timelock;
/// @notice The address of the Uniswap governance token
UniInterface public uni;
/// @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
}
}
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 UniInterface {
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
Contract ABI
API[{"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"},{"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":"uint256","name":"proposalCount","type":"uint256"}],"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":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":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":"uni_","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":"","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":"uni","outputs":[{"internalType":"contract UniInterface","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"}]Contract Creation Code
608060405234801561001057600080fd5b50614446806100206000396000f3fe60806040526004361061023b5760003560e01c8063791f5d231161012e578063da95691a116100ab578063e9c714f21161006f578063e9c714f214610659578063edc9af951461066e578063f851a44014610683578063fc4eee4214610698578063fe0d94c1146106ad5761023b565b8063da95691a146105c2578063ddf0b009146105e2578063deaaa7cc14610602578063e23a9a5214610617578063e48083fe146106445761023b565b8063b58131b0116100f2578063b58131b014610536578063b71d1a0c1461054b578063d13f90b41461056b578063d33219b41461058b578063da35c664146105ad5761023b565b8063791f5d23146104c25780637b3c71d3146104d75780637bdbe4d0146104f7578063a64e024a1461050c578063b1126263146105215761023b565b806325fd935a116101bc5780633e4f49e6116101805780633e4f49e61461042057806340e58ee51461044d578063501b6ad31461046d578063567813881461048d5780635c60da1b146104ad5761023b565b806325fd935a146103845780632678224714610399578063328dd982146103bb5780633932abb1146103eb5780633bccf4fd146104005761023b565b806317ba1b8b1161020357806317ba1b8b146103055780631dfb1b5a1461032557806320606b7014610345578063215809ca1461035a57806324bc1a641461036f5761023b565b8063013cf08b1461024057806302a251a31461027f57806306fdde03146102a15780630ea2d98c146102c357806317977c61146102e5575b600080fd5b34801561024c57600080fd5b5061026061025b366004612af7565b6106c0565b6040516102769a9998979695949392919061415d565b60405180910390f35b34801561028b57600080fd5b50610294610723565b6040516102769190613d9a565b3480156102ad57600080fd5b506102b6610729565b6040516102769190613e56565b3480156102cf57600080fd5b506102e36102de366004612af7565b61075b565b005b3480156102f157600080fd5b5061029461030036600461290c565b610805565b34801561031157600080fd5b506102e3610320366004612af7565b610817565b34801561033157600080fd5b506102e3610340366004612af7565b6108bc565b34801561035157600080fd5b5061029461094f565b34801561036657600080fd5b50610294610966565b34801561037b57600080fd5b5061029461096c565b34801561039057600080fd5b5061029461097b565b3480156103a557600080fd5b506103ae61098a565b6040516102769190613c60565b3480156103c757600080fd5b506103db6103d6366004612af7565b610999565b6040516102769493929190613d4d565b3480156103f757600080fd5b50610294610c28565b34801561040c57600080fd5b506102e361041b366004612be7565b610c2e565b34801561042c57600080fd5b5061044061043b366004612af7565b610e08565b6040516102769190613e48565b34801561045957600080fd5b506102e3610468366004612af7565b610f8f565b34801561047957600080fd5b506102e3610488366004612af7565b6111e3565b34801561049957600080fd5b506102e36104a8366004612b4f565b611293565b3480156104b957600080fd5b506103ae6112dd565b3480156104ce57600080fd5b506102946112ec565b3480156104e357600080fd5b506102e36104f2366004612b7f565b6112fa565b34801561050357600080fd5b5061029461134a565b34801561051857600080fd5b5061029461134f565b34801561052d57600080fd5b50610294611356565b34801561054257600080fd5b5061029461135c565b34801561055757600080fd5b506102e361056636600461290c565b611362565b34801561057757600080fd5b506102e3610586366004612932565b6113df565b34801561059757600080fd5b506105a061155d565b6040516102769190613e3a565b3480156105b957600080fd5b5061029461156c565b3480156105ce57600080fd5b506102946105dd3660046129a7565b611572565b3480156105ee57600080fd5b506102e36105fd366004612af7565b6119ba565b34801561060e57600080fd5b50610294611c36565b34801561062357600080fd5b50610637610632366004612b15565b611c42565b60405161027691906140a7565b34801561065057600080fd5b50610294611caf565b34801561066557600080fd5b506102e3611cb4565b34801561067a57600080fd5b506105a0611d92565b34801561068f57600080fd5b506103ae611da1565b3480156106a457600080fd5b50610294611db0565b6102e36106bb366004612af7565b611db6565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806016815260200175556e697377617020476f7665726e6f7220427261766f60501b81525081565b6000546001600160a01b0316331461078e5760405162461bcd60e51b815260040161078590613ea7565b60405180910390fd5b61168081101580156107a3575062013b008111155b6107bf5760405162461bcd60e51b815260040161078590613ee7565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906107f990839085906141e3565b60405180910390a15050565b600b6020526000908152604090205481565b6000546001600160a01b031633146108415760405162461bcd60e51b815260040161078590614067565b69d3c21bcecceda1000000811015801561086657506a084595161401484a0000008111155b6108825760405162461bcd60e51b815260040161078590613f87565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906107f990839085906141e3565b6000546001600160a01b031633146108e65760405162461bcd60e51b815260040161078590613ec7565b600181101580156108f95750619d808111155b6109155760405162461bcd60e51b815260040161078590613f17565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906107f990839085906141e3565b60405161095b90613c55565b604051809103902081565b61168081565b6a211654585005212800000081565b6a084595161401484a00000081565b6001546001600160a01b031681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610a1b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fd575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a6d57602002820191906000526020600020905b815481526020019060010190808311610a59575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610b405760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610b2c5780601f10610b0157610100808354040283529160200191610b2c565b820191906000526020600020905b815481529060010190602001808311610b0f57829003601f168201915b505050505081526020019060010190610a95565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610c125760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b505050505081526020019060010190610b67565b5050505090509450945094509450509193509193565b60035481565b6000604051610c3c90613c55565b604080519182900382208282019091526016825275556e697377617020476f7665726e6f7220427261766f60501b6020909201919091527f998ff3fa28648fa5c0f0291777159421a8f3c0c8369ab1ded6c225bf6a3d65e0610c9c611f6f565b30604051602001610cb09493929190613da8565b6040516020818303038152906040528051906020012090506000604051610cd690613c19565b604051908190038120610cef9189908990602001613ddd565b60405160208183030381529060405280519060200120905060008282604051602001610d1c929190613c24565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610d599493929190613e05565b6020604051602081039080840390855afa158015610d7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610dae5760405162461bcd60e51b815260040161078590613f47565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610de6858e8e611f74565b604051610df593929190614237565b60405180910390a2505050505050505050565b60008160075410158015610e1d575060065482115b610e395760405162461bcd60e51b815260040161078590614077565b6000828152600a60205260409020600c81015460ff1615610e5e576002915050610f8a565b80600701544311610e73576000915050610f8a565b80600801544311610e88576001915050610f8a565b80600a01548160090154111580610ead57506a21165458500521280000008160090154105b15610ebc576003915050610f8a565b6002810154610ecf576004915050610f8a565b600c810154610100900460ff1615610eeb576007915050610f8a565b6002810154600854604080516360d143f160e11b81529051610f7493926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f6f9190810190612aa4565b612165565b4210610f84576006915050610f8a565b60059150505b919050565b6007610f9a82610e08565b6007811115610fa557fe5b1415610fc35760405162461bcd60e51b815260040161078590614057565b6000818152600a6020526040902060018101546001600160a01b031633148061108b57506005546009546001838101546001600160a01b039283169263782d6fe19291169061101390439061218a565b6040518363ffffffff1660e01b8152600401611030929190613ca4565b60206040518083038186803b15801561104857600080fd5b505afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110809190810190612c2d565b6001600160601b0316105b6110a75760405162461bcd60e51b815260040161078590613ff7565b600c8101805460ff1916600117905560005b60038201548110156111b3576008546003830180546001600160a01b039092169163591fcdfe9190849081106110eb57fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061111357fe5b906000526020600020015485600501858154811061112d57fe5b9060005260206000200186600601868154811061114657fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611175959493929190613d0c565b600060405180830381600087803b15801561118f57600080fd5b505af11580156111a3573d6000803e3d6000fd5b5050600190920191506110b99050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516107f99190613d9a565b6000546001600160a01b0316331461120d5760405162461bcd60e51b815260040161078590614037565b6006541561122d5760405162461bcd60e51b815260040161078590613fc7565b600681905560085460408051630e18b68160e01b815290516001600160a01b0390921691630e18b6819160048082019260009290919082900301818387803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b5050505050565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836112c2848383611f74565b6040516112d193929190614237565b60405180910390a25050565b6002546001600160a01b031681565b69d3c21bcecceda100000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48585611329848383611f74565b868660405161133c9594939291906141f1565b60405180910390a250505050565b600a81565b62013b0081565b619d8081565b60055481565b6000546001600160a01b0316331461138c5760405162461bcd60e51b815260040161078590613e87565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906107f99083908590613c89565b6008546001600160a01b0316156114085760405162461bcd60e51b815260040161078590613e77565b6000546001600160a01b031633146114325760405162461bcd60e51b815260040161078590613f77565b6001600160a01b0385166114585760405162461bcd60e51b815260040161078590613eb7565b6001600160a01b03841661147e5760405162461bcd60e51b815260040161078590613f97565b6116808310158015611493575062013b008311155b6114af5760405162461bcd60e51b815260040161078590614087565b600182101580156114c25750619d808211155b6114de5760405162461bcd60e51b815260040161078590613f57565b69d3c21bcecceda1000000811015801561150357506a084595161401484a0000008111155b61151f5760405162461bcd60e51b815260040161078590613f27565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6000600654600014156115975760405162461bcd60e51b815260040161078590613ed7565b6005546009546001600160a01b031663782d6fe1336115b743600161218a565b6040518363ffffffff1660e01b81526004016115d4929190613c6e565b60206040518083038186803b1580156115ec57600080fd5b505afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116249190810190612c2d565b6001600160601b03161161164a5760405162461bcd60e51b815260040161078590614047565b8451865114801561165c575083518651145b8015611669575082518651145b6116855760405162461bcd60e51b815260040161078590613f67565b85516116a35760405162461bcd60e51b815260040161078590613fd7565b600a865111156116c55760405162461bcd60e51b815260040161078590614007565b336000908152600b602052604090205480156117425760006116e682610e08565b905060018160078111156116f657fe5b14156117145760405162461bcd60e51b815260040161078590614027565b600081600781111561172257fe5b14156117405760405162461bcd60e51b815260040161078590614017565b505b600061175043600354612165565b9050600061176082600454612165565b6007805460010190559050611773612311565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301908051906020019061185d92919061238d565b50608082015180516118799160048401916020909101906123f2565b5060a08201518051611895916005840191602090910190612439565b5060c082015180516118b1916006840191602090910190612492565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516119a2999897969594939291906140b5565b60405180910390a15193505050505b95945050505050565b60046119c582610e08565b60078111156119d057fe5b146119ed5760405162461bcd60e51b815260040161078590613fa7565b6000818152600a602090815260408083206008548251630d48571f60e31b81529251919493611a479342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610f3757600080fd5b905060005b6003830154811015611bef57611be7836003018281548110611a6a57fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611a9257fe5b9060005260206000200154856005018481548110611aac57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b3a5780601f10611b0f57610100808354040283529160200191611b3a565b820191906000526020600020905b815481529060010190602001808311611b1d57829003601f168201915b5050505050866006018581548110611b4e57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b5050505050866121b2565b600101611a4c565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611c2990859084906141e3565b60405180910390a1505050565b60405161095b90613c19565b611c4a6124eb565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611ccd57503315155b611ce95760405162461bcd60e51b815260040161078590613fe7565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611d4d928692911690613c89565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916107f99184916001600160a01b031690613c89565b6009546001600160a01b031681565b6000546001600160a01b031681565b60065481565b6005611dc182610e08565b6007811115611dcc57fe5b14611de95760405162461bcd60e51b815260040161078590613f37565b6000818152600a60205260408120600c8101805461ff001916610100179055905b6003820154811015611f3f576008546004830180546001600160a01b0390921691630825f38f919084908110611e3c57fe5b9060005260206000200154846003018481548110611e5657fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611e7e57fe5b9060005260206000200154866005018681548110611e9857fe5b90600052602060002001876006018781548110611eb157fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611ee0959493929190613d0c565b6000604051808303818588803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611f369190810190612ac2565b50600101611e0a565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516107f99190613d9a565b465b90565b60006001611f8184610e08565b6007811115611f8c57fe5b14611fa95760405162461bcd60e51b815260040161078590613ef7565b60028260ff161115611fcd5760405162461bcd60e51b815260040161078590613e67565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156120165760405162461bcd60e51b815260040161078590613f07565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe19161204c918b91600401613ca4565b60206040518083038186803b15801561206457600080fd5b505afa158015612078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061209c9190810190612c2d565b905060ff85166120c7576120bd83600a0154826001600160601b0316612165565b600a84015561211d565b8460ff16600114156120f4576120ea8360090154826001600160601b0316612165565b600984015561211d565b8460ff166002141561211d5761211783600b0154826001600160601b0316612165565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b60008282018381101561215e5760405162461bcd60e51b815260040161078590613fb7565b6000828211156121ac5760405162461bcd60e51b815260040161078590614097565b50900390565b6008546040516001600160a01b039091169063f2b06537906121e09088908890889088908890602001613cb2565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016122129190613d9a565b60206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122629190810190612a86565b1561227f5760405162461bcd60e51b815260040161078590613e97565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f901906122b79088908890889088908890600401613cb2565b602060405180830381600087803b1580156122d157600080fd5b505af11580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123099190810190612aa4565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156123e2579160200282015b828111156123e257825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906123ad565b506123ee92915061250b565b5090565b82805482825590600052602060002090810192821561242d579160200282015b8281111561242d578251825591602001919060010190612412565b506123ee92915061252f565b828054828255906000526020600020908101928215612486579160200282015b828111156124865782518051612476918491602090910190612549565b5091602001919060010190612459565b506123ee9291506125b6565b8280548282559060005260206000209081019282156124df579160200282015b828111156124df57825180516124cf918491602090910190612549565b50916020019190600101906124b2565b506123ee9291506125d9565b604080516060810182526000808252602082018190529181019190915290565b611f7191905b808211156123ee5780546001600160a01b0319168155600101612511565b611f7191905b808211156123ee5760008155600101612535565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061258a57805160ff191683800117855561242d565b8280016001018555821561242d579182018281111561242d578251825591602001919060010190612412565b611f7191905b808211156123ee5760006125d082826125fc565b506001016125bc565b611f7191905b808211156123ee5760006125f382826125fc565b506001016125df565b50805460018160011615610100020316600290046000825580601f106126225750612640565b601f016020900490600052602060002090810190612640919061252f565b50565b8035611ca9816143ab565b600082601f83011261265f57600080fd5b813561267261266d82614297565b614270565b9150818183526020840193506020810190508385602084028201111561269757600080fd5b60005b838110156126c357816126ad8882612643565b845250602092830192919091019060010161269a565b5050505092915050565b600082601f8301126126de57600080fd5b81356126ec61266d82614297565b81815260209384019390925082018360005b838110156126c357813586016127148882612818565b84525060209283019291909101906001016126fe565b600082601f83011261273b57600080fd5b813561274961266d82614297565b81815260209384019390925082018360005b838110156126c357813586016127718882612818565b845250602092830192919091019060010161275b565b600082601f83011261279857600080fd5b81356127a661266d82614297565b915081818352602084019350602081019050838560208402820111156127cb57600080fd5b60005b838110156126c357816127e18882612802565b84525060209283019291909101906001016127ce565b8051611ca9816143bf565b8035611ca9816143c8565b8051611ca9816143c8565b600082601f83011261282957600080fd5b813561283761266d826142b8565b9150808252602083016020830185838301111561285357600080fd5b61285e83828461435f565b50505092915050565b600082601f83011261287857600080fd5b815161288661266d826142b8565b915080825260208301602083018583830111156128a257600080fd5b61285e83828461436b565b60008083601f8401126128bf57600080fd5b50813567ffffffffffffffff8111156128d757600080fd5b6020830191508360018202830111156128ef57600080fd5b9250929050565b8035611ca9816143d1565b8051611ca9816143da565b60006020828403121561291e57600080fd5b600061292a8484612643565b949350505050565b600080600080600060a0868803121561294a57600080fd5b60006129568888612643565b955050602061296788828901612643565b945050604061297888828901612802565b935050606061298988828901612802565b925050608061299a88828901612802565b9150509295509295909350565b600080600080600060a086880312156129bf57600080fd5b853567ffffffffffffffff8111156129d657600080fd5b6129e28882890161264e565b955050602086013567ffffffffffffffff8111156129ff57600080fd5b612a0b88828901612787565b945050604086013567ffffffffffffffff811115612a2857600080fd5b612a348882890161272a565b935050606086013567ffffffffffffffff811115612a5157600080fd5b612a5d888289016126cd565b925050608086013567ffffffffffffffff811115612a7a57600080fd5b61299a88828901612818565b600060208284031215612a9857600080fd5b600061292a84846127f7565b600060208284031215612ab657600080fd5b600061292a848461280d565b600060208284031215612ad457600080fd5b815167ffffffffffffffff811115612aeb57600080fd5b61292a84828501612867565b600060208284031215612b0957600080fd5b600061292a8484612802565b60008060408385031215612b2857600080fd5b6000612b348585612802565b9250506020612b4585828601612643565b9150509250929050565b60008060408385031215612b6257600080fd5b6000612b6e8585612802565b9250506020612b45858286016128f6565b60008060008060608587031215612b9557600080fd5b6000612ba18787612802565b9450506020612bb2878288016128f6565b935050604085013567ffffffffffffffff811115612bcf57600080fd5b612bdb878288016128ad565b95989497509550505050565b600080600080600060a08688031215612bff57600080fd5b6000612c0b8888612802565b9550506020612c1c888289016128f6565b9450506040612978888289016128f6565b600060208284031215612c3f57600080fd5b600061292a8484612901565b6000612c578383612c86565b505060200190565b600061215e8383612e28565b6000612c578383612e0e565b612c8081614337565b82525050565b612c80816142ff565b6000612c9a826142f2565b612ca481856142f6565b9350612caf836142e0565b8060005b83811015612cdd578151612cc78882612c4b565b9750612cd2836142e0565b925050600101612cb3565b509495945050505050565b6000612cf3826142f2565b612cfd81856142f6565b935083602082028501612d0f856142e0565b8060005b85811015612d495784840389528151612d2c8582612c5f565b9450612d37836142e0565b60209a909a0199925050600101612d13565b5091979650505050505050565b6000612d61826142f2565b612d6b81856142f6565b935083602082028501612d7d856142e0565b8060005b85811015612d495784840389528151612d9a8582612c5f565b9450612da5836142e0565b60209a909a0199925050600101612d81565b6000612dc2826142f2565b612dcc81856142f6565b9350612dd7836142e0565b8060005b83811015612cdd578151612def8882612c6b565b9750612dfa836142e0565b925050600101612ddb565b612c808161430a565b612c8081611f71565b612c80612e2382611f71565b611f71565b6000612e33826142f2565b612e3d81856142f6565b9350612e4d81856020860161436b565b612e5681614397565b9093019392505050565b600081546001811660008114612e7d5760018114612ea357612ee2565b607f6002830416612e8e81876142f6565b60ff1984168152955050602085019250612ee2565b60028204612eb181876142f6565b9550612ebc856142e6565b60005b82811015612edb57815488820152600190910190602001612ebf565b8701945050505b505092915050565b612c808161433e565b612c8081614349565b6000612f0883856142f6565b9350612f1583858461435f565b612e5683614397565b6000612f2b6032836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000612f7f602883610f8a565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000612fc96033836142f6565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b600061301e602a836142f6565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b600061306a6055836142f6565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b60006130e7602b836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b60006131346033836142f6565b6000805160206143e483398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613177602a836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006131c36031836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b6000613216600283610f8a565b61190160f01b815260020192915050565b60006132346036836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b600061328c6031836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006132df6034836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b60006133356034836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b600061338b6035836142f6565b6000805160206143e48339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b60006133d06045836142f6565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061343d602f836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b600061348e602f836142f6565b6000805160206143e483398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006134cd6044836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006135396025836142f6565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b60006135806040836142f6565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b60006135df602e836142f6565b6000805160206143e483398151915281526d696420756e69206164647265737360901b602082015260400192915050565b600061361d6044836142f6565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b60006136896011836142f6565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b60006136b6604383610f8a565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006137216030836142f6565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613773602c836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b60006137c1602e836142f6565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613811602f836142f6565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b60006138626028836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b60006138ac6059836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b60006139316058836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611ca96000836142f6565b60006139c36024836142f6565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b6000613a09603f836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613a686036836142f6565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613ac06030836142f6565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613b126029836142f6565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613b5d6030836142f6565b6000805160206143e483398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613b9d6015836142f6565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b80516060830190613bd28482612e05565b506020820151613be56020850182613bfe565b506040820151613bf86040850182613c10565b50505050565b612c8081614325565b612c8081614354565b612c808161432b565b6000611ca982612f72565b6000613c2f82613209565b9150613c3b8285612e17565b602082019150613c4b8284612e17565b5060200192915050565b6000611ca9826136a9565b60208101611ca98284612c86565b60408101613c7c8285612c77565b61215e6020830184612e0e565b60408101613c978285612c86565b61215e6020830184612c86565b60408101613c7c8285612c86565b60a08101613cc08288612c86565b613ccd6020830187612e0e565b8181036040830152613cdf8186612e28565b90508181036060830152613cf38185612e28565b9050613d026080830184612e0e565b9695505050505050565b60a08101613d1a8288612c86565b613d276020830187612e0e565b8181036040830152613d398186612e60565b90508181036060830152613cf38185612e60565b60808082528101613d5e8187612c8f565b90508181036020830152613d728186612db7565b90508181036040830152613d868185612d56565b90508181036060830152613d028184612ce8565b60208101611ca98284612e0e565b60808101613db68287612e0e565b613dc36020830186612e0e565b613dd06040830185612e0e565b6119b16060830184612c86565b60608101613deb8286612e0e565b613df86020830185612e0e565b61292a6040830184613bfe565b60808101613e138287612e0e565b613e206020830186613bfe565b613e2d6040830185612e0e565b6119b16060830184612e0e565b60208101611ca98284612eea565b60208101611ca98284612ef3565b6020808252810161215e8184612e28565b60208082528101611ca981612f1e565b60208082528101611ca981612fbc565b60208082528101611ca981613011565b60208082528101611ca98161305d565b60208082528101611ca9816130da565b60208082528101611ca981613127565b60208082528101611ca98161316a565b60208082528101611ca9816131b6565b60208082528101611ca981613227565b60208082528101611ca98161327f565b60208082528101611ca9816132d2565b60208082528101611ca981613328565b60208082528101611ca98161337e565b60208082528101611ca9816133c3565b60208082528101611ca981613430565b60208082528101611ca981613481565b60208082528101611ca9816134c0565b60208082528101611ca98161352c565b60208082528101611ca981613573565b60208082528101611ca9816135d2565b60208082528101611ca981613610565b60208082528101611ca98161367c565b60208082528101611ca981613714565b60208082528101611ca981613766565b60208082528101611ca9816137b4565b60208082528101611ca981613804565b60208082528101611ca981613855565b60208082528101611ca98161389f565b60208082528101611ca981613924565b60208082528101611ca9816139b6565b60208082528101611ca9816139fc565b60208082528101611ca981613a5b565b60208082528101611ca981613ab3565b60208082528101611ca981613b05565b60208082528101611ca981613b50565b60208082528101611ca981613b90565b60608101611ca98284613bc1565b61012081016140c4828c612e0e565b6140d1602083018b612c77565b81810360408301526140e3818a612c8f565b905081810360608301526140f78189612db7565b9050818103608083015261410b8188612d56565b905081810360a083015261411f8187612ce8565b905061412e60c0830186612e0e565b61413b60e0830185612e0e565b81810361010083015261414e8184612e28565b9b9a5050505050505050505050565b610140810161416c828d612e0e565b614179602083018c612c86565b614186604083018b612e0e565b614193606083018a612e0e565b6141a06080830189612e0e565b6141ad60a0830188612e0e565b6141ba60c0830187612e0e565b6141c760e0830186612e0e565b6141d5610100830185612e05565b61414e610120830184612e05565b60408101613c7c8285612e0e565b608081016141ff8288612e0e565b61420c6020830187613bfe565b6142196040830186613c07565b818103606083015261422c818486612efc565b979650505050505050565b608081016142458286612e0e565b6142526020830185613bfe565b61425f6040830184613c07565b81810360608301526119b1816139a9565b60405181810167ffffffffffffffff8111828210171561428f57600080fd5b604052919050565b600067ffffffffffffffff8211156142ae57600080fd5b5060209081020190565b600067ffffffffffffffff8211156142cf57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611ca982614319565b151590565b80610f8a816143a1565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611ca9825b6000611ca9826142ff565b6000611ca98261430f565b6000611ca98261432b565b82818337506000910152565b60005b8381101561438657818101518382015260200161436e565b83811115613bf85750506000910152565b601f01601f191690565b6008811061264057fe5b6143b4816142ff565b811461264057600080fd5b6143b48161430a565b6143b481611f71565b6143b481614325565b6143b48161432b56fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a72315820fd5e4dfa59d77539d20e188747d363e52f12f12d64fd3804890ced5f77dbb1066c6578706572696d656e74616cf564736f6c63430005100040
Deployed Bytecode
0x60806040526004361061023b5760003560e01c8063791f5d231161012e578063da95691a116100ab578063e9c714f21161006f578063e9c714f214610659578063edc9af951461066e578063f851a44014610683578063fc4eee4214610698578063fe0d94c1146106ad5761023b565b8063da95691a146105c2578063ddf0b009146105e2578063deaaa7cc14610602578063e23a9a5214610617578063e48083fe146106445761023b565b8063b58131b0116100f2578063b58131b014610536578063b71d1a0c1461054b578063d13f90b41461056b578063d33219b41461058b578063da35c664146105ad5761023b565b8063791f5d23146104c25780637b3c71d3146104d75780637bdbe4d0146104f7578063a64e024a1461050c578063b1126263146105215761023b565b806325fd935a116101bc5780633e4f49e6116101805780633e4f49e61461042057806340e58ee51461044d578063501b6ad31461046d578063567813881461048d5780635c60da1b146104ad5761023b565b806325fd935a146103845780632678224714610399578063328dd982146103bb5780633932abb1146103eb5780633bccf4fd146104005761023b565b806317ba1b8b1161020357806317ba1b8b146103055780631dfb1b5a1461032557806320606b7014610345578063215809ca1461035a57806324bc1a641461036f5761023b565b8063013cf08b1461024057806302a251a31461027f57806306fdde03146102a15780630ea2d98c146102c357806317977c61146102e5575b600080fd5b34801561024c57600080fd5b5061026061025b366004612af7565b6106c0565b6040516102769a9998979695949392919061415d565b60405180910390f35b34801561028b57600080fd5b50610294610723565b6040516102769190613d9a565b3480156102ad57600080fd5b506102b6610729565b6040516102769190613e56565b3480156102cf57600080fd5b506102e36102de366004612af7565b61075b565b005b3480156102f157600080fd5b5061029461030036600461290c565b610805565b34801561031157600080fd5b506102e3610320366004612af7565b610817565b34801561033157600080fd5b506102e3610340366004612af7565b6108bc565b34801561035157600080fd5b5061029461094f565b34801561036657600080fd5b50610294610966565b34801561037b57600080fd5b5061029461096c565b34801561039057600080fd5b5061029461097b565b3480156103a557600080fd5b506103ae61098a565b6040516102769190613c60565b3480156103c757600080fd5b506103db6103d6366004612af7565b610999565b6040516102769493929190613d4d565b3480156103f757600080fd5b50610294610c28565b34801561040c57600080fd5b506102e361041b366004612be7565b610c2e565b34801561042c57600080fd5b5061044061043b366004612af7565b610e08565b6040516102769190613e48565b34801561045957600080fd5b506102e3610468366004612af7565b610f8f565b34801561047957600080fd5b506102e3610488366004612af7565b6111e3565b34801561049957600080fd5b506102e36104a8366004612b4f565b611293565b3480156104b957600080fd5b506103ae6112dd565b3480156104ce57600080fd5b506102946112ec565b3480156104e357600080fd5b506102e36104f2366004612b7f565b6112fa565b34801561050357600080fd5b5061029461134a565b34801561051857600080fd5b5061029461134f565b34801561052d57600080fd5b50610294611356565b34801561054257600080fd5b5061029461135c565b34801561055757600080fd5b506102e361056636600461290c565b611362565b34801561057757600080fd5b506102e3610586366004612932565b6113df565b34801561059757600080fd5b506105a061155d565b6040516102769190613e3a565b3480156105b957600080fd5b5061029461156c565b3480156105ce57600080fd5b506102946105dd3660046129a7565b611572565b3480156105ee57600080fd5b506102e36105fd366004612af7565b6119ba565b34801561060e57600080fd5b50610294611c36565b34801561062357600080fd5b50610637610632366004612b15565b611c42565b60405161027691906140a7565b34801561065057600080fd5b50610294611caf565b34801561066557600080fd5b506102e3611cb4565b34801561067a57600080fd5b506105a0611d92565b34801561068f57600080fd5b506103ae611da1565b3480156106a457600080fd5b50610294611db0565b6102e36106bb366004612af7565b611db6565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806016815260200175556e697377617020476f7665726e6f7220427261766f60501b81525081565b6000546001600160a01b0316331461078e5760405162461bcd60e51b815260040161078590613ea7565b60405180910390fd5b61168081101580156107a3575062013b008111155b6107bf5760405162461bcd60e51b815260040161078590613ee7565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906107f990839085906141e3565b60405180910390a15050565b600b6020526000908152604090205481565b6000546001600160a01b031633146108415760405162461bcd60e51b815260040161078590614067565b69d3c21bcecceda1000000811015801561086657506a084595161401484a0000008111155b6108825760405162461bcd60e51b815260040161078590613f87565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906107f990839085906141e3565b6000546001600160a01b031633146108e65760405162461bcd60e51b815260040161078590613ec7565b600181101580156108f95750619d808111155b6109155760405162461bcd60e51b815260040161078590613f17565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906107f990839085906141e3565b60405161095b90613c55565b604051809103902081565b61168081565b6a211654585005212800000081565b6a084595161401484a00000081565b6001546001600160a01b031681565b6060806060806000600a600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610a1b57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109fd575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610a6d57602002820191906000526020600020905b815481526020019060010190808311610a59575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610b405760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610b2c5780601f10610b0157610100808354040283529160200191610b2c565b820191906000526020600020905b815481529060010190602001808311610b0f57829003601f168201915b505050505081526020019060010190610a95565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610c125760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610bfe5780601f10610bd357610100808354040283529160200191610bfe565b820191906000526020600020905b815481529060010190602001808311610be157829003601f168201915b505050505081526020019060010190610b67565b5050505090509450945094509450509193509193565b60035481565b6000604051610c3c90613c55565b604080519182900382208282019091526016825275556e697377617020476f7665726e6f7220427261766f60501b6020909201919091527f998ff3fa28648fa5c0f0291777159421a8f3c0c8369ab1ded6c225bf6a3d65e0610c9c611f6f565b30604051602001610cb09493929190613da8565b6040516020818303038152906040528051906020012090506000604051610cd690613c19565b604051908190038120610cef9189908990602001613ddd565b60405160208183030381529060405280519060200120905060008282604051602001610d1c929190613c24565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610d599493929190613e05565b6020604051602081039080840390855afa158015610d7b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610dae5760405162461bcd60e51b815260040161078590613f47565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610de6858e8e611f74565b604051610df593929190614237565b60405180910390a2505050505050505050565b60008160075410158015610e1d575060065482115b610e395760405162461bcd60e51b815260040161078590614077565b6000828152600a60205260409020600c81015460ff1615610e5e576002915050610f8a565b80600701544311610e73576000915050610f8a565b80600801544311610e88576001915050610f8a565b80600a01548160090154111580610ead57506a21165458500521280000008160090154105b15610ebc576003915050610f8a565b6002810154610ecf576004915050610f8a565b600c810154610100900460ff1615610eeb576007915050610f8a565b6002810154600854604080516360d143f160e11b81529051610f7493926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610f3757600080fd5b505afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f6f9190810190612aa4565b612165565b4210610f84576006915050610f8a565b60059150505b919050565b6007610f9a82610e08565b6007811115610fa557fe5b1415610fc35760405162461bcd60e51b815260040161078590614057565b6000818152600a6020526040902060018101546001600160a01b031633148061108b57506005546009546001838101546001600160a01b039283169263782d6fe19291169061101390439061218a565b6040518363ffffffff1660e01b8152600401611030929190613ca4565b60206040518083038186803b15801561104857600080fd5b505afa15801561105c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110809190810190612c2d565b6001600160601b0316105b6110a75760405162461bcd60e51b815260040161078590613ff7565b600c8101805460ff1916600117905560005b60038201548110156111b3576008546003830180546001600160a01b039092169163591fcdfe9190849081106110eb57fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061111357fe5b906000526020600020015485600501858154811061112d57fe5b9060005260206000200186600601868154811061114657fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611175959493929190613d0c565b600060405180830381600087803b15801561118f57600080fd5b505af11580156111a3573d6000803e3d6000fd5b5050600190920191506110b99050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516107f99190613d9a565b6000546001600160a01b0316331461120d5760405162461bcd60e51b815260040161078590614037565b6006541561122d5760405162461bcd60e51b815260040161078590613fc7565b600681905560085460408051630e18b68160e01b815290516001600160a01b0390921691630e18b6819160048082019260009290919082900301818387803b15801561127857600080fd5b505af115801561128c573d6000803e3d6000fd5b5050505050565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836112c2848383611f74565b6040516112d193929190614237565b60405180910390a25050565b6002546001600160a01b031681565b69d3c21bcecceda100000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48585611329848383611f74565b868660405161133c9594939291906141f1565b60405180910390a250505050565b600a81565b62013b0081565b619d8081565b60055481565b6000546001600160a01b0316331461138c5760405162461bcd60e51b815260040161078590613e87565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9906107f99083908590613c89565b6008546001600160a01b0316156114085760405162461bcd60e51b815260040161078590613e77565b6000546001600160a01b031633146114325760405162461bcd60e51b815260040161078590613f77565b6001600160a01b0385166114585760405162461bcd60e51b815260040161078590613eb7565b6001600160a01b03841661147e5760405162461bcd60e51b815260040161078590613f97565b6116808310158015611493575062013b008311155b6114af5760405162461bcd60e51b815260040161078590614087565b600182101580156114c25750619d808211155b6114de5760405162461bcd60e51b815260040161078590613f57565b69d3c21bcecceda1000000811015801561150357506a084595161401484a0000008111155b61151f5760405162461bcd60e51b815260040161078590613f27565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6000600654600014156115975760405162461bcd60e51b815260040161078590613ed7565b6005546009546001600160a01b031663782d6fe1336115b743600161218a565b6040518363ffffffff1660e01b81526004016115d4929190613c6e565b60206040518083038186803b1580156115ec57600080fd5b505afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116249190810190612c2d565b6001600160601b03161161164a5760405162461bcd60e51b815260040161078590614047565b8451865114801561165c575083518651145b8015611669575082518651145b6116855760405162461bcd60e51b815260040161078590613f67565b85516116a35760405162461bcd60e51b815260040161078590613fd7565b600a865111156116c55760405162461bcd60e51b815260040161078590614007565b336000908152600b602052604090205480156117425760006116e682610e08565b905060018160078111156116f657fe5b14156117145760405162461bcd60e51b815260040161078590614027565b600081600781111561172257fe5b14156117405760405162461bcd60e51b815260040161078590614017565b505b600061175043600354612165565b9050600061176082600454612165565b6007805460010190559050611773612311565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301908051906020019061185d92919061238d565b50608082015180516118799160048401916020909101906123f2565b5060a08201518051611895916005840191602090910190612439565b5060c082015180516118b1916006840191602090910190612492565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516119a2999897969594939291906140b5565b60405180910390a15193505050505b95945050505050565b60046119c582610e08565b60078111156119d057fe5b146119ed5760405162461bcd60e51b815260040161078590613fa7565b6000818152600a602090815260408083206008548251630d48571f60e31b81529251919493611a479342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610f3757600080fd5b905060005b6003830154811015611bef57611be7836003018281548110611a6a57fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611a9257fe5b9060005260206000200154856005018481548110611aac57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b3a5780601f10611b0f57610100808354040283529160200191611b3a565b820191906000526020600020905b815481529060010190602001808311611b1d57829003601f168201915b5050505050866006018581548110611b4e57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b5050505050866121b2565b600101611a4c565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611c2990859084906141e3565b60405180910390a1505050565b60405161095b90613c19565b611c4a6124eb565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611ccd57503315155b611ce95760405162461bcd60e51b815260040161078590613fe7565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611d4d928692911690613c89565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916107f99184916001600160a01b031690613c89565b6009546001600160a01b031681565b6000546001600160a01b031681565b60065481565b6005611dc182610e08565b6007811115611dcc57fe5b14611de95760405162461bcd60e51b815260040161078590613f37565b6000818152600a60205260408120600c8101805461ff001916610100179055905b6003820154811015611f3f576008546004830180546001600160a01b0390921691630825f38f919084908110611e3c57fe5b9060005260206000200154846003018481548110611e5657fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611e7e57fe5b9060005260206000200154866005018681548110611e9857fe5b90600052602060002001876006018781548110611eb157fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611ee0959493929190613d0c565b6000604051808303818588803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611f369190810190612ac2565b50600101611e0a565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516107f99190613d9a565b465b90565b60006001611f8184610e08565b6007811115611f8c57fe5b14611fa95760405162461bcd60e51b815260040161078590613ef7565b60028260ff161115611fcd5760405162461bcd60e51b815260040161078590613e67565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156120165760405162461bcd60e51b815260040161078590613f07565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe19161204c918b91600401613ca4565b60206040518083038186803b15801561206457600080fd5b505afa158015612078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061209c9190810190612c2d565b905060ff85166120c7576120bd83600a0154826001600160601b0316612165565b600a84015561211d565b8460ff16600114156120f4576120ea8360090154826001600160601b0316612165565b600984015561211d565b8460ff166002141561211d5761211783600b0154826001600160601b0316612165565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b60008282018381101561215e5760405162461bcd60e51b815260040161078590613fb7565b6000828211156121ac5760405162461bcd60e51b815260040161078590614097565b50900390565b6008546040516001600160a01b039091169063f2b06537906121e09088908890889088908890602001613cb2565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016122129190613d9a565b60206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122629190810190612a86565b1561227f5760405162461bcd60e51b815260040161078590613e97565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f901906122b79088908890889088908890600401613cb2565b602060405180830381600087803b1580156122d157600080fd5b505af11580156122e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123099190810190612aa4565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156123e2579160200282015b828111156123e257825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906123ad565b506123ee92915061250b565b5090565b82805482825590600052602060002090810192821561242d579160200282015b8281111561242d578251825591602001919060010190612412565b506123ee92915061252f565b828054828255906000526020600020908101928215612486579160200282015b828111156124865782518051612476918491602090910190612549565b5091602001919060010190612459565b506123ee9291506125b6565b8280548282559060005260206000209081019282156124df579160200282015b828111156124df57825180516124cf918491602090910190612549565b50916020019190600101906124b2565b506123ee9291506125d9565b604080516060810182526000808252602082018190529181019190915290565b611f7191905b808211156123ee5780546001600160a01b0319168155600101612511565b611f7191905b808211156123ee5760008155600101612535565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061258a57805160ff191683800117855561242d565b8280016001018555821561242d579182018281111561242d578251825591602001919060010190612412565b611f7191905b808211156123ee5760006125d082826125fc565b506001016125bc565b611f7191905b808211156123ee5760006125f382826125fc565b506001016125df565b50805460018160011615610100020316600290046000825580601f106126225750612640565b601f016020900490600052602060002090810190612640919061252f565b50565b8035611ca9816143ab565b600082601f83011261265f57600080fd5b813561267261266d82614297565b614270565b9150818183526020840193506020810190508385602084028201111561269757600080fd5b60005b838110156126c357816126ad8882612643565b845250602092830192919091019060010161269a565b5050505092915050565b600082601f8301126126de57600080fd5b81356126ec61266d82614297565b81815260209384019390925082018360005b838110156126c357813586016127148882612818565b84525060209283019291909101906001016126fe565b600082601f83011261273b57600080fd5b813561274961266d82614297565b81815260209384019390925082018360005b838110156126c357813586016127718882612818565b845250602092830192919091019060010161275b565b600082601f83011261279857600080fd5b81356127a661266d82614297565b915081818352602084019350602081019050838560208402820111156127cb57600080fd5b60005b838110156126c357816127e18882612802565b84525060209283019291909101906001016127ce565b8051611ca9816143bf565b8035611ca9816143c8565b8051611ca9816143c8565b600082601f83011261282957600080fd5b813561283761266d826142b8565b9150808252602083016020830185838301111561285357600080fd5b61285e83828461435f565b50505092915050565b600082601f83011261287857600080fd5b815161288661266d826142b8565b915080825260208301602083018583830111156128a257600080fd5b61285e83828461436b565b60008083601f8401126128bf57600080fd5b50813567ffffffffffffffff8111156128d757600080fd5b6020830191508360018202830111156128ef57600080fd5b9250929050565b8035611ca9816143d1565b8051611ca9816143da565b60006020828403121561291e57600080fd5b600061292a8484612643565b949350505050565b600080600080600060a0868803121561294a57600080fd5b60006129568888612643565b955050602061296788828901612643565b945050604061297888828901612802565b935050606061298988828901612802565b925050608061299a88828901612802565b9150509295509295909350565b600080600080600060a086880312156129bf57600080fd5b853567ffffffffffffffff8111156129d657600080fd5b6129e28882890161264e565b955050602086013567ffffffffffffffff8111156129ff57600080fd5b612a0b88828901612787565b945050604086013567ffffffffffffffff811115612a2857600080fd5b612a348882890161272a565b935050606086013567ffffffffffffffff811115612a5157600080fd5b612a5d888289016126cd565b925050608086013567ffffffffffffffff811115612a7a57600080fd5b61299a88828901612818565b600060208284031215612a9857600080fd5b600061292a84846127f7565b600060208284031215612ab657600080fd5b600061292a848461280d565b600060208284031215612ad457600080fd5b815167ffffffffffffffff811115612aeb57600080fd5b61292a84828501612867565b600060208284031215612b0957600080fd5b600061292a8484612802565b60008060408385031215612b2857600080fd5b6000612b348585612802565b9250506020612b4585828601612643565b9150509250929050565b60008060408385031215612b6257600080fd5b6000612b6e8585612802565b9250506020612b45858286016128f6565b60008060008060608587031215612b9557600080fd5b6000612ba18787612802565b9450506020612bb2878288016128f6565b935050604085013567ffffffffffffffff811115612bcf57600080fd5b612bdb878288016128ad565b95989497509550505050565b600080600080600060a08688031215612bff57600080fd5b6000612c0b8888612802565b9550506020612c1c888289016128f6565b9450506040612978888289016128f6565b600060208284031215612c3f57600080fd5b600061292a8484612901565b6000612c578383612c86565b505060200190565b600061215e8383612e28565b6000612c578383612e0e565b612c8081614337565b82525050565b612c80816142ff565b6000612c9a826142f2565b612ca481856142f6565b9350612caf836142e0565b8060005b83811015612cdd578151612cc78882612c4b565b9750612cd2836142e0565b925050600101612cb3565b509495945050505050565b6000612cf3826142f2565b612cfd81856142f6565b935083602082028501612d0f856142e0565b8060005b85811015612d495784840389528151612d2c8582612c5f565b9450612d37836142e0565b60209a909a0199925050600101612d13565b5091979650505050505050565b6000612d61826142f2565b612d6b81856142f6565b935083602082028501612d7d856142e0565b8060005b85811015612d495784840389528151612d9a8582612c5f565b9450612da5836142e0565b60209a909a0199925050600101612d81565b6000612dc2826142f2565b612dcc81856142f6565b9350612dd7836142e0565b8060005b83811015612cdd578151612def8882612c6b565b9750612dfa836142e0565b925050600101612ddb565b612c808161430a565b612c8081611f71565b612c80612e2382611f71565b611f71565b6000612e33826142f2565b612e3d81856142f6565b9350612e4d81856020860161436b565b612e5681614397565b9093019392505050565b600081546001811660008114612e7d5760018114612ea357612ee2565b607f6002830416612e8e81876142f6565b60ff1984168152955050602085019250612ee2565b60028204612eb181876142f6565b9550612ebc856142e6565b60005b82811015612edb57815488820152600190910190602001612ebf565b8701945050505b505092915050565b612c808161433e565b612c8081614349565b6000612f0883856142f6565b9350612f1583858461435f565b612e5683614397565b6000612f2b6032836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000612f7f602883610f8a565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b6000612fc96033836142f6565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b600061301e602a836142f6565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b600061306a6055836142f6565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b60006130e7602b836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b60006131346033836142f6565b6000805160206143e483398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613177602a836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006131c36031836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b6000613216600283610f8a565b61190160f01b815260020192915050565b60006132346036836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b600061328c6031836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006132df6034836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b60006133356034836142f6565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b600061338b6035836142f6565b6000805160206143e48339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b60006133d06045836142f6565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061343d602f836142f6565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b600061348e602f836142f6565b6000805160206143e483398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006134cd6044836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006135396025836142f6565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b60006135806040836142f6565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b60006135df602e836142f6565b6000805160206143e483398151915281526d696420756e69206164647265737360901b602082015260400192915050565b600061361d6044836142f6565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b60006136896011836142f6565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b60006136b6604383610f8a565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006137216030836142f6565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613773602c836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b60006137c1602e836142f6565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613811602f836142f6565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b60006138626028836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b60006138ac6059836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b60006139316058836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611ca96000836142f6565b60006139c36024836142f6565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b6000613a09603f836142f6565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613a686036836142f6565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613ac06030836142f6565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613b126029836142f6565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613b5d6030836142f6565b6000805160206143e483398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613b9d6015836142f6565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b80516060830190613bd28482612e05565b506020820151613be56020850182613bfe565b506040820151613bf86040850182613c10565b50505050565b612c8081614325565b612c8081614354565b612c808161432b565b6000611ca982612f72565b6000613c2f82613209565b9150613c3b8285612e17565b602082019150613c4b8284612e17565b5060200192915050565b6000611ca9826136a9565b60208101611ca98284612c86565b60408101613c7c8285612c77565b61215e6020830184612e0e565b60408101613c978285612c86565b61215e6020830184612c86565b60408101613c7c8285612c86565b60a08101613cc08288612c86565b613ccd6020830187612e0e565b8181036040830152613cdf8186612e28565b90508181036060830152613cf38185612e28565b9050613d026080830184612e0e565b9695505050505050565b60a08101613d1a8288612c86565b613d276020830187612e0e565b8181036040830152613d398186612e60565b90508181036060830152613cf38185612e60565b60808082528101613d5e8187612c8f565b90508181036020830152613d728186612db7565b90508181036040830152613d868185612d56565b90508181036060830152613d028184612ce8565b60208101611ca98284612e0e565b60808101613db68287612e0e565b613dc36020830186612e0e565b613dd06040830185612e0e565b6119b16060830184612c86565b60608101613deb8286612e0e565b613df86020830185612e0e565b61292a6040830184613bfe565b60808101613e138287612e0e565b613e206020830186613bfe565b613e2d6040830185612e0e565b6119b16060830184612e0e565b60208101611ca98284612eea565b60208101611ca98284612ef3565b6020808252810161215e8184612e28565b60208082528101611ca981612f1e565b60208082528101611ca981612fbc565b60208082528101611ca981613011565b60208082528101611ca98161305d565b60208082528101611ca9816130da565b60208082528101611ca981613127565b60208082528101611ca98161316a565b60208082528101611ca9816131b6565b60208082528101611ca981613227565b60208082528101611ca98161327f565b60208082528101611ca9816132d2565b60208082528101611ca981613328565b60208082528101611ca98161337e565b60208082528101611ca9816133c3565b60208082528101611ca981613430565b60208082528101611ca981613481565b60208082528101611ca9816134c0565b60208082528101611ca98161352c565b60208082528101611ca981613573565b60208082528101611ca9816135d2565b60208082528101611ca981613610565b60208082528101611ca98161367c565b60208082528101611ca981613714565b60208082528101611ca981613766565b60208082528101611ca9816137b4565b60208082528101611ca981613804565b60208082528101611ca981613855565b60208082528101611ca98161389f565b60208082528101611ca981613924565b60208082528101611ca9816139b6565b60208082528101611ca9816139fc565b60208082528101611ca981613a5b565b60208082528101611ca981613ab3565b60208082528101611ca981613b05565b60208082528101611ca981613b50565b60208082528101611ca981613b90565b60608101611ca98284613bc1565b61012081016140c4828c612e0e565b6140d1602083018b612c77565b81810360408301526140e3818a612c8f565b905081810360608301526140f78189612db7565b9050818103608083015261410b8188612d56565b905081810360a083015261411f8187612ce8565b905061412e60c0830186612e0e565b61413b60e0830185612e0e565b81810361010083015261414e8184612e28565b9b9a5050505050505050505050565b610140810161416c828d612e0e565b614179602083018c612c86565b614186604083018b612e0e565b614193606083018a612e0e565b6141a06080830189612e0e565b6141ad60a0830188612e0e565b6141ba60c0830187612e0e565b6141c760e0830186612e0e565b6141d5610100830185612e05565b61414e610120830184612e05565b60408101613c7c8285612e0e565b608081016141ff8288612e0e565b61420c6020830187613bfe565b6142196040830186613c07565b818103606083015261422c818486612efc565b979650505050505050565b608081016142458286612e0e565b6142526020830185613bfe565b61425f6040830184613c07565b81810360608301526119b1816139a9565b60405181810167ffffffffffffffff8111828210171561428f57600080fd5b604052919050565b600067ffffffffffffffff8211156142ae57600080fd5b5060209081020190565b600067ffffffffffffffff8211156142cf57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611ca982614319565b151590565b80610f8a816143a1565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611ca9825b6000611ca9826142ff565b6000611ca98261430f565b6000611ca98261432b565b82818337506000910152565b60005b8381101561438657818101518382015260200161436e565b83811115613bf85750506000910152565b601f01601f191690565b6008811061264057fe5b6143b4816142ff565b811461264057600080fd5b6143b48161430a565b6143b481611f71565b6143b481614325565b6143b48161432b56fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a72315820fd5e4dfa59d77539d20e188747d363e52f12f12d64fd3804890ced5f77dbb1066c6578706572696d656e74616cf564736f6c63430005100040
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.