ETH Price: $3,490.07 (+4.87%)

Contract

0xdDcbd00F388c342b52A5915c2F260F0E113A914d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040114211042020-12-09 21:22:531446 days ago1607548973IN
 Create: StrongPoolV2
0 ETH0.1326656655

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StrongPoolV2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: StrongPoolV2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import "./IERC20.sol";
import "./SafeMath.sol";
import "./VoteInterface.sol";

contract StrongPoolV2 {
    event MinedFor(address indexed miner, uint256 amount);
    event Mined(address indexed miner, uint256 amount);
    event MinedForVotesOnly(address indexed miner, uint256 amount);
    event UnminedForVotesOnly(address indexed miner, uint256 amount);
    event Unmined(address indexed miner, uint256 amount);
    event Claimed(address indexed miner, uint256 reward);

    using SafeMath for uint256;

    bool public initDone;
    address public admin;
    address public pendingAdmin;
    address public superAdmin;
    address public pendingSuperAdmin;
    address public parameterAdmin;
    address payable public feeCollector;

    IERC20 public strongToken;
    VoteInterface public vote;

    mapping(address => uint256) public minerBalance;
    uint256 public totalBalance;
    mapping(address => uint256) public minerBlockLastClaimedOn;

    mapping(address => uint256) public minerVotes;

    uint256 public rewardBalance;

    uint256 public rewardPerBlockNumerator;
    uint256 public rewardPerBlockDenominator;

    uint256 public miningFeeNumerator;
    uint256 public miningFeeDenominator;

    uint256 public unminingFeeNumerator;
    uint256 public unminingFeeDenominator;

    uint256 public claimingFeeNumerator;
    uint256 public claimingFeeDenominator;

    mapping(address => uint256) public inboundContractIndex;
    address[] public inboundContracts;
    mapping(address => bool) public inboundContractTrusted;

    uint256 public claimingFeeInWei;

    function init(
        address voteAddress,
        address strongTokenAddress,
        address adminAddress,
        address superAdminAddress,
        uint256 rewardPerBlockNumeratorValue,
        uint256 rewardPerBlockDenominatorValue,
        uint256 miningFeeNumeratorValue,
        uint256 miningFeeDenominatorValue,
        uint256 unminingFeeNumeratorValue,
        uint256 unminingFeeDenominatorValue,
        uint256 claimingFeeNumeratorValue,
        uint256 claimingFeeDenominatorValue
    ) public {
        require(!initDone, "init done");
        vote = VoteInterface(voteAddress);
        strongToken = IERC20(strongTokenAddress);
        admin = adminAddress;
        superAdmin = superAdminAddress;
        rewardPerBlockNumerator = rewardPerBlockNumeratorValue;
        rewardPerBlockDenominator = rewardPerBlockDenominatorValue;
        miningFeeNumerator = miningFeeNumeratorValue;
        miningFeeDenominator = miningFeeDenominatorValue;
        unminingFeeNumerator = unminingFeeNumeratorValue;
        unminingFeeDenominator = unminingFeeDenominatorValue;
        claimingFeeNumerator = claimingFeeNumeratorValue;
        claimingFeeDenominator = claimingFeeDenominatorValue;
        initDone = true;
    }

    // ADMIN
    // *************************************************************************************
    function updateParameterAdmin(address newParameterAdmin) public {
        require(newParameterAdmin != address(0), "zero");
        require(msg.sender == superAdmin);
        parameterAdmin = newParameterAdmin;
    }

    function updateFeeCollector(address payable newFeeCollector) public {
        require(newFeeCollector != address(0), "zero");
        require(msg.sender == superAdmin);
        feeCollector = newFeeCollector;
    }

    function setPendingAdmin(address newPendingAdmin) public {
        require(newPendingAdmin != address(0), "zero");
        require(msg.sender == admin, "not admin");
        pendingAdmin = newPendingAdmin;
    }

    function acceptAdmin() public {
        require(
            msg.sender == pendingAdmin && msg.sender != address(0),
            "not pendingAdmin"
        );
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    function setPendingSuperAdmin(address newPendingSuperAdmin) public {
        require(newPendingSuperAdmin != address(0), "zero");
        require(msg.sender == superAdmin, "not superAdmin");
        pendingSuperAdmin = newPendingSuperAdmin;
    }

    function acceptSuperAdmin() public {
        require(
            msg.sender == pendingSuperAdmin && msg.sender != address(0),
            "not pendingSuperAdmin"
        );
        superAdmin = pendingSuperAdmin;
        pendingSuperAdmin = address(0);
    }

    // INBOUND CONTRACTS
    // *************************************************************************************
    function addInboundContract(address contr) public {
        require(contr != address(0), "zero");
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        if (inboundContracts.length != 0) {
            uint256 index = inboundContractIndex[contr];
            require(inboundContracts[index] != contr, "exists");
        }
        uint256 len = inboundContracts.length;
        inboundContractIndex[contr] = len;
        inboundContractTrusted[contr] = true;
        inboundContracts.push(contr);
    }

    function inboundContractTrustStatus(address contr, bool trustStatus)
        public
    {
        require(contr != address(0), "zero");
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        uint256 index = inboundContractIndex[contr];
        require(inboundContracts[index] == contr, "not exists");
        inboundContractTrusted[contr] = trustStatus;
    }

    // REWARD
    // *************************************************************************************
    function updateRewardPerBlock(uint256 numerator, uint256 denominator)
        public
    {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(denominator != 0, "invalid value");
        rewardPerBlockNumerator = numerator;
        rewardPerBlockDenominator = denominator;
    }

    function deposit(uint256 amount) public {
        require(msg.sender == superAdmin, "not an admin");
        require(amount > 0, "zero");
        strongToken.transferFrom(msg.sender, address(this), amount);
        rewardBalance = rewardBalance.add(amount);
    }

    function withdraw(address destination, uint256 amount) public {
        require(msg.sender == superAdmin, "not an admin");
        require(amount > 0, "zero");
        require(rewardBalance >= amount, "not enough");
        strongToken.transfer(destination, amount);
        rewardBalance = rewardBalance.sub(amount);
    }

    // FEES
    // *************************************************************************************
    function updateMiningFee(uint256 numerator, uint256 denominator) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(denominator != 0, "invalid value");
        miningFeeNumerator = numerator;
        miningFeeDenominator = denominator;
    }

    function updateUnminingFee(uint256 numerator, uint256 denominator) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(denominator != 0, "invalid value");
        unminingFeeNumerator = numerator;
        unminingFeeDenominator = denominator;
    }

    function updateClaimingFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        claimingFeeInWei = feeInWei;
    }

    // CORE
    // *************************************************************************************
    function mineForVotesOnly(uint256 amount) public {
        require(amount > 0, "zero");
        strongToken.transferFrom(msg.sender, address(this), amount);
        minerVotes[msg.sender] = minerVotes[msg.sender].add(amount);
        vote.updateVotes(msg.sender, amount, true);
        emit MinedForVotesOnly(msg.sender, amount);
    }

    function unmineForVotesOnly(uint256 amount) public {
        require(amount > 0, "zero");
        require(minerVotes[msg.sender] >= amount, "not enough");
        minerVotes[msg.sender] = minerVotes[msg.sender].sub(amount);
        vote.updateVotes(msg.sender, amount, false);
        strongToken.transfer(msg.sender, amount);
        emit UnminedForVotesOnly(msg.sender, amount);
    }

    function mineFor(address miner, uint256 amount) public {
        require(inboundContractTrusted[msg.sender], "not trusted");
        require(amount > 0, "zero");
        strongToken.transferFrom(msg.sender, address(this), amount);
        minerBalance[miner] = minerBalance[miner].add(amount);
        totalBalance = totalBalance.add(amount);
        if (minerBlockLastClaimedOn[miner] == 0) {
            minerBlockLastClaimedOn[miner] = block.number;
        }
        vote.updateVotes(miner, amount, true);
        emit MinedFor(miner, amount);
    }

    function mine(uint256 amount) public payable {
        require(amount > 0, "zero");
        uint256 fee = amount.mul(miningFeeNumerator).div(miningFeeDenominator);
        require(msg.value == fee, "invalid fee");
        feeCollector.transfer(msg.value);
        strongToken.transferFrom(msg.sender, address(this), amount);
        if (block.number > minerBlockLastClaimedOn[msg.sender]) {
            uint256 reward = getReward(msg.sender);
            if (reward > 0) {
                minerBalance[msg.sender] = minerBalance[msg.sender].add(reward);
                totalBalance = totalBalance.add(reward);
                rewardBalance = rewardBalance.sub(reward);
                vote.updateVotes(msg.sender, reward, true);
                minerBlockLastClaimedOn[msg.sender] = block.number;
            }
        }
        minerBalance[msg.sender] = minerBalance[msg.sender].add(amount);
        totalBalance = totalBalance.add(amount);
        if (minerBlockLastClaimedOn[msg.sender] == 0) {
            minerBlockLastClaimedOn[msg.sender] = block.number;
        }
        vote.updateVotes(msg.sender, amount, true);
        emit Mined(msg.sender, amount);
    }

    function unmine(uint256 amount) public payable {
        require(amount > 0, "zero");
        uint256 fee = amount.mul(unminingFeeNumerator).div(
            unminingFeeDenominator
        );
        require(msg.value == fee, "invalid fee");
        require(minerBalance[msg.sender] >= amount, "not enough");
        feeCollector.transfer(msg.value);
        bool unmineAll = (amount == minerBalance[msg.sender]);
        if (block.number > minerBlockLastClaimedOn[msg.sender]) {
            uint256 reward = getReward(msg.sender);
            if (reward > 0) {
                minerBalance[msg.sender] = minerBalance[msg.sender].add(reward);
                totalBalance = totalBalance.add(reward);
                rewardBalance = rewardBalance.sub(reward);
                vote.updateVotes(msg.sender, reward, true);
                minerBlockLastClaimedOn[msg.sender] = block.number;
            }
        }
        uint256 amountToUnmine = unmineAll ? minerBalance[msg.sender] : amount;
        minerBalance[msg.sender] = minerBalance[msg.sender].sub(amountToUnmine);
        totalBalance = totalBalance.sub(amountToUnmine);
        strongToken.transfer(msg.sender, amountToUnmine);
        vote.updateVotes(msg.sender, amountToUnmine, false);
        if (minerBalance[msg.sender] == 0) {
            minerBlockLastClaimedOn[msg.sender] = 0;
        }
        emit Unmined(msg.sender, amountToUnmine);
    }

    function claim() public payable {
        require(minerBlockLastClaimedOn[msg.sender] != 0, "error");
        require(block.number > minerBlockLastClaimedOn[msg.sender], "too soon");
        uint256 reward = getReward(msg.sender);
        require(reward > 0, "no reward");
        require(msg.value == claimingFeeInWei, "invalid fee");
        feeCollector.transfer(msg.value);
        minerBalance[msg.sender] = minerBalance[msg.sender].add(reward);
        totalBalance = totalBalance.add(reward);
        rewardBalance = rewardBalance.sub(reward);
        minerBlockLastClaimedOn[msg.sender] = block.number;
        vote.updateVotes(msg.sender, reward, true);
        emit Claimed(msg.sender, reward);
    }

    function getReward(address miner) public view returns (uint256) {
        if (totalBalance == 0) return 0;
        if (minerBlockLastClaimedOn[miner] == 0) return 0;
        uint256 blockResult = block.number.sub(minerBlockLastClaimedOn[miner]);
        uint256 rewardPerBlockResult = blockResult
            .mul(rewardPerBlockNumerator)
            .div(rewardPerBlockDenominator);
        return rewardPerBlockResult.mul(minerBalance[miner]).div(totalBalance);
    }
}

File 2 of 4: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 4: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

File 4 of 4: VoteInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface VoteInterface {
  function getPriorProposalVotes(address account, uint256 blockNumber) external view returns (uint96);

  function updateVotes(
    address voter,
    uint256 rawAmount,
    bool adding
  ) external;
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MinedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MinedForVotesOnly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unmined","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnminedForVotesOnly","type":"event"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"}],"name":"addInboundContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimingFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"inboundContractIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"},{"internalType":"bool","name":"trustStatus","type":"bool"}],"name":"inboundContractTrustStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"inboundContractTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"inboundContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"voteAddress","type":"address"},{"internalType":"address","name":"strongTokenAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"},{"internalType":"uint256","name":"rewardPerBlockNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"rewardPerBlockDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"miningFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"miningFeeDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"unminingFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"unminingFeeDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeDenominatorValue","type":"uint256"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"miner","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mineFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mineForVotesOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerBlockLastClaimedOn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minerVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameterAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strongToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unmine","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unmineForVotesOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unminingFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unminingFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateClaimingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeCollector","type":"address"}],"name":"updateFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateMiningFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newParameterAdmin","type":"address"}],"name":"updateParameterAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateUnminingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vote","outputs":[{"internalType":"contract VoteInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50612aac806100206000396000f3fe6080604052600436106102935760003560e01c8063965d61b91161015a578063cb454ec9116100c1578063e7f9cefd1161007a578063e7f9cefd14610904578063ef56a08b14610919578063f3fef3a31461092e578063f426571514610967578063f851a44014610984578063fed0a20e1461099957610293565b8063cb454ec91461080e578063ce77beaf14610841578063d2c35ce814610856578063d39ca7de14610889578063db588ec2146108bc578063e771e91a146108d157610293565b8063b6b55f2511610113578063b6b55f251461070d578063be69283e14610737578063c00007b01461077e578063c2acf7ea146107b1578063c2b2fdca146107e4578063c415b95c146107f957610293565b8063965d61b91461065957806399e6f7001461066e578063a84ffad514610683578063aa5c3ab4146106b3578063abb1c39b146106c8578063ad7a672f146106f857610293565b806348028d63116101fe5780635b7f6ea8116101b75780635b7f6ea814610550578063632a9a5214610565578063683a229f1461057a578063857d49d5146105fc57806387f48f4e146106115780638b70f3591461062657610293565b806348028d631461047e5780634d04ad99146104935780634d474898146104bd5780634dd18bf5146104da5780634e71d92d1461050d578063546f93541461051557610293565b8063198858981161025057806319885898146103a057806326782247146103b557806329575f6a146103ca57806330d6a975146103df57806337e4c4ae1461041857806340b584b41461044b57610293565b806309a07fd2146102985780630a8d1be2146102bf5780630e18b681146102f15780630f07aa62146103065780630f1139cf1461034c5780631246af8914610376575b600080fd5b3480156102a457600080fd5b506102ad6109ae565b60408051918252519081900360200190f35b3480156102cb57600080fd5b506102ef600480360360408110156102e257600080fd5b50803590602001356109b4565b005b3480156102fd57600080fd5b506102ef610a7e565b34801561031257600080fd5b506103306004803603602081101561032957600080fd5b5035610b0d565b604080516001600160a01b039092168252519081900360200190f35b34801561035857600080fd5b506102ef6004803603602081101561036f57600080fd5b5035610b34565b34801561038257600080fd5b506102ef6004803603602081101561039957600080fd5b5035610bb6565b3480156103ac57600080fd5b506102ad610d4f565b3480156103c157600080fd5b50610330610d55565b3480156103d657600080fd5b50610330610d64565b3480156103eb57600080fd5b506102ef6004803603604081101561040257600080fd5b506001600160a01b038135169060200135610d73565b34801561042457600080fd5b506102ef6004803603602081101561043b57600080fd5b50356001600160a01b0316610fc5565b34801561045757600080fd5b506102ef6004803603602081101561046e57600080fd5b50356001600160a01b0316611184565b34801561048a57600080fd5b50610330611201565b34801561049f57600080fd5b506102ef600480360360208110156104b657600080fd5b5035611210565b6102ef600480360360208110156104d357600080fd5b50356113f4565b3480156104e657600080fd5b506102ef600480360360208110156104fd57600080fd5b50356001600160a01b0316611761565b6102ef611817565b34801561052157600080fd5b506102ef6004803603604081101561053857600080fd5b506001600160a01b0381351690602001351515611a7e565b34801561055c57600080fd5b506102ad611be9565b34801561057157600080fd5b50610330611bef565b34801561058657600080fd5b506102ef600480360361018081101561059e57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e0810135906101008101359061012081013590610140810135906101600135611bfe565b34801561060857600080fd5b50610330611ccc565b34801561061d57600080fd5b506102ad611cdb565b34801561063257600080fd5b506102ad6004803603602081101561064957600080fd5b50356001600160a01b0316611ce1565b34801561066557600080fd5b50610330611cf3565b34801561067a57600080fd5b506102ad611d02565b34801561068f57600080fd5b506102ef600480360360408110156106a657600080fd5b5080359060200135611d08565b3480156106bf57600080fd5b506102ad611dd2565b3480156106d457600080fd5b506102ef600480360360408110156106eb57600080fd5b5080359060200135611dd8565b34801561070457600080fd5b506102ad611ea2565b34801561071957600080fd5b506102ef6004803603602081101561073057600080fd5b5035611ea8565b34801561074357600080fd5b5061076a6004803603602081101561075a57600080fd5b50356001600160a01b0316611fcd565b604080519115158252519081900360200190f35b34801561078a57600080fd5b506102ad600480360360208110156107a157600080fd5b50356001600160a01b0316611fe2565b3480156107bd57600080fd5b506102ad600480360360208110156107d457600080fd5b50356001600160a01b0316612097565b3480156107f057600080fd5b506102ad6120a9565b34801561080557600080fd5b506103306120af565b34801561081a57600080fd5b506102ad6004803603602081101561083157600080fd5b50356001600160a01b03166120be565b34801561084d57600080fd5b506102ad6120d0565b34801561086257600080fd5b506102ef6004803603602081101561087957600080fd5b50356001600160a01b03166120d6565b34801561089557600080fd5b506102ef600480360360208110156108ac57600080fd5b50356001600160a01b0316612153565b3480156108c857600080fd5b506102ad612209565b3480156108dd57600080fd5b506102ad600480360360208110156108f457600080fd5b50356001600160a01b031661220f565b34801561091057600080fd5b506102ef612221565b34801561092557600080fd5b506102ad6122aa565b34801561093a57600080fd5b506102ef6004803603604081101561095157600080fd5b506001600160a01b0381351690602001356122b0565b6102ef6004803603602081101561097d57600080fd5b5035612416565b34801561099057600080fd5b506103306127fc565b3480156109a557600080fd5b5061076a612810565b60135481565b60005461010090046001600160a01b03163314806109dc57506004546001600160a01b031633145b806109f157506002546001600160a01b031633145b610a31576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80610a73576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b6001546001600160a01b031633148015610a9757503315155b610adb576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60168181548110610b1a57fe5b6000918252602090912001546001600160a01b0316905081565b60005461010090046001600160a01b0316331480610b5c57506004546001600160a01b031633145b80610b7157506002546001600160a01b031633145b610bb1576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601855565b60008111610bf4576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506040513d6020811015610c7857600080fd5b5050336000908152600b6020526040902054610c949082612819565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526001604484015292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b158015610cfe57600080fd5b505af1158015610d12573d6000803e3d6000fd5b50506040805184815290513393507ff37db06620b96226404d091596ee3290dd042d17dc5c440a97876ffbb5d0886092509081900360200190a250565b600e5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b3360009081526017602052604090205460ff16610dc5576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d1c9d5cdd195960aa1b604482015290519081900360640190fd5b60008111610e03576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d6020811015610e8757600080fd5b50506001600160a01b038216600090815260086020526040902054610eac9082612819565b6001600160a01b038316600090815260086020526040902055600954610ed29082612819565b6009556001600160a01b0382166000908152600a6020526040902054610f0e576001600160a01b0382166000908152600a602052604090204390555b60075460408051639fb9ec1160e01b81526001600160a01b038581166004830152602482018590526001604483015291519190921691639fb9ec1191606480830192600092919082900301818387803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507f4995275d5fede9791a4f176a8aa7d0fea6c316f6ba53693c3acd58ee707a719692509081900360200190a25050565b6001600160a01b038116611009576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b031633148061103157506004546001600160a01b031633145b8061104657506002546001600160a01b031633145b611086576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6016541561110b576001600160a01b03811660008181526015602052604090205460168054919291839081106110b857fe5b6000918252602090912001546001600160a01b03161415611109576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b505b601680546001600160a01b0390921660008181526015602090815260408083209590955560179052928320805460ff1916600190811790915582549081018355919092527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319169091179055565b6001600160a01b0381166111c8576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146111df57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6000811161124e576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b336000908152600b602052604090205481111561129f576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b336000908152600b60205260409020546112b9908261287c565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526044830182905292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b03909216935063a9059cbb92506044808201926020929091908290030181600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b505060408051828152905133917f6d45e65025b4e5354fca7fcb828878818b16573fe504e384472faa881216dd5a919081900360200190a250565b60008111611432576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600061145560105461144f600f54856128be90919063ffffffff16565b90612917565b9050803414611499576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156114d2573d6000803e3d6000fd5b50600654604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561152d57600080fd5b505af1158015611541573d6000803e3d6000fd5b505050506040513d602081101561155757600080fd5b5050336000908152600a602052604090205443111561165457600061157b33611fe2565b90508015611652573360009081526008602052604090205461159d9082612819565b336000908152600860205260409020556009546115ba9082612819565b600955600c546115ca908261287c565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b15801561162757600080fd5b505af115801561163b573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b3360009081526008602052604090205461166e9083612819565b3360009081526008602052604090205560095461168b9083612819565b600955336000908152600a60205260409020546116b557336000908152600a602052604090204390555b60075460408051639fb9ec1160e01b8152336004820152602481018590526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b15801561170f57600080fd5b505af1158015611723573d6000803e3d6000fd5b50506040805185815290513393507f3ad10ba9777a3bc21180a465e5459861d07cbdb271af9a0f10c993b365b760f892509081900360200190a25050565b6001600160a01b0381166117a5576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b031633146117f5576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600a6020526040902054611860576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b336000908152600a602052604090205443116118ae576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b60006118b933611fe2565b9050600081116118fc576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6018543414611940576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611979573d6000803e3d6000fd5b50336000908152600860205260409020546119949082612819565b336000908152600860205260409020556009546119b19082612819565b600955600c546119c1908261287c565b600c55336000818152600a60205260408082204390556007548151639fb9ec1160e01b81526004810194909452602484018590526001604485015290516001600160a01b0390911692639fb9ec1192606480830193919282900301818387803b158015611a2d57600080fd5b505af1158015611a41573d6000803e3d6000fd5b50506040805184815290513393507fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a92509081900360200190a250565b6001600160a01b038216611ac2576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b0316331480611aea57506004546001600160a01b031633145b80611aff57506002546001600160a01b031633145b611b3f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b0382166000818152601560205260409020546016805491929183908110611b6957fe5b6000918252602090912001546001600160a01b031614611bbd576040805162461bcd60e51b815260206004820152600a6024820152696e6f742065786973747360b01b604482015290519081900360640190fd5b506001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b600f5481565b6007546001600160a01b031681565b60005460ff1615611c42576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600780546001600160a01b03199081166001600160a01b039e8f16179091556006805482169c8e169c909c17909b556000805460028054909d169a8e169a909a17909b55600d97909755600e95909555600f93909355601091909155601155601255601355601455610100600160a81b03191661010091909316029190911760ff19166001179055565b6004546001600160a01b031681565b60145481565b600a6020526000908152604090205481565b6006546001600160a01b031681565b600d5481565b60005461010090046001600160a01b0316331480611d3057506004546001600160a01b031633145b80611d4557506002546001600160a01b031633145b611d85576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611dc7576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600f91909155601055565b600c5481565b60005461010090046001600160a01b0316331480611e0057506004546001600160a01b031633145b80611e1557506002546001600160a01b031633145b611e55576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611e97576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b601191909155601255565b60095481565b6002546001600160a01b03163314611ef6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111611f34576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611f8e57600080fd5b505af1158015611fa2573d6000803e3d6000fd5b505050506040513d6020811015611fb857600080fd5b5050600c54611fc79082612819565b600c5550565b60176020526000908152604090205460ff1681565b600060095460001415611ff757506000612092565b6001600160a01b0382166000908152600a602052604090205461201c57506000612092565b6001600160a01b0382166000908152600a602052604081205461204090439061287c565b9050600061205f600e5461144f600d54856128be90919063ffffffff16565b6009546001600160a01b03861660009081526008602052604090205491925061208d9161144f9084906128be565b925050505b919050565b60156020526000908152604090205481565b60185481565b6005546001600160a01b031681565b600b6020526000908152604090205481565b60115481565b6001600160a01b03811661211a576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461213157600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116612197576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146121e7576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60086020526000908152604090205481565b6003546001600160a01b03163314801561223a57503315155b612283576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60105481565b6002546001600160a01b031633146122fe576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6000811161233c576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b80600c541015612380576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6006546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156123d657600080fd5b505af11580156123ea573d6000803e3d6000fd5b505050506040513d602081101561240057600080fd5b5050600c5461240f908261287c565b600c555050565b60008111612454576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600061247160125461144f601154856128be90919063ffffffff16565b90508034146124b5576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b33600090815260086020526040902054821115612506576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561253f573d6000803e3d6000fd5b5033600090815260086020908152604080832054600a909252909120549083149043111561264b57600061257233611fe2565b9050801561264957336000908152600860205260409020546125949082612819565b336000908152600860205260409020556009546125b19082612819565b600955600c546125c1908261287c565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b15801561261e57600080fd5b505af1158015612632573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b6000816126585783612669565b336000908152600860205260409020545b33600090815260086020526040902054909150612686908261287c565b336000908152600860205260409020556009546126a3908261287c565b6009556006546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b505050506040513d602081101561272457600080fd5b505060075460408051639fb9ec1160e01b81523360048201526024810184905260006044820181905291516001600160a01b0390931692639fb9ec119260648084019391929182900301818387803b15801561277f57600080fd5b505af1158015612793573d6000803e3d6000fd5b505033600090815260086020526040902054151591506127c0905057336000908152600a60205260408120555b60408051828152905133917f53d02005d2e370ce08a8b60d65e07879891c336e6513821a3923f11854b54027919081900360200190a250505050565b60005461010090046001600160a01b031681565b60005460ff1681565b600082820183811015612873576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061287383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612959565b6000826128cd57506000612876565b828202828482816128da57fe5b04146128735760405162461bcd60e51b8152600401808060200182810382526021815260200180612a566021913960400191505060405180910390fd5b600061287383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129f0565b600081848411156129e85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129ad578181015183820152602001612995565b50505050905090810190601f1680156129da5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612a3f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129ad578181015183820152602001612995565b506000838581612a4b57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212206d2b4d8bf5aefa0eb75d7e34c15669d33dda7a55091da3b01f12c55afa7becc564736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102935760003560e01c8063965d61b91161015a578063cb454ec9116100c1578063e7f9cefd1161007a578063e7f9cefd14610904578063ef56a08b14610919578063f3fef3a31461092e578063f426571514610967578063f851a44014610984578063fed0a20e1461099957610293565b8063cb454ec91461080e578063ce77beaf14610841578063d2c35ce814610856578063d39ca7de14610889578063db588ec2146108bc578063e771e91a146108d157610293565b8063b6b55f2511610113578063b6b55f251461070d578063be69283e14610737578063c00007b01461077e578063c2acf7ea146107b1578063c2b2fdca146107e4578063c415b95c146107f957610293565b8063965d61b91461065957806399e6f7001461066e578063a84ffad514610683578063aa5c3ab4146106b3578063abb1c39b146106c8578063ad7a672f146106f857610293565b806348028d63116101fe5780635b7f6ea8116101b75780635b7f6ea814610550578063632a9a5214610565578063683a229f1461057a578063857d49d5146105fc57806387f48f4e146106115780638b70f3591461062657610293565b806348028d631461047e5780634d04ad99146104935780634d474898146104bd5780634dd18bf5146104da5780634e71d92d1461050d578063546f93541461051557610293565b8063198858981161025057806319885898146103a057806326782247146103b557806329575f6a146103ca57806330d6a975146103df57806337e4c4ae1461041857806340b584b41461044b57610293565b806309a07fd2146102985780630a8d1be2146102bf5780630e18b681146102f15780630f07aa62146103065780630f1139cf1461034c5780631246af8914610376575b600080fd5b3480156102a457600080fd5b506102ad6109ae565b60408051918252519081900360200190f35b3480156102cb57600080fd5b506102ef600480360360408110156102e257600080fd5b50803590602001356109b4565b005b3480156102fd57600080fd5b506102ef610a7e565b34801561031257600080fd5b506103306004803603602081101561032957600080fd5b5035610b0d565b604080516001600160a01b039092168252519081900360200190f35b34801561035857600080fd5b506102ef6004803603602081101561036f57600080fd5b5035610b34565b34801561038257600080fd5b506102ef6004803603602081101561039957600080fd5b5035610bb6565b3480156103ac57600080fd5b506102ad610d4f565b3480156103c157600080fd5b50610330610d55565b3480156103d657600080fd5b50610330610d64565b3480156103eb57600080fd5b506102ef6004803603604081101561040257600080fd5b506001600160a01b038135169060200135610d73565b34801561042457600080fd5b506102ef6004803603602081101561043b57600080fd5b50356001600160a01b0316610fc5565b34801561045757600080fd5b506102ef6004803603602081101561046e57600080fd5b50356001600160a01b0316611184565b34801561048a57600080fd5b50610330611201565b34801561049f57600080fd5b506102ef600480360360208110156104b657600080fd5b5035611210565b6102ef600480360360208110156104d357600080fd5b50356113f4565b3480156104e657600080fd5b506102ef600480360360208110156104fd57600080fd5b50356001600160a01b0316611761565b6102ef611817565b34801561052157600080fd5b506102ef6004803603604081101561053857600080fd5b506001600160a01b0381351690602001351515611a7e565b34801561055c57600080fd5b506102ad611be9565b34801561057157600080fd5b50610330611bef565b34801561058657600080fd5b506102ef600480360361018081101561059e57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e0810135906101008101359061012081013590610140810135906101600135611bfe565b34801561060857600080fd5b50610330611ccc565b34801561061d57600080fd5b506102ad611cdb565b34801561063257600080fd5b506102ad6004803603602081101561064957600080fd5b50356001600160a01b0316611ce1565b34801561066557600080fd5b50610330611cf3565b34801561067a57600080fd5b506102ad611d02565b34801561068f57600080fd5b506102ef600480360360408110156106a657600080fd5b5080359060200135611d08565b3480156106bf57600080fd5b506102ad611dd2565b3480156106d457600080fd5b506102ef600480360360408110156106eb57600080fd5b5080359060200135611dd8565b34801561070457600080fd5b506102ad611ea2565b34801561071957600080fd5b506102ef6004803603602081101561073057600080fd5b5035611ea8565b34801561074357600080fd5b5061076a6004803603602081101561075a57600080fd5b50356001600160a01b0316611fcd565b604080519115158252519081900360200190f35b34801561078a57600080fd5b506102ad600480360360208110156107a157600080fd5b50356001600160a01b0316611fe2565b3480156107bd57600080fd5b506102ad600480360360208110156107d457600080fd5b50356001600160a01b0316612097565b3480156107f057600080fd5b506102ad6120a9565b34801561080557600080fd5b506103306120af565b34801561081a57600080fd5b506102ad6004803603602081101561083157600080fd5b50356001600160a01b03166120be565b34801561084d57600080fd5b506102ad6120d0565b34801561086257600080fd5b506102ef6004803603602081101561087957600080fd5b50356001600160a01b03166120d6565b34801561089557600080fd5b506102ef600480360360208110156108ac57600080fd5b50356001600160a01b0316612153565b3480156108c857600080fd5b506102ad612209565b3480156108dd57600080fd5b506102ad600480360360208110156108f457600080fd5b50356001600160a01b031661220f565b34801561091057600080fd5b506102ef612221565b34801561092557600080fd5b506102ad6122aa565b34801561093a57600080fd5b506102ef6004803603604081101561095157600080fd5b506001600160a01b0381351690602001356122b0565b6102ef6004803603602081101561097d57600080fd5b5035612416565b34801561099057600080fd5b506103306127fc565b3480156109a557600080fd5b5061076a612810565b60135481565b60005461010090046001600160a01b03163314806109dc57506004546001600160a01b031633145b806109f157506002546001600160a01b031633145b610a31576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80610a73576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b6001546001600160a01b031633148015610a9757503315155b610adb576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60168181548110610b1a57fe5b6000918252602090912001546001600160a01b0316905081565b60005461010090046001600160a01b0316331480610b5c57506004546001600160a01b031633145b80610b7157506002546001600160a01b031633145b610bb1576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601855565b60008111610bf4576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506040513d6020811015610c7857600080fd5b5050336000908152600b6020526040902054610c949082612819565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526001604484015292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b158015610cfe57600080fd5b505af1158015610d12573d6000803e3d6000fd5b50506040805184815290513393507ff37db06620b96226404d091596ee3290dd042d17dc5c440a97876ffbb5d0886092509081900360200190a250565b600e5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b3360009081526017602052604090205460ff16610dc5576040805162461bcd60e51b815260206004820152600b60248201526a1b9bdd081d1c9d5cdd195960aa1b604482015290519081900360640190fd5b60008111610e03576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d6020811015610e8757600080fd5b50506001600160a01b038216600090815260086020526040902054610eac9082612819565b6001600160a01b038316600090815260086020526040902055600954610ed29082612819565b6009556001600160a01b0382166000908152600a6020526040902054610f0e576001600160a01b0382166000908152600a602052604090204390555b60075460408051639fb9ec1160e01b81526001600160a01b038581166004830152602482018590526001604483015291519190921691639fb9ec1191606480830192600092919082900301818387803b158015610f6a57600080fd5b505af1158015610f7e573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693507f4995275d5fede9791a4f176a8aa7d0fea6c316f6ba53693c3acd58ee707a719692509081900360200190a25050565b6001600160a01b038116611009576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b031633148061103157506004546001600160a01b031633145b8061104657506002546001600160a01b031633145b611086576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6016541561110b576001600160a01b03811660008181526015602052604090205460168054919291839081106110b857fe5b6000918252602090912001546001600160a01b03161415611109576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b505b601680546001600160a01b0390921660008181526015602090815260408083209590955560179052928320805460ff1916600190811790915582549081018355919092527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319169091179055565b6001600160a01b0381166111c8576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146111df57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6000811161124e576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b336000908152600b602052604090205481111561129f576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b336000908152600b60205260409020546112b9908261287c565b336000818152600b6020526040808220939093556007548351639fb9ec1160e01b81526004810193909352602483018590526044830182905292516001600160a01b0390931692639fb9ec1192606480820193929182900301818387803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b50506006546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b03909216935063a9059cbb92506044808201926020929091908290030181600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050506040513d60208110156113b957600080fd5b505060408051828152905133917f6d45e65025b4e5354fca7fcb828878818b16573fe504e384472faa881216dd5a919081900360200190a250565b60008111611432576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600061145560105461144f600f54856128be90919063ffffffff16565b90612917565b9050803414611499576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156114d2573d6000803e3d6000fd5b50600654604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561152d57600080fd5b505af1158015611541573d6000803e3d6000fd5b505050506040513d602081101561155757600080fd5b5050336000908152600a602052604090205443111561165457600061157b33611fe2565b90508015611652573360009081526008602052604090205461159d9082612819565b336000908152600860205260409020556009546115ba9082612819565b600955600c546115ca908261287c565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b15801561162757600080fd5b505af115801561163b573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b3360009081526008602052604090205461166e9083612819565b3360009081526008602052604090205560095461168b9083612819565b600955336000908152600a60205260409020546116b557336000908152600a602052604090204390555b60075460408051639fb9ec1160e01b8152336004820152602481018590526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b15801561170f57600080fd5b505af1158015611723573d6000803e3d6000fd5b50506040805185815290513393507f3ad10ba9777a3bc21180a465e5459861d07cbdb271af9a0f10c993b365b760f892509081900360200190a25050565b6001600160a01b0381166117a5576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b031633146117f5576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600a6020526040902054611860576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b336000908152600a602052604090205443116118ae576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b60006118b933611fe2565b9050600081116118fc576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6018543414611940576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611979573d6000803e3d6000fd5b50336000908152600860205260409020546119949082612819565b336000908152600860205260409020556009546119b19082612819565b600955600c546119c1908261287c565b600c55336000818152600a60205260408082204390556007548151639fb9ec1160e01b81526004810194909452602484018590526001604485015290516001600160a01b0390911692639fb9ec1192606480830193919282900301818387803b158015611a2d57600080fd5b505af1158015611a41573d6000803e3d6000fd5b50506040805184815290513393507fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a92509081900360200190a250565b6001600160a01b038216611ac2576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b60005461010090046001600160a01b0316331480611aea57506004546001600160a01b031633145b80611aff57506002546001600160a01b031633145b611b3f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6001600160a01b0382166000818152601560205260409020546016805491929183908110611b6957fe5b6000918252602090912001546001600160a01b031614611bbd576040805162461bcd60e51b815260206004820152600a6024820152696e6f742065786973747360b01b604482015290519081900360640190fd5b506001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b600f5481565b6007546001600160a01b031681565b60005460ff1615611c42576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b600780546001600160a01b03199081166001600160a01b039e8f16179091556006805482169c8e169c909c17909b556000805460028054909d169a8e169a909a17909b55600d97909755600e95909555600f93909355601091909155601155601255601355601455610100600160a81b03191661010091909316029190911760ff19166001179055565b6004546001600160a01b031681565b60145481565b600a6020526000908152604090205481565b6006546001600160a01b031681565b600d5481565b60005461010090046001600160a01b0316331480611d3057506004546001600160a01b031633145b80611d4557506002546001600160a01b031633145b611d85576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611dc7576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600f91909155601055565b600c5481565b60005461010090046001600160a01b0316331480611e0057506004546001600160a01b031633145b80611e1557506002546001600160a01b031633145b611e55576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611e97576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b601191909155601255565b60095481565b6002546001600160a01b03163314611ef6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111611f34576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600654604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611f8e57600080fd5b505af1158015611fa2573d6000803e3d6000fd5b505050506040513d6020811015611fb857600080fd5b5050600c54611fc79082612819565b600c5550565b60176020526000908152604090205460ff1681565b600060095460001415611ff757506000612092565b6001600160a01b0382166000908152600a602052604090205461201c57506000612092565b6001600160a01b0382166000908152600a602052604081205461204090439061287c565b9050600061205f600e5461144f600d54856128be90919063ffffffff16565b6009546001600160a01b03861660009081526008602052604090205491925061208d9161144f9084906128be565b925050505b919050565b60156020526000908152604090205481565b60185481565b6005546001600160a01b031681565b600b6020526000908152604090205481565b60115481565b6001600160a01b03811661211a576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461213157600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116612197576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146121e7576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60086020526000908152604090205481565b6003546001600160a01b03163314801561223a57503315155b612283576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60105481565b6002546001600160a01b031633146122fe576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6000811161233c576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b80600c541015612380576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6006546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156123d657600080fd5b505af11580156123ea573d6000803e3d6000fd5b505050506040513d602081101561240057600080fd5b5050600c5461240f908261287c565b600c555050565b60008111612454576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600061247160125461144f601154856128be90919063ffffffff16565b90508034146124b5576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b33600090815260086020526040902054821115612506576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6005546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561253f573d6000803e3d6000fd5b5033600090815260086020908152604080832054600a909252909120549083149043111561264b57600061257233611fe2565b9050801561264957336000908152600860205260409020546125949082612819565b336000908152600860205260409020556009546125b19082612819565b600955600c546125c1908261287c565b600c5560075460408051639fb9ec1160e01b8152336004820152602481018490526001604482015290516001600160a01b0390921691639fb9ec119160648082019260009290919082900301818387803b15801561261e57600080fd5b505af1158015612632573d6000803e3d6000fd5b5050336000908152600a6020526040902043905550505b505b6000816126585783612669565b336000908152600860205260409020545b33600090815260086020526040902054909150612686908261287c565b336000908152600860205260409020556009546126a3908261287c565b6009556006546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156126fa57600080fd5b505af115801561270e573d6000803e3d6000fd5b505050506040513d602081101561272457600080fd5b505060075460408051639fb9ec1160e01b81523360048201526024810184905260006044820181905291516001600160a01b0390931692639fb9ec119260648084019391929182900301818387803b15801561277f57600080fd5b505af1158015612793573d6000803e3d6000fd5b505033600090815260086020526040902054151591506127c0905057336000908152600a60205260408120555b60408051828152905133917f53d02005d2e370ce08a8b60d65e07879891c336e6513821a3923f11854b54027919081900360200190a250505050565b60005461010090046001600160a01b031681565b60005460ff1681565b600082820183811015612873576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600061287383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612959565b6000826128cd57506000612876565b828202828482816128da57fe5b04146128735760405162461bcd60e51b8152600401808060200182810382526021815260200180612a566021913960400191505060405180910390fd5b600061287383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129f0565b600081848411156129e85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129ad578181015183820152602001612995565b50505050905090810190601f1680156129da5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612a3f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129ad578181015183820152602001612995565b506000838581612a4b57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212206d2b4d8bf5aefa0eb75d7e34c15669d33dda7a55091da3b01f12c55afa7becc564736f6c634300060c0033

Deployed Bytecode Sourcemap

137:13019:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1357:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5757:422;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5757:422:2;;;;;;;:::i;:::-;;3643:229;;;;;;;;;;;;;:::i;1503:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1503:33:2;;:::i;:::-;;;;-1:-1:-1;;;;;1503:33:2;;;;;;;;;;;;;;7696:276;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7696:276:2;;:::i;8083:335::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8083:335:2;;:::i;1144:40::-;;;;;;;;;;;;;:::i;620:27::-;;;;;;;;;;;;;:::i;653:25::-;;;;;;;;;;;;;:::i;8816:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8816:553:2;;;;;;;;:::i;4513:633::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4513:633:2;-1:-1:-1;;;;;4513:633:2;;:::i;2984:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2984:216:2;-1:-1:-1;;;;;2984:216:2;;:::i;684:32::-;;;;;;;;;;;;;:::i;8424:386::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8424:386:2;;:::i;9375:1171::-;;;;;;;;;;;;;;;;-1:-1:-1;9375:1171:2;;:::i;3426:211::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3426:211:2;-1:-1:-1;;;;;3426:211:2;;:::i;11969:710::-;;;:::i;5152:492::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5152:492:2;;;;;;;;;;:::i;1191:33::-;;;;;;;;;;;;;:::i;830:25::-;;;;;;;;;;;;;:::i;1641:1231::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1641:1231:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;722:29::-;;;;;;;;;;;;;:::i;1398:37::-;;;;;;;;;;;;;:::i;948:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;948:58:2;-1:-1:-1;;;;;948:58:2;;:::i;799:25::-;;;;;;;;;;;;;:::i;1100:38::-;;;;;;;;;;;;;:::i;6888:395::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6888:395:2;;;;;;;:::i;1065:28::-;;;;;;;;;;;;;:::i;7289:401::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7289:401:2;;;;;;;:::i;915:27::-;;;;;;;;;;;;;:::i;6185:263::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6185:263:2;;:::i;1542:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1542:54:2;-1:-1:-1;;;;;1542:54:2;;:::i;:::-;;;;;;;;;;;;;;;;;;12685:469;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12685:469:2;-1:-1:-1;;;;;12685:469:2;;:::i;1442:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1442:55:2;-1:-1:-1;;;;;1442:55:2;;:::i;1603:31::-;;;;;;;;;;;;;:::i;757:35::-;;;;;;;;;;;;;:::i;1013:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1013:45:2;-1:-1:-1;;;;;1013:45:2;;:::i;1272:35::-;;;;;;;;;;;;;:::i;3206:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3206:214:2;-1:-1:-1;;;;;3206:214:2;;:::i;3878:246::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3878:246:2;-1:-1:-1;;;;;3878:246:2;;:::i;1313:37::-;;;;;;;;;;;;;:::i;862:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;862:47:2;-1:-1:-1;;;;;862:47:2;;:::i;4130:259::-;;;;;;;;;;;;;:::i;1230:35::-;;;;;;;;;;;;;:::i;6454:323::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6454:323:2;;;;;;;;:::i;10552:1411::-;;;;;;;;;;;;;;;;-1:-1:-1;10552:1411:2;;:::i;594:20::-;;;;;;;;;;;;;:::i;568:::-;;;;;;;;;;;;;:::i;1357:35::-;;;;:::o;5757:422::-;5891:5;;;;;-1:-1:-1;;;;;5891:5:2;5877:10;:19;;:67;;-1:-1:-1;5930:14:2;;-1:-1:-1;;;;;5930:14:2;5916:10;:28;5877:67;:111;;;-1:-1:-1;5978:10:2;;-1:-1:-1;;;;;5978:10:2;5964;:24;5877:111;5856:170;;;;;-1:-1:-1;;;5856:170:2;;;;;;;;;;;;-1:-1:-1;;;5856:170:2;;;;;;;;;;;;;;;6044:16;6036:42;;;;;-1:-1:-1;;;6036:42:2;;;;;;;;;;;;-1:-1:-1;;;6036:42:2;;;;;;;;;;;;;;;6088:23;:35;;;;6133:25;:39;5757:422::o;3643:229::-;3718:12;;-1:-1:-1;;;;;3718:12:2;3704:10;:26;:54;;;;-1:-1:-1;3734:10:2;:24;;3704:54;3683:117;;;;;-1:-1:-1;;;3683:117:2;;;;;;;;;;;;-1:-1:-1;;;3683:117:2;;;;;;;;;;;;;;;3818:12;;;;3810:20;;-1:-1:-1;;;;;;3810:20:2;3818:12;-1:-1:-1;;;;;3818:12:2;;3810:20;;;;-1:-1:-1;;;;;;3840:25:2;;;3643:229::o;1503:33::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1503:33:2;;-1:-1:-1;1503:33:2;:::o;7696:276::-;7793:5;;;;;-1:-1:-1;;;;;7793:5:2;7779:10;:19;;:67;;-1:-1:-1;7832:14:2;;-1:-1:-1;;;;;7832:14:2;7818:10;:28;7779:67;:111;;;-1:-1:-1;7880:10:2;;-1:-1:-1;;;;;7880:10:2;7866;:24;7779:111;7758:170;;;;;-1:-1:-1;;;7758:170:2;;;;;;;;;;;;-1:-1:-1;;;7758:170:2;;;;;;;;;;;;;;;7938:16;:27;7696:276::o;8083:335::-;8159:1;8150:6;:10;8142:27;;;;;-1:-1:-1;;;8142:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;8142:27:2;;;;;;;;;;;;;;;8179:11;;:59;;;-1:-1:-1;;;8179:59:2;;8204:10;8179:59;;;;8224:4;8179:59;;;;;;;;;;;;-1:-1:-1;;;;;8179:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8284:10:2;8273:22;;;;:10;8179:59;8273:22;;;;;:34;;8300:6;8273:26;:34::i;:::-;8259:10;8248:22;;;;:10;:22;;;;;;:59;;;;8317:4;;:42;;-1:-1:-1;;;8317:42:2;;;;;;;;;;;;;;;:4;:42;;;;;;-1:-1:-1;;;;;8317:4:2;;;;:16;;:42;;;;;8248:22;8317:42;;;;;;8248:22;8317:4;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8374:37:2;;;;;;;;8392:10;;-1:-1:-1;8374:37:2;;-1:-1:-1;8374:37:2;;;;;;;;8083:335;:::o;1144:40::-;;;;:::o;620:27::-;;;-1:-1:-1;;;;;620:27:2;;:::o;653:25::-;;;-1:-1:-1;;;;;653:25:2;;:::o;8816:553::-;8912:10;8889:34;;;;:22;:34;;;;;;;;8881:58;;;;;-1:-1:-1;;;8881:58:2;;;;;;;;;;;;-1:-1:-1;;;8881:58:2;;;;;;;;;;;;;;;8966:1;8957:6;:10;8949:27;;;;;-1:-1:-1;;;8949:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;8949:27:2;;;;;;;;;;;;;;;8986:11;;:59;;;-1:-1:-1;;;8986:59:2;;9011:10;8986:59;;;;9031:4;8986:59;;;;;;;;;;;;-1:-1:-1;;;;;8986:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;9077:19:2;;;;;;:12;8986:59;9077:19;;;;;:31;;9101:6;9077:23;:31::i;:::-;-1:-1:-1;;;;;9055:19:2;;;;;;:12;:19;;;;;:53;9133:12;;:24;;9150:6;9133:16;:24::i;:::-;9118:12;:39;-1:-1:-1;;;;;9171:30:2;;;;;;:23;:30;;;;;;9167:111;;-1:-1:-1;;;;;9222:30:2;;;;;;:23;:30;;;;;9255:12;9222:45;;9167:111;9287:4;;:37;;;-1:-1:-1;;;9287:37:2;;-1:-1:-1;;;;;9287:37:2;;;;;;;;;;;;;:4;:37;;;;;;:4;;;;;:16;;:37;;;;;:4;;:37;;;;;;;:4;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9339:23:2;;;;;;;;-1:-1:-1;;;;;9339:23:2;;;-1:-1:-1;9339:23:2;;-1:-1:-1;9339:23:2;;;;;;;;8816:553;;:::o;4513:633::-;-1:-1:-1;;;;;4581:19:2;;4573:36;;;;;-1:-1:-1;;;4573:36:2;;;;;;;;;;;;;;;-1:-1:-1;;;4573:36:2;;;;;;;;;;;;;;;4654:5;;;;;-1:-1:-1;;;;;4654:5:2;4640:10;:19;;:67;;-1:-1:-1;4693:14:2;;-1:-1:-1;;;;;4693:14:2;4679:10;:28;4640:67;:111;;;-1:-1:-1;4741:10:2;;-1:-1:-1;;;;;4741:10:2;4727;:24;4640:111;4619:170;;;;;-1:-1:-1;;;4619:170:2;;;;;;;;;;;;-1:-1:-1;;;4619:170:2;;;;;;;;;;;;;;;4803:16;:23;:28;4799:167;;-1:-1:-1;;;;;4863:27:2;;4847:13;4863:27;;;:20;:27;;;;;;4912:16;:23;;4863:27;;;;;4912:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4912:23:2;:32;;4904:51;;;;;-1:-1:-1;;;4904:51:2;;;;;;;;;;;;-1:-1:-1;;;4904:51:2;;;;;;;;;;;;;;;4799:167;;4989:16;:23;;-1:-1:-1;;;;;5022:27:2;;;4975:11;5022:27;;;:20;:27;;;;;;;;:33;;;;5065:22;:29;;;;;:36;;-1:-1:-1;;5065:36:2;5097:4;5065:36;;;;;;5111:28;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5111:28:2;;;;;;4513:633::o;2984:216::-;-1:-1:-1;;;;;3066:31:2;;3058:48;;;;;-1:-1:-1;;;3058:48:2;;;;;;;;;;;;;;;-1:-1:-1;;;3058:48:2;;;;;;;;;;;;;;;3138:10;;-1:-1:-1;;;;;3138:10:2;3124;:24;3116:33;;;;;;3159:14;:34;;-1:-1:-1;;;;;;3159:34:2;-1:-1:-1;;;;;3159:34:2;;;;;;;;;;2984:216::o;684:32::-;;;-1:-1:-1;;;;;684:32:2;;:::o;8424:386::-;8502:1;8493:6;:10;8485:27;;;;;-1:-1:-1;;;8485:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;8485:27:2;;;;;;;;;;;;;;;8541:10;8530:22;;;;:10;:22;;;;;;:32;-1:-1:-1;8530:32:2;8522:55;;;;;-1:-1:-1;;;8522:55:2;;;;;;;;;;;;-1:-1:-1;;;8522:55:2;;;;;;;;;;;;;;;8623:10;8612:22;;;;:10;:22;;;;;;:34;;8639:6;8612:26;:34::i;:::-;8598:10;8587:22;;;;:10;:22;;;;;;:59;;;;8656:4;;:43;;-1:-1:-1;;;8656:43:2;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8656:4:2;;;;:16;;:43;;;;;8587:22;8656:43;;;;;;8587:22;8656:4;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8709:11:2;;:40;;;-1:-1:-1;;;8709:40:2;;8730:10;8709:40;;;;;;;;;;;;-1:-1:-1;;;;;8709:11:2;;;;-1:-1:-1;8709:20:2;;-1:-1:-1;8709:40:2;;;;;;;;;;;;;;;:11;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8764:39:2;;;;;;;;8784:10;;8764:39;;;;;;8709:40;8764:39;;;8424:386;:::o;9375:1171::-;9447:1;9438:6;:10;9430:27;;;;;-1:-1:-1;;;9430:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;9430:27:2;;;;;;;;;;;;;;;9467:11;9481:56;9516:20;;9481:30;9492:18;;9481:6;:10;;:30;;;;:::i;:::-;:34;;:56::i;:::-;9467:70;;9568:3;9555:9;:16;9547:40;;;;;-1:-1:-1;;;9547:40:2;;;;;;;;;;;;-1:-1:-1;;;9547:40:2;;;;;;;;;;;;;;;9597:12;;:32;;-1:-1:-1;;;;;9597:12:2;;;;9619:9;9597:32;;;;;:12;:32;:12;:32;9619:9;9597:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9639:11:2;;:59;;;-1:-1:-1;;;9639:59:2;;9664:10;9639:59;;;;9684:4;9639:59;;;;;;;;;;;;-1:-1:-1;;;;;9639:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9751:10:2;9727:35;;;;:23;9639:59;9727:35;;;;;9712:12;:50;9708:488;;;9778:14;9795:21;9805:10;9795:9;:21::i;:::-;9778:38;-1:-1:-1;9834:10:2;;9830:356;;9904:10;9891:24;;;;:12;:24;;;;;;:36;;9920:6;9891:28;:36::i;:::-;9877:10;9864:24;;;;:12;:24;;;;;:63;9960:12;;:24;;9977:6;9960:16;:24::i;:::-;9945:12;:39;10018:13;;:25;;10036:6;10018:17;:25::i;:::-;10002:13;:41;10061:4;;:42;;;-1:-1:-1;;;10061:42:2;;10078:10;10061:42;;;;;;;;;;:4;:42;;;;;;-1:-1:-1;;;;;10061:4:2;;;;:16;;:42;;;;;:4;;:42;;;;;;;;:4;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10145:10:2;10121:35;;;;:23;:35;;;;;10159:12;10121:50;;-1:-1:-1;;9830:356:2;9708:488;;10245:10;10232:24;;;;:12;:24;;;;;;:36;;10261:6;10232:28;:36::i;:::-;10218:10;10205:24;;;;:12;:24;;;;;:63;10293:12;;:24;;10310:6;10293:16;:24::i;:::-;10278:12;:39;10355:10;10331:35;;;;:23;:35;;;;;;10327:121;;10411:10;10387:35;;;;:23;:35;;;;;10425:12;10387:50;;10327:121;10457:4;;:42;;;-1:-1:-1;;;10457:42:2;;10474:10;10457:42;;;;;;;;;;:4;:42;;;;;;-1:-1:-1;;;;;10457:4:2;;;;:16;;:42;;;;;:4;;:42;;;;;;;;:4;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10514:25:2;;;;;;;;10520:10;;-1:-1:-1;10514:25:2;;-1:-1:-1;10514:25:2;;;;;;;;9375:1171;;:::o;3426:211::-;-1:-1:-1;;;;;3501:29:2;;3493:46;;;;;-1:-1:-1;;;3493:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;3493:46:2;;;;;;;;;;;;;;;3571:5;;;;;-1:-1:-1;;;;;3571:5:2;3557:10;:19;3549:41;;;;;-1:-1:-1;;;3549:41:2;;;;;;;;;;;;-1:-1:-1;;;3549:41:2;;;;;;;;;;;;;;;3600:12;:30;;-1:-1:-1;;;;;;3600:30:2;-1:-1:-1;;;;;3600:30:2;;;;;;;;;;3426:211::o;11969:710::-;12043:10;12019:35;;;;:23;:35;;;;;;12011:58;;;;;-1:-1:-1;;;12011:58:2;;;;;;;;;;;;-1:-1:-1;;;12011:58:2;;;;;;;;;;;;;;;12126:10;12102:35;;;;:23;:35;;;;;;12087:12;:50;12079:71;;;;;-1:-1:-1;;;12079:71:2;;;;;;;;;;;;-1:-1:-1;;;12079:71:2;;;;;;;;;;;;;;;12160:14;12177:21;12187:10;12177:9;:21::i;:::-;12160:38;;12225:1;12216:6;:10;12208:32;;;;;-1:-1:-1;;;12208:32:2;;;;;;;;;;;;-1:-1:-1;;;12208:32:2;;;;;;;;;;;;;;;12271:16;;12258:9;:29;12250:53;;;;;-1:-1:-1;;;12250:53:2;;;;;;;;;;;;-1:-1:-1;;;12250:53:2;;;;;;;;;;;;;;;12313:12;;:32;;-1:-1:-1;;;;;12313:12:2;;;;12335:9;12313:32;;;;;:12;:32;:12;:32;12335:9;12313:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12395:10:2;12382:24;;;;:12;:24;;;;;;:36;;12411:6;12382:28;:36::i;:::-;12368:10;12355:24;;;;:12;:24;;;;;:63;12443:12;;:24;;12460:6;12443:16;:24::i;:::-;12428:12;:39;12493:13;;:25;;12511:6;12493:17;:25::i;:::-;12477:13;:41;12552:10;12528:35;;;;:23;:35;;;;;;12566:12;12528:50;;12588:4;;:42;;-1:-1:-1;;;12588:42:2;;;;;;;;;;;;;;;:4;:42;;;;;;-1:-1:-1;;;;;12588:4:2;;;;:16;;:42;;;;;12528:35;;12588:42;;;;;12528:35;12588:4;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12645:27:2;;;;;;;;12653:10;;-1:-1:-1;12645:27:2;;-1:-1:-1;12645:27:2;;;;;;;;11969:710;:::o;5152:492::-;-1:-1:-1;;;;;5258:19:2;;5250:36;;;;;-1:-1:-1;;;5250:36:2;;;;;;;;;;;;;;;-1:-1:-1;;;5250:36:2;;;;;;;;;;;;;;;5331:5;;;;;-1:-1:-1;;;;;5331:5:2;5317:10;:19;;:67;;-1:-1:-1;5370:14:2;;-1:-1:-1;;;;;5370:14:2;5356:10;:28;5317:67;:111;;;-1:-1:-1;5418:10:2;;-1:-1:-1;;;;;5418:10:2;5404;:24;5317:111;5296:170;;;;;-1:-1:-1;;;5296:170:2;;;;;;;;;;;;-1:-1:-1;;;5296:170:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;5492:27:2;;5476:13;5492:27;;;:20;:27;;;;;;5537:16;:23;;5492:27;;;;;5537:23;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5537:23:2;:32;5529:55;;;;;-1:-1:-1;;;5529:55:2;;;;;;;;;;;;-1:-1:-1;;;5529:55:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5594:29:2;;;;;;;;:22;:29;;;;;:43;;-1:-1:-1;;5594:43:2;;;;;;;;;;5152:492::o;1191:33::-;;;;:::o;830:25::-;;;-1:-1:-1;;;;;830:25:2;;:::o;1641:1231::-;2171:8;;;;2170:9;2162:31;;;;;-1:-1:-1;;;2162:31:2;;;;;;;;;;;;-1:-1:-1;;;2162:31:2;;;;;;;;;;;;;;;2203:4;:33;;-1:-1:-1;;;;;;2203:33:2;;;-1:-1:-1;;;;;2203:33:2;;;;;;;2246:11;:40;;;;;;;;;;;;;;-1:-1:-1;2296:20:2;;2326:10;:30;;;;;;;;;;;;;;;2366:23;:54;;;;2430:25;:58;;;;2498:18;:44;;;;2552:20;:48;;;;2610:20;:48;2668:22;:52;2730:20;:48;2788:22;:52;-1:-1:-1;;;;;;2296:20:2;2203:33;2296:20;;;;;;;;;-1:-1:-1;;2850:15:2;-1:-1:-1;2850:15:2;;;1641:1231::o;722:29::-;;;-1:-1:-1;;;;;722:29:2;;:::o;1398:37::-;;;;:::o;948:58::-;;;;;;;;;;;;;:::o;799:25::-;;;-1:-1:-1;;;;;799:25:2;;:::o;1100:38::-;;;;:::o;6888:395::-;7005:5;;;;;-1:-1:-1;;;;;7005:5:2;6991:10;:19;;:67;;-1:-1:-1;7044:14:2;;-1:-1:-1;;;;;7044:14:2;7030:10;:28;6991:67;:111;;;-1:-1:-1;7092:10:2;;-1:-1:-1;;;;;7092:10:2;7078;:24;6991:111;6970:170;;;;;-1:-1:-1;;;6970:170:2;;;;;;;;;;;;-1:-1:-1;;;6970:170:2;;;;;;;;;;;;;;;7158:16;7150:42;;;;;-1:-1:-1;;;7150:42:2;;;;;;;;;;;;-1:-1:-1;;;7150:42:2;;;;;;;;;;;;;;;7202:18;:30;;;;7242:20;:34;6888:395::o;1065:28::-;;;;:::o;7289:401::-;7408:5;;;;;-1:-1:-1;;;;;7408:5:2;7394:10;:19;;:67;;-1:-1:-1;7447:14:2;;-1:-1:-1;;;;;7447:14:2;7433:10;:28;7394:67;:111;;;-1:-1:-1;7495:10:2;;-1:-1:-1;;;;;7495:10:2;7481;:24;7394:111;7373:170;;;;;-1:-1:-1;;;7373:170:2;;;;;;;;;;;;-1:-1:-1;;;7373:170:2;;;;;;;;;;;;;;;7561:16;7553:42;;;;;-1:-1:-1;;;7553:42:2;;;;;;;;;;;;-1:-1:-1;;;7553:42:2;;;;;;;;;;;;;;;7605:20;:32;;;;7647:22;:36;7289:401::o;915:27::-;;;;:::o;6185:263::-;6257:10;;-1:-1:-1;;;;;6257:10:2;6243;:24;6235:49;;;;;-1:-1:-1;;;6235:49:2;;;;;;;;;;;;-1:-1:-1;;;6235:49:2;;;;;;;;;;;;;;;6311:1;6302:6;:10;6294:27;;;;;-1:-1:-1;;;6294:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6294:27:2;;;;;;;;;;;;;;;6331:11;;:59;;;-1:-1:-1;;;6331:59:2;;6356:10;6331:59;;;;6376:4;6331:59;;;;;;;;;;;;-1:-1:-1;;;;;6331:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6416:13:2;;:25;;6434:6;6416:17;:25::i;:::-;6400:13;:41;-1:-1:-1;6185:263:2:o;1542:54::-;;;;;;;;;;;;;;;:::o;12685:469::-;12740:7;12763:12;;12779:1;12763:17;12759:31;;;-1:-1:-1;12789:1:2;12782:8;;12759:31;-1:-1:-1;;;;;12804:30:2;;;;;;:23;:30;;;;;;12800:49;;-1:-1:-1;12848:1:2;12841:8;;12800:49;-1:-1:-1;;;;;12898:30:2;;12859:19;12898:30;;;:23;:30;;;;;;12881:48;;:12;;:16;:48::i;:::-;12859:70;;12939:28;12970:97;13041:25;;12970:53;12999:23;;12970:11;:28;;:53;;;;:::i;:97::-;13134:12;;-1:-1:-1;;;;;13109:19:2;;;;;;:12;:19;;;;;;12939:128;;-1:-1:-1;13084:63:2;;:45;;12939:128;;13084:24;:45::i;:63::-;13077:70;;;;12685:469;;;;:::o;1442:55::-;;;;;;;;;;;;;:::o;1603:31::-;;;;:::o;757:35::-;;;-1:-1:-1;;;;;757:35:2;;:::o;1013:45::-;;;;;;;;;;;;;:::o;1272:35::-;;;;:::o;3206:214::-;-1:-1:-1;;;;;3292:29:2;;3284:46;;;;;-1:-1:-1;;;3284:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;3284:46:2;;;;;;;;;;;;;;;3362:10;;-1:-1:-1;;;;;3362:10:2;3348;:24;3340:33;;;;;;3383:12;:30;;-1:-1:-1;;;;;;3383:30:2;-1:-1:-1;;;;;3383:30:2;;;;;;;;;;3206:214::o;3878:246::-;-1:-1:-1;;;;;3963:34:2;;3955:51;;;;;-1:-1:-1;;;3955:51:2;;;;;;;;;;;;;;;-1:-1:-1;;;3955:51:2;;;;;;;;;;;;;;;4038:10;;-1:-1:-1;;;;;4038:10:2;4024;:24;4016:51;;;;;-1:-1:-1;;;4016:51:2;;;;;;;;;;;;-1:-1:-1;;;4016:51:2;;;;;;;;;;;;;;;4077:17;:40;;-1:-1:-1;;;;;;4077:40:2;-1:-1:-1;;;;;4077:40:2;;;;;;;;;;3878:246::o;1313:37::-;;;;:::o;862:47::-;;;;;;;;;;;;;:::o;4130:259::-;4210:17;;-1:-1:-1;;;;;4210:17:2;4196:10;:31;:59;;;;-1:-1:-1;4231:10:2;:24;;4196:59;4175:127;;;;;-1:-1:-1;;;4175:127:2;;;;;;;;;;;;-1:-1:-1;;;4175:127:2;;;;;;;;;;;;;;;4325:17;;;4312:10;:30;;-1:-1:-1;;;;;;4312:30:2;;;-1:-1:-1;;;;;4325:17:2;;4312:30;;;;4352;;;4130:259::o;1230:35::-;;;;:::o;6454:323::-;6548:10;;-1:-1:-1;;;;;6548:10:2;6534;:24;6526:49;;;;;-1:-1:-1;;;6526:49:2;;;;;;;;;;;;-1:-1:-1;;;6526:49:2;;;;;;;;;;;;;;;6602:1;6593:6;:10;6585:27;;;;;-1:-1:-1;;;6585:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6585:27:2;;;;;;;;;;;;;;;6647:6;6630:13;;:23;;6622:46;;;;;-1:-1:-1;;;6622:46:2;;;;;;;;;;;;-1:-1:-1;;;6622:46:2;;;;;;;;;;;;;;;6678:11;;:41;;;-1:-1:-1;;;6678:41:2;;-1:-1:-1;;;;;6678:41:2;;;;;;;;;;;;;;;:11;;;;;:20;;:41;;;;;;;;;;;;;;:11;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6745:13:2;;:25;;6763:6;6745:17;:25::i;:::-;6729:13;:41;-1:-1:-1;;6454:323:2:o;10552:1411::-;10626:1;10617:6;:10;10609:27;;;;;-1:-1:-1;;;10609:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;10609:27:2;;;;;;;;;;;;;;;10646:11;10660:82;10710:22;;10660:32;10671:20;;10660:6;:10;;:32;;;;:::i;:82::-;10646:96;;10773:3;10760:9;:16;10752:40;;;;;-1:-1:-1;;;10752:40:2;;;;;;;;;;;;-1:-1:-1;;;10752:40:2;;;;;;;;;;;;;;;10823:10;10810:24;;;;:12;:24;;;;;;:34;-1:-1:-1;10810:34:2;10802:57;;;;;-1:-1:-1;;;10802:57:2;;;;;;;;;;;;-1:-1:-1;;;10802:57:2;;;;;;;;;;;;;;;10869:12;;:32;;-1:-1:-1;;;;;10869:12:2;;;;10891:9;10869:32;;;;;:12;:32;:12;:32;10891:9;10869:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10952:10:2;10911:14;10939:24;;;:12;:24;;;;;;;;;10993:23;:35;;;;;;;10929:34;;;;10978:12;:50;10974:488;;;11044:14;11061:21;11071:10;11061:9;:21::i;:::-;11044:38;-1:-1:-1;11100:10:2;;11096:356;;11170:10;11157:24;;;;:12;:24;;;;;;:36;;11186:6;11157:28;:36::i;:::-;11143:10;11130:24;;;;:12;:24;;;;;:63;11226:12;;:24;;11243:6;11226:16;:24::i;:::-;11211:12;:39;11284:13;;:25;;11302:6;11284:17;:25::i;:::-;11268:13;:41;11327:4;;:42;;;-1:-1:-1;;;11327:42:2;;11344:10;11327:42;;;;;;;;;;:4;:42;;;;;;-1:-1:-1;;;;;11327:4:2;;;;:16;;:42;;;;;:4;;:42;;;;;;;;:4;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11411:10:2;11387:35;;;;:23;:35;;;;;11425:12;11387:50;;-1:-1:-1;;11096:356:2;10974:488;;11471:22;11496:9;:45;;11535:6;11496:45;;;11521:10;11508:24;;;;:12;:24;;;;;;11496:45;11591:10;11578:24;;;;:12;:24;;;;;;11471:70;;-1:-1:-1;11578:44:2;;11471:70;11578:28;:44::i;:::-;11564:10;11551:24;;;;:12;:24;;;;;:71;11647:12;;:32;;11664:14;11647:16;:32::i;:::-;11632:12;:47;11689:11;;:48;;;-1:-1:-1;;;11689:48:2;;11710:10;11689:48;;;;;;;;;;;;-1:-1:-1;;;;;11689:11:2;;;;:20;;:48;;;;;;;;;;;;;;;:11;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11747:4:2;;:51;;;-1:-1:-1;;;11747:51:2;;11764:10;11747:51;;;;;;;;;;:4;:51;;;;;;;;-1:-1:-1;;;;;11747:4:2;;;;:16;;:51;;;;;:4;;:51;;;;;;:4;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11825:10:2;11812:24;;;;:12;:24;;;;;;:29;11808:99;;-1:-1:-1;11808:99:2;;-1:-1:-1;11808:99:2;11881:10;11895:1;11857:35;;;:23;:35;;;;;:39;11808:99;11921:35;;;;;;;;11929:10;;11921:35;;;;;;;;;;10552:1411;;;;:::o;594:20::-;;;;;;-1:-1:-1;;;;;594:20:2;;:::o;568:::-;;;;;;:::o;874:176:1:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;-1:-1:-1;874:176:1;;;;;:::o;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;2180:459::-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3101:130;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:1;;;1746:187::o;3713:272::-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o

Swarm Source

ipfs://6d2b4d8bf5aefa0eb75d7e34c15669d33dda7a55091da3b01f12c55afa7becc5

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.