ETH Price: $3,675.38 (+0.97%)

Token

Nahmii v1 (DEPRECATED) (OLDNII)
 

Overview

Max Total Supply

120,000,000,000 OLDNII

Holders

190

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 15 Decimals)

Balance
0 OLDNII

Value
$0.00
0x158c43de6d264f83e4c9ef858a835c8ea4362f3c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Nahmii token contract has migrated to 0x7c8155909cd385F120A56eF90728dD50F9CcbE52.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NahmiiToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 0 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-08
*/

pragma solidity ^0.4.13;

library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an account access to this role
   */
  function add(Role storage role, address account) internal {
    require(account != address(0));
    require(!has(role, account));

    role.bearer[account] = true;
  }

  /**
   * @dev remove an account's access to this role
   */
  function remove(Role storage role, address account) internal {
    require(account != address(0));
    require(has(role, account));

    role.bearer[account] = false;
  }

  /**
   * @dev check if an account has this role
   * @return bool
   */
  function has(Role storage role, address account)
    internal
    view
    returns (bool)
  {
    require(account != address(0));
    return role.bearer[account];
  }
}

contract MinterRole {
  using Roles for Roles.Role;

  event MinterAdded(address indexed account);
  event MinterRemoved(address indexed account);

  Roles.Role private minters;

  constructor() internal {
    _addMinter(msg.sender);
  }

  modifier onlyMinter() {
    require(isMinter(msg.sender));
    _;
  }

  function isMinter(address account) public view returns (bool) {
    return minters.has(account);
  }

  function addMinter(address account) public onlyMinter {
    _addMinter(account);
  }

  function renounceMinter() public {
    _removeMinter(msg.sender);
  }

  function _addMinter(address account) internal {
    minters.add(account);
    emit MinterAdded(account);
  }

  function _removeMinter(address account) internal {
    minters.remove(account);
    emit MinterRemoved(account);
  }
}

library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on 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-solidity/pull/522
    if (a == 0) {
      return 0;
    }

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

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts 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;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

interface IERC20 {
  function totalSupply() external view returns (uint256);

  function balanceOf(address who) external view returns (uint256);

  function allowance(address owner, address spender)
    external view returns (uint256);

  function transfer(address to, uint256 value) external returns (bool);

  function approve(address spender, uint256 value)
    external returns (bool);

  function transferFrom(address from, address to, uint256 value)
    external returns (bool);

  event Transfer(
    address indexed from,
    address indexed to,
    uint256 value
  );

  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

contract ERC20 is IERC20 {
  using SafeMath for uint256;

  mapping (address => uint256) private _balances;

  mapping (address => mapping (address => uint256)) private _allowed;

  uint256 private _totalSupply;

  /**
  * @dev Total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return _totalSupply;
  }

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

  /**
   * @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 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) {
    _transfer(msg.sender, 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:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @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) {
    require(spender != address(0));

    _allowed[msg.sender][spender] = value;
    emit Approval(msg.sender, spender, value);
    return true;
  }

  /**
   * @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(value <= _allowed[from][msg.sender]);

    _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
    _transfer(from, to, value);
    return true;
  }

  /**
   * @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 increaseAllowance(
    address spender,
    uint256 addedValue
  )
    public
    returns (bool)
  {
    require(spender != address(0));

    _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 decreaseAllowance(
    address spender,
    uint256 subtractedValue
  )
    public
    returns (bool)
  {
    require(spender != address(0));

    _allowed[msg.sender][spender] = (
      _allowed[msg.sender][spender].sub(subtractedValue));
    emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
    return true;
  }

  /**
  * @dev Transfer token for a specified addresses
  * @param from The address to transfer from.
  * @param to The address to transfer to.
  * @param value The amount to be transferred.
  */
  function _transfer(address from, address to, uint256 value) internal {
    require(value <= _balances[from]);
    require(to != address(0));

    _balances[from] = _balances[from].sub(value);
    _balances[to] = _balances[to].add(value);
    emit Transfer(from, to, value);
  }

  /**
   * @dev Internal function that mints an amount of the token and assigns it to
   * an account. This encapsulates the modification of balances such that the
   * proper events are emitted.
   * @param account The account that will receive the created tokens.
   * @param value The amount that will be created.
   */
  function _mint(address account, uint256 value) internal {
    require(account != 0);
    _totalSupply = _totalSupply.add(value);
    _balances[account] = _balances[account].add(value);
    emit Transfer(address(0), account, value);
  }

  /**
   * @dev Internal function that burns an amount of the token of a given
   * account.
   * @param account The account whose tokens will be burnt.
   * @param value The amount that will be burnt.
   */
  function _burn(address account, uint256 value) internal {
    require(account != 0);
    require(value <= _balances[account]);

    _totalSupply = _totalSupply.sub(value);
    _balances[account] = _balances[account].sub(value);
    emit Transfer(account, address(0), value);
  }

  /**
   * @dev Internal function that burns an amount of the token of a given
   * account, deducting from the sender's allowance for said account. Uses the
   * internal burn function.
   * @param account The account whose tokens will be burnt.
   * @param value The amount that will be burnt.
   */
  function _burnFrom(address account, uint256 value) internal {
    require(value <= _allowed[account][msg.sender]);

    // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted,
    // this function needs to emit an event with the updated approval.
    _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(
      value);
    _burn(account, value);
  }
}

contract ERC20Mintable is ERC20, MinterRole {
  /**
   * @dev Function to mint tokens
   * @param to The address that will receive the minted tokens.
   * @param value The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
  function mint(
    address to,
    uint256 value
  )
    public
    onlyMinter
    returns (bool)
  {
    _mint(to, value);
    return true;
  }
}

contract RevenueToken is ERC20Mintable {
    using SafeMath for uint256;

    bool public mintingDisabled;

    address[] public holders;

    mapping(address => bool) public holdersMap;

    mapping(address => uint256[]) public balances;

    mapping(address => uint256[]) public balanceBlocks;

    mapping(address => uint256[]) public balanceBlockNumbers;

    event DisableMinting();

    /**
     * @notice Disable further minting
     * @dev This operation can not be undone
     */
    function disableMinting()
    public
    onlyMinter
    {
        mintingDisabled = true;

        emit DisableMinting();
    }

    /**
     * @notice Mint tokens
     * @param to The address that will receive the minted tokens.
     * @param value The amount of tokens to mint.
     * @return A boolean that indicates if the operation was successful.
     */
    function mint(address to, uint256 value)
    public
    onlyMinter
    returns (bool)
    {
        require(!mintingDisabled);

        // Call super's mint, including event emission
        bool minted = super.mint(to, value);

        if (minted) {
            // Adjust balance blocks
            addBalanceBlocks(to);

            // Add to the token holders list
            if (!holdersMap[to]) {
                holdersMap[to] = true;
                holders.push(to);
            }
        }

        return minted;
    }

    /**
     * @notice Transfer token for a specified address
     * @param to The address to transfer to.
     * @param value The amount to be transferred.
     * @return A boolean that indicates if the operation was successful.
     */
    function transfer(address to, uint256 value)
    public
    returns (bool)
    {
        // Call super's transfer, including event emission
        bool transferred = super.transfer(to, value);

        if (transferred) {
            // Adjust balance blocks
            addBalanceBlocks(msg.sender);
            addBalanceBlocks(to);

            // Add to the token holders list
            if (!holdersMap[to]) {
                holdersMap[to] = true;
                holders.push(to);
            }
        }

        return transferred;
    }

    /**
     * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
     * @dev Beware that to change the approve amount you first have to reduce the addresses'
     * allowance to zero by calling `approve(spender, 0)` if it is not already 0 to mitigate the race
     * condition described here:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     * @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)
    {
        // Prevent the update of non-zero allowance
        require(0 == value || 0 == allowance(msg.sender, spender));

        // Call super's approve, including event emission
        return super.approve(spender, value);
    }

    /**
     * @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
     * @return A boolean that indicates if the operation was successful.
     */
    function transferFrom(address from, address to, uint256 value)
    public
    returns (bool)
    {
        // Call super's transferFrom, including event emission
        bool transferred = super.transferFrom(from, to, value);

        if (transferred) {
            // Adjust balance blocks
            addBalanceBlocks(from);
            addBalanceBlocks(to);

            // Add to the token holders list
            if (!holdersMap[to]) {
                holdersMap[to] = true;
                holders.push(to);
            }
        }

        return transferred;
    }

    /**
     * @notice Calculate the amount of balance blocks, i.e. the area under the curve (AUC) of
     * balance as function of block number
     * @dev The AUC is used as weight for the share of revenue that a token holder may claim
     * @param account The account address for which calculation is done
     * @param startBlock The start block number considered
     * @param endBlock The end block number considered
     * @return The calculated AUC
     */
    function balanceBlocksIn(address account, uint256 startBlock, uint256 endBlock)
    public
    view
    returns (uint256)
    {
        require(startBlock < endBlock);
        require(account != address(0));

        if (balanceBlockNumbers[account].length == 0 || endBlock < balanceBlockNumbers[account][0])
            return 0;

        uint256 i = 0;
        while (i < balanceBlockNumbers[account].length && balanceBlockNumbers[account][i] < startBlock)
            i++;

        uint256 r;
        if (i >= balanceBlockNumbers[account].length)
            r = balances[account][balanceBlockNumbers[account].length - 1].mul(endBlock.sub(startBlock));

        else {
            uint256 l = (i == 0) ? startBlock : balanceBlockNumbers[account][i - 1];

            uint256 h = balanceBlockNumbers[account][i];
            if (h > endBlock)
                h = endBlock;

            h = h.sub(startBlock);
            r = (h == 0) ? 0 : balanceBlocks[account][i].mul(h).div(balanceBlockNumbers[account][i].sub(l));
            i++;

            while (i < balanceBlockNumbers[account].length && balanceBlockNumbers[account][i] < endBlock) {
                r = r.add(balanceBlocks[account][i]);
                i++;
            }

            if (i >= balanceBlockNumbers[account].length)
                r = r.add(
                    balances[account][balanceBlockNumbers[account].length - 1].mul(
                        endBlock.sub(balanceBlockNumbers[account][balanceBlockNumbers[account].length - 1])
                    )
                );

            else if (balanceBlockNumbers[account][i - 1] < endBlock)
                r = r.add(
                    balanceBlocks[account][i].mul(
                        endBlock.sub(balanceBlockNumbers[account][i - 1])
                    ).div(
                        balanceBlockNumbers[account][i].sub(balanceBlockNumbers[account][i - 1])
                    )
                );
        }

        return r;
    }

    /**
     * @notice Get the count of balance updates for the given account
     * @return The count of balance updates
     */
    function balanceUpdatesCount(address account)
    public
    view
    returns (uint256)
    {
        return balanceBlocks[account].length;
    }

    /**
     * @notice Get the count of holders
     * @return The count of holders
     */
    function holdersCount()
    public
    view
    returns (uint256)
    {
        return holders.length;
    }

    /**
     * @notice Get the subset of holders (optionally with positive balance only) in the given 0 based index range
     * @param low The lower inclusive index
     * @param up The upper inclusive index
     * @param posOnly List only positive balance holders
     * @return The subset of positive balance registered holders in the given range
     */
    function holdersByIndices(uint256 low, uint256 up, bool posOnly)
    public
    view
    returns (address[])
    {
        require(low <= up);

        up = up > holders.length - 1 ? holders.length - 1 : up;

        uint256 length = 0;
        if (posOnly) {
            for (uint256 i = low; i <= up; i++)
                if (0 < balanceOf(holders[i]))
                    length++;
        } else
            length = up - low + 1;

        address[] memory _holders = new address[](length);

        uint256 j = 0;
        for (i = low; i <= up; i++)
            if (!posOnly || 0 < balanceOf(holders[i]))
                _holders[j++] = holders[i];

        return _holders;
    }

    function addBalanceBlocks(address account)
    private
    {
        uint256 length = balanceBlockNumbers[account].length;
        balances[account].push(balanceOf(account));
        if (0 < length)
            balanceBlocks[account].push(
                balances[account][length - 1].mul(
                    block.number.sub(balanceBlockNumbers[account][length - 1])
                )
            );
        else
            balanceBlocks[account].push(0);
        balanceBlockNumbers[account].push(block.number);
    }
}

contract NahmiiToken is RevenueToken {

    string public name = "Nahmii";

    string public symbol = "NII";

    uint8 public constant decimals = 15;

    event SetName(string name);

    event SetSymbol(string symbol);

    /**
     * @dev Set the name of the token
     * @param _name The new token name
     */
    function setName(string _name)
    public
    onlyMinter
    {
        name = _name;
        emit SetName(name);
    }

    /**
     * @dev Set the symbol of the token
     * @param _symbol The new token symbol
     */
    function setSymbol(string _symbol)
    public
    onlyMinter
    {
        symbol = _symbol;
        emit SetSymbol(_symbol);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"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":true,"inputs":[{"name":"","type":"address"}],"name":"holdersMap","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"balanceBlockNumbers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingDisabled","outputs":[{"name":"","type":"bool"}],"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":"","type":"uint256"}],"name":"holders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"holdersCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"balanceBlocks","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"},{"name":"startBlock","type":"uint256"},{"name":"endBlock","type":"uint256"}],"name":"balanceBlocksIn","outputs":[{"name":"","type":"uint256"}],"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":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceUpdatesCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"low","type":"uint256"},{"name":"up","type":"uint256"},{"name":"posOnly","type":"bool"}],"name":"holdersByIndices","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"symbol","type":"string"}],"name":"SetSymbol","type":"event"},{"anonymous":false,"inputs":[],"name":"DisableMinting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","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"}]

60c0604052600660808190527f4e61686d6969000000000000000000000000000000000000000000000000000060a09081526200004091600a919062000187565b506040805180820190915260038082527f4e4949000000000000000000000000000000000000000000000000000000000060209092019182526200008791600b9162000187565b506200009c33640100000000620000a2810204565b6200022c565b620000bd600382640100000000620018cc620000f482021704565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b600160a060020a03811615156200010a57600080fd5b6200011f82826401000000006200014f810204565b156200012a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200016757600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ca57805160ff1916838001178555620001fa565b82800160010185558215620001fa579182015b82811115620001fa578251825591602001919060010190620001dd565b50620002089291506200020c565b5090565b6200022991905b8082111562000208576000815560010162000213565b90565b611a8a806200023c6000396000f3006080604052600436106101505763ffffffff60e060020a60003504166306fdde038114610155578063095ea7b3146101df5780630e5cb57c14610217578063133a49001461023857806318160ddd1461026e57806321afb5ee1461028357806323b872dd146102985780632a11ced0146102c2578063313ce567146102f6578063395093511461032157806340c10f19146103455780636b4ed21b1461036957806370a082311461037e57806378c27d7e1461039f5780637e5cd5c1146103c357806395d89b41146103da578063983b2d56146103ef5780639865027514610410578063a457c2d714610425578063a52079ea14610449578063a9059cbb14610470578063aa271e1a14610494578063b46801c2146104b5578063b84c8246146104d6578063c47f00271461052f578063cb99045714610588578063cbf1304d146105f8578063dd62ed3e1461061c575b600080fd5b34801561016157600080fd5b5061016a610643565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a457818101518382015260200161018c565b50505050905090810190601f1680156101d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101eb57600080fd5b50610203600160a060020a03600435166024356106d1565b604080519115158252519081900360200190f35b34801561022357600080fd5b50610203600160a060020a0360043516610703565b34801561024457600080fd5b5061025c600160a060020a0360043516602435610718565b60408051918252519081900360200190f35b34801561027a57600080fd5b5061025c610748565b34801561028f57600080fd5b5061020361074f565b3480156102a457600080fd5b50610203600160a060020a0360043581169060243516604435610758565b3480156102ce57600080fd5b506102da6004356107fe565b60408051600160a060020a039092168252519081900360200190f35b34801561030257600080fd5b5061030b610826565b6040805160ff9092168252519081900360200190f35b34801561032d57600080fd5b50610203600160a060020a036004351660243561082b565b34801561035157600080fd5b50610203600160a060020a03600435166024356108c9565b34801561037557600080fd5b5061025c61098c565b34801561038a57600080fd5b5061025c600160a060020a0360043516610992565b3480156103ab57600080fd5b5061025c600160a060020a03600435166024356109ad565b3480156103cf57600080fd5b506103d86109c8565b005b3480156103e657600080fd5b5061016a610a14565b3480156103fb57600080fd5b506103d8600160a060020a0360043516610a6f565b34801561041c57600080fd5b506103d8610a8f565b34801561043157600080fd5b50610203600160a060020a0360043516602435610a9a565b34801561045557600080fd5b5061025c600160a060020a0360043516602435604435610ae5565b34801561047c57600080fd5b50610203600160a060020a0360043516602435611002565b3480156104a057600080fd5b50610203600160a060020a0360043516611029565b3480156104c157600080fd5b5061025c600160a060020a0360043516611042565b3480156104e257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d894369492936024939284019190819084018382808284375094975061105d9650505050505050565b34801561053b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d89436949293602493928401919081908401838280828437509497506111219650505050505050565b34801561059457600080fd5b506105a860043560243560443515156111f9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105e45781810151838201526020016105cc565b505050509050019250505060405180910390f35b34801561060457600080fd5b5061025c600160a060020a0360043516602435611357565b34801561062857600080fd5b5061025c600160a060020a0360043581169060243516611372565b600a805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60008115806106e757506106e53384611372565b155b15156106f257600080fd5b6106fc838361139d565b9392505050565b60066020526000908152604090205460ff1681565b60096020528160005260406000208181548110151561073357fe5b90600052602060002001600091509150505481565b6002545b90565b60045460ff1681565b600080610766858585611409565b905080156107f657610777856114a6565b610780846114a6565b600160a060020a03841660009081526006602052604090205460ff1615156107f657600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b949350505050565b600580548290811061080c57fe5b600091825260209091200154600160a060020a0316905081565b600f81565b6000600160a060020a038316151561084257600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6115dd16565b336000818152600160209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020611a3f833981519152929081900390910190a350600192915050565b6000806108d533611029565b15156108e057600080fd5b60045460ff16156108f057600080fd5b6108fa84846115ef565b905080156109815761090b846114a6565b600160a060020a03841660009081526006602052604090205460ff16151561098157600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b8091505b5092915050565b60055490565b600160a060020a031660009081526020819052604090205490565b60086020528160005260406000208181548110151561073357fe5b6109d133611029565b15156109dc57600080fd5b6004805460ff191660011790556040517f2d86df2e5d84b22790939c34e14094e95a52090fbf291a1fa69b9b4e837c635390600090a1565b600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b610a7833611029565b1515610a8357600080fd5b610a8c81611618565b50565b610a9833611660565b565b6000600160a060020a0383161515610ab157600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6116a816565b600080808080858710610af757600080fd5b600160a060020a0388161515610b0c57600080fd5b600160a060020a0388166000908152600960205260409020541580610b5f5750600160a060020a038816600090815260096020526040812080549091908110610b5157fe5b906000526020600020015486105b15610b6d5760009450610ff7565b600093505b600160a060020a03881660009081526009602052604090205484108015610bc85750600160a060020a0388166000908152600960205260409020805488919086908110610bbb57fe5b9060005260206000200154105b15610bd857600190930192610b72565b600160a060020a0388166000908152600960205260409020548410610c5f57610c58610c0a878963ffffffff6116a816565b600160a060020a038a1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b90600052602060002001546116bf90919063ffffffff16565b9250610ff3565b8315610c9d57600160a060020a038816600090815260096020526040902080546000198601908110610c8d57fe5b9060005260206000200154610c9f565b865b600160a060020a038916600090815260096020526040902080549193509085908110610cc757fe5b9060005260206000200154905085811115610cdf5750845b610cef818863ffffffff6116a816565b90508015610d7a57600160a060020a03881660009081526009602052604090208054610d7591610d3f9185919088908110610d2657fe5b90600052602060002001546116a890919063ffffffff16565b600160a060020a038a1660009081526008602052604090208054610d6991859189908110610c3f57fe5b9063ffffffff6116ed16565b610d7d565b60005b60019094019392505b600160a060020a03881660009081526009602052604090205484108015610ddc5750600160a060020a0388166000908152600960205260409020805487919086908110610dcf57fe5b9060005260206000200154105b15610e3157600160a060020a03881660009081526008602052604090208054610e24919086908110610e0a57fe5b9060005260206000200154846115dd90919063ffffffff16565b6001909401939250610d86565b600160a060020a0388166000908152600960205260409020548410610ee157600160a060020a03881660009081526009602052604090208054610c5891610ed491610e9f91906000198101908110610e8557fe5b9060005260206000200154896116a890919063ffffffff16565b600160a060020a038b1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b849063ffffffff6115dd16565b600160a060020a038816600090815260096020526040902080548791906000198701908110610f0c57fe5b90600052602060002001541015610ff357600160a060020a03881660009081526009602052604090208054610ff091610ed491610f8291906000198901908110610f5257fe5b6000918252602080832090910154600160a060020a038e16835260099091526040909120805489908110610d2657fe5b600160a060020a038b1660009081526009602052604090208054610d6991610fcc916000198b01908110610fb257fe5b90600052602060002001548b6116a890919063ffffffff16565b600160a060020a038d16600090815260086020526040902080548a908110610c3f57fe5b92505b8294505b505050509392505050565b60008061100f8484611710565b9050801561098157611020336114a6565b61090b846114a6565b600061103c60038363ffffffff61171d16565b92915050565b600160a060020a031660009081526008602052604090205490565b61106633611029565b151561107157600080fd5b805161108490600b906020840190611966565b507fadf3ae8bd543b3007d464f15cb8ea1db3f44e84d41d203164f40b95e27558ac6816040518080602001828103825283818151815260200191508051906020019080838360005b838110156110e45781810151838201526020016110cc565b50505050905090810190601f1680156111115780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b61112a33611029565b151561113557600080fd5b805161114890600a906020840190611966565b50604080516020808252600a8054600260001961010060018416150201909116049183018290527f4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf02939092918291820190849080156111e85780601f106111bd576101008083540402835291602001916111e8565b820191906000526020600020905b8154815290600101906020018083116111cb57829003601f168201915b50509250505060405180910390a150565b606060008082818688111561120d57600080fd5b6005546000190187116112205786611228565b600554600019015b965060009350851561128a578792505b8683116112855761126b60058481548110151561125157fe5b600091825260209091200154600160a060020a0316610992565b6000101561127a576001909301925b600190920191611238565b611293565b87870360010193505b836040519080825280602002602001820160405280156112bd578160200160208202803883390190505b509150600090508792505b86831161134c578515806112ed57506112e960058481548110151561125157fe5b6000105b1561134157600580548490811061130057fe5b60009182526020909120015482516001830192600160a060020a03909216918491811061132957fe5b600160a060020a039092166020928302909101909101525b6001909201916112c8565b509695505050505050565b60076020528160005260406000208181548110151561073357fe5b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156113b457600080fd5b336000818152600160209081526040808320600160a060020a0388168085529083529281902086905580518681529051929392600080516020611a3f833981519152929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205482111561143957600080fd5b600160a060020a038416600090815260016020908152604080832033845290915290205461146d908363ffffffff6116a816565b600160a060020a038516600090815260016020908152604080832033845290915290205561149c848484611754565b5060019392505050565b600160a060020a03811660009081526009602090815260408083205460079092529091206114d383610992565b8154600181018355600092835260208320015581111561158557600160a060020a03821660009081526008602090815260408083206009909252909120805461156a9161154291600019860190811061152857fe5b9060005260206000200154436116a890919063ffffffff16565b600160a060020a038516600090815260076020526040902080546000198601908110610c3f57fe5b815460018101835560009283526020909220909101556115b0565b600160a060020a03821660009081526008602090815260408220805460018101825590835290822001555b50600160a060020a0316600090815260096020908152604082208054600181018255908352912043910155565b60008282018381101561098157600080fd5b60006115fa33611029565b151561160557600080fd5b61160f8383611834565b50600192915050565b61162960038263ffffffff6118cc16565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61167160038263ffffffff61191a16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600080838311156116b857600080fd5b5050900390565b6000808315156116d25760009150610985565b508282028284828115156116e257fe5b041461098157600080fd5b6000808083116116fc57600080fd5b828481151561170757fe5b04949350505050565b600061160f338484611754565b6000600160a060020a038216151561173457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600160a060020a03831660009081526020819052604090205481111561177957600080fd5b600160a060020a038216151561178e57600080fd5b600160a060020a0383166000908152602081905260409020546117b7908263ffffffff6116a816565b600160a060020a0380851660009081526020819052604080822093909355908416815220546117ec908263ffffffff6115dd16565b600160a060020a03808416600081815260208181526040918290209490945580518581529051919392871692600080516020611a1f83398151915292918290030190a3505050565b600160a060020a038216151561184957600080fd5b60025461185c908263ffffffff6115dd16565b600255600160a060020a038216600090815260208190526040902054611888908263ffffffff6115dd16565b600160a060020a038316600081815260208181526040808320949094558351858152935192939192600080516020611a1f8339815191529281900390910190a35050565b600160a060020a03811615156118e157600080fd5b6118eb828261171d565b156118f557600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561192f57600080fd5b611939828261171d565b151561194457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119a757805160ff19168380011785556119d4565b828001600101855582156119d4579182015b828111156119d45782518255916020019190600101906119b9565b506119e09291506119e4565b5090565b61074c91905b808211156119e057600081556001016119ea5600036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a723058202cd93912e324150d5a6bb619c20df1149bc9edea396e270dd8efa4cc5a8393b00029

Deployed Bytecode

0x6080604052600436106101505763ffffffff60e060020a60003504166306fdde038114610155578063095ea7b3146101df5780630e5cb57c14610217578063133a49001461023857806318160ddd1461026e57806321afb5ee1461028357806323b872dd146102985780632a11ced0146102c2578063313ce567146102f6578063395093511461032157806340c10f19146103455780636b4ed21b1461036957806370a082311461037e57806378c27d7e1461039f5780637e5cd5c1146103c357806395d89b41146103da578063983b2d56146103ef5780639865027514610410578063a457c2d714610425578063a52079ea14610449578063a9059cbb14610470578063aa271e1a14610494578063b46801c2146104b5578063b84c8246146104d6578063c47f00271461052f578063cb99045714610588578063cbf1304d146105f8578063dd62ed3e1461061c575b600080fd5b34801561016157600080fd5b5061016a610643565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a457818101518382015260200161018c565b50505050905090810190601f1680156101d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101eb57600080fd5b50610203600160a060020a03600435166024356106d1565b604080519115158252519081900360200190f35b34801561022357600080fd5b50610203600160a060020a0360043516610703565b34801561024457600080fd5b5061025c600160a060020a0360043516602435610718565b60408051918252519081900360200190f35b34801561027a57600080fd5b5061025c610748565b34801561028f57600080fd5b5061020361074f565b3480156102a457600080fd5b50610203600160a060020a0360043581169060243516604435610758565b3480156102ce57600080fd5b506102da6004356107fe565b60408051600160a060020a039092168252519081900360200190f35b34801561030257600080fd5b5061030b610826565b6040805160ff9092168252519081900360200190f35b34801561032d57600080fd5b50610203600160a060020a036004351660243561082b565b34801561035157600080fd5b50610203600160a060020a03600435166024356108c9565b34801561037557600080fd5b5061025c61098c565b34801561038a57600080fd5b5061025c600160a060020a0360043516610992565b3480156103ab57600080fd5b5061025c600160a060020a03600435166024356109ad565b3480156103cf57600080fd5b506103d86109c8565b005b3480156103e657600080fd5b5061016a610a14565b3480156103fb57600080fd5b506103d8600160a060020a0360043516610a6f565b34801561041c57600080fd5b506103d8610a8f565b34801561043157600080fd5b50610203600160a060020a0360043516602435610a9a565b34801561045557600080fd5b5061025c600160a060020a0360043516602435604435610ae5565b34801561047c57600080fd5b50610203600160a060020a0360043516602435611002565b3480156104a057600080fd5b50610203600160a060020a0360043516611029565b3480156104c157600080fd5b5061025c600160a060020a0360043516611042565b3480156104e257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d894369492936024939284019190819084018382808284375094975061105d9650505050505050565b34801561053b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d89436949293602493928401919081908401838280828437509497506111219650505050505050565b34801561059457600080fd5b506105a860043560243560443515156111f9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105e45781810151838201526020016105cc565b505050509050019250505060405180910390f35b34801561060457600080fd5b5061025c600160a060020a0360043516602435611357565b34801561062857600080fd5b5061025c600160a060020a0360043581169060243516611372565b600a805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60008115806106e757506106e53384611372565b155b15156106f257600080fd5b6106fc838361139d565b9392505050565b60066020526000908152604090205460ff1681565b60096020528160005260406000208181548110151561073357fe5b90600052602060002001600091509150505481565b6002545b90565b60045460ff1681565b600080610766858585611409565b905080156107f657610777856114a6565b610780846114a6565b600160a060020a03841660009081526006602052604090205460ff1615156107f657600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b949350505050565b600580548290811061080c57fe5b600091825260209091200154600160a060020a0316905081565b600f81565b6000600160a060020a038316151561084257600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6115dd16565b336000818152600160209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020611a3f833981519152929081900390910190a350600192915050565b6000806108d533611029565b15156108e057600080fd5b60045460ff16156108f057600080fd5b6108fa84846115ef565b905080156109815761090b846114a6565b600160a060020a03841660009081526006602052604090205460ff16151561098157600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b8091505b5092915050565b60055490565b600160a060020a031660009081526020819052604090205490565b60086020528160005260406000208181548110151561073357fe5b6109d133611029565b15156109dc57600080fd5b6004805460ff191660011790556040517f2d86df2e5d84b22790939c34e14094e95a52090fbf291a1fa69b9b4e837c635390600090a1565b600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b610a7833611029565b1515610a8357600080fd5b610a8c81611618565b50565b610a9833611660565b565b6000600160a060020a0383161515610ab157600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6116a816565b600080808080858710610af757600080fd5b600160a060020a0388161515610b0c57600080fd5b600160a060020a0388166000908152600960205260409020541580610b5f5750600160a060020a038816600090815260096020526040812080549091908110610b5157fe5b906000526020600020015486105b15610b6d5760009450610ff7565b600093505b600160a060020a03881660009081526009602052604090205484108015610bc85750600160a060020a0388166000908152600960205260409020805488919086908110610bbb57fe5b9060005260206000200154105b15610bd857600190930192610b72565b600160a060020a0388166000908152600960205260409020548410610c5f57610c58610c0a878963ffffffff6116a816565b600160a060020a038a1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b90600052602060002001546116bf90919063ffffffff16565b9250610ff3565b8315610c9d57600160a060020a038816600090815260096020526040902080546000198601908110610c8d57fe5b9060005260206000200154610c9f565b865b600160a060020a038916600090815260096020526040902080549193509085908110610cc757fe5b9060005260206000200154905085811115610cdf5750845b610cef818863ffffffff6116a816565b90508015610d7a57600160a060020a03881660009081526009602052604090208054610d7591610d3f9185919088908110610d2657fe5b90600052602060002001546116a890919063ffffffff16565b600160a060020a038a1660009081526008602052604090208054610d6991859189908110610c3f57fe5b9063ffffffff6116ed16565b610d7d565b60005b60019094019392505b600160a060020a03881660009081526009602052604090205484108015610ddc5750600160a060020a0388166000908152600960205260409020805487919086908110610dcf57fe5b9060005260206000200154105b15610e3157600160a060020a03881660009081526008602052604090208054610e24919086908110610e0a57fe5b9060005260206000200154846115dd90919063ffffffff16565b6001909401939250610d86565b600160a060020a0388166000908152600960205260409020548410610ee157600160a060020a03881660009081526009602052604090208054610c5891610ed491610e9f91906000198101908110610e8557fe5b9060005260206000200154896116a890919063ffffffff16565b600160a060020a038b1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b849063ffffffff6115dd16565b600160a060020a038816600090815260096020526040902080548791906000198701908110610f0c57fe5b90600052602060002001541015610ff357600160a060020a03881660009081526009602052604090208054610ff091610ed491610f8291906000198901908110610f5257fe5b6000918252602080832090910154600160a060020a038e16835260099091526040909120805489908110610d2657fe5b600160a060020a038b1660009081526009602052604090208054610d6991610fcc916000198b01908110610fb257fe5b90600052602060002001548b6116a890919063ffffffff16565b600160a060020a038d16600090815260086020526040902080548a908110610c3f57fe5b92505b8294505b505050509392505050565b60008061100f8484611710565b9050801561098157611020336114a6565b61090b846114a6565b600061103c60038363ffffffff61171d16565b92915050565b600160a060020a031660009081526008602052604090205490565b61106633611029565b151561107157600080fd5b805161108490600b906020840190611966565b507fadf3ae8bd543b3007d464f15cb8ea1db3f44e84d41d203164f40b95e27558ac6816040518080602001828103825283818151815260200191508051906020019080838360005b838110156110e45781810151838201526020016110cc565b50505050905090810190601f1680156111115780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b61112a33611029565b151561113557600080fd5b805161114890600a906020840190611966565b50604080516020808252600a8054600260001961010060018416150201909116049183018290527f4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf02939092918291820190849080156111e85780601f106111bd576101008083540402835291602001916111e8565b820191906000526020600020905b8154815290600101906020018083116111cb57829003601f168201915b50509250505060405180910390a150565b606060008082818688111561120d57600080fd5b6005546000190187116112205786611228565b600554600019015b965060009350851561128a578792505b8683116112855761126b60058481548110151561125157fe5b600091825260209091200154600160a060020a0316610992565b6000101561127a576001909301925b600190920191611238565b611293565b87870360010193505b836040519080825280602002602001820160405280156112bd578160200160208202803883390190505b509150600090508792505b86831161134c578515806112ed57506112e960058481548110151561125157fe5b6000105b1561134157600580548490811061130057fe5b60009182526020909120015482516001830192600160a060020a03909216918491811061132957fe5b600160a060020a039092166020928302909101909101525b6001909201916112c8565b509695505050505050565b60076020528160005260406000208181548110151561073357fe5b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156113b457600080fd5b336000818152600160209081526040808320600160a060020a0388168085529083529281902086905580518681529051929392600080516020611a3f833981519152929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205482111561143957600080fd5b600160a060020a038416600090815260016020908152604080832033845290915290205461146d908363ffffffff6116a816565b600160a060020a038516600090815260016020908152604080832033845290915290205561149c848484611754565b5060019392505050565b600160a060020a03811660009081526009602090815260408083205460079092529091206114d383610992565b8154600181018355600092835260208320015581111561158557600160a060020a03821660009081526008602090815260408083206009909252909120805461156a9161154291600019860190811061152857fe5b9060005260206000200154436116a890919063ffffffff16565b600160a060020a038516600090815260076020526040902080546000198601908110610c3f57fe5b815460018101835560009283526020909220909101556115b0565b600160a060020a03821660009081526008602090815260408220805460018101825590835290822001555b50600160a060020a0316600090815260096020908152604082208054600181018255908352912043910155565b60008282018381101561098157600080fd5b60006115fa33611029565b151561160557600080fd5b61160f8383611834565b50600192915050565b61162960038263ffffffff6118cc16565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61167160038263ffffffff61191a16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600080838311156116b857600080fd5b5050900390565b6000808315156116d25760009150610985565b508282028284828115156116e257fe5b041461098157600080fd5b6000808083116116fc57600080fd5b828481151561170757fe5b04949350505050565b600061160f338484611754565b6000600160a060020a038216151561173457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600160a060020a03831660009081526020819052604090205481111561177957600080fd5b600160a060020a038216151561178e57600080fd5b600160a060020a0383166000908152602081905260409020546117b7908263ffffffff6116a816565b600160a060020a0380851660009081526020819052604080822093909355908416815220546117ec908263ffffffff6115dd16565b600160a060020a03808416600081815260208181526040918290209490945580518581529051919392871692600080516020611a1f83398151915292918290030190a3505050565b600160a060020a038216151561184957600080fd5b60025461185c908263ffffffff6115dd16565b600255600160a060020a038216600090815260208190526040902054611888908263ffffffff6115dd16565b600160a060020a038316600081815260208181526040808320949094558351858152935192939192600080516020611a1f8339815191529281900390910190a35050565b600160a060020a03811615156118e157600080fd5b6118eb828261171d565b156118f557600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561192f57600080fd5b611939828261171d565b151561194457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119a757805160ff19168380011785556119d4565b828001600101855582156119d4579182015b828111156119d45782518255916020019190600101906119b9565b506119e09291506119e4565b5090565b61074c91905b808211156119e057600081556001016119ea5600036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a723058202cd93912e324150d5a6bb619c20df1149bc9edea396e270dd8efa4cc5a8393b00029

Swarm Source

bzzr://2cd93912e324150d5a6bb619c20df1149bc9edea396e270dd8efa4cc5a8393b0
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.