ETH Price: $2,082.97 (+2.72%)

Contract

0x2E85a8808E4F029068182E9Edc0e73B5959D3D8C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
STAKE125688072021-06-04 15:29:461740 days ago1622820586IN
0x2E85a880...5959D3D8C
0 ETH0.0024285716.00000145

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Stake

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license
/**
 *Submitted for verification at Etherscan.io on 2021-06-05
*/

/**
 *Submitted for verification at Etherscan.io on 2021-06-05
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.0;

// ----------------------------------------------------------------------------
// 'BITT' Staking smart contract
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// SafeMath library
// ----------------------------------------------------------------------------

/**
 * @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;
    }
    
    function ceil(uint a, uint m) internal pure returns (uint r) {
        return (a + m - 1) / m * m;
    }
}

// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
    address payable public owner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address payable _newOwner) public onlyOwner {
        owner = _newOwner;
        emit OwnershipTransferred(msg.sender, _newOwner);
    }
}

// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// ----------------------------------------------------------------------------
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address tokenOwner) external view returns (uint256 balance);
    function allowance(address tokenOwner, address spender) external view returns (uint256 remaining);
    function transfer(address to, uint256 tokens) external returns (bool success);
    function approve(address spender, uint256 tokens) external returns (bool success);
    function transferFrom(address from, address to, uint256 tokens) external returns (bool success);
    function burnTokens(uint256 _amount) external;
    event Transfer(address indexed from, address indexed to, uint256 tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);
}

// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals and assisted
// token transfers
// ----------------------------------------------------------------------------
contract Stake is Owned {
    using SafeMath for uint256;
    
    address public BITT = 0x5E122692b924c85934C7657fC69bA022211aa89f;
    
    uint256 public totalStakes = 0;
    uint256 stakingFee = 25; // 2.5%
    uint256 unstakingFee = 25; // 2.5% 
    uint256 public totalDividends = 0;
    uint256 private scaledRemainder = 0;
    uint256 private scaling = uint256(10) ** 12;
    uint public round = 1;
    
    struct USER{
        uint256 stakedTokens;
        uint256 lastDividends;
        uint256 fromTotalDividend;
        uint round;
        uint256 remainder;
    }
    
    mapping(address => USER) stakers;
    mapping (uint => uint256) public payouts;                   // keeps record of each payout
    
    event STAKED(address staker, uint256 tokens, uint256 stakingFee);
    event UNSTAKED(address staker, uint256 tokens, uint256 unstakingFee);
    event PAYOUT(uint256 round, uint256 tokens, address sender);
    event CLAIMEDREWARD(address staker, uint256 reward);
    
    // ------------------------------------------------------------------------
    // Token holders can stake their tokens using this function
    // @param tokens number of tokens to stake
    // ------------------------------------------------------------------------
    function STAKE(uint256 tokens) external {
        require(IERC20(BITT).transferFrom(msg.sender, address(this), tokens), "BITT Tokens cannot be transferred from user account");
        
        uint256 _stakingFee = 0;
        if(totalStakes > 0)
            _stakingFee= (onePercent(tokens).mul(stakingFee)).div(10); 
        
        if(totalStakes > 0)
            // distribute the staking fee accumulated before updating the user's stake
            _addPayout(_stakingFee);
            
        // add pending rewards to remainder to be claimed by user later, if there is any existing stake
        uint256 owing = pendingReward(msg.sender);
        stakers[msg.sender].remainder += owing;
        
        stakers[msg.sender].stakedTokens = (tokens.sub(_stakingFee)).add(stakers[msg.sender].stakedTokens);
        stakers[msg.sender].lastDividends = owing;
        stakers[msg.sender].fromTotalDividend= totalDividends;
        stakers[msg.sender].round =  round;
        
        totalStakes = totalStakes.add(tokens.sub(_stakingFee));
        
        emit STAKED(msg.sender, tokens.sub(_stakingFee), _stakingFee);
    }
    
    // ------------------------------------------------------------------------
    // Owners can send the funds to be distributed to stakers using this function
    // @param tokens number of tokens to distribute
    // ------------------------------------------------------------------------
    function ADDFUNDS(uint256 tokens) external {
        require(IERC20(BITT).transferFrom(msg.sender, address(this), tokens), "BITT Tokens cannot be transferred from funder account");
        _addPayout(tokens);
    }
    
    // ------------------------------------------------------------------------
    // Private function to register payouts
    // ------------------------------------------------------------------------
    function _addPayout(uint256 tokens) private{
        // divide the funds among the currently staked tokens
        // scale the deposit and add the previous remainder
        uint256 available = (tokens.mul(scaling)).add(scaledRemainder); 
        uint256 dividendPerToken = available.div(totalStakes);
        scaledRemainder = available.mod(totalStakes);
        
        totalDividends = totalDividends.add(dividendPerToken);
        payouts[round] = payouts[round-1].add(dividendPerToken);
        
        emit PAYOUT(round, tokens, msg.sender);
        round++;
    }
    
    // ------------------------------------------------------------------------
    // Stakers can claim their pending rewards using this function
    // ------------------------------------------------------------------------
    function CLAIMREWARD() public {
        if(totalDividends > stakers[msg.sender].fromTotalDividend){
            uint256 owing = pendingReward(msg.sender);
        
            owing = owing.add(stakers[msg.sender].remainder);
            stakers[msg.sender].remainder = 0;
        
            require(IERC20(BITT).transfer(msg.sender,owing), "ERROR: error in sending BITT reward from contract");
        
            emit CLAIMEDREWARD(msg.sender, owing);
        
            stakers[msg.sender].lastDividends = owing; // unscaled
            stakers[msg.sender].round = round; // update the round
            stakers[msg.sender].fromTotalDividend = totalDividends; // scaled
        }
    }
    
    // ------------------------------------------------------------------------
    // Get the pending rewards of the staker
    // @param _staker the address of the staker
    // ------------------------------------------------------------------------    
    function pendingReward(address staker) private returns (uint256) {
        uint256 amount =  ((totalDividends.sub(payouts[stakers[staker].round - 1])).mul(stakers[staker].stakedTokens)).div(scaling);
        stakers[staker].remainder += ((totalDividends.sub(payouts[stakers[staker].round - 1])).mul(stakers[staker].stakedTokens)) % scaling ;
        return amount;
    }
    
    function getPendingReward(address staker) public view returns(uint256 _pendingReward) {
        uint256 amount =  ((totalDividends.sub(payouts[stakers[staker].round - 1])).mul(stakers[staker].stakedTokens)).div(scaling);
        amount += ((totalDividends.sub(payouts[stakers[staker].round - 1])).mul(stakers[staker].stakedTokens)) % scaling ;
        return (amount + stakers[staker].remainder);
    }
    
    // ------------------------------------------------------------------------
    // Stakers can un stake the staked tokens using this function
    // @param tokens the number of tokens to withdraw
    // ------------------------------------------------------------------------
    function WITHDRAW(uint256 tokens) external {
        
        require(stakers[msg.sender].stakedTokens >= tokens && tokens > 0, "Invalid BITT token amount to withdraw");
        
        uint256 _unstakingFee = (onePercent(tokens).mul(unstakingFee)).div(10);
        
        // add pending rewards to remainder to be claimed by user later, if there is any existing stake
        uint256 owing = pendingReward(msg.sender);
        stakers[msg.sender].remainder += owing;
                
        require(IERC20(BITT).transfer(msg.sender, tokens.sub(_unstakingFee)), "Error in un-staking BITT tokens");
        
        stakers[msg.sender].stakedTokens = stakers[msg.sender].stakedTokens.sub(tokens);
        stakers[msg.sender].lastDividends = owing;
        stakers[msg.sender].fromTotalDividend= totalDividends;
        stakers[msg.sender].round =  round;
        
        totalStakes = totalStakes.sub(tokens);
        
        if(totalStakes > 0)
            // distribute the un staking fee accumulated after updating the user's stake
            _addPayout(_unstakingFee);
        
        emit UNSTAKED(msg.sender, tokens.sub(_unstakingFee), _unstakingFee);
    }
    
    // ------------------------------------------------------------------------
    // Private function to calculate 1% percentage
    // ------------------------------------------------------------------------
    function onePercent(uint256 _tokens) private pure returns (uint256){
        uint256 roundValue = _tokens.ceil(100);
        uint onePercentofTokens = roundValue.mul(100).div(100 * 10**uint(2));
        return onePercentofTokens;
    }
    
    // ------------------------------------------------------------------------
    // Get the number of tokens staked by a staker
    // @param _staker the address of the staker
    // ------------------------------------------------------------------------
    function yourStakedBITT(address staker) external view returns(uint256 stakedBITT){
        return stakers[staker].stakedTokens;
    }
    
    // ------------------------------------------------------------------------
    // Get the BITT balance of the token holder
    // @param user the address of the token holder
    // ------------------------------------------------------------------------
    function yourBITTBalance(address user) external view returns(uint256 BITTBalance){
        return IERC20(BITT).balanceOf(user);
    }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"CLAIMEDREWARD","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"PAYOUT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingFee","type":"uint256"}],"name":"STAKED","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unstakingFee","type":"uint256"}],"name":"UNSTAKED","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADDFUNDS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BITT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIMREWARD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"STAKE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"WITHDRAW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"yourBITTBalance","outputs":[{"internalType":"uint256","name":"BITTBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"yourStakedBITT","outputs":[{"internalType":"uint256","name":"stakedBITT","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052735e122692b924c85934c7657fc69ba022211aa89f600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002556019600355601960045560006005556000600655600c600a0a600755600160085534801561008b57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e8c806100db6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063997664d71161008c578063bf9befb111610066578063bf9befb11461030f578063ca84d5911461032d578063edac3d891461035b578063f2fde38b1461038f576100ea565b8063997664d71461026b578063a33ad87e14610289578063b53d6c24146102e1576100ea565b80634baf782e116100c85780634baf782e1461017d5780634df9d6ba14610187578063829e52ef146101df5780638da5cb5b14610237576100ea565b8063146ca531146100ef57806329652e861461010d5780632c75bcda1461014f575b600080fd5b6100f76103d3565b6040518082815260200191505060405180910390f35b6101396004803603602081101561012357600080fd5b81019080803590602001909291905050506103d9565b6040518082815260200191505060405180910390f35b61017b6004803603602081101561016557600080fd5b81019080803590602001909291905050506103f1565b005b610185610893565b005b6101c96004803603602081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610be0565b6040518082815260200191505060405180910390f35b610221600480360360208110156101f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dd7565b6040518082815260200191505060405180910390f35b61023f610ea4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610273610ec8565b6040518082815260200191505060405180910390f35b6102cb6004803603602081101561029f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ece565b6040518082815260200191505060405180910390f35b61030d600480360360208110156102f757600080fd5b8101908080359060200190929190505050610f1a565b005b610317611067565b6040518082815260200191505060405180910390f35b6103596004803603602081101561034357600080fd5b810190808035906020019092919050505061106d565b005b610363611486565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103d1600480360360208110156103a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ac565b005b60085481565b600a6020528060005260406000206000915090505481565b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154101580156104435750600081115b610498576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611e326025913960400191505060405180910390fd5b60006104ca600a6104bc6004546104ae866115a1565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b905060006104d7336116c5565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282540192505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361057b85876118c390919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156105ce57600080fd5b505af11580156105e2573d6000803e3d6000fd5b505050506040513d60208110156105f857600080fd5b810190808051906020019092919050505061067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4572726f7220696e20756e2d7374616b696e67204249545420746f6b656e730081525060200191505060405180910390fd5b6106d083600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546118c390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600554600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600854600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550610804836002546118c390919063ffffffff16565b6002819055506000600254111561081f5761081e8261190d565b5b7faeb913af138cc126643912346d844a49a83761eb58fcfc9e571fc99e1b3d9fa23361085484866118c390919063ffffffff16565b84604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005541115610bde5760006108ea336116c5565b9050610941600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015482611a4390919063ffffffff16565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d6020811015610a4857600080fd5b8101908080519060200190929190505050610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611e016031913960400191505060405180910390fd5b7f8a0128b5f12decc7d739e546c0521c3388920368915393f80120bc5b408c7c9e3382604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a180600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600854600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600554600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505b565b600080610cb8600754610caa600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c9c600a60006001600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b9050600754610d7e600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d70600a60006001600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b81610d8557fe5b0681019050600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548101915050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b81019080805190602001909291905050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050506040513d6020811015610ff557600080fd5b810190808051906020019092919050505061105b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180611d786035913960400191505060405180910390fd5b6110648161190d565b50565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b505050506040513d602081101561114857600080fd5b81019080805190602001909291905050506111ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180611dad6033913960400191505060405180910390fd5b60008060025411156111ed576111ea600a6111dc6003546111ce866115a1565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b90505b60006002541115611202576112018161190d565b5b600061120d336116c5565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825401925050819055506112c6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112b884866118c390919063ffffffff16565b611a4390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600554600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600854600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061140c6113fb83856118c390919063ffffffff16565b600254611a4390919063ffffffff16565b6002819055507f99b6f4b247a06a3dbcda8d2244b818e254005608c2455221a00383939a119e7c3361144784866118c390919063ffffffff16565b84604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000806115b8606484611acb90919063ffffffff16565b905060006115e96002600a0a6064026115db6064856115f590919063ffffffff16565b61167b90919063ffffffff16565b90508092505050919050565b6000808314156116085760009050611675565b600082840290508284828161161957fe5b0414611670576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611de06021913960400191505060405180910390fd5b809150505b92915050565b60006116bd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ae6565b905092915050565b60008061179d60075461178f600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611781600a60006001600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b9050600754611863600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611855600a60006001600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b8161186a57fe5b06600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254019250508190555080915050919050565b600061190583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bac565b905092915050565b600061193860065461192a600754856115f590919063ffffffff16565b611a4390919063ffffffff16565b905060006119516002548361167b90919063ffffffff16565b905061196860025483611c6c90919063ffffffff16565b60068190555061198381600554611a4390919063ffffffff16565b6005819055506119b481600a6000600160085403815260200190815260200160002054611a4390919063ffffffff16565b600a60006008548152602001908152602001600020819055507fddf8c05dcee82ec75482e095e6c06768c848d5a7df7147686033433d141328b66008548433604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1600860008154809291906001019190505550505050565b600080828401905083811015611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000818260018486010381611adc57fe5b0402905092915050565b60008083118290611b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b57578082015181840152602081019050611b3c565b50505050905090810190601f168015611b845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611b9e57fe5b049050809150509392505050565b6000838311158290611c59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c1e578082015181840152602081019050611c03565b50505050905090810190601f168015611c4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000611cae83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611cb6565b905092915050565b6000808314158290611d63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d28578082015181840152602081019050611d0d565b50505050905090810190601f168015611d555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481611d6d57fe5b069050939250505056fe4249545420546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2066756e646572206163636f756e744249545420546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2075736572206163636f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774552524f523a206572726f7220696e2073656e64696e672042495454207265776172642066726f6d20636f6e7472616374496e76616c6964204249545420746f6b656e20616d6f756e7420746f207769746864726177a26469706673582212202fee3714c32f2cc7dce6aa4d49ab55381aa309ad66f84a1a4a077ce90ae2a74e64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063997664d71161008c578063bf9befb111610066578063bf9befb11461030f578063ca84d5911461032d578063edac3d891461035b578063f2fde38b1461038f576100ea565b8063997664d71461026b578063a33ad87e14610289578063b53d6c24146102e1576100ea565b80634baf782e116100c85780634baf782e1461017d5780634df9d6ba14610187578063829e52ef146101df5780638da5cb5b14610237576100ea565b8063146ca531146100ef57806329652e861461010d5780632c75bcda1461014f575b600080fd5b6100f76103d3565b6040518082815260200191505060405180910390f35b6101396004803603602081101561012357600080fd5b81019080803590602001909291905050506103d9565b6040518082815260200191505060405180910390f35b61017b6004803603602081101561016557600080fd5b81019080803590602001909291905050506103f1565b005b610185610893565b005b6101c96004803603602081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610be0565b6040518082815260200191505060405180910390f35b610221600480360360208110156101f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dd7565b6040518082815260200191505060405180910390f35b61023f610ea4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610273610ec8565b6040518082815260200191505060405180910390f35b6102cb6004803603602081101561029f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ece565b6040518082815260200191505060405180910390f35b61030d600480360360208110156102f757600080fd5b8101908080359060200190929190505050610f1a565b005b610317611067565b6040518082815260200191505060405180910390f35b6103596004803603602081101561034357600080fd5b810190808035906020019092919050505061106d565b005b610363611486565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103d1600480360360208110156103a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ac565b005b60085481565b600a6020528060005260406000206000915090505481565b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154101580156104435750600081115b610498576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180611e326025913960400191505060405180910390fd5b60006104ca600a6104bc6004546104ae866115a1565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b905060006104d7336116c5565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282540192505081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361057b85876118c390919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156105ce57600080fd5b505af11580156105e2573d6000803e3d6000fd5b505050506040513d60208110156105f857600080fd5b810190808051906020019092919050505061067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4572726f7220696e20756e2d7374616b696e67204249545420746f6b656e730081525060200191505060405180910390fd5b6106d083600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546118c390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600554600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600854600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550610804836002546118c390919063ffffffff16565b6002819055506000600254111561081f5761081e8261190d565b5b7faeb913af138cc126643912346d844a49a83761eb58fcfc9e571fc99e1b3d9fa23361085484866118c390919063ffffffff16565b84604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005541115610bde5760006108ea336116c5565b9050610941600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015482611a4390919063ffffffff16565b90506000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d6020811015610a4857600080fd5b8101908080519060200190929190505050610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611e016031913960400191505060405180910390fd5b7f8a0128b5f12decc7d739e546c0521c3388920368915393f80120bc5b408c7c9e3382604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a180600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600854600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600554600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505b565b600080610cb8600754610caa600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610c9c600a60006001600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b9050600754610d7e600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610d70600a60006001600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b81610d8557fe5b0681019050600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401548101915050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e6257600080fd5b505afa158015610e76573d6000803e3d6000fd5b505050506040513d6020811015610e8c57600080fd5b81019080805190602001909291905050509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050506040513d6020811015610ff557600080fd5b810190808051906020019092919050505061105b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180611d786035913960400191505060405180910390fd5b6110648161190d565b50565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561111e57600080fd5b505af1158015611132573d6000803e3d6000fd5b505050506040513d602081101561114857600080fd5b81019080805190602001909291905050506111ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180611dad6033913960400191505060405180910390fd5b60008060025411156111ed576111ea600a6111dc6003546111ce866115a1565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b90505b60006002541115611202576112018161190d565b5b600061120d336116c5565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825401925050819055506112c6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112b884866118c390919063ffffffff16565b611a4390919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600554600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600854600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555061140c6113fb83856118c390919063ffffffff16565b600254611a4390919063ffffffff16565b6002819055507f99b6f4b247a06a3dbcda8d2244b818e254005608c2455221a00383939a119e7c3361144784866118c390919063ffffffff16565b84604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461150457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000806115b8606484611acb90919063ffffffff16565b905060006115e96002600a0a6064026115db6064856115f590919063ffffffff16565b61167b90919063ffffffff16565b90508092505050919050565b6000808314156116085760009050611675565b600082840290508284828161161957fe5b0414611670576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611de06021913960400191505060405180910390fd5b809150505b92915050565b60006116bd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ae6565b905092915050565b60008061179d60075461178f600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611781600a60006001600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b61167b90919063ffffffff16565b9050600754611863600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611855600a60006001600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154038152602001908152602001600020546005546118c390919063ffffffff16565b6115f590919063ffffffff16565b8161186a57fe5b06600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254019250508190555080915050919050565b600061190583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bac565b905092915050565b600061193860065461192a600754856115f590919063ffffffff16565b611a4390919063ffffffff16565b905060006119516002548361167b90919063ffffffff16565b905061196860025483611c6c90919063ffffffff16565b60068190555061198381600554611a4390919063ffffffff16565b6005819055506119b481600a6000600160085403815260200190815260200160002054611a4390919063ffffffff16565b600a60006008548152602001908152602001600020819055507fddf8c05dcee82ec75482e095e6c06768c848d5a7df7147686033433d141328b66008548433604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1600860008154809291906001019190505550505050565b600080828401905083811015611ac1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000818260018486010381611adc57fe5b0402905092915050565b60008083118290611b92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b57578082015181840152602081019050611b3c565b50505050905090810190601f168015611b845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611b9e57fe5b049050809150509392505050565b6000838311158290611c59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c1e578082015181840152602081019050611c03565b50505050905090810190601f168015611c4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000611cae83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611cb6565b905092915050565b6000808314158290611d63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d28578082015181840152602081019050611d0d565b50505050905090810190601f168015611d555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50828481611d6d57fe5b069050939250505056fe4249545420546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2066756e646572206163636f756e744249545420546f6b656e732063616e6e6f74206265207472616e736665727265642066726f6d2075736572206163636f756e74536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774552524f523a206572726f7220696e2073656e64696e672042495454207265776172642066726f6d20636f6e7472616374496e76616c6964204249545420746f6b656e20616d6f756e7420746f207769746864726177a26469706673582212202fee3714c32f2cc7dce6aa4d49ab55381aa309ad66f84a1a4a077ce90ae2a74e64736f6c634300060c0033

Deployed Bytecode Sourcemap

7811:8575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8458:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13904:1194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11835:708;;;:::i;:::-;;13202:406;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16248:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6142:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8074:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15838:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10572:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7958:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9111:1151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7881:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6410:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8206:21;;;;:::o;8458:40::-;;;;;;;;;;;;;;;;;:::o;13904:1194::-;14012:6;13976:7;:19;13984:10;13976:19;;;;;;;;;;;;;;;:32;;;:42;;:56;;;;;14031:1;14022:6;:10;13976:56;13968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14095:21;14119:46;14162:2;14120:36;14143:12;;14120:18;14131:6;14120:10;:18::i;:::-;:22;;:36;;;;:::i;:::-;14119:42;;:46;;;;:::i;:::-;14095:70;;14291:13;14307:25;14321:10;14307:13;:25::i;:::-;14291:41;;14376:5;14343:7;:19;14351:10;14343:19;;;;;;;;;;;;;;;:29;;;:38;;;;;;;;;;;14425:4;;;;;;;;;;;14418:21;;;14440:10;14452:25;14463:13;14452:6;:10;;:25;;;;:::i;:::-;14418:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14410:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14570:44;14607:6;14570:7;:19;14578:10;14570:19;;;;;;;;;;;;;;;:32;;;:36;;:44;;;;:::i;:::-;14535:7;:19;14543:10;14535:19;;;;;;;;;;;;;;;:32;;:79;;;;14661:5;14625:7;:19;14633:10;14625:19;;;;;;;;;;;;;;;:33;;:41;;;;14716:14;;14677:7;:19;14685:10;14677:19;;;;;;;;;;;;;;;:37;;:53;;;;14770:5;;14741:7;:19;14749:10;14741:19;;;;;;;;;;;;;;;:25;;:34;;;;14810:23;14826:6;14810:11;;:15;;:23;;;;:::i;:::-;14796:11;:37;;;;14871:1;14857:11;;:15;14854:148;;;14977:25;14988:13;14977:10;:25::i;:::-;14854:148;15028:62;15037:10;15049:25;15060:13;15049:6;:10;;:25;;;;:::i;:::-;15076:13;15028:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13904:1194;;;:::o;11835:708::-;11896:7;:19;11904:10;11896:19;;;;;;;;;;;;;;;:37;;;11879:14;;:54;11876:660;;;11949:13;11965:25;11979:10;11965:13;:25::i;:::-;11949:41;;12023:40;12033:7;:19;12041:10;12033:19;;;;;;;;;;;;;;;:29;;;12023:5;:9;;:40;;;;:::i;:::-;12015:48;;12110:1;12078:7;:19;12086:10;12078:19;;;;;;;;;;;;;;;:29;;:33;;;;12151:4;;;;;;;;;;;12144:21;;;12166:10;12177:5;12144:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12136:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12267:32;12281:10;12293:5;12267:32;;;;;;;;;;;;;;;;;;;;;;;;;;12360:5;12324:7;:19;12332:10;12324:19;;;;;;;;;;;;;;;:33;;:41;;;;12420:5;;12392:7;:19;12400:10;12392:19;;;;;;;;;;;;;;;:25;;:33;;;;12500:14;;12460:7;:19;12468:10;12460:19;;;;;;;;;;;;;;;:37;;:54;;;;11876:660;;11835:708::o;13202:406::-;13264:22;13299:14;13317:105;13414:7;;13318:90;13379:7;:15;13387:6;13379:15;;;;;;;;;;;;;;;:28;;;13319:54;13338:7;:34;13370:1;13346:7;:15;13354:6;13346:15;;;;;;;;;;;;;;;:21;;;:25;13338:34;;;;;;;;;;;;13319:14;;:18;;:54;;;;:::i;:::-;13318:60;;:90;;;;:::i;:::-;13317:96;;:105;;;;:::i;:::-;13299:123;;13538:7;;13444:90;13505:7;:15;13513:6;13505:15;;;;;;;;;;;;;;;:28;;;13445:54;13464:7;:34;13496:1;13472:7;:15;13480:6;13472:15;;;;;;;;;;;;;;;:21;;;:25;13464:34;;;;;;;;;;;;13445:14;;:18;;:54;;;;:::i;:::-;13444:60;;:90;;;;:::i;:::-;13443:102;;;;;;13433:112;;;;13574:7;:15;13582:6;13574:15;;;;;;;;;;;;;;;:25;;;13565:6;:34;13557:43;;;13202:406;;;:::o;16248:135::-;16309:19;16354:4;;;;;;;;;;;16347:22;;;16370:4;16347:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16340:35;;16248:135;;;:::o;6142:28::-;;;;;;;;;;;;:::o;8074:33::-;;;;:::o;15838:135::-;15900:18;15937:7;:15;15945:6;15937:15;;;;;;;;;;;;;;;:28;;;15930:35;;15838:135;;;:::o;10572:217::-;10641:4;;;;;;;;;;;10634:25;;;10660:10;10680:4;10687:6;10634:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10626:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10763:18;10774:6;10763:10;:18::i;:::-;10572:217;:::o;7958:30::-;;;;:::o;9111:1151::-;9177:4;;;;;;;;;;;9170:25;;;9196:10;9216:4;9223:6;9170:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9162:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9307:19;9358:1;9344:11;;:15;9341:90;;;9387:44;9428:2;9388:34;9411:10;;9388:18;9399:6;9388:10;:18::i;:::-;:22;;:34;;;;:::i;:::-;9387:40;;:44;;;;:::i;:::-;9374:57;;9341:90;9470:1;9456:11;;:15;9453:144;;;9574:23;9585:11;9574:10;:23::i;:::-;9453:144;9727:13;9743:25;9757:10;9743:13;:25::i;:::-;9727:41;;9812:5;9779:7;:19;9787:10;9779:19;;;;;;;;;;;;;;;:29;;;:38;;;;;;;;;;;9873:63;9903:7;:19;9911:10;9903:19;;;;;;;;;;;;;;;:32;;;9874:23;9885:11;9874:6;:10;;:23;;;;:::i;:::-;9873:29;;:63;;;;:::i;:::-;9838:7;:19;9846:10;9838:19;;;;;;;;;;;;;;;:32;;:98;;;;9983:5;9947:7;:19;9955:10;9947:19;;;;;;;;;;;;;;;:33;;:41;;;;10038:14;;9999:7;:19;10007:10;9999:19;;;;;;;;;;;;;;;:37;;:53;;;;10092:5;;10063:7;:19;10071:10;10063:19;;;;;;;;;;;;;;;:25;;:34;;;;10132:40;10148:23;10159:11;10148:6;:10;;:23;;;;:::i;:::-;10132:11;;:15;;:40;;;;:::i;:::-;10118:11;:54;;;;10198:56;10205:10;10217:23;10228:11;10217:6;:10;;:23;;;;:::i;:::-;10242:11;10198:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9111:1151;;;:::o;7881:64::-;;;;;;;;;;;;;:::o;6410:166::-;6376:5;;;;;;;;;;6362:19;;:10;:19;;;6354:28;;;;;;6500:9:::1;6492:5;::::0;:17:::1;;;;;;;;;;;;;;;;;;6558:9;6525:43;;6546:10;6525:43;;;;;;;;;;;;6410:166:::0;:::o;15324:239::-;15383:7;15402:18;15423:17;15436:3;15423:7;:12;;:17;;;;:::i;:::-;15402:38;;15451:23;15477:42;15516:1;15507:2;:11;15501:3;:17;15477:19;15492:3;15477:10;:14;;:19;;;;:::i;:::-;:23;;:42;;;;:::i;:::-;15451:68;;15537:18;15530:25;;;;15324:239;;;:::o;2715:471::-;2773:7;3023:1;3018;:6;3014:47;;;3048:1;3041:8;;;;3014:47;3073:9;3089:1;3085;:5;3073:17;;3118:1;3113;3109;:5;;;;;;:10;3101:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3177:1;3170:8;;;2715:471;;;;;:::o;3662:132::-;3720:7;3747:39;3751:1;3754;3747:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3740:46;;3662:132;;;;:::o;12816:374::-;12872:7;12892:14;12910:105;13007:7;;12911:90;12972:7;:15;12980:6;12972:15;;;;;;;;;;;;;;;:28;;;12912:54;12931:7;:34;12963:1;12939:7;:15;12947:6;12939:15;;;;;;;;;;;;;;;:21;;;:25;12931:34;;;;;;;;;;;;12912:14;;:18;;:54;;;;:::i;:::-;12911:60;;:90;;;;:::i;:::-;12910:96;;:105;;;;:::i;:::-;12892:123;;13150:7;;13056:90;13117:7;:15;13125:6;13117:15;;;;;;;;;;;;;;;:28;;;13057:54;13076:7;:34;13108:1;13084:7;:15;13092:6;13084:15;;;;;;;;;;;;;;;:21;;;:25;13076:34;;;;;;;;;;;;13057:14;;:18;;:54;;;;:::i;:::-;13056:60;;:90;;;;:::i;:::-;13055:102;;;;;;13026:7;:15;13034:6;13026:15;;;;;;;;;;;;;;;:25;;;:131;;;;;;;;;;;13176:6;13169:13;;;12816:374;;;:::o;1825:136::-;1883:7;1910:43;1914:1;1917;1910:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1903:50;;1825:136;;;;:::o;11008:585::-;11186:17;11206:42;11232:15;;11207:19;11218:7;;11207:6;:10;;:19;;;;:::i;:::-;11206:25;;:42;;;;:::i;:::-;11186:62;;11260:24;11287:26;11301:11;;11287:9;:13;;:26;;;;:::i;:::-;11260:53;;11342:26;11356:11;;11342:9;:13;;:26;;;;:::i;:::-;11324:15;:44;;;;11406:36;11425:16;11406:14;;:18;;:36;;;;:::i;:::-;11389:14;:53;;;;11470:38;11491:16;11470:7;:16;11484:1;11478:5;;:7;11470:16;;;;;;;;;;;;:20;;:38;;;;:::i;:::-;11453:7;:14;11461:5;;11453:14;;;;;;;;;;;:55;;;;11534:33;11541:5;;11548:6;11556:10;11534:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11578:5;;:7;;;;;;;;;;;;;11008:585;;;:::o;1361:181::-;1419:7;1439:9;1455:1;1451;:5;1439:17;;1480:1;1475;:6;;1467:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1533:1;1526:8;;;1361:181;;;;:::o;5826:106::-;5879:6;5923:1;5919;5914;5910;5906;:5;:9;5905:15;;;;;;:19;5898:26;;5826:106;;;;:::o;4290:278::-;4376:7;4408:1;4404;:5;4411:12;4396:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4435:9;4451:1;4447;:5;;;;;;4435:17;;4559:1;4552:8;;;4290:278;;;;;:::o;2264:192::-;2350:7;2383:1;2378;:6;;2386:12;2370:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2410:9;2426:1;2422;:5;2410:17;;2447:1;2440:8;;;2264:192;;;;;:::o;5033:130::-;5091:7;5118:37;5122:1;5125;5118:37;;;;;;;;;;;;;;;;;:3;:37::i;:::-;5111:44;;5033:130;;;;:::o;5648:166::-;5734:7;5767:1;5762;:6;;5770:12;5754:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5805:1;5801;:5;;;;;;5794:12;;5648:166;;;;;:::o

Swarm Source

ipfs://2fee3714c32f2cc7dce6aa4d49ab55381aa309ad66f84a1a4a077ce90ae2a74e

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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