ETH Price: $3,465.39 (+2.20%)
Gas: 8 Gwei

Contract

0x35d9f4953748b318f18c30634bA299b237eeDfff
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Cast Vote138910892021-12-28 2:37:11916 days ago1640659031IN
Inverse Finance: Governance
0 ETH0.0035032892.46656884
Execute134242092021-10-15 18:21:08989 days ago1634322068IN
Inverse Finance: Governance
0 ETH0.01457407120.83637148
Queue134063652021-10-12 22:37:55992 days ago1634078275IN
Inverse Finance: Governance
0 ETH0.0158895129.17036173
Cast Vote134061352021-10-12 21:42:22992 days ago1634074942IN
Inverse Finance: Governance
0 ETH0.0055552882.02467884
Cast Vote134053522021-10-12 18:47:50992 days ago1634064470IN
Inverse Finance: Governance
0 ETH0.0062135191.7435425
Cast Vote134044472021-10-12 15:29:24992 days ago1634052564IN
Inverse Finance: Governance
0 ETH0.0048480671.58247258
Cast Vote134041272021-10-12 14:18:58992 days ago1634048338IN
Inverse Finance: Governance
0 ETH0.0059793684.85945111
Cast Vote134037862021-10-12 13:05:50993 days ago1634043950IN
Inverse Finance: Governance
0 ETH0.00794785117.35129047
Cast Vote134036592021-10-12 12:35:14993 days ago1634042114IN
Inverse Finance: Governance
0 ETH0.004430462.87654434
Cast Vote134028512021-10-12 9:35:01993 days ago1634031301IN
Inverse Finance: Governance
0 ETH0.0038754155
Cast Vote134016572021-10-12 4:52:36993 days ago1634014356IN
Inverse Finance: Governance
0 ETH0.0057976779.13611693
Cast Vote134000182021-10-11 22:41:19993 days ago1633992079IN
Inverse Finance: Governance
0 ETH0.00354838105.9030255
Cast Vote134000172021-10-11 22:41:17993 days ago1633992077IN
Inverse Finance: Governance
0 ETH0.00387727115.71880494
Cast Vote134000152021-10-11 22:40:43993 days ago1633992043IN
Inverse Finance: Governance
0 ETH0.0078594116.04530177
Cast Vote133973242021-10-11 12:35:40994 days ago1633955740IN
Inverse Finance: Governance
0 ETH0.0064949488.65360798
Cast Vote133969522021-10-11 11:13:37994 days ago1633950817IN
Inverse Finance: Governance
0 ETH0.0078382476.27426428
Cast Vote133969292021-10-11 11:08:03994 days ago1633950483IN
Inverse Finance: Governance
0 ETH0.0041939657.64182881
Cast Vote133912462021-10-10 13:53:23994 days ago1633874003IN
Inverse Finance: Governance
0 ETH0.0036977154.59740983
Cast Vote133908502021-10-10 12:18:06995 days ago1633868286IN
Inverse Finance: Governance
0 ETH0.0042561758.09532075
Cast Vote133901622021-10-10 9:41:53995 days ago1633858913IN
Inverse Finance: Governance
0 ETH0.0043635759.56119028
Cast Vote133901002021-10-10 9:27:53995 days ago1633858073IN
Inverse Finance: Governance
0 ETH0.0052094971.1077553
Cast Vote133898612021-10-10 8:30:09995 days ago1633854609IN
Inverse Finance: Governance
0 ETH0.0044817661.17444381
Cast Vote133897862021-10-10 8:13:35995 days ago1633853615IN
Inverse Finance: Governance
0 ETH0.0038888253.08099739
Cast Vote133893492021-10-10 6:33:35995 days ago1633847615IN
Inverse Finance: Governance
0 ETH0.0064340695
Cast Vote133893142021-10-10 6:26:07995 days ago1633847167IN
Inverse Finance: Governance
0 ETH0.0058056879.24555823
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
115492932020-12-29 13:46:211280 days ago1609249581
Inverse Finance: Governance
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GovernorAlpha

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : GovernorAlpha.sol
pragma solidity ^0.5.16;
pragma experimental ABIEncoderV2;

import "./Timelock.sol";

contract GovernorAlpha {
    /// @notice The name of this contract
    string public constant name = "Inverse Governor Alpha";

    /// @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
    function quorumVotes() public pure returns (uint) { return 4000e18; } // 4% of INV

    /// @notice The number of votes required in order for a voter to become a proposer
    function proposalThreshold() public pure returns (uint) { return 1000e18; } // 1% of INV

    /// @notice The maximum number of actions that can be included in a proposal
    function proposalMaxOperations() public pure returns (uint) { return 20; } // 10 actions

    /// @notice The delay before voting on a proposal may take place, once proposed
    function votingDelay() public pure returns (uint) { return 1; } // 1 block

    /// @notice The duration of voting on a proposal, in blocks
    function votingPeriod() public pure returns (uint) { return 17280; } // ~3 days in blocks (assuming 15s blocks)

    /// @notice The address of the Protocol Timelock
    Timelock public timelock;

    /// @notice The address of the governance token
    InvInterface public inv;

    /// @notice The total number of proposals
    uint public proposalCount;

    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 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
        bool 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
    }

    /// @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;

    /// @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,bool support)");

    /// @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
    event VoteCast(address voter, uint proposalId, bool support, uint votes);

    /// @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);

    constructor(address inv_) public {
        timelock = new Timelock(address(this), 2 days);
        inv = InvInterface(inv_);
    }

    function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) {
        require(inv.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold(), "GovernorAlpha::propose: proposer votes below proposal threshold");
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorAlpha::propose: proposal function information arity mismatch");
        require(targets.length != 0, "GovernorAlpha::propose: must provide actions");
        require(targets.length <= proposalMaxOperations(), "GovernorAlpha::propose: too many actions");

        uint latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
          ProposalState proposersLatestProposalState = state(latestProposalId);
          require(proposersLatestProposalState != ProposalState.Active, "GovernorAlpha::propose: one live proposal per proposer, found an already active proposal");
          require(proposersLatestProposalState != ProposalState.Pending, "GovernorAlpha::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,
            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;
    }

    function queue(uint proposalId) public {
        require(state(proposalId) == ProposalState.Succeeded, "GovernorAlpha::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++) {
            _queueOrRevert(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta);
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

    function _queueOrRevert(address target, uint value, string memory signature, bytes memory data, uint eta) internal {
        require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorAlpha::_queueOrRevert: proposal action already queued at eta");
        timelock.queueTransaction(target, value, signature, data, eta);
    }

    function execute(uint proposalId) public {
        require(state(proposalId) == ProposalState.Queued, "GovernorAlpha::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(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }
        emit ProposalExecuted(proposalId);
    }

    function cancel(uint proposalId) public {
        ProposalState state = state(proposalId);
        require(state != ProposalState.Executed, "GovernorAlpha::cancel: cannot cancel executed proposal");

        Proposal storage proposal = proposals[proposalId];
        require(inv.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold(), "GovernorAlpha::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);
    }

    function getActions(uint proposalId) public 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);
    }

    function getReceipt(uint proposalId, address voter) public view returns (Receipt memory) {
        return proposals[proposalId].receipts[voter];
    }

    function state(uint proposalId) public view returns (ProposalState) {
        require(proposalCount >= proposalId && proposalId > 0, "GovernorAlpha::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;
        }
    }

    function castVote(uint proposalId, bool support) public {
        return _castVote(msg.sender, proposalId, support);
    }

    function castVoteBySig(uint proposalId, bool support, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), 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), "GovernorAlpha::castVoteBySig: invalid signature");
        return _castVote(signatory, proposalId, support);
    }

    function _castVote(address voter, uint proposalId, bool support) internal {
        require(state(proposalId) == ProposalState.Active, "GovernorAlpha::_castVote: voting is closed");
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(receipt.hasVoted == false, "GovernorAlpha::_castVote: voter already voted");
        uint96 votes = inv.getPriorVotes(voter, proposal.startBlock);

        if (support) {
            proposal.forVotes = add256(proposal.forVotes, votes);
        } else {
            proposal.againstVotes = add256(proposal.againstVotes, votes);
        }

        receipt.hasVoted = true;
        receipt.support = support;
        receipt.votes = votes;

        emit VoteCast(voter, proposalId, support, votes);
    }

    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 getChainId() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

interface InvInterface {
    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);
}

File 2 of 3 : Timelock.sol
pragma solidity ^0.5.16;

import "./SafeMath.sol";

contract Timelock {
    using SafeMath for uint;

    event NewAdmin(address indexed newAdmin);
    event NewPendingAdmin(address indexed newPendingAdmin);
    event NewDelay(uint indexed newDelay);
    event CancelTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature,  bytes data, uint eta);
    event ExecuteTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature,  bytes data, uint eta);
    event QueueTransaction(bytes32 indexed txHash, address indexed target, uint value, string signature, bytes data, uint eta);

    uint public constant GRACE_PERIOD = 14 days;
    uint public constant MINIMUM_DELAY = 2 days;
    uint public constant MAXIMUM_DELAY = 30 days;

    address public admin;
    address public pendingAdmin;
    uint public delay;

    mapping (bytes32 => bool) public queuedTransactions;


    constructor(address admin_, uint delay_) public {
        require(delay_ >= MINIMUM_DELAY, "Timelock::constructor: Delay must exceed minimum delay.");
        require(delay_ <= MAXIMUM_DELAY, "Timelock::setDelay: Delay must not exceed maximum delay.");

        admin = admin_;
        delay = delay_;
    }

    function() external payable { }

    function setDelay(uint delay_) public {
        require(msg.sender == address(this), "Timelock::setDelay: Call must come from Timelock.");
        require(delay_ >= MINIMUM_DELAY, "Timelock::setDelay: Delay must exceed minimum delay.");
        require(delay_ <= MAXIMUM_DELAY, "Timelock::setDelay: Delay must not exceed maximum delay.");
        delay = delay_;

        emit NewDelay(delay);
    }

    function acceptAdmin() public {
        require(msg.sender == pendingAdmin, "Timelock::acceptAdmin: Call must come from pendingAdmin.");
        admin = msg.sender;
        pendingAdmin = address(0);

        emit NewAdmin(admin);
    }

    function setPendingAdmin(address pendingAdmin_) public {
        require(msg.sender == address(this), "Timelock::setPendingAdmin: Call must come from Timelock.");
        pendingAdmin = pendingAdmin_;

        emit NewPendingAdmin(pendingAdmin);
    }

    function queueTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public returns (bytes32) {
        require(msg.sender == admin, "Timelock::queueTransaction: Call must come from admin.");
        require(eta >= getBlockTimestamp().add(delay), "Timelock::queueTransaction: Estimated execution block must satisfy delay.");

        bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
        queuedTransactions[txHash] = true;

        emit QueueTransaction(txHash, target, value, signature, data, eta);
        return txHash;
    }

    function cancelTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public {
        require(msg.sender == admin, "Timelock::cancelTransaction: Call must come from admin.");

        bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
        queuedTransactions[txHash] = false;

        emit CancelTransaction(txHash, target, value, signature, data, eta);
    }

    function executeTransaction(address target, uint value, string memory signature, bytes memory data, uint eta) public returns (bytes memory) {
        require(msg.sender == admin, "Timelock::executeTransaction: Call must come from admin.");

        bytes32 txHash = keccak256(abi.encode(target, value, signature, data, eta));
        require(queuedTransactions[txHash], "Timelock::executeTransaction: Transaction hasn't been queued.");
        require(getBlockTimestamp() >= eta, "Timelock::executeTransaction: Transaction hasn't surpassed time lock.");
        require(getBlockTimestamp() <= eta.add(GRACE_PERIOD), "Timelock::executeTransaction: Transaction is stale.");

        queuedTransactions[txHash] = false;

        bytes memory callData;

        if (bytes(signature).length == 0) {
            callData = data;
        } else {
            callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);
        }

        // solium-disable-next-line security/no-call-value
        (bool success, bytes memory returnData) = target.call.value(value)(callData);
        require(success, "Timelock::executeTransaction: Transaction execution reverted.");

        emit ExecuteTransaction(txHash, target, value, signature, data, eta);

        return returnData;
    }

    function getBlockTimestamp() internal view returns (uint) {
        // solium-disable-next-line security/no-block-members
        return block.timestamp;
    }
}

File 3 of 3 : SafeMath.sol
pragma solidity ^0.5.16;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction underflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot underflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, errorMessage);

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers.
     * Reverts with custom message on division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"inv_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","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":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":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"bool","name":"support","type":"bool"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct GovernorAlpha.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"inv","outputs":[{"internalType":"contract InvInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"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":"pure","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","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":"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":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum GovernorAlpha.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract Timelock","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]

60806040523480156200001157600080fd5b50604051620069af380380620069af833981810160405262000037919081019062000121565b306202a3006040516200004a90620000fc565b620000579291906200016f565b604051809103906000f08015801562000074573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000208565b612021806200498e83390190565b6000815190506200011b81620001ee565b92915050565b6000602082840312156200013457600080fd5b600062000144848285016200010a565b91505092915050565b62000158816200019c565b82525050565b6200016981620001da565b82525050565b60006040820190506200018660008301856200014d565b6200019560208301846200015e565b9392505050565b6000620001a982620001b0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620001e782620001d0565b9050919050565b620001f9816200019c565b81146200020557600080fd5b50565b61477680620002186000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806340e58ee5116100b8578063da35c6641161007c578063da35c66414610374578063da95691a14610392578063ddf0b009146103c2578063deaaa7cc146103de578063e23a9a52146103fc578063fe0d94c11461042c57610142565b806340e58ee5146102e25780634634c61f146102fe5780637bdbe4d01461031a578063b58131b014610338578063d33219b41461035657610142565b806317977c611161010a57806317977c61146101f557806320606b701461022557806324bc1a6414610243578063328dd982146102615780633932abb1146102945780633e4f49e6146102b257610142565b8063013cf08b1461014757806302a251a31461017f578063032d09611461019d57806306fdde03146101bb57806315373e3d146101d9575b600080fd5b610161600480360361015c9190810190612b89565b610448565b60405161017699989796959493929190614157565b60405180910390f35b6101876104d0565b604051610194919061408c565b60405180910390f35b6101a56104da565b6040516101b29190613dde565b60405180910390f35b6101c3610500565b6040516101d09190613e2f565b60405180910390f35b6101f360048036036101ee9190810190612c17565b610539565b005b61020f600480360361020a91908101906129de565b610548565b60405161021c919061408c565b60405180910390f35b61022d610560565b60405161023a9190613d02565b60405180910390f35b61024b610577565b604051610258919061408c565b60405180910390f35b61027b60048036036102769190810190612b89565b610588565b60405161028b9493929190613ca1565b60405180910390f35b61029c610865565b6040516102a9919061408c565b60405180910390f35b6102cc60048036036102c79190810190612b89565b61086e565b6040516102d99190613e14565b60405180910390f35b6102fc60048036036102f79190810190612b89565b610a52565b005b61031860048036036103139190810190612c53565b610d96565b005b610322610f65565b60405161032f919061408c565b60405180910390f35b610340610f6e565b60405161034d919061408c565b60405180910390f35b61035e610f7f565b60405161036b9190613df9565b60405180910390f35b61037c610fa4565b604051610389919061408c565b60405180910390f35b6103ac60048036036103a79190810190612a07565b610faa565b6040516103b9919061408c565b60405180910390f35b6103dc60048036036103d79190810190612b89565b611577565b005b6103e66118c6565b6040516103f39190613d02565b60405180910390f35b61041660048036036104119190810190612bdb565b6118dd565b6040516104239190614071565b60405180910390f35b61044660048036036104419190810190612b89565b6119bf565b005b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600701549080600801549080600901549080600a01549080600b0160009054906101000a900460ff169080600b0160019054906101000a900460ff16905089565b6000614380905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280601681526020017f496e766572736520476f7665726e6f7220416c7068610000000000000000000081525081565b610544338383611bf2565b5050565b60046020528060005260406000206000915090505481565b60405161056c90613b1e565b604051809103902081565b600068d8d726b7177a800000905090565b6060806060806000600360008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561063657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105ec575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561068857602002820191906000526020600020905b815481526020019060010190808311610674575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561076c578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050815260200190600101906106b0565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561084f578382906000526020600020018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561083b5780601f106108105761010080835404028352916020019161083b565b820191906000526020600020905b81548152906001019060200180831161081e57829003601f168201915b505050505081526020019060010190610793565b5050505090509450945094509450509193509193565b60006001905090565b600081600254101580156108825750600082115b6108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890613e91565b60405180910390fd5b600060036000848152602001908152602001600020905080600b0160009054906101000a900460ff16156108f9576002915050610a4d565b8060070154431161090e576000915050610a4d565b80600801544311610923576001915050610a4d565b80600a01548160090154111580610944575061093d610577565b8160090154105b15610953576003915050610a4d565b60008160020154141561096a576004915050610a4d565b80600b0160019054906101000a900460ff161561098b576007915050610a4d565b610a3781600201546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a329190810190612bb2565b611ec1565b4210610a47576006915050610a4d565b60059150505b919050565b6000610a5d8261086e565b9050600780811115610a6b57fe5b816007811115610a7757fe5b1415610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90614011565b60405180910390fd5b6000600360008481526020019081526020016000209050610ad7610f6e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b45436001611f16565b6040518363ffffffff1660e01b8152600401610b62929190613b71565b60206040518083038186803b158015610b7a57600080fd5b505afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bb29190810190612cca565b6bffffffffffffffffffffffff1610610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613f51565b60405180910390fd5b600181600b0160006101000a81548160ff02191690831515021790555060008090505b8160030180549050811015610d59576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663591fcdfe836003018381548110610c7e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018481548110610cb857fe5b9060005260206000200154856005018581548110610cd257fe5b90600052602060002001866006018681548110610ceb57fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610d1a959493929190613c40565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050508080600101915050610c23565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d89919061408c565b60405180910390a1505050565b6000604051610da490613b1e565b60405180910390206040518060400160405280601681526020017f496e766572736520476f7665726e6f7220416c7068610000000000000000000081525080519060200120610df1611f66565b30604051602001610e059493929190613d1d565b6040516020818303038152906040528051906020012090506000604051610e2b90613b33565b60405180910390208787604051602001610e4793929190613d62565b60405160208183030381529060405280519060200120905060008282604051602001610e74929190613ae7565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610eb19493929190613d99565b6020604051602081039080840390855afa158015610ed3573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613fd1565b60405180910390fd5b610f5a818a8a611bf2565b505050505050505050565b60006014905090565b6000683635c9adc5dea00000905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000610fb4610f6e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe133610ffe436001611f16565b6040518363ffffffff1660e01b815260040161101b929190613b48565b60206040518083038186803b15801561103357600080fd5b505afa158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106b9190810190612cca565b6bffffffffffffffffffffffff16116110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090613fb1565b60405180910390fd5b845186511480156110cb575083518651145b80156110d8575082518651145b611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90613f31565b60405180910390fd5b60008651141561115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390613f91565b60405180910390fd5b611164610f65565b865111156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90613ef1565b60405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081146112b65760006111fe8261086e565b90506001600781111561120d57fe5b81600781111561121957fe5b141561125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190613ff1565b60405180910390fd5b6000600781111561126757fe5b81600781111561127357fe5b14156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613ed1565b60405180910390fd5b505b60006112c9436112c4610865565b611ec1565b905060006112de826112d96104d0565b611ec1565b90506002600081548092919060010191905055506112fa612147565b604051806101a0016040528060025481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060036000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030190805190602001906114049291906121c9565b506080820151816004019080519060200190611421929190612253565b5060a082015181600501908051906020019061143e9291906122a0565b5060c082015181600601908051906020019061145b929190612300565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff021916908315150217905550905050806000015160046000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161155b999897969594939291906140a7565b60405180910390a1806000015194505050505095945050505050565b6004600781111561158457fe5b61158d8261086e565b600781111561159857fe5b146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613e51565b60405180910390fd5b60006003600083815260200190815260200160002090506000611699426000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b15801561165c57600080fd5b505afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116949190810190612bb2565b611ec1565b905060008090505b826003018054905081101561187e576118718360030182815481106116c257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460040183815481106116fc57fe5b906000526020600020015485600501848154811061171657fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117b45780601f10611789576101008083540402835291602001916117b4565b820191906000526020600020905b81548152906001019060200180831161179757829003601f168201915b50505050508660060185815481106117c857fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118665780601f1061183b57610100808354040283529160200191611866565b820191906000526020600020905b81548152906001019060200180831161184957829003601f168201915b505050505086611f73565b80806001019150506116a1565b508082600201819055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289283826040516118b99291906141e4565b60405180910390a1505050565b6040516118d290613b33565b604051809103902081565b6118e5612360565b60036000848152602001908152602001600020600c0160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905092915050565b600560078111156119cc57fe5b6119d58261086e565b60078111156119e057fe5b14611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790613e71565b60405180910390fd5b6000600360008381526020019081526020016000209050600181600b0160016101000a81548160ff02191690831515021790555060008090505b8160030180549050811015611bb6576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f836003018381548110611ab557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018481548110611aef57fe5b9060005260206000200154856005018581548110611b0957fe5b90600052602060002001866006018681548110611b2257fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611b51959493929190613c40565b600060405180830381600087803b158015611b6b57600080fd5b505af1158015611b7f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611ba89190810190612b48565b508080600101915050611a5a565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611be6919061408c565b60405180910390a15050565b60016007811115611bff57fe5b611c088361086e565b6007811115611c1357fe5b14611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90614031565b60405180910390fd5b6000600360008481526020019081526020016000209050600081600c0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600015158160000160009054906101000a900460ff16151514611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613eb1565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18785600701546040518363ffffffff1660e01b8152600401611d6a929190613b71565b60206040518083038186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dba9190810190612cca565b90508315611deb57611dde8360090154826bffffffffffffffffffffffff16611ec1565b8360090181905550611e10565b611e0783600a0154826bffffffffffffffffffffffff16611ec1565b83600a01819055505b60018260000160006101000a81548160ff021916908315150217905550838260000160016101000a81548160ff021916908315150217905550808260000160026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4686868684604051611eb19493929190613b9a565b60405180910390a1505050505050565b600080828401905083811015611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390613f11565b60405180910390fd5b8091505092915050565b600082821115611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290614051565b60405180910390fd5b818303905092915050565b6000804690508091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2b065378686868686604051602001611fc9959493929190613bdf565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611ffb9190613d02565b60206040518083038186803b15801561201357600080fd5b505afa158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061204b9190810190612af6565b1561208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290613f71565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90186868686866040518663ffffffff1660e01b81526004016120ed959493929190613bdf565b602060405180830381600087803b15801561210757600080fd5b505af115801561211b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061213f9190810190612b1f565b505050505050565b604051806101a0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612242579160200282015b828111156122415782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906121e9565b5b50905061224f9190612393565b5090565b82805482825590600052602060002090810192821561228f579160200282015b8281111561228e578251825591602001919060010190612273565b5b50905061229c91906123d6565b5090565b8280548282559060005260206000209081019282156122ef579160200282015b828111156122ee5782518290805190602001906122de9291906123fb565b50916020019190600101906122c0565b5b5090506122fc919061247b565b5090565b82805482825590600052602060002090810192821561234f579160200282015b8281111561234e57825182908051906020019061233e9291906124a7565b5091602001919060010190612320565b5b50905061235c9190612527565b5090565b604051806060016040528060001515815260200160001515815260200160006bffffffffffffffffffffffff1681525090565b6123d391905b808211156123cf57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612399565b5090565b90565b6123f891905b808211156123f45760008160009055506001016123dc565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061243c57805160ff191683800117855561246a565b8280016001018555821561246a579182015b8281111561246957825182559160200191906001019061244e565b5b50905061247791906123d6565b5090565b6124a491905b808211156124a057600081816124979190612553565b50600101612481565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124e857805160ff1916838001178555612516565b82800160010185558215612516579182015b828111156125155782518255916020019190600101906124fa565b5b50905061252391906123d6565b5090565b61255091905b8082111561254c5760008181612543919061259b565b5060010161252d565b5090565b90565b50805460018160011615610100020316600290046000825580601f106125795750612598565b601f01602090049060005260206000209081019061259791906123d6565b5b50565b50805460018160011615610100020316600290046000825580601f106125c157506125e0565b601f0160209004906000526020600020908101906125df91906123d6565b5b50565b6000813590506125f2816146a9565b92915050565b600082601f83011261260957600080fd5b813561261c6126178261423a565b61420d565b9150818183526020840193506020810190508385602084028201111561264157600080fd5b60005b83811015612671578161265788826125e3565b845260208401935060208301925050600181019050612644565b5050505092915050565b600082601f83011261268c57600080fd5b813561269f61269a82614262565b61420d565b9150818183526020840193506020810190508360005b838110156126e557813586016126cb888261283a565b8452602084019350602083019250506001810190506126b5565b5050505092915050565b600082601f83011261270057600080fd5b813561271361270e8261428a565b61420d565b9150818183526020840193506020810190508360005b83811015612759578135860161273f88826128e2565b845260208401935060208301925050600181019050612729565b5050505092915050565b600082601f83011261277457600080fd5b8135612787612782826142b2565b61420d565b915081818352602084019350602081019050838560208402820111156127ac57600080fd5b60005b838110156127dc57816127c2888261298a565b8452602084019350602083019250506001810190506127af565b5050505092915050565b6000813590506127f5816146c0565b92915050565b60008151905061280a816146c0565b92915050565b60008135905061281f816146d7565b92915050565b600081519050612834816146d7565b92915050565b600082601f83011261284b57600080fd5b813561285e612859826142da565b61420d565b9150808252602083016020830185838301111561287a57600080fd5b61288583828461463f565b50505092915050565b600082601f83011261289f57600080fd5b81516128b26128ad82614306565b61420d565b915080825260208301602083018583830111156128ce57600080fd5b6128d983828461464e565b50505092915050565b600082601f8301126128f357600080fd5b813561290661290182614332565b61420d565b9150808252602083016020830185838301111561292257600080fd5b61292d83828461463f565b50505092915050565b600082601f83011261294757600080fd5b813561295a6129558261435e565b61420d565b9150808252602083016020830185838301111561297657600080fd5b61298183828461463f565b50505092915050565b600081359050612999816146ee565b92915050565b6000815190506129ae816146ee565b92915050565b6000813590506129c381614705565b92915050565b6000815190506129d88161471c565b92915050565b6000602082840312156129f057600080fd5b60006129fe848285016125e3565b91505092915050565b600080600080600060a08688031215612a1f57600080fd5b600086013567ffffffffffffffff811115612a3957600080fd5b612a45888289016125f8565b955050602086013567ffffffffffffffff811115612a6257600080fd5b612a6e88828901612763565b945050604086013567ffffffffffffffff811115612a8b57600080fd5b612a97888289016126ef565b935050606086013567ffffffffffffffff811115612ab457600080fd5b612ac08882890161267b565b925050608086013567ffffffffffffffff811115612add57600080fd5b612ae988828901612936565b9150509295509295909350565b600060208284031215612b0857600080fd5b6000612b16848285016127fb565b91505092915050565b600060208284031215612b3157600080fd5b6000612b3f84828501612825565b91505092915050565b600060208284031215612b5a57600080fd5b600082015167ffffffffffffffff811115612b7457600080fd5b612b808482850161288e565b91505092915050565b600060208284031215612b9b57600080fd5b6000612ba98482850161298a565b91505092915050565b600060208284031215612bc457600080fd5b6000612bd28482850161299f565b91505092915050565b60008060408385031215612bee57600080fd5b6000612bfc8582860161298a565b9250506020612c0d858286016125e3565b9150509250929050565b60008060408385031215612c2a57600080fd5b6000612c388582860161298a565b9250506020612c49858286016127e6565b9150509250929050565b600080600080600060a08688031215612c6b57600080fd5b6000612c798882890161298a565b9550506020612c8a888289016127e6565b9450506040612c9b888289016129b4565b9350506060612cac88828901612810565b9250506080612cbd88828901612810565b9150509295509295909350565b600060208284031215612cdc57600080fd5b6000612cea848285016129c9565b91505092915050565b6000612cff8383612d5a565b60208301905092915050565b6000612d178383612f9b565b905092915050565b6000612d2b83836130c9565b905092915050565b6000612d3f8383613a9c565b60208301905092915050565b612d548161459d565b82525050565b612d6381614513565b82525050565b612d7281614513565b82525050565b6000612d83826143f4565b612d8d8185614480565b9350612d988361438a565b8060005b83811015612dc9578151612db08882612cf3565b9750612dbb8361444c565b925050600181019050612d9c565b5085935050505092915050565b6000612de1826143ff565b612deb8185614491565b935083602082028501612dfd8561439a565b8060005b85811015612e395784840389528151612e1a8582612d0b565b9450612e2583614459565b925060208a01995050600181019050612e01565b50829750879550505050505092915050565b6000612e568261440a565b612e6081856144a2565b935083602082028501612e72856143aa565b8060005b85811015612eae5784840389528151612e8f8582612d1f565b9450612e9a83614466565b925060208a01995050600181019050612e76565b50829750879550505050505092915050565b6000612ecb82614415565b612ed581856144b3565b9350612ee0836143ba565b8060005b83811015612f11578151612ef88882612d33565b9750612f0383614473565b925050600181019050612ee4565b5085935050505092915050565b612f2781614525565b82525050565b612f3681614525565b82525050565b612f4581614531565b82525050565b612f5c612f5782614531565b614681565b82525050565b6000612f6d8261442b565b612f7781856144d5565b9350612f8781856020860161464e565b612f908161468b565b840191505092915050565b6000612fa682614420565b612fb081856144c4565b9350612fc081856020860161464e565b612fc98161468b565b840191505092915050565b600081546001811660008114612ff157600181146130175761305b565b607f600283041661300281876144d5565b955060ff19831686526020860193505061305b565b6002820461302581876144d5565b9550613030856143ca565b60005b8281101561305257815481890152600182019150602081019050613033565b80880195505050505b505092915050565b61306c816145af565b82525050565b61307b816145d3565b82525050565b61308a816145f7565b82525050565b600061309b82614441565b6130a581856144f7565b93506130b581856020860161464e565b6130be8161468b565b840191505092915050565b60006130d482614436565b6130de81856144e6565b93506130ee81856020860161464e565b6130f78161468b565b840191505092915050565b600061310d82614436565b61311781856144f7565b935061312781856020860161464e565b6131308161468b565b840191505092915050565b600081546001811660008114613158576001811461317e576131c2565b607f600283041661316981876144f7565b955060ff1983168652602086019350506131c2565b6002820461318c81876144f7565b9550613197856143df565b60005b828110156131b95781548189015260018201915060208101905061319a565b80880195505050505b505092915050565b60006131d76044836144f7565b91507f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360008301527f616e206f6e6c792062652071756575656420696620697420697320737563636560208301527f65646564000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006132636045836144f7565b91507f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60008301527f2063616e206f6e6c79206265206578656375746564206966206974206973207160208301527f75657565640000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006132ef600283614508565b91507f19010000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061332f6029836144f7565b91507f476f7665726e6f72416c7068613a3a73746174653a20696e76616c696420707260008301527f6f706f73616c20696400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613395602d836144f7565b91507f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060008301527f616c726561647920766f746564000000000000000000000000000000000000006020830152604082019050919050565b60006133fb6059836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560008301527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208301527f20616c72656164792070656e64696e672070726f706f73616c000000000000006040830152606082019050919050565b60006134876028836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960008301527f20616374696f6e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134ed6011836144f7565b91507f6164646974696f6e206f766572666c6f770000000000000000000000000000006000830152602082019050919050565b600061352d604383614508565b91507f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353660008301527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208301527f63742900000000000000000000000000000000000000000000000000000000006040830152604382019050919050565b60006135b9602783614508565b91507f42616c6c6f742875696e743235362070726f706f73616c49642c626f6f6c207360008301527f7570706f727429000000000000000000000000000000000000000000000000006020830152602782019050919050565b600061361f6044836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60008301527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d60208301527f61746368000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006136ab602f836144f7565b91507f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722060008301527f61626f7665207468726573686f6c6400000000000000000000000000000000006020830152604082019050919050565b60006137116044836144f7565b91507f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060008301527f726f706f73616c20616374696f6e20616c72656164792071756575656420617460208301527f20657461000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061379d602c836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60008301527f7669646520616374696f6e7300000000000000000000000000000000000000006020830152604082019050919050565b6000613803603f836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260008301527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c64006020830152604082019050919050565b6000613869602f836144f7565b91507f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60008301527f76616c6964207369676e617475726500000000000000000000000000000000006020830152604082019050919050565b60006138cf6058836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560008301527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208301527f20616c7265616479206163746976652070726f706f73616c00000000000000006040830152606082019050919050565b600061395b6036836144f7565b91507f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f7420636160008301527f6e63656c2065786563757465642070726f706f73616c000000000000000000006020830152604082019050919050565b60006139c1602a836144f7565b91507f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e6760008301527f20697320636c6f736564000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a276015836144f7565b91507f7375627472616374696f6e20756e646572666c6f7700000000000000000000006000830152602082019050919050565b606082016000820151613a706000850182612f1e565b506020820151613a836020850182612f1e565b506040820151613a966040850182613ad8565b50505050565b613aa58161456e565b82525050565b613ab48161456e565b82525050565b613ac381614578565b82525050565b613ad28161462d565b82525050565b613ae181614585565b82525050565b6000613af2826132e2565b9150613afe8285612f4b565b602082019150613b0e8284612f4b565b6020820191508190509392505050565b6000613b2982613520565b9150819050919050565b6000613b3e826135ac565b9150819050919050565b6000604082019050613b5d6000830185612d4b565b613b6a6020830184613aab565b9392505050565b6000604082019050613b866000830185612d69565b613b936020830184613aab565b9392505050565b6000608082019050613baf6000830187612d69565b613bbc6020830186613aab565b613bc96040830185612f2d565b613bd66060830184613ac9565b95945050505050565b600060a082019050613bf46000830188612d69565b613c016020830187613aab565b8181036040830152613c138186613090565b90508181036060830152613c278185612f62565b9050613c366080830184613aab565b9695505050505050565b600060a082019050613c556000830188612d69565b613c626020830187613aab565b8181036040830152613c74818661313b565b90508181036060830152613c888185612fd4565b9050613c976080830184613aab565b9695505050505050565b60006080820190508181036000830152613cbb8187612d78565b90508181036020830152613ccf8186612ec0565b90508181036040830152613ce38185612e4b565b90508181036060830152613cf78184612dd6565b905095945050505050565b6000602082019050613d176000830184612f3c565b92915050565b6000608082019050613d326000830187612f3c565b613d3f6020830186612f3c565b613d4c6040830185613aab565b613d596060830184612d69565b95945050505050565b6000606082019050613d776000830186612f3c565b613d846020830185613aab565b613d916040830184612f2d565b949350505050565b6000608082019050613dae6000830187612f3c565b613dbb6020830186613aba565b613dc86040830185612f3c565b613dd56060830184612f3c565b95945050505050565b6000602082019050613df36000830184613063565b92915050565b6000602082019050613e0e6000830184613072565b92915050565b6000602082019050613e296000830184613081565b92915050565b60006020820190508181036000830152613e498184613102565b905092915050565b60006020820190508181036000830152613e6a816131ca565b9050919050565b60006020820190508181036000830152613e8a81613256565b9050919050565b60006020820190508181036000830152613eaa81613322565b9050919050565b60006020820190508181036000830152613eca81613388565b9050919050565b60006020820190508181036000830152613eea816133ee565b9050919050565b60006020820190508181036000830152613f0a8161347a565b9050919050565b60006020820190508181036000830152613f2a816134e0565b9050919050565b60006020820190508181036000830152613f4a81613612565b9050919050565b60006020820190508181036000830152613f6a8161369e565b9050919050565b60006020820190508181036000830152613f8a81613704565b9050919050565b60006020820190508181036000830152613faa81613790565b9050919050565b60006020820190508181036000830152613fca816137f6565b9050919050565b60006020820190508181036000830152613fea8161385c565b9050919050565b6000602082019050818103600083015261400a816138c2565b9050919050565b6000602082019050818103600083015261402a8161394e565b9050919050565b6000602082019050818103600083015261404a816139b4565b9050919050565b6000602082019050818103600083015261406a81613a1a565b9050919050565b60006060820190506140866000830184613a5a565b92915050565b60006020820190506140a16000830184613aab565b92915050565b6000610120820190506140bd600083018c613aab565b6140ca602083018b612d4b565b81810360408301526140dc818a612d78565b905081810360608301526140f08189612ec0565b905081810360808301526141048188612e4b565b905081810360a08301526141188187612dd6565b905061412760c0830186613aab565b61413460e0830185613aab565b8181036101008301526141478184613090565b90509a9950505050505050505050565b60006101208201905061416d600083018c613aab565b61417a602083018b612d69565b614187604083018a613aab565b6141946060830189613aab565b6141a16080830188613aab565b6141ae60a0830187613aab565b6141bb60c0830186613aab565b6141c860e0830185612f2d565b6141d6610100830184612f2d565b9a9950505050505050505050565b60006040820190506141f96000830185613aab565b6142066020830184613aab565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561423057600080fd5b8060405250919050565b600067ffffffffffffffff82111561425157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561427957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156142a157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156142c957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156142f157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561431d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561434957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561437557600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061451e8261454e565b9050919050565b60008115159050919050565b6000819050919050565b60008190506145498261469c565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b60006145a882614609565b9050919050565b60006145ba826145c1565b9050919050565b60006145cc8261454e565b9050919050565b60006145de826145e5565b9050919050565b60006145f08261454e565b9050919050565b60006146028261453b565b9050919050565b60006146148261461b565b9050919050565b60006146268261454e565b9050919050565b600061463882614585565b9050919050565b82818337600083830152505050565b60005b8381101561466c578082015181840152602081019050614651565b8381111561467b576000848401525b50505050565b6000819050919050565b6000601f19601f8301169050919050565b600881106146a657fe5b50565b6146b281614513565b81146146bd57600080fd5b50565b6146c981614525565b81146146d457600080fd5b50565b6146e081614531565b81146146eb57600080fd5b50565b6146f78161456e565b811461470257600080fd5b50565b61470e81614578565b811461471957600080fd5b50565b61472581614585565b811461473057600080fd5b5056fea365627a7a7231582089eeb75378ffec422cf639d84c55be4d142fb9256e558ea0eb3a2f00df71c70b6c6578706572696d656e74616cf564736f6c63430005100040608060405234801561001057600080fd5b506040516120213803806120218339818101604052604081101561003357600080fd5b8101908080519060200190929190805190602001909291905050506202a3008110156100aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180611fb26037913960400191505060405180910390fd5b62278d00811115610106576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611fe96038913960400191505060405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002819055505050611e548061015e6000396000f3fe6080604052600436106100c25760003560e01c80636a42b8f81161007f578063c1a287e211610059578063c1a287e21461074a578063e177246e14610775578063f2b06537146107b0578063f851a44014610803576100c2565b80636a42b8f8146106c95780637d645fab146106f4578063b1b43ae51461071f576100c2565b80630825f38f146100c45780630e18b681146102d057806326782247146102e75780633a66f9011461033e5780634dd18bf5146104e5578063591fcdfe14610536575b005b3480156100d057600080fd5b50610255600480360360a08110156100e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561012e57600080fd5b82018360208201111561014057600080fd5b8035906020019184600183028401116401000000008311171561016257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156101c557600080fd5b8201836020820111156101d757600080fd5b803590602001918460018302840111640100000000831117156101f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061085a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561029557808201518184015260208101905061027a565b50505050905090810190601f1680156102c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dc57600080fd5b506102e5610edb565b005b3480156102f357600080fd5b506102fc611069565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034a57600080fd5b506104cf600480360360a081101561036157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103a857600080fd5b8201836020820111156103ba57600080fd5b803590602001918460018302840111640100000000831117156103dc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561043f57600080fd5b82018360208201111561045157600080fd5b8035906020019184600183028401116401000000008311171561047357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061108f565b6040518082815260200191505060405180910390f35b3480156104f157600080fd5b506105346004803603602081101561050857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611455565b005b34801561054257600080fd5b506106c7600480360360a081101561055957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105a057600080fd5b8201836020820111156105b257600080fd5b803590602001918460018302840111640100000000831117156105d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561063757600080fd5b82018360208201111561064957600080fd5b8035906020019184600183028401116401000000008311171561066b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611582565b005b3480156106d557600080fd5b506106de6118cd565b6040518082815260200191505060405180910390f35b34801561070057600080fd5b506107096118d3565b6040518082815260200191505060405180910390f35b34801561072b57600080fd5b506107346118da565b6040518082815260200191505060405180910390f35b34801561075657600080fd5b5061075f6118e1565b6040518082815260200191505060405180910390f35b34801561078157600080fd5b506107ae6004803603602081101561079857600080fd5b81019080803590602001909291905050506118e8565b005b3480156107bc57600080fd5b506107e9600480360360208110156107d357600080fd5b8101908080359060200190929190505050611a5d565b604051808215151515815260200191505060405180910390f35b34801561080f57600080fd5b50610818611a7d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611b336038913960400191505060405180910390fd5b60008686868686604051602001808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561098d578082015181840152602081019050610972565b50505050905090810190601f1680156109ba5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156109f35780820151818401526020810190506109d8565b50505050905090810190601f168015610a205780820380516001836020036101000a031916815260200191505b509750505050505050506040516020818303038152906040528051906020012090506003600082815260200190815260200160002060009054906101000a900460ff16610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180611c86603d913960400191505060405180910390fd5b82610ac1611aa2565b1015610b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526045815260200180611bd56045913960600191505060405180910390fd5b610b2e6212750084611aaa90919063ffffffff16565b610b36611aa2565b1115610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180611ba26033913960400191505060405180910390fd5b60006003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055506060600086511415610bcd57849050610c88565b85805190602001208560405160200180837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040182805190602001908083835b60208310610c505780518252602082019150602081019050602083039250610c2d565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b600060608973ffffffffffffffffffffffffffffffffffffffff1689846040518082805190602001908083835b60208310610cd85780518252602082019150602081019050602083039250610cb5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610d3a576040519150601f19603f3d011682016040523d82523d6000602084013e610d3f565b606091505b509150915081610d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180611d69603d913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff16847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610e27578082015181840152602081019050610e0c565b50505050905090810190601f168015610e545780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610e8d578082015181840152602081019050610e72565b50505050905090810190601f168015610eba5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a38094505050505095945050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611cc36038913960400191505060405180910390fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60405160405180910390a2565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180611d336036913960400191505060405180910390fd5b611152600254611144611aa2565b611aaa90919063ffffffff16565b8210156111aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526049815260200180611da66049913960600191505060405180910390fd5b60008686868686604051602001808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561123657808201518184015260208101905061121b565b50505050905090810190601f1680156112635780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561129c578082015181840152602081019050611281565b50505050905090810190601f1680156112c95780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060016003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508673ffffffffffffffffffffffffffffffffffffffff16817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156113a4578082015181840152602081019050611389565b50505050905090810190601f1680156113d15780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561140a5780820151818401526020810190506113ef565b50505050905090810190601f1680156114375780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a38091505095945050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611cfb6038913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75660405160405180910390a250565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611627576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180611b6b6037913960400191505060405180910390fd5b60008585858585604051602001808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156116b3578082015181840152602081019050611698565b50505050905090810190601f1680156116e05780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156117195780820151818401526020810190506116fe565b50505050905090810190601f1680156117465780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060006003600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508573ffffffffffffffffffffffffffffffffffffffff16817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015611821578082015181840152602081019050611806565b50505050905090810190601f16801561184e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561188757808201518184015260208101905061186c565b50505050905090810190601f1680156118b45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050565b60025481565b62278d0081565b6202a30081565b6212750081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461196c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611def6031913960400191505060405180910390fd5b6202a3008110156119c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180611c1a6034913960400191505060405180910390fd5b62278d00811115611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611c4e6038913960400191505060405180910390fd5b806002819055506002547f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c60405160405180910390a250565b60036020528060005260406000206000915054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b600080828401905083811015611b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206973207374616c652e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774207375727061737365642074696d65206c6f636b2e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774206265656e207175657565642e54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737420636f6d652066726f6d2070656e64696e6741646d696e2e54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a20457374696d6174656420657865637574696f6e20626c6f636b206d75737420736174697366792064656c61792e54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2ea265627a7a723158206c26706673361fd4c9f9a17ae4b7d6de1852b82e58260d10ab65d9b951adc3ab64736f6c6343000510003254696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e00000000000000000000000041d5d79431a913c4ae7d69a668ecdfe5ff9dfb68

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806340e58ee5116100b8578063da35c6641161007c578063da35c66414610374578063da95691a14610392578063ddf0b009146103c2578063deaaa7cc146103de578063e23a9a52146103fc578063fe0d94c11461042c57610142565b806340e58ee5146102e25780634634c61f146102fe5780637bdbe4d01461031a578063b58131b014610338578063d33219b41461035657610142565b806317977c611161010a57806317977c61146101f557806320606b701461022557806324bc1a6414610243578063328dd982146102615780633932abb1146102945780633e4f49e6146102b257610142565b8063013cf08b1461014757806302a251a31461017f578063032d09611461019d57806306fdde03146101bb57806315373e3d146101d9575b600080fd5b610161600480360361015c9190810190612b89565b610448565b60405161017699989796959493929190614157565b60405180910390f35b6101876104d0565b604051610194919061408c565b60405180910390f35b6101a56104da565b6040516101b29190613dde565b60405180910390f35b6101c3610500565b6040516101d09190613e2f565b60405180910390f35b6101f360048036036101ee9190810190612c17565b610539565b005b61020f600480360361020a91908101906129de565b610548565b60405161021c919061408c565b60405180910390f35b61022d610560565b60405161023a9190613d02565b60405180910390f35b61024b610577565b604051610258919061408c565b60405180910390f35b61027b60048036036102769190810190612b89565b610588565b60405161028b9493929190613ca1565b60405180910390f35b61029c610865565b6040516102a9919061408c565b60405180910390f35b6102cc60048036036102c79190810190612b89565b61086e565b6040516102d99190613e14565b60405180910390f35b6102fc60048036036102f79190810190612b89565b610a52565b005b61031860048036036103139190810190612c53565b610d96565b005b610322610f65565b60405161032f919061408c565b60405180910390f35b610340610f6e565b60405161034d919061408c565b60405180910390f35b61035e610f7f565b60405161036b9190613df9565b60405180910390f35b61037c610fa4565b604051610389919061408c565b60405180910390f35b6103ac60048036036103a79190810190612a07565b610faa565b6040516103b9919061408c565b60405180910390f35b6103dc60048036036103d79190810190612b89565b611577565b005b6103e66118c6565b6040516103f39190613d02565b60405180910390f35b61041660048036036104119190810190612bdb565b6118dd565b6040516104239190614071565b60405180910390f35b61044660048036036104419190810190612b89565b6119bf565b005b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600701549080600801549080600901549080600a01549080600b0160009054906101000a900460ff169080600b0160019054906101000a900460ff16905089565b6000614380905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280601681526020017f496e766572736520476f7665726e6f7220416c7068610000000000000000000081525081565b610544338383611bf2565b5050565b60046020528060005260406000206000915090505481565b60405161056c90613b1e565b604051809103902081565b600068d8d726b7177a800000905090565b6060806060806000600360008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561063657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105ec575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561068857602002820191906000526020600020905b815481526020019060010190808311610674575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561076c578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107585780601f1061072d57610100808354040283529160200191610758565b820191906000526020600020905b81548152906001019060200180831161073b57829003601f168201915b5050505050815260200190600101906106b0565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561084f578382906000526020600020018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561083b5780601f106108105761010080835404028352916020019161083b565b820191906000526020600020905b81548152906001019060200180831161081e57829003601f168201915b505050505081526020019060010190610793565b5050505090509450945094509450509193509193565b60006001905090565b600081600254101580156108825750600082115b6108c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b890613e91565b60405180910390fd5b600060036000848152602001908152602001600020905080600b0160009054906101000a900460ff16156108f9576002915050610a4d565b8060070154431161090e576000915050610a4d565b80600801544311610923576001915050610a4d565b80600a01548160090154111580610944575061093d610577565b8160090154105b15610953576003915050610a4d565b60008160020154141561096a576004915050610a4d565b80600b0160019054906101000a900460ff161561098b576007915050610a4d565b610a3781600201546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b1580156109fa57600080fd5b505afa158015610a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a329190810190612bb2565b611ec1565b4210610a47576006915050610a4d565b60059150505b919050565b6000610a5d8261086e565b9050600780811115610a6b57fe5b816007811115610a7757fe5b1415610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90614011565b60405180910390fd5b6000600360008481526020019081526020016000209050610ad7610f6e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b45436001611f16565b6040518363ffffffff1660e01b8152600401610b62929190613b71565b60206040518083038186803b158015610b7a57600080fd5b505afa158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bb29190810190612cca565b6bffffffffffffffffffffffff1610610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613f51565b60405180910390fd5b600181600b0160006101000a81548160ff02191690831515021790555060008090505b8160030180549050811015610d59576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663591fcdfe836003018381548110610c7e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018481548110610cb857fe5b9060005260206000200154856005018581548110610cd257fe5b90600052602060002001866006018681548110610ceb57fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610d1a959493929190613c40565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050508080600101915050610c23565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d89919061408c565b60405180910390a1505050565b6000604051610da490613b1e565b60405180910390206040518060400160405280601681526020017f496e766572736520476f7665726e6f7220416c7068610000000000000000000081525080519060200120610df1611f66565b30604051602001610e059493929190613d1d565b6040516020818303038152906040528051906020012090506000604051610e2b90613b33565b60405180910390208787604051602001610e4793929190613d62565b60405160208183030381529060405280519060200120905060008282604051602001610e74929190613ae7565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610eb19493929190613d99565b6020604051602081039080840390855afa158015610ed3573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613fd1565b60405180910390fd5b610f5a818a8a611bf2565b505050505050505050565b60006014905090565b6000683635c9adc5dea00000905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000610fb4610f6e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe133610ffe436001611f16565b6040518363ffffffff1660e01b815260040161101b929190613b48565b60206040518083038186803b15801561103357600080fd5b505afa158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106b9190810190612cca565b6bffffffffffffffffffffffff16116110b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b090613fb1565b60405180910390fd5b845186511480156110cb575083518651145b80156110d8575082518651145b611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90613f31565b60405180910390fd5b60008651141561115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390613f91565b60405180910390fd5b611164610f65565b865111156111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e90613ef1565b60405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081146112b65760006111fe8261086e565b90506001600781111561120d57fe5b81600781111561121957fe5b141561125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190613ff1565b60405180910390fd5b6000600781111561126757fe5b81600781111561127357fe5b14156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613ed1565b60405180910390fd5b505b60006112c9436112c4610865565b611ec1565b905060006112de826112d96104d0565b611ec1565b90506002600081548092919060010191905055506112fa612147565b604051806101a0016040528060025481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060036000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030190805190602001906114049291906121c9565b506080820151816004019080519060200190611421929190612253565b5060a082015181600501908051906020019061143e9291906122a0565b5060c082015181600601908051906020019061145b929190612300565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff021916908315150217905550905050806000015160046000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161155b999897969594939291906140a7565b60405180910390a1806000015194505050505095945050505050565b6004600781111561158457fe5b61158d8261086e565b600781111561159857fe5b146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613e51565b60405180910390fd5b60006003600083815260200190815260200160002090506000611699426000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a42b8f86040518163ffffffff1660e01b815260040160206040518083038186803b15801561165c57600080fd5b505afa158015611670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116949190810190612bb2565b611ec1565b905060008090505b826003018054905081101561187e576118718360030182815481106116c257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460040183815481106116fc57fe5b906000526020600020015485600501848154811061171657fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117b45780601f10611789576101008083540402835291602001916117b4565b820191906000526020600020905b81548152906001019060200180831161179757829003601f168201915b50505050508660060185815481106117c857fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118665780601f1061183b57610100808354040283529160200191611866565b820191906000526020600020905b81548152906001019060200180831161184957829003601f168201915b505050505086611f73565b80806001019150506116a1565b508082600201819055507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289283826040516118b99291906141e4565b60405180910390a1505050565b6040516118d290613b33565b604051809103902081565b6118e5612360565b60036000848152602001908152602001600020600c0160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff1681525050905092915050565b600560078111156119cc57fe5b6119d58261086e565b60078111156119e057fe5b14611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1790613e71565b60405180910390fd5b6000600360008381526020019081526020016000209050600181600b0160016101000a81548160ff02191690831515021790555060008090505b8160030180549050811015611bb6576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630825f38f836003018381548110611ab557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846004018481548110611aef57fe5b9060005260206000200154856005018581548110611b0957fe5b90600052602060002001866006018681548110611b2257fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611b51959493929190613c40565b600060405180830381600087803b158015611b6b57600080fd5b505af1158015611b7f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611ba89190810190612b48565b508080600101915050611a5a565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611be6919061408c565b60405180910390a15050565b60016007811115611bff57fe5b611c088361086e565b6007811115611c1357fe5b14611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a90614031565b60405180910390fd5b6000600360008481526020019081526020016000209050600081600c0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600015158160000160009054906101000a900460ff16151514611d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfe90613eb1565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663782d6fe18785600701546040518363ffffffff1660e01b8152600401611d6a929190613b71565b60206040518083038186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dba9190810190612cca565b90508315611deb57611dde8360090154826bffffffffffffffffffffffff16611ec1565b8360090181905550611e10565b611e0783600a0154826bffffffffffffffffffffffff16611ec1565b83600a01819055505b60018260000160006101000a81548160ff021916908315150217905550838260000160016101000a81548160ff021916908315150217905550808260000160026101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055507f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4686868684604051611eb19493929190613b9a565b60405180910390a1505050505050565b600080828401905083811015611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390613f11565b60405180910390fd5b8091505092915050565b600082821115611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5290614051565b60405180910390fd5b818303905092915050565b6000804690508091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2b065378686868686604051602001611fc9959493929190613bdf565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611ffb9190613d02565b60206040518083038186803b15801561201357600080fd5b505afa158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061204b9190810190612af6565b1561208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290613f71565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a66f90186868686866040518663ffffffff1660e01b81526004016120ed959493929190613bdf565b602060405180830381600087803b15801561210757600080fd5b505af115801561211b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061213f9190810190612b1f565b505050505050565b604051806101a0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612242579160200282015b828111156122415782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906121e9565b5b50905061224f9190612393565b5090565b82805482825590600052602060002090810192821561228f579160200282015b8281111561228e578251825591602001919060010190612273565b5b50905061229c91906123d6565b5090565b8280548282559060005260206000209081019282156122ef579160200282015b828111156122ee5782518290805190602001906122de9291906123fb565b50916020019190600101906122c0565b5b5090506122fc919061247b565b5090565b82805482825590600052602060002090810192821561234f579160200282015b8281111561234e57825182908051906020019061233e9291906124a7565b5091602001919060010190612320565b5b50905061235c9190612527565b5090565b604051806060016040528060001515815260200160001515815260200160006bffffffffffffffffffffffff1681525090565b6123d391905b808211156123cf57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612399565b5090565b90565b6123f891905b808211156123f45760008160009055506001016123dc565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061243c57805160ff191683800117855561246a565b8280016001018555821561246a579182015b8281111561246957825182559160200191906001019061244e565b5b50905061247791906123d6565b5090565b6124a491905b808211156124a057600081816124979190612553565b50600101612481565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124e857805160ff1916838001178555612516565b82800160010185558215612516579182015b828111156125155782518255916020019190600101906124fa565b5b50905061252391906123d6565b5090565b61255091905b8082111561254c5760008181612543919061259b565b5060010161252d565b5090565b90565b50805460018160011615610100020316600290046000825580601f106125795750612598565b601f01602090049060005260206000209081019061259791906123d6565b5b50565b50805460018160011615610100020316600290046000825580601f106125c157506125e0565b601f0160209004906000526020600020908101906125df91906123d6565b5b50565b6000813590506125f2816146a9565b92915050565b600082601f83011261260957600080fd5b813561261c6126178261423a565b61420d565b9150818183526020840193506020810190508385602084028201111561264157600080fd5b60005b83811015612671578161265788826125e3565b845260208401935060208301925050600181019050612644565b5050505092915050565b600082601f83011261268c57600080fd5b813561269f61269a82614262565b61420d565b9150818183526020840193506020810190508360005b838110156126e557813586016126cb888261283a565b8452602084019350602083019250506001810190506126b5565b5050505092915050565b600082601f83011261270057600080fd5b813561271361270e8261428a565b61420d565b9150818183526020840193506020810190508360005b83811015612759578135860161273f88826128e2565b845260208401935060208301925050600181019050612729565b5050505092915050565b600082601f83011261277457600080fd5b8135612787612782826142b2565b61420d565b915081818352602084019350602081019050838560208402820111156127ac57600080fd5b60005b838110156127dc57816127c2888261298a565b8452602084019350602083019250506001810190506127af565b5050505092915050565b6000813590506127f5816146c0565b92915050565b60008151905061280a816146c0565b92915050565b60008135905061281f816146d7565b92915050565b600081519050612834816146d7565b92915050565b600082601f83011261284b57600080fd5b813561285e612859826142da565b61420d565b9150808252602083016020830185838301111561287a57600080fd5b61288583828461463f565b50505092915050565b600082601f83011261289f57600080fd5b81516128b26128ad82614306565b61420d565b915080825260208301602083018583830111156128ce57600080fd5b6128d983828461464e565b50505092915050565b600082601f8301126128f357600080fd5b813561290661290182614332565b61420d565b9150808252602083016020830185838301111561292257600080fd5b61292d83828461463f565b50505092915050565b600082601f83011261294757600080fd5b813561295a6129558261435e565b61420d565b9150808252602083016020830185838301111561297657600080fd5b61298183828461463f565b50505092915050565b600081359050612999816146ee565b92915050565b6000815190506129ae816146ee565b92915050565b6000813590506129c381614705565b92915050565b6000815190506129d88161471c565b92915050565b6000602082840312156129f057600080fd5b60006129fe848285016125e3565b91505092915050565b600080600080600060a08688031215612a1f57600080fd5b600086013567ffffffffffffffff811115612a3957600080fd5b612a45888289016125f8565b955050602086013567ffffffffffffffff811115612a6257600080fd5b612a6e88828901612763565b945050604086013567ffffffffffffffff811115612a8b57600080fd5b612a97888289016126ef565b935050606086013567ffffffffffffffff811115612ab457600080fd5b612ac08882890161267b565b925050608086013567ffffffffffffffff811115612add57600080fd5b612ae988828901612936565b9150509295509295909350565b600060208284031215612b0857600080fd5b6000612b16848285016127fb565b91505092915050565b600060208284031215612b3157600080fd5b6000612b3f84828501612825565b91505092915050565b600060208284031215612b5a57600080fd5b600082015167ffffffffffffffff811115612b7457600080fd5b612b808482850161288e565b91505092915050565b600060208284031215612b9b57600080fd5b6000612ba98482850161298a565b91505092915050565b600060208284031215612bc457600080fd5b6000612bd28482850161299f565b91505092915050565b60008060408385031215612bee57600080fd5b6000612bfc8582860161298a565b9250506020612c0d858286016125e3565b9150509250929050565b60008060408385031215612c2a57600080fd5b6000612c388582860161298a565b9250506020612c49858286016127e6565b9150509250929050565b600080600080600060a08688031215612c6b57600080fd5b6000612c798882890161298a565b9550506020612c8a888289016127e6565b9450506040612c9b888289016129b4565b9350506060612cac88828901612810565b9250506080612cbd88828901612810565b9150509295509295909350565b600060208284031215612cdc57600080fd5b6000612cea848285016129c9565b91505092915050565b6000612cff8383612d5a565b60208301905092915050565b6000612d178383612f9b565b905092915050565b6000612d2b83836130c9565b905092915050565b6000612d3f8383613a9c565b60208301905092915050565b612d548161459d565b82525050565b612d6381614513565b82525050565b612d7281614513565b82525050565b6000612d83826143f4565b612d8d8185614480565b9350612d988361438a565b8060005b83811015612dc9578151612db08882612cf3565b9750612dbb8361444c565b925050600181019050612d9c565b5085935050505092915050565b6000612de1826143ff565b612deb8185614491565b935083602082028501612dfd8561439a565b8060005b85811015612e395784840389528151612e1a8582612d0b565b9450612e2583614459565b925060208a01995050600181019050612e01565b50829750879550505050505092915050565b6000612e568261440a565b612e6081856144a2565b935083602082028501612e72856143aa565b8060005b85811015612eae5784840389528151612e8f8582612d1f565b9450612e9a83614466565b925060208a01995050600181019050612e76565b50829750879550505050505092915050565b6000612ecb82614415565b612ed581856144b3565b9350612ee0836143ba565b8060005b83811015612f11578151612ef88882612d33565b9750612f0383614473565b925050600181019050612ee4565b5085935050505092915050565b612f2781614525565b82525050565b612f3681614525565b82525050565b612f4581614531565b82525050565b612f5c612f5782614531565b614681565b82525050565b6000612f6d8261442b565b612f7781856144d5565b9350612f8781856020860161464e565b612f908161468b565b840191505092915050565b6000612fa682614420565b612fb081856144c4565b9350612fc081856020860161464e565b612fc98161468b565b840191505092915050565b600081546001811660008114612ff157600181146130175761305b565b607f600283041661300281876144d5565b955060ff19831686526020860193505061305b565b6002820461302581876144d5565b9550613030856143ca565b60005b8281101561305257815481890152600182019150602081019050613033565b80880195505050505b505092915050565b61306c816145af565b82525050565b61307b816145d3565b82525050565b61308a816145f7565b82525050565b600061309b82614441565b6130a581856144f7565b93506130b581856020860161464e565b6130be8161468b565b840191505092915050565b60006130d482614436565b6130de81856144e6565b93506130ee81856020860161464e565b6130f78161468b565b840191505092915050565b600061310d82614436565b61311781856144f7565b935061312781856020860161464e565b6131308161468b565b840191505092915050565b600081546001811660008114613158576001811461317e576131c2565b607f600283041661316981876144f7565b955060ff1983168652602086019350506131c2565b6002820461318c81876144f7565b9550613197856143df565b60005b828110156131b95781548189015260018201915060208101905061319a565b80880195505050505b505092915050565b60006131d76044836144f7565b91507f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206360008301527f616e206f6e6c792062652071756575656420696620697420697320737563636560208301527f65646564000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006132636045836144f7565b91507f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c60008301527f2063616e206f6e6c79206265206578656375746564206966206974206973207160208301527f75657565640000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006132ef600283614508565b91507f19010000000000000000000000000000000000000000000000000000000000006000830152600282019050919050565b600061332f6029836144f7565b91507f476f7665726e6f72416c7068613a3a73746174653a20696e76616c696420707260008301527f6f706f73616c20696400000000000000000000000000000000000000000000006020830152604082019050919050565b6000613395602d836144f7565b91507f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722060008301527f616c726561647920766f746564000000000000000000000000000000000000006020830152604082019050919050565b60006133fb6059836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560008301527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208301527f20616c72656164792070656e64696e672070726f706f73616c000000000000006040830152606082019050919050565b60006134876028836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7960008301527f20616374696f6e730000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134ed6011836144f7565b91507f6164646974696f6e206f766572666c6f770000000000000000000000000000006000830152602082019050919050565b600061352d604383614508565b91507f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353660008301527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208301527f63742900000000000000000000000000000000000000000000000000000000006040830152604382019050919050565b60006135b9602783614508565b91507f42616c6c6f742875696e743235362070726f706f73616c49642c626f6f6c207360008301527f7570706f727429000000000000000000000000000000000000000000000000006020830152602782019050919050565b600061361f6044836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c60008301527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d60208301527f61746368000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006136ab602f836144f7565b91507f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722060008301527f61626f7665207468726573686f6c6400000000000000000000000000000000006020830152604082019050919050565b60006137116044836144f7565b91507f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207060008301527f726f706f73616c20616374696f6e20616c72656164792071756575656420617460208301527f20657461000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b600061379d602c836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f60008301527f7669646520616374696f6e7300000000000000000000000000000000000000006020830152604082019050919050565b6000613803603f836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657260008301527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c64006020830152604082019050919050565b6000613869602f836144f7565b91507f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e60008301527f76616c6964207369676e617475726500000000000000000000000000000000006020830152604082019050919050565b60006138cf6058836144f7565b91507f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766560008301527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208301527f20616c7265616479206163746976652070726f706f73616c00000000000000006040830152606082019050919050565b600061395b6036836144f7565b91507f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f7420636160008301527f6e63656c2065786563757465642070726f706f73616c000000000000000000006020830152604082019050919050565b60006139c1602a836144f7565b91507f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e6760008301527f20697320636c6f736564000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a276015836144f7565b91507f7375627472616374696f6e20756e646572666c6f7700000000000000000000006000830152602082019050919050565b606082016000820151613a706000850182612f1e565b506020820151613a836020850182612f1e565b506040820151613a966040850182613ad8565b50505050565b613aa58161456e565b82525050565b613ab48161456e565b82525050565b613ac381614578565b82525050565b613ad28161462d565b82525050565b613ae181614585565b82525050565b6000613af2826132e2565b9150613afe8285612f4b565b602082019150613b0e8284612f4b565b6020820191508190509392505050565b6000613b2982613520565b9150819050919050565b6000613b3e826135ac565b9150819050919050565b6000604082019050613b5d6000830185612d4b565b613b6a6020830184613aab565b9392505050565b6000604082019050613b866000830185612d69565b613b936020830184613aab565b9392505050565b6000608082019050613baf6000830187612d69565b613bbc6020830186613aab565b613bc96040830185612f2d565b613bd66060830184613ac9565b95945050505050565b600060a082019050613bf46000830188612d69565b613c016020830187613aab565b8181036040830152613c138186613090565b90508181036060830152613c278185612f62565b9050613c366080830184613aab565b9695505050505050565b600060a082019050613c556000830188612d69565b613c626020830187613aab565b8181036040830152613c74818661313b565b90508181036060830152613c888185612fd4565b9050613c976080830184613aab565b9695505050505050565b60006080820190508181036000830152613cbb8187612d78565b90508181036020830152613ccf8186612ec0565b90508181036040830152613ce38185612e4b565b90508181036060830152613cf78184612dd6565b905095945050505050565b6000602082019050613d176000830184612f3c565b92915050565b6000608082019050613d326000830187612f3c565b613d3f6020830186612f3c565b613d4c6040830185613aab565b613d596060830184612d69565b95945050505050565b6000606082019050613d776000830186612f3c565b613d846020830185613aab565b613d916040830184612f2d565b949350505050565b6000608082019050613dae6000830187612f3c565b613dbb6020830186613aba565b613dc86040830185612f3c565b613dd56060830184612f3c565b95945050505050565b6000602082019050613df36000830184613063565b92915050565b6000602082019050613e0e6000830184613072565b92915050565b6000602082019050613e296000830184613081565b92915050565b60006020820190508181036000830152613e498184613102565b905092915050565b60006020820190508181036000830152613e6a816131ca565b9050919050565b60006020820190508181036000830152613e8a81613256565b9050919050565b60006020820190508181036000830152613eaa81613322565b9050919050565b60006020820190508181036000830152613eca81613388565b9050919050565b60006020820190508181036000830152613eea816133ee565b9050919050565b60006020820190508181036000830152613f0a8161347a565b9050919050565b60006020820190508181036000830152613f2a816134e0565b9050919050565b60006020820190508181036000830152613f4a81613612565b9050919050565b60006020820190508181036000830152613f6a8161369e565b9050919050565b60006020820190508181036000830152613f8a81613704565b9050919050565b60006020820190508181036000830152613faa81613790565b9050919050565b60006020820190508181036000830152613fca816137f6565b9050919050565b60006020820190508181036000830152613fea8161385c565b9050919050565b6000602082019050818103600083015261400a816138c2565b9050919050565b6000602082019050818103600083015261402a8161394e565b9050919050565b6000602082019050818103600083015261404a816139b4565b9050919050565b6000602082019050818103600083015261406a81613a1a565b9050919050565b60006060820190506140866000830184613a5a565b92915050565b60006020820190506140a16000830184613aab565b92915050565b6000610120820190506140bd600083018c613aab565b6140ca602083018b612d4b565b81810360408301526140dc818a612d78565b905081810360608301526140f08189612ec0565b905081810360808301526141048188612e4b565b905081810360a08301526141188187612dd6565b905061412760c0830186613aab565b61413460e0830185613aab565b8181036101008301526141478184613090565b90509a9950505050505050505050565b60006101208201905061416d600083018c613aab565b61417a602083018b612d69565b614187604083018a613aab565b6141946060830189613aab565b6141a16080830188613aab565b6141ae60a0830187613aab565b6141bb60c0830186613aab565b6141c860e0830185612f2d565b6141d6610100830184612f2d565b9a9950505050505050505050565b60006040820190506141f96000830185613aab565b6142066020830184613aab565b9392505050565b6000604051905081810181811067ffffffffffffffff8211171561423057600080fd5b8060405250919050565b600067ffffffffffffffff82111561425157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561427957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156142a157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156142c957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156142f157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561431d57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561434957600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561437557600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061451e8261454e565b9050919050565b60008115159050919050565b6000819050919050565b60008190506145498261469c565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b60006145a882614609565b9050919050565b60006145ba826145c1565b9050919050565b60006145cc8261454e565b9050919050565b60006145de826145e5565b9050919050565b60006145f08261454e565b9050919050565b60006146028261453b565b9050919050565b60006146148261461b565b9050919050565b60006146268261454e565b9050919050565b600061463882614585565b9050919050565b82818337600083830152505050565b60005b8381101561466c578082015181840152602081019050614651565b8381111561467b576000848401525b50505050565b6000819050919050565b6000601f19601f8301169050919050565b600881106146a657fe5b50565b6146b281614513565b81146146bd57600080fd5b50565b6146c981614525565b81146146d457600080fd5b50565b6146e081614531565b81146146eb57600080fd5b50565b6146f78161456e565b811461470257600080fd5b50565b61470e81614578565b811461471957600080fd5b50565b61472581614585565b811461473057600080fd5b5056fea365627a7a7231582089eeb75378ffec422cf639d84c55be4d142fb9256e558ea0eb3a2f00df71c70b6c6578706572696d656e74616cf564736f6c63430005100040

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000041d5d79431a913c4ae7d69a668ecdfe5ff9dfb68

-----Decoded View---------------
Arg [0] : inv_ (address): 0x41D5D79431A913C4aE7d69a668ecdfE5fF9DFB68

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000041d5d79431a913c4ae7d69a668ecdfe5ff9dfb68


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Added based on https://docs.inverse.finance/smart-contracts - Azfar 20/10

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.