ETH Price: $3,475.29 (+3.17%)

Token

Fren.community (Frens)
 

Overview

Max Total Supply

62,063.406692512866742143 Frens

Holders

137

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 Frens

Value
$0.00
0xa4899ebe641f969fd4e6dd95a80702762e73649c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Frens

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-09
*/

pragma solidity ^0.4.18;


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 */
contract ERC20Basic {
  uint256 public totalSupply;
  uint256 public totalDonation;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}





/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}



/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 */
contract StandardToken is ERC20Basic, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    emit Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * 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:
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   *
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}





/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 */

contract MintableToken is StandardToken, Ownable {
  event Mint(address indexed to, uint256 amount);

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(address _to, uint256 _amount) internal returns (bool) {
    totalSupply = totalSupply.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Mint(_to, _amount);
    emit Transfer(address(0), _to, _amount);
    return true;
  }

}



contract Frens is MintableToken
{
    // Using libraries 
    using SafeMath for uint;

    
    //////////////////////
    // ERC20 token state
    //////////////////////
    
    /**
    These state vars are handled in the OpenZeppelin libraries;
    we display them here for the developer's information.
    ***
    // ERC20Basic - Store account balances
    mapping (address => uint256) public balances;

    // StandardToken - Owner of account approves transfer of an amount to another account
    mapping (address => mapping (address => uint256)) public allowed;

    // 
    uint256 public totalSupply;
    */
    
    //////////////////////
    // Human token state
    //////////////////////
    string public constant name = "Fren.community";
    string public constant symbol = "Frens";
    uint8 public constant  decimals = 18;

    ///////////////////////////////////////////////////////////
    // State vars for custom staking and budget functionality
    ///////////////////////////////////////////////////////////

    /// Stake minting
    // Minted tokens per second for all stakers
    uint private globalMintRate;
    // Total tokens currently staked
    uint public totalFrensStaked; 

    // struct that will hold user stake
    struct TokenStakeData {
        uint initialStakeBalance;
        uint initialStakeTime;
        uint initialStakePercentage;
        uint initialClaimTime;
    }
    
    // Track all tokens staked
    mapping (address => TokenStakeData) public stakeBalances;

    // Fire a loggable event when tokens are staked
    event Stake(address indexed staker,  uint256 value);

    // Fire a loggable event when staked tokens are vested
    event Vest(address indexed vester, uint256 stakedAmount, uint256 stakingGains);

    //////////////////////////////////////////////////
    /// Begin Frens token functionality
    //////////////////////////////////////////////////

    /// @dev Frens token constructor
    constructor() public
    {
        // Define owner
        owner = msg.sender;
        //staking not enabled at first to transfer with no burns
        // Define initial owner supply. (ether here is used only to get the decimals right)
        uint _initOwnerSupply = 100000 ether;
        // One-time bulk mint given to owner
        bool _success = mint(msg.sender, _initOwnerSupply);
        // Abort if initial minting failed for whatever reason
        require(_success);

    }
    
    function donateToFrens (uint256 _value1) public returns (bool) {
        totalDonation = totalDonation.add(_value1);
        balances[msg.sender] = balances[msg.sender].sub(_value1);
    }
    
    
    function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);
    
    // SafeMath.sub will throw if there is not enough balance.
    uint burn_token = (_value*10)/100;
    uint token_send = _value.sub(burn_token);
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(token_send);
    totalSupply = totalSupply.sub(burn_token.div(2));
    totalDonation = totalDonation.add(burn_token.div(2));
    emit Transfer(msg.sender, _to, token_send);
    emit Transfer(msg.sender,address(0),burn_token.div(2));
    return true;
        
}
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);
    

    uint burn_token = (_value*10)/100;
    uint token_send = _value.sub(burn_token);
    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(token_send);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    totalSupply = totalSupply.sub(burn_token.div(2));
    totalDonation = totalDonation.add(burn_token.div(2));
    emit Transfer(_from, _to, token_send);
    emit Transfer(_from,address(0),burn_token.div(2)); 
    return true;

}
    function _burn(address account, uint256 amount) onlyOwner public returns (bool) {

    balances[account] = balances[account].sub(amount);
    totalSupply = totalSupply.sub(amount);
    emit Transfer(account, address(0), amount);
    }
    

    /// @dev staking function which allows users to stake an amount of tokens to gain interest for up to 10 days 
    function stakeFrens(uint _stakeAmount) external
    {
        // Require that tokens are staked successfully
        require(stakeTokens(_stakeAmount));
    }

    /// @dev allows users to reclaim any staked tokens
    /// @return bool on success
    function claimFrens() external returns (bool success)
    {
        /// Sanity checks: 
        // require that there was some amount vested
        require(stakeBalances[msg.sender].initialStakeBalance > 0);
        // require that time has elapsed
        require(now > stakeBalances[msg.sender].initialStakeTime);

        // Calculate the time elapsed since the tokens were originally staked
        uint _timePassedSinceStake = now.sub(stakeBalances[msg.sender].initialStakeTime);

        // Calculate tokens to mint
        uint _tokensToMint = calculateStakeGains(_timePassedSinceStake);

        // Add the original stake back to the user's balance
        balances[msg.sender] += stakeBalances[msg.sender].initialStakeBalance;
        
        // Subtract stake balance from totalFrensStaked
        totalFrensStaked -= stakeBalances[msg.sender].initialStakeBalance;
        
        // Not spliting stake; mint all new tokens and give them to msg.sender 
        mint(msg.sender, _tokensToMint);
        mint(owner, _tokensToMint.div(20)); //used for marketting, websites devs, giveaways and other stuffs
        
        
        // Fire an event to tell the world of the newly vested tokens
        emit Vest(msg.sender, stakeBalances[msg.sender].initialStakeBalance, _tokensToMint);

        // Clear out stored data from mapping
        stakeBalances[msg.sender].initialStakeBalance = 0;
        stakeBalances[msg.sender].initialStakeTime = 0;

        return true;
    }

    /// @dev Allows user to check their staked balance
    function getStakedBalance() view external returns (uint stakedBalance) 
    {
        return stakeBalances[msg.sender].initialStakeBalance;
    }


    /// @dev stake function reduces the user's total available balance. totalSupply is unaffected
    /// @param _value determines how many tokens a user wants to stake
    function stakeTokens(uint256 _value) private returns (bool success)
    {
        /// Sanity Checks:
        // You can only stake as many tokens as you have
        require(_value <= balances[msg.sender]);
        // You can only stake tokens if  you have not already staked tokens
        require(stakeBalances[msg.sender].initialStakeBalance == 0);

        // Subtract stake amount from regular token balance
        balances[msg.sender] = balances[msg.sender].sub(_value);
        
        // Add stake amount to staked balance
        stakeBalances[msg.sender].initialStakeBalance = _value;

        // Increment the global staked tokens value
        totalFrensStaked += _value;
        
        // Save the time that the stake started
        stakeBalances[msg.sender].initialStakeTime = now;
        
        stakeBalances[msg.sender].initialClaimTime = now;


        // Fire an event to tell the world of the newly staked tokens
        emit Stake(msg.sender, _value);

        return true;
    }
    
    function takeDonatedFrens() external returns (uint claimAmount)
    {
        require(stakeBalances[msg.sender].initialStakeBalance > 10000000000000000000);
    
        require(86400 < now.sub(stakeBalances[msg.sender].initialClaimTime));
        
        uint _amountClaim = totalDonation.div(100);
        uint _amountHave = stakeBalances[msg.sender].initialStakeBalance;
        
        if (_amountHave < _amountClaim) {
            
            mint(msg.sender, _amountHave.div(100));
            
            totalDonation = totalDonation.sub(_amountHave.div(100));
            
        } else {
         
         mint(msg.sender, totalDonation.div(100));
         
         claimAmount = totalDonation.div(100);
         
         totalDonation = totalDonation.sub(totalDonation.div(100));
         
         stakeBalances[msg.sender].initialClaimTime = now;
         
    }     
    
}

    /// @dev Helper function to claimStake that modularizes the minting via staking calculation 
    function calculateStakeGains(uint _timePassedSinceStake) view private returns (uint mintTotal)
    {
        // Store seconds in a day (need it in variable to use SafeMath)
        uint _secondsPerDay = 86400;
        uint _tokensToMint = 0;         // store number of new tokens to be minted
        
        // Determine the amount to be newly minted upon vesting, if any
        if (_timePassedSinceStake >_secondsPerDay) {
            
        
            
           // Tokens were staked for enough time to mint new tokens; determine how many
            if (_timePassedSinceStake > _secondsPerDay.mul(10)) {
                // Tokens were staked for the maximum amount of time (10 days)
                _tokensToMint = stakeBalances[msg.sender].initialStakeBalance.div(10);
            } else if (_secondsPerDay.mul(9) < _timePassedSinceStake && _timePassedSinceStake < _secondsPerDay.mul(10)){
                // Tokens were staked for a mintable amount of time between 9 and 10 days
                _tokensToMint = stakeBalances[msg.sender].initialStakeBalance.div(20);
            } else if (_secondsPerDay.mul(7) < _timePassedSinceStake && _timePassedSinceStake < _secondsPerDay.mul(9)){
                // Tokens were staked for a mintable amount of time between 7 and 9 days
                _tokensToMint = stakeBalances[msg.sender].initialStakeBalance.div(30);
            } else if (_secondsPerDay.mul(6) < _timePassedSinceStake && _timePassedSinceStake < _secondsPerDay.mul(7)){
                // Tokens were staked for a mintable amount of time between 6 and 7 days
                _tokensToMint = stakeBalances[msg.sender].initialStakeBalance.div(40);
            } else if (_secondsPerDay.mul(5) < _timePassedSinceStake && _timePassedSinceStake < _secondsPerDay.mul(6)){
                // Tokens were staked for a mintable amount of time between 5 and 6 days
                _tokensToMint = stakeBalances[msg.sender].initialStakeBalance.div(50);
            } else {
                
                _tokensToMint = 0;
            }
        } 
        
        // Return the amount of new tokens to be minted
        return _tokensToMint;

    }
    
    

    /// @dev calculateFraction allows us to better handle the Solidity ugliness of not having decimals as a native type 
    /// @param _numerator is the top part of the fraction we are calculating
    /// @param _denominator is the bottom part of the fraction we are calculating
    /// @param _precision tells the function how many significant digits to calculate out to
    /// @return quotient returns the result of our fraction calculation
    function calculateFraction(uint _numerator, uint _denominator, uint _precision) pure private returns(uint quotient) 
    {
        // Take passed value and expand it to the required precision
        _numerator = _numerator.mul(10 ** (_precision + 1));
        // handle last-digit rounding
        uint _quotient = ((_numerator.div(_denominator)) + 5) / 10;
        return (_quotient);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalFrensStaked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value1","type":"uint256"}],"name":"donateToFrens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stakeBalances","outputs":[{"name":"initialStakeBalance","type":"uint256"},{"name":"initialStakeTime","type":"uint256"},{"name":"initialStakePercentage","type":"uint256"},{"name":"initialClaimTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stakeAmount","type":"uint256"}],"name":"stakeFrens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"takeDonatedFrens","outputs":[{"name":"claimAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"_burn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimFrens","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStakedBalance","outputs":[{"name":"stakedBalance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDonation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"staker","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vester","type":"address"},{"indexed":false,"name":"stakedAmount","type":"uint256"},{"indexed":false,"name":"stakingGains","type":"uint256"}],"name":"Vest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

608060405234801561001057600080fd5b506004805433600160a060020a03199182168117909116811790915569152d02c7e14af68000009060009061004e9083640100000000610063810204565b905080151561005c57600080fd5b5050610162565b6000805461007e9083640100000000610f1861014c82021704565b6000908155600160a060020a0384168152600260205260409020546100b09083640100000000610f1861014c82021704565b600160a060020a038416600081815260026020908152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a038516916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350600192915050565b60008282018381101561015b57fe5b9392505050565b61130980620001726000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461012c57806308afc35f146101b6578063095ea7b3146101dd578063124f4cca1461021557806318160ddd1461022d57806323b872dd14610242578063313ce5671461026c5780633b317dab146102975780633d4a4a29146102de5780634efa426d146102f85780636161eb181461030d578063625e744914610331578063661884631461034657806370a082311461036a578063769658671461038b5780638da5cb5b146103a057806395d89b41146103d1578063a9059cbb146103e6578063d73dd6231461040a578063dd62ed3e1461042e578063ee2ac05f14610455578063f2fde38b1461046a575b600080fd5b34801561013857600080fd5b5061014161048b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017b578181015183820152602001610163565b50505050905090810190601f1680156101a85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101c257600080fd5b506101cb6104c2565b60408051918252519081900360200190f35b3480156101e957600080fd5b50610201600160a060020a03600435166024356104c8565b604080519115158252519081900360200190f35b34801561022157600080fd5b5061020160043561052e565b34801561023957600080fd5b506101cb61057c565b34801561024e57600080fd5b50610201600160a060020a0360043581169060243516604435610582565b34801561027857600080fd5b50610281610798565b6040805160ff9092168252519081900360200190f35b3480156102a357600080fd5b506102b8600160a060020a036004351661079d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156102ea57600080fd5b506102f66004356107c4565b005b34801561030457600080fd5b506101cb6107db565b34801561031957600080fd5b50610201600160a060020a0360043516602435610914565b34801561033d57600080fd5b506102016109bc565b34801561035257600080fd5b50610201600160a060020a0360043516602435610af5565b34801561037657600080fd5b506101cb600160a060020a0360043516610be7565b34801561039757600080fd5b506101cb610c02565b3480156103ac57600080fd5b506103b5610c15565b60408051600160a060020a039092168252519081900360200190f35b3480156103dd57600080fd5b50610141610c24565b3480156103f257600080fd5b50610201600160a060020a0360043516602435610c5b565b34801561041657600080fd5b50610201600160a060020a0360043516602435610db9565b34801561043a57600080fd5b506101cb600160a060020a0360043581169060243516610e52565b34801561046157600080fd5b506101cb610e7d565b34801561047657600080fd5b506102f6600160a060020a0360043516610e83565b60408051808201909152600e81527f4672656e2e636f6d6d756e697479000000000000000000000000000000000000602082015281565b60065481565b336000818152600360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600154600090610544908363ffffffff610f1816565b60015533600090815260026020526040902054610567908363ffffffff610f2e16565b33600090815260026020526040902055919050565b60005481565b60008080600160a060020a038516151561059b57600080fd5b600160a060020a0386166000908152600260205260409020548411156105c057600080fd5b600160a060020a03861660009081526003602090815260408083203384529091529020548411156105f057600080fd5b6064600a8502049150610609848363ffffffff610f2e16565b600160a060020a038716600090815260026020526040902054909150610635908563ffffffff610f2e16565b600160a060020a03808816600090815260026020526040808220939093559087168152205461066a908263ffffffff610f1816565b600160a060020a0380871660009081526002602090815260408083209490945591891681526003825282812033825290915220546106ae908563ffffffff610f2e16565b600160a060020a03871660009081526003602090815260408083203384529091529020556106f56106e683600263ffffffff610f4016565b6000549063ffffffff610f2e16565b60005561071b61070c83600263ffffffff610f4016565b6001549063ffffffff610f1816565b600155604080518281529051600160a060020a0380881692908916916000805160206112be8339815191529181900360200190a36000600160a060020a0387166000805160206112be83398151915261077b85600263ffffffff610f4016565b60408051918252519081900360200190a350600195945050505050565b601281565b60076020526000908152604090208054600182015460028301546003909301549192909184565b6107cd81610f57565b15156107d857600080fd5b50565b3360009081526007602052604081205481908190678ac7230489e800001061080257600080fd5b3360009081526007602052604090206003015461082690429063ffffffff610f2e16565b620151801061083457600080fd5b60015461084890606463ffffffff610f4016565b336000908152600760205260409020549092509050818110156108ab5761087f3361087a83606463ffffffff610f4016565b611020565b506108a361089482606463ffffffff610f4016565b6001549063ffffffff610f2e16565b60015561090f565b6108c53361087a6064600154610f4090919063ffffffff16565b506001546108da90606463ffffffff610f4016565b92506108f56108946064600154610f4090919063ffffffff16565b600155336000908152600760205260409020426003909101555b505090565b600454600090600160a060020a0316331461092e57600080fd5b600160a060020a038316600090815260026020526040902054610957908363ffffffff610f2e16565b600160a060020a03841660009081526002602052604081209190915554610984908363ffffffff610f2e16565b6000908155604080518481529051600160a060020a038616916000805160206112be833981519152919081900360200190a392915050565b336000908152600760205260408120548190819081106109db57600080fd5b3360009081526007602052604090206001015442116109f957600080fd5b33600090815260076020526040902060010154610a1d90429063ffffffff610f2e16565b9150610a28826110e9565b3360008181526007602081815260408084208054600284529190942080549091019055525460068054919091039055909150610a649082611020565b50600454610a8690600160a060020a031661087a83601463ffffffff610f4016565b503360008181526007602090815260409182902054825190815290810184905281517fa499197ed501de1424df2a7fb491b20a939468fbb6e47b99627aca4fe6fdb304929181900390910190a23360009081526007602052604081208181556001908101919091559250505090565b336000908152600360209081526040808320600160a060020a038616845290915281205480831115610b4a57336000908152600360209081526040808320600160a060020a0388168452909152812055610b7f565b610b5a818463ffffffff610f2e16565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a3600191505b5092915050565b600160a060020a031660009081526002602052604090205490565b3360009081526007602052604090205490565b600454600160a060020a031681565b60408051808201909152600581527f4672656e73000000000000000000000000000000000000000000000000000000602082015281565b60008080600160a060020a0385161515610c7457600080fd5b33600090815260026020526040902054841115610c9057600080fd5b6064600a8502049150610ca9848363ffffffff610f2e16565b33600090815260026020526040902054909150610ccc908563ffffffff610f2e16565b3360009081526002602052604080822092909255600160a060020a03871681522054610cfe908263ffffffff610f1816565b600160a060020a038616600090815260026020819052604090912091909155610d32906106e690849063ffffffff610f4016565b600055610d4961070c83600263ffffffff610f4016565b600155604080518281529051600160a060020a0387169133916000805160206112be8339815191529181900360200190a36000336000805160206112be833981519152610d9d85600263ffffffff610f4016565b60408051918252519081900360200190a3506001949350505050565b336000908152600360209081526040808320600160a060020a0386168452909152812054610ded908363ffffffff610f1816565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60015481565b600454600160a060020a03163314610e9a57600080fd5b600160a060020a0381161515610eaf57600080fd5b600454604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082820183811015610f2757fe5b9392505050565b600082821115610f3a57fe5b50900390565b6000808284811515610f4e57fe5b04949350505050565b33600090815260026020526040812054821115610f7357600080fd5b3360009081526007602052604090205415610f8d57600080fd5b33600090815260026020526040902054610fad908363ffffffff610f2e16565b336000818152600260209081526040808320949094556007815290839020858155600680548701905542600182018190556003909101558251858152925191927febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a929081900390910190a2506001919050565b60008054611034908363ffffffff610f1816565b6000908155600160a060020a03841681526002602052604090205461105f908363ffffffff610f1816565b600160a060020a038416600081815260026020908152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a038516916000916000805160206112be8339815191529181900360200190a350600192915050565b6000620151808181841115610f275761110982600a63ffffffff61129216565b841115611138573360009081526007602052604090205461113190600a63ffffffff610f4016565b9050610f27565b8361114a83600963ffffffff61129216565b108015611166575061116382600a63ffffffff61129216565b84105b1561118c573360009081526007602052604090205461113190601463ffffffff610f4016565b8361119e83600763ffffffff61129216565b1080156111ba57506111b782600963ffffffff61129216565b84105b156111e0573360009081526007602052604090205461113190601e63ffffffff610f4016565b836111f283600663ffffffff61129216565b10801561120e575061120b82600763ffffffff61129216565b84105b15611234573360009081526007602052604090205461113190602863ffffffff610f4016565b8361124683600563ffffffff61129216565b108015611262575061125f82600663ffffffff61129216565b84105b15611288573360009081526007602052604090205461113190603263ffffffff610f4016565b5060009392505050565b6000808315156112a55760009150610be0565b508282028284828115156112b557fe5b0414610f2757fe00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820e41945c45479c76c809210fb4638fd22427fe16f723dbbe9c37c031a99b0f50e0029

Deployed Bytecode

0x6080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461012c57806308afc35f146101b6578063095ea7b3146101dd578063124f4cca1461021557806318160ddd1461022d57806323b872dd14610242578063313ce5671461026c5780633b317dab146102975780633d4a4a29146102de5780634efa426d146102f85780636161eb181461030d578063625e744914610331578063661884631461034657806370a082311461036a578063769658671461038b5780638da5cb5b146103a057806395d89b41146103d1578063a9059cbb146103e6578063d73dd6231461040a578063dd62ed3e1461042e578063ee2ac05f14610455578063f2fde38b1461046a575b600080fd5b34801561013857600080fd5b5061014161048b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017b578181015183820152602001610163565b50505050905090810190601f1680156101a85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101c257600080fd5b506101cb6104c2565b60408051918252519081900360200190f35b3480156101e957600080fd5b50610201600160a060020a03600435166024356104c8565b604080519115158252519081900360200190f35b34801561022157600080fd5b5061020160043561052e565b34801561023957600080fd5b506101cb61057c565b34801561024e57600080fd5b50610201600160a060020a0360043581169060243516604435610582565b34801561027857600080fd5b50610281610798565b6040805160ff9092168252519081900360200190f35b3480156102a357600080fd5b506102b8600160a060020a036004351661079d565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156102ea57600080fd5b506102f66004356107c4565b005b34801561030457600080fd5b506101cb6107db565b34801561031957600080fd5b50610201600160a060020a0360043516602435610914565b34801561033d57600080fd5b506102016109bc565b34801561035257600080fd5b50610201600160a060020a0360043516602435610af5565b34801561037657600080fd5b506101cb600160a060020a0360043516610be7565b34801561039757600080fd5b506101cb610c02565b3480156103ac57600080fd5b506103b5610c15565b60408051600160a060020a039092168252519081900360200190f35b3480156103dd57600080fd5b50610141610c24565b3480156103f257600080fd5b50610201600160a060020a0360043516602435610c5b565b34801561041657600080fd5b50610201600160a060020a0360043516602435610db9565b34801561043a57600080fd5b506101cb600160a060020a0360043581169060243516610e52565b34801561046157600080fd5b506101cb610e7d565b34801561047657600080fd5b506102f6600160a060020a0360043516610e83565b60408051808201909152600e81527f4672656e2e636f6d6d756e697479000000000000000000000000000000000000602082015281565b60065481565b336000818152600360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b600154600090610544908363ffffffff610f1816565b60015533600090815260026020526040902054610567908363ffffffff610f2e16565b33600090815260026020526040902055919050565b60005481565b60008080600160a060020a038516151561059b57600080fd5b600160a060020a0386166000908152600260205260409020548411156105c057600080fd5b600160a060020a03861660009081526003602090815260408083203384529091529020548411156105f057600080fd5b6064600a8502049150610609848363ffffffff610f2e16565b600160a060020a038716600090815260026020526040902054909150610635908563ffffffff610f2e16565b600160a060020a03808816600090815260026020526040808220939093559087168152205461066a908263ffffffff610f1816565b600160a060020a0380871660009081526002602090815260408083209490945591891681526003825282812033825290915220546106ae908563ffffffff610f2e16565b600160a060020a03871660009081526003602090815260408083203384529091529020556106f56106e683600263ffffffff610f4016565b6000549063ffffffff610f2e16565b60005561071b61070c83600263ffffffff610f4016565b6001549063ffffffff610f1816565b600155604080518281529051600160a060020a0380881692908916916000805160206112be8339815191529181900360200190a36000600160a060020a0387166000805160206112be83398151915261077b85600263ffffffff610f4016565b60408051918252519081900360200190a350600195945050505050565b601281565b60076020526000908152604090208054600182015460028301546003909301549192909184565b6107cd81610f57565b15156107d857600080fd5b50565b3360009081526007602052604081205481908190678ac7230489e800001061080257600080fd5b3360009081526007602052604090206003015461082690429063ffffffff610f2e16565b620151801061083457600080fd5b60015461084890606463ffffffff610f4016565b336000908152600760205260409020549092509050818110156108ab5761087f3361087a83606463ffffffff610f4016565b611020565b506108a361089482606463ffffffff610f4016565b6001549063ffffffff610f2e16565b60015561090f565b6108c53361087a6064600154610f4090919063ffffffff16565b506001546108da90606463ffffffff610f4016565b92506108f56108946064600154610f4090919063ffffffff16565b600155336000908152600760205260409020426003909101555b505090565b600454600090600160a060020a0316331461092e57600080fd5b600160a060020a038316600090815260026020526040902054610957908363ffffffff610f2e16565b600160a060020a03841660009081526002602052604081209190915554610984908363ffffffff610f2e16565b6000908155604080518481529051600160a060020a038616916000805160206112be833981519152919081900360200190a392915050565b336000908152600760205260408120548190819081106109db57600080fd5b3360009081526007602052604090206001015442116109f957600080fd5b33600090815260076020526040902060010154610a1d90429063ffffffff610f2e16565b9150610a28826110e9565b3360008181526007602081815260408084208054600284529190942080549091019055525460068054919091039055909150610a649082611020565b50600454610a8690600160a060020a031661087a83601463ffffffff610f4016565b503360008181526007602090815260409182902054825190815290810184905281517fa499197ed501de1424df2a7fb491b20a939468fbb6e47b99627aca4fe6fdb304929181900390910190a23360009081526007602052604081208181556001908101919091559250505090565b336000908152600360209081526040808320600160a060020a038616845290915281205480831115610b4a57336000908152600360209081526040808320600160a060020a0388168452909152812055610b7f565b610b5a818463ffffffff610f2e16565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a3600191505b5092915050565b600160a060020a031660009081526002602052604090205490565b3360009081526007602052604090205490565b600454600160a060020a031681565b60408051808201909152600581527f4672656e73000000000000000000000000000000000000000000000000000000602082015281565b60008080600160a060020a0385161515610c7457600080fd5b33600090815260026020526040902054841115610c9057600080fd5b6064600a8502049150610ca9848363ffffffff610f2e16565b33600090815260026020526040902054909150610ccc908563ffffffff610f2e16565b3360009081526002602052604080822092909255600160a060020a03871681522054610cfe908263ffffffff610f1816565b600160a060020a038616600090815260026020819052604090912091909155610d32906106e690849063ffffffff610f4016565b600055610d4961070c83600263ffffffff610f4016565b600155604080518281529051600160a060020a0387169133916000805160206112be8339815191529181900360200190a36000336000805160206112be833981519152610d9d85600263ffffffff610f4016565b60408051918252519081900360200190a3506001949350505050565b336000908152600360209081526040808320600160a060020a0386168452909152812054610ded908363ffffffff610f1816565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60015481565b600454600160a060020a03163314610e9a57600080fd5b600160a060020a0381161515610eaf57600080fd5b600454604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082820183811015610f2757fe5b9392505050565b600082821115610f3a57fe5b50900390565b6000808284811515610f4e57fe5b04949350505050565b33600090815260026020526040812054821115610f7357600080fd5b3360009081526007602052604090205415610f8d57600080fd5b33600090815260026020526040902054610fad908363ffffffff610f2e16565b336000818152600260209081526040808320949094556007815290839020858155600680548701905542600182018190556003909101558251858152925191927febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a929081900390910190a2506001919050565b60008054611034908363ffffffff610f1816565b6000908155600160a060020a03841681526002602052604090205461105f908363ffffffff610f1816565b600160a060020a038416600081815260026020908152604091829020939093558051858152905191927f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688592918290030190a2604080518381529051600160a060020a038516916000916000805160206112be8339815191529181900360200190a350600192915050565b6000620151808181841115610f275761110982600a63ffffffff61129216565b841115611138573360009081526007602052604090205461113190600a63ffffffff610f4016565b9050610f27565b8361114a83600963ffffffff61129216565b108015611166575061116382600a63ffffffff61129216565b84105b1561118c573360009081526007602052604090205461113190601463ffffffff610f4016565b8361119e83600763ffffffff61129216565b1080156111ba57506111b782600963ffffffff61129216565b84105b156111e0573360009081526007602052604090205461113190601e63ffffffff610f4016565b836111f283600663ffffffff61129216565b10801561120e575061120b82600763ffffffff61129216565b84105b15611234573360009081526007602052604090205461113190602863ffffffff610f4016565b8361124683600563ffffffff61129216565b108015611262575061125f82600663ffffffff61129216565b84105b15611288573360009081526007602052604090205461113190603263ffffffff610f4016565b5060009392505050565b6000808315156112a55760009150610be0565b508282028284828115156112b557fe5b0414610f2757fe00ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820e41945c45479c76c809210fb4638fd22427fe16f723dbbe9c37c031a99b0f50e0029

Deployed Bytecode Sourcemap

8233:11840:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8965:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8965:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8965:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9448:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9448:28:0;;;;;;;;;;;;;;;;;;;;5224:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5224:192:0;-1:-1:-1;;;;;5224:192:0;;;;;;;;;;;;;;;;;;;;;;;;;10763:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10763:191:0;;;;;131:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;131:26:0;;;;11653:726;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11653:726:0;-1:-1:-1;;;;;11653:726:0;;;;;;;;;;;;9064:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9064:36:0;;;;;;;;;;;;;;;;;;;;;;;9738:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9738:56:0;-1:-1:-1;;;;;9738:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12753:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12753:162:0;;;;;;;15970:922;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15970:922:0;;;;12385:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12385:239:0;-1:-1:-1;;;;;12385:239:0;;;;;;;13012:1519;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13012:1519:0;;;;7080:412;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7080:412:0;-1:-1:-1;;;;;7080:412:0;;;;;;;3582:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3582:109:0;-1:-1:-1;;;;;3582:109:0;;;;;14595:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14595:148:0;;;;963:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;963:20:0;;;;;;;;-1:-1:-1;;;;;963:20:0;;;;;;;;;;;;;;9018:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9018:39:0;;;;10972:675;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10972:675:0;-1:-1:-1;;;;;10972:675:0;;;;;;;6340:266;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6340:266:0;-1:-1:-1;;;;;6340:266:0;;;;;;;5743:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5743:128:0;-1:-1:-1;;;;;5743:128:0;;;;;;;;;;162:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;162:28:0;;;;1580:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1580:178:0;-1:-1:-1;;;;;1580:178:0;;;;;8965:46;;;;;;;;;;;;;;;;;;;:::o;9448:28::-;;;;:::o;5224:192::-;5312:10;5291:4;5304:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;5304:29:0;;;;;;;;;;;:38;;;5354;;;;;;;5291:4;;5304:29;;5312:10;;5354:38;;;;;;;;-1:-1:-1;5406:4:0;5224:192;;;;:::o;10763:191::-;10853:13;;10820:4;;10853:26;;10871:7;10853:26;:17;:26;:::i;:::-;10837:13;:42;10922:10;10913:20;;;;:8;:20;;;;;;:33;;10938:7;10913:33;:24;:33;:::i;:::-;10899:10;10890:20;;;;:8;:20;;;;;:56;10763:191;;-1:-1:-1;10763:191:0:o;131:26::-;;;;:::o;11653:726::-;11735:4;;;-1:-1:-1;;;;;11756:17:0;;;;11748:26;;;;;;-1:-1:-1;;;;;11799:15:0;;;;;;:8;:15;;;;;;11789:25;;;11781:34;;;;;;-1:-1:-1;;;;;11840:14:0;;;;;;:7;:14;;;;;;;;11855:10;11840:26;;;;;;;;11830:36;;;11822:45;;;;;;11912:3;11908:2;11901:9;;11900:15;;-1:-1:-1;11940:22:0;:6;11900:15;11940:22;:10;:22;:::i;:::-;-1:-1:-1;;;;;11987:15:0;;;;;;:8;:15;;;;;;11922:40;;-1:-1:-1;11987:27:0;;12007:6;11987:27;:19;:27;:::i;:::-;-1:-1:-1;;;;;11969:15:0;;;;;;;:8;:15;;;;;;:45;;;;12037:13;;;;;;;:29;;12055:10;12037:29;:17;:29;:::i;:::-;-1:-1:-1;;;;;12021:13:0;;;;;;;:8;:13;;;;;;;;:45;;;;12102:14;;;;;:7;:14;;;;;12117:10;12102:26;;;;;;;:38;;12133:6;12102:38;:30;:38;:::i;:::-;-1:-1:-1;;;;;12073:14:0;;;;;;:7;:14;;;;;;;;12088:10;12073:26;;;;;;;:67;12161:34;12177:17;:10;12192:1;12177:17;:14;:17;:::i;:::-;12161:11;;;:34;:15;:34;:::i;:::-;12147:11;:48;12218:36;12236:17;:10;12251:1;12236:17;:14;:17;:::i;:::-;12218:13;;;:36;:17;:36;:::i;:::-;12202:13;:52;12266:32;;;;;;;;-1:-1:-1;;;;;12266:32:0;;;;;;;;-1:-1:-1;;;;;;;;;;;12266:32:0;;;;;;;;12333:1;-1:-1:-1;;;;;12310:44:0;;-1:-1:-1;;;;;;;;;;;12336:17:0;:10;12351:1;12336:17;:14;:17;:::i;:::-;12310:44;;;;;;;;;;;;;;;-1:-1:-1;12369:4:0;;11653:726;-1:-1:-1;;;;;11653:726:0:o;9064:36::-;9098:2;9064:36;:::o;9738:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12753:162::-;12881:25;12893:12;12881:11;:25::i;:::-;12873:34;;;;;;;;12753:162;:::o;15970:922::-;16072:10;16016:16;16058:25;;;:13;:25;;;;;:45;16016:16;;;;16106:20;-1:-1:-1;16050:77:0;;;;;;16182:10;16168:25;;;;:13;:25;;;;;:42;;;16160:51;;:3;;:51;:7;:51;:::i;:::-;16152:5;:59;16144:68;;;;;;16253:13;;:22;;16271:3;16253:22;:17;:22;:::i;:::-;16319:10;16305:25;;;;:13;:25;;;;;:45;16233:42;;-1:-1:-1;16305:45:0;-1:-1:-1;16375:26:0;;;16371:507;;;16432:38;16437:10;16449:20;:11;16465:3;16449:20;:15;:20;:::i;:::-;16432:4;:38::i;:::-;-1:-1:-1;16515:39:0;16533:20;:11;16549:3;16533:20;:15;:20;:::i;:::-;16515:13;;;:39;:17;:39;:::i;:::-;16499:13;:55;16371:507;;;16609:40;16614:10;16626:22;16644:3;16626:13;;:17;;:22;;;;:::i;16609:40::-;-1:-1:-1;16686:13:0;;:22;;16704:3;16686:22;:17;:22;:::i;:::-;16672:36;;16747:41;16765:22;16783:3;16765:13;;:17;;:22;;;;:::i;16747:41::-;16731:13;:57;16825:10;16811:25;;;;:13;:25;;;;;16856:3;16811:42;;;;:48;16371:507;15970:922;;;:::o;12385:239::-;1391:5;;12459:4;;-1:-1:-1;;;;;1391:5:0;1377:10;:19;1369:28;;;;;;-1:-1:-1;;;;;12494:17:0;;;;;;:8;:17;;;;;;:29;;12516:6;12494:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;12474:17:0;;;;;;:8;:17;;;;;:49;;;;12544:11;:23;;12560:6;12544:23;:15;:23;:::i;:::-;12530:11;:37;;;12579;;;;;;;;-1:-1:-1;;;;;12579:37:0;;;-1:-1:-1;;;;;;;;;;;12579:37:0;;;;;;;;;12385:239;;;;:::o;13012:1519::-;13187:10;13052:12;13173:25;;;:13;:25;;;;;:45;13052:12;;;;13173:49;-1:-1:-1;13165:58:0;;;;;;13304:10;13290:25;;;;:13;:25;;;;;:42;;;13284:3;:48;13276:57;;;;;;13476:10;13462:25;;;;:13;:25;;;;;:42;;;13454:51;;:3;;:51;:7;:51;:::i;:::-;13425:80;;13576:42;13596:21;13576:19;:42::i;:::-;13731:10;13717:25;;;;:13;:25;;;;;;;;:45;;13693:8;:20;;;;;;:69;;;;;;;13860:25;:45;13840:16;:65;;;;;;;;13555:63;;-1:-1:-1;14007:31:0;;13555:63;14007:4;:31::i;:::-;-1:-1:-1;14054:5:0;;14049:34;;-1:-1:-1;;;;;14054:5:0;14061:21;:13;14079:2;14061:21;:17;:21;:::i;14049:34::-;-1:-1:-1;14260:10:0;14272:25;;;;:13;:25;;;;;;;;;:45;14255:78;;;;;;;;;;;;;;;;;;;;;;;;14407:10;14441:1;14393:25;;;:13;:25;;;;;:49;;;14453:42;;;;:46;;;;:42;-1:-1:-1;13012:1519:0;;;:::o;7080:412::-;7200:10;7163:4;7192:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7192:29:0;;;;;;;;;;7232:27;;;7228:168;;;7278:10;7302:1;7270:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7270:29:0;;;;;;;;;:33;7228:168;;;7358:30;:8;7371:16;7358:30;:12;:30;:::i;:::-;7334:10;7326:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7326:29:0;;;;;;;;;:62;7228:168;7416:10;7438:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7407:61:0;;7438:29;;;;;;;;;;;7407:61;;;;;;;;;7416:10;7407:61;;;;;;;;;;;7482:4;7475:11;;7080:412;;;;;;:::o;3582:109::-;-1:-1:-1;;;;;3669:16:0;3638:15;3669:16;;;:8;:16;;;;;;;3582:109::o;14595:148::-;14704:10;14646:18;14690:25;;;:13;:25;;;;;:45;14595:148;:::o;963:20::-;;;-1:-1:-1;;;;;963:20:0;;:::o;9018:39::-;;;;;;;;;;;;;;;;;;;:::o;10972:675::-;11035:4;;;-1:-1:-1;;;;;11056:17:0;;;;11048:26;;;;;;11108:10;11099:20;;;;:8;:20;;;;;;11089:30;;;11081:39;;;;;;11227:3;11223:2;11216:9;;11215:15;;-1:-1:-1;11255:22:0;:6;11215:15;11255:22;:10;:22;:::i;:::-;11316:10;11307:20;;;;:8;:20;;;;;;11237:40;;-1:-1:-1;11307:32:0;;11332:6;11307:32;:24;:32;:::i;:::-;11293:10;11284:20;;;;:8;:20;;;;;;:55;;;;-1:-1:-1;;;;;11362:13:0;;;;;;:29;;11380:10;11362:29;:17;:29;:::i;:::-;-1:-1:-1;;;;;11346:13:0;;;;;;:8;:13;;;;;;;;:45;;;;11412:34;;11428:17;;:10;;:17;:14;:17;:::i;11412:34::-;11398:11;:48;11469:36;11487:17;:10;11502:1;11487:17;:14;:17;:::i;11469:36::-;11453:13;:52;11517:37;;;;;;;;-1:-1:-1;;;;;11517:37:0;;;11526:10;;-1:-1:-1;;;;;;;;;;;11517:37:0;;;;;;;;11594:1;11575:10;-1:-1:-1;;;;;;;;;;;11597:17:0;:10;11612:1;11597:17;:14;:17;:::i;:::-;11566:49;;;;;;;;;;;;;;;-1:-1:-1;11629:4:0;;10972:675;-1:-1:-1;;;;10972:675:0:o;6340:266::-;6471:10;6418:4;6463:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6463:29:0;;;;;;;;;;:46;;6497:11;6463:46;:33;:46;:::i;:::-;6439:10;6431:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6431:29:0;;;;;;;;;;;;:78;;;6521:61;;;;;;6431:29;;6521:61;;;;;;;;;;;-1:-1:-1;6596:4:0;6340:266;;;;:::o;5743:128::-;-1:-1:-1;;;;;5840:15:0;;;5817:7;5840:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;5743:128::o;162:28::-;;;;:::o;1580:178::-;1391:5;;-1:-1:-1;;;;;1391:5:0;1377:10;:19;1369:28;;;;;;-1:-1:-1;;;;;1657:22:0;;;;1649:31;;;;;;1713:5;;1692:37;;-1:-1:-1;;;;;1692:37:0;;;;1713:5;;1692:37;;1713:5;;1692:37;1736:5;:16;;-1:-1:-1;;1736:16:0;-1:-1:-1;;;;;1736:16:0;;;;;;;;;;1580:178::o;2472:133::-;2530:7;2558:5;;;2577:6;;;;2570:14;;;;2598:1;2472:133;-1:-1:-1;;;2472:133:0:o;2353:113::-;2411:7;2434:6;;;;2427:14;;;;-1:-1:-1;2455:5:0;;;2353:113::o;2077:270::-;2135:7;2226:9;2242:1;2238;:5;;;;;;;;;2077:270;-1:-1:-1;;;;2077:270:0:o;14924:1034::-;15121:10;14978:12;15112:20;;;:8;:20;;;;;;15102:30;;;15094:39;;;;;;15243:10;15229:25;;;;:13;:25;;;;;:45;:50;15221:59;;;;;;15386:10;15377:20;;;;:8;:20;;;;;;:32;;15402:6;15377:32;:24;:32;:::i;:::-;15363:10;15354:20;;;;:8;:20;;;;;;;;:55;;;;15477:13;:25;;;;;;:54;;;15597:16;:26;;;;;;15738:3;-1:-1:-1;15693:42:0;;:48;;;15762:42;;;;:48;15901:25;;;;;;;15363:10;;15901:25;;;;;;;;;;;-1:-1:-1;15946:4:0;14924:1034;;;:::o;7958:262::-;8020:4;8047:11;;:24;;8063:7;8047:24;:15;:24;:::i;:::-;8033:11;:38;;;-1:-1:-1;;;;;8094:13:0;;;;:8;:13;;;;;;:26;;8112:7;8094:26;:17;:26;:::i;:::-;-1:-1:-1;;;;;8078:13:0;;;;;;:8;:13;;;;;;;;;:42;;;;8132:18;;;;;;;8078:13;;8132:18;;;;;;;;;8162:34;;;;;;;;-1:-1:-1;;;;;8162:34:0;;;8179:1;;-1:-1:-1;;;;;;;;;;;8162:34:0;;;;;;;;-1:-1:-1;8210:4:0;7958:262;;;;:::o;16998:2203::-;17077:14;17204:5;17077:14;17391:37;;;17387:1706;;;17600:22;:14;17619:2;17600:22;:18;:22;:::i;:::-;17576:21;:46;17572:1510;;;17753:10;17739:25;;;;:13;:25;;;;;:45;:53;;17789:2;17739:53;:49;:53;:::i;:::-;17723:69;;17572:1510;;;17842:21;17818;:14;17837:1;17818:21;:18;:21;:::i;:::-;:45;:95;;;;-1:-1:-1;17891:22:0;:14;17910:2;17891:22;:18;:22;:::i;:::-;17867:21;:46;17818:95;17814:1268;;;18054:10;18040:25;;;;:13;:25;;;;;:45;:53;;18090:2;18040:53;:49;:53;:::i;17814:1268::-;18143:21;18119;:14;18138:1;18119:21;:18;:21;:::i;:::-;:45;:94;;;;-1:-1:-1;18192:21:0;:14;18211:1;18192:21;:18;:21;:::i;:::-;18168;:45;18119:94;18115:967;;;18353:10;18339:25;;;;:13;:25;;;;;:45;:53;;18389:2;18339:53;:49;:53;:::i;18115:967::-;18442:21;18418;:14;18437:1;18418:21;:18;:21;:::i;:::-;:45;:94;;;;-1:-1:-1;18491:21:0;:14;18510:1;18491:21;:18;:21;:::i;:::-;18467;:45;18418:94;18414:668;;;18652:10;18638:25;;;;:13;:25;;;;;:45;:53;;18688:2;18638:53;:49;:53;:::i;18414:668::-;18741:21;18717;:14;18736:1;18717:21;:18;:21;:::i;:::-;:45;:94;;;;-1:-1:-1;18790:21:0;:14;18809:1;18790:21;:18;:21;:::i;:::-;18766;:45;18717:94;18713:369;;;18951:10;18937:25;;;;:13;:25;;;;;:45;:53;;18987:2;18937:53;:49;:53;:::i;18713:369::-;-1:-1:-1;19065:1:0;19178:13;16998:2203;-1:-1:-1;;;16998:2203:0:o;1891:180::-;1949:7;;1969:6;;1965:37;;;1993:1;1986:8;;;;1965:37;-1:-1:-1;2020:5:0;;;2024:1;2020;:5;2039;;;;;;;;:10;2032:18;;

Swarm Source

bzzr://e41945c45479c76c809210fb4638fd22427fe16f723dbbe9c37c031a99b0f50e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.