ETH Price: $3,889.10 (+0.12%)

Token

staked ALD Token (xALD)
 

Overview

Max Total Supply

84,711,580.15902491974344427 xALD

Holders

741 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000041364715647707 xALD

Value
$0.00
0x184e33354381c179311d493309585d1f2ab56edd
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

AladdinDAO is a decentralized network to shift crypto investments from venture capitalists to wisdom of crowds through collective value discovery.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XALD

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-23
*/

// Sources flattened with hardhat v2.6.8 https://hardhat.org

// SPDX-License-Identifier: MIT

// File @openzeppelin/contracts/math/[email protected]

pragma solidity ^0.7.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]

pragma solidity ^0.7.0;

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

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

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

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

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

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

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

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


// File contracts/interfaces/IXALD.sol

pragma solidity ^0.7.6;

interface IXALD is IERC20 {
  function stake(address _recipient, uint256 _aldAmount) external;

  function unstake(address _account, uint256 _xALDAmount) external;

  function rebase(uint256 epoch, uint256 profit) external;

  function getSharesByALD(uint256 _aldAmount) external view returns (uint256);

  function getALDByShares(uint256 _sharesAmount) external view returns (uint256);
}


// File contracts/token/XALD.sol

pragma solidity ^0.7.6;

contract XALD is IXALD {
  using SafeMath for uint256;

  event MintShare(address recipient, uint256 share);
  event BurnShare(address account, uint256 share);
  event Rebase(uint256 epoch, uint256 profit);

  /**
   * @dev xALD balances are dynamic and are calculated based on the accounts' shares
   * and the total amount of staked ALD Token. Account shares aren't normalized, so
   * the contract also stores the sum of all shares to calculate each account's token
   * balance which equals to:
   *
   *   _shares[account] * _totalSupply / _totalShares
   */
  mapping(address => uint256) private _shares;
  mapping(address => mapping(address => uint256)) private _allowances;

  uint256 private _totalSupply;
  uint256 private _totalShares;

  address public staking;

  address private _initializer;

  modifier onlyStaking() {
    require(msg.sender == staking, "XALD: only staking contract");
    _;
  }

  constructor() {
    _initializer = msg.sender;
  }

  function initialize(address _staking) external {
    require(_initializer == msg.sender, "XALD: only initializer");
    require(_staking != address(0), "XALD: not zero address");

    staking = _staking;
    _initializer = address(0);
  }

  /**
   * @dev Returns the name of the token.
   */
  function name() public pure returns (string memory) {
    return "staked ALD Token";
  }

  /**
   * @dev Returns the symbol of the token, usually a shorter version of the
   * name.
   */
  function symbol() public pure returns (string memory) {
    return "xALD";
  }

  /**
   * @dev Returns the number of decimals used to get its user representation.
   */
  function decimals() public pure returns (uint8) {
    return 18;
  }

  /**
   * @dev See {IERC20-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return _totalSupply;
  }

  /**
   * @dev Returns the total shares of sALD.
   */
  function totalShares() public view returns (uint256) {
    return _totalShares;
  }

  /**
   * @dev See {IERC20-balanceOf}.
   */
  function balanceOf(address _account) public view override returns (uint256) {
    return getALDByShares(_shares[_account]);
  }

  /**
   * @return the amount of shares owned by `_account`.
   */
  function sharesOf(address _account) public view returns (uint256) {
    return _shares[_account];
  }

  /**
   * @dev See {IERC20-transfer}.
   */
  function transfer(address _recipient, uint256 _amount) public override returns (bool) {
    _transfer(msg.sender, _recipient, _amount);
    return true;
  }

  /**
   * @dev See {IERC20-allowance}.
   */
  function allowance(address _owner, address _spender) public view override returns (uint256) {
    return _allowances[_owner][_spender];
  }

  /**
   * @dev See {IERC20-approve}.
   */
  function approve(address _spender, uint256 _amount) public override returns (bool) {
    _approve(msg.sender, _spender, _amount);
    return true;
  }

  /**
   * @dev See {IERC20-transferFrom}.
   */
  function transferFrom(
    address _sender,
    address _recipient,
    uint256 _amount
  ) public override returns (bool) {
    uint256 currentAllowance = _allowances[_sender][msg.sender];
    require(currentAllowance >= _amount, "XALD: transfer amount exceeds allowance");

    _transfer(_sender, _recipient, _amount);
    _approve(_sender, msg.sender, currentAllowance.sub(_amount));
    return true;
  }

  /**
   * @dev Atomically increases the allowance granted to `spender` by the caller.
   */
  function increaseAllowance(address _spender, uint256 _addedValue) public returns (bool) {
    _approve(msg.sender, _spender, _allowances[msg.sender][_spender].add(_addedValue));
    return true;
  }

  /**
   * @dev Atomically decreases the allowance granted to `spender` by the caller.
   */
  function decreaseAllowance(address _spender, uint256 _subtractedValue) public returns (bool) {
    uint256 currentAllowance = _allowances[msg.sender][_spender];
    require(currentAllowance >= _subtractedValue, "XALD: decreased allowance below zero");

    _approve(msg.sender, _spender, currentAllowance.sub(_subtractedValue));
    return true;
  }

  function stake(address _recipient, uint256 _aldAmount) external override onlyStaking {
    uint256 _sharesAmount = getSharesByALD(_aldAmount);
    _totalSupply = _totalSupply.add(_aldAmount);
    _mintShares(_recipient, _sharesAmount);
  }

  function unstake(address _account, uint256 _xALDAmount) external override onlyStaking {
    uint256 _sharesAmount = getSharesByALD(_xALDAmount);
    _totalSupply = _totalSupply.sub(_xALDAmount);
    _burnShares(_account, _sharesAmount);
  }

  function rebase(uint256 epoch, uint256 profit) external override onlyStaking {
    _totalSupply = _totalSupply.add(profit);

    emit Rebase(epoch, profit);
  }

  function getSharesByALD(uint256 _aldAmount) public view override returns (uint256) {
    uint256 totalPooledALD = _totalSupply;
    if (totalPooledALD == 0) {
      return _aldAmount;
    } else {
      return _aldAmount.mul(_totalShares).div(totalPooledALD);
    }
  }

  function getALDByShares(uint256 _sharesAmount) public view override returns (uint256) {
    uint256 totalShares_ = _totalShares;
    if (totalShares_ == 0) {
      return 0;
    } else {
      return _sharesAmount.mul(_totalSupply).div(totalShares_);
    }
  }

  /**
   * @dev Moves `_amount` tokens from `_sender` to `_recipient`.
   */
  function _transfer(
    address _sender,
    address _recipient,
    uint256 _amount
  ) internal {
    uint256 _sharesToTransfer = getSharesByALD(_amount);
    _transferShares(_sender, _recipient, _sharesToTransfer);
    emit Transfer(_sender, _recipient, _amount);
  }

  /**
   * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.
   */
  function _approve(
    address _owner,
    address _spender,
    uint256 _amount
  ) internal {
    require(_owner != address(0), "XALD: approve from the zero address");
    require(_spender != address(0), "XALD: approve to the zero address");

    _allowances[_owner][_spender] = _amount;
    emit Approval(_owner, _spender, _amount);
  }

  /**
   * @dev Moves `_sharesAmount` shares from `_sender` to `_recipient`.
   */
  function _transferShares(
    address _sender,
    address _recipient,
    uint256 _sharesAmount
  ) internal {
    require(_sender != address(0), "XALD: transfer from the zero address");
    require(_recipient != address(0), "XALD: transfer to the zero address");

    uint256 currentSenderShares = _shares[_sender];
    require(_sharesAmount <= currentSenderShares, "XALD: transfer amount exceeds balance");

    _shares[_sender] = currentSenderShares.sub(_sharesAmount);
    _shares[_recipient] = _shares[_recipient].add(_sharesAmount);
  }

  /**
   * @dev Creates `_sharesAmount` shares and assigns them to `_recipient`, increasing the total amount of shares.
   *
   * This doesn't increase the token total supply.
   */
  function _mintShares(address _recipient, uint256 _sharesAmount) internal {
    require(_recipient != address(0), "XALD: mint to the zero address");

    _totalShares = _totalShares.add(_sharesAmount);

    _shares[_recipient] = _shares[_recipient].add(_sharesAmount);

    emit MintShare(_recipient, _sharesAmount);
  }

  /**
   * @dev Destroys `_sharesAmount` shares from `_account`'s holdings, decreasing the total amount of shares.
   *
   * This doesn't decrease the token total supply.
   */
  function _burnShares(address _account, uint256 _sharesAmount) internal {
    require(_account != address(0), "XALD: burn from the zero address");

    uint256 accountShares = _shares[_account];
    require(_sharesAmount <= accountShares, "XALD: burn amount exceeds balance");

    _totalShares = _totalShares.sub(_sharesAmount);

    _shares[_account] = accountShares.sub(_sharesAmount);

    emit BurnShare(_account, _sharesAmount);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"BurnShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"share","type":"uint256"}],"name":"MintShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"profit","type":"uint256"}],"name":"Rebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sharesAmount","type":"uint256"}],"name":"getALDByShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_aldAmount","type":"uint256"}],"name":"getSharesByALD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"profit","type":"uint256"}],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"sharesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_aldAmount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_xALDAmount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50600580546001600160a01b031916331790556111c3806100326000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806375b9a54e116100cd578063c2a672e011610081578063dd62ed3e11610066578063dd62ed3e1461043a578063e920e0e414610468578063f5eb42dc146104855761016c565b8063c2a672e0146103e8578063c4d66de8146104145761016c565b8063a457c2d7116100b2578063a457c2d714610364578063a9059cbb14610390578063adc9772e146103bc5761016c565b806375b9a54e1461033f57806395d89b411461035c5761016c565b8063313ce567116101245780633a98ef39116101095780633a98ef39146102ed5780634cf088d9146102f557806370a08231146103195761016c565b8063313ce567146102a357806339509351146102c15761016c565b8063095ea7b311610155578063095ea7b31461021357806318160ddd1461025357806323b872dd1461026d5761016c565b8063058ecdb41461017157806306fdde0314610196575b600080fd5b6101946004803603604081101561018757600080fd5b50803590602001356104ab565b005b61019e610559565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d85781810151838201526020016101c0565b50505050905090810190601f1680156102055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023f6004803603604081101561022957600080fd5b506001600160a01b038135169060200135610590565b604080519115158252519081900360200190f35b61025b6105a7565b60408051918252519081900360200190f35b61023f6004803603606081101561028357600080fd5b506001600160a01b038135811691602081013590911690604001356105ad565b6102ab61063a565b6040805160ff9092168252519081900360200190f35b61023f600480360360408110156102d757600080fd5b506001600160a01b03813516906020013561063f565b61025b610675565b6102fd61067b565b604080516001600160a01b039092168252519081900360200190f35b61025b6004803603602081101561032f57600080fd5b50356001600160a01b031661068a565b61025b6004803603602081101561035557600080fd5b50356106b4565b61019e6106ef565b61023f6004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610726565b61023f600480360360408110156103a657600080fd5b506001600160a01b0381351690602001356107a2565b610194600480360360408110156103d257600080fd5b506001600160a01b0381351690602001356107af565b610194600480360360408110156103fe57600080fd5b506001600160a01b03813516906020013561083b565b6101946004803603602081101561042a57600080fd5b50356001600160a01b03166108c2565b61025b6004803603604081101561045057600080fd5b506001600160a01b03813581169160200135166109bd565b61025b6004803603602081101561047e57600080fd5b50356109e8565b61025b6004803603602081101561049b57600080fd5b50356001600160a01b0316610a16565b6004546001600160a01b0316331461050a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6002546105179082610a31565b600255604080518381526020810183905281517f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511929181900390910190a15050565b60408051808201909152601081527f7374616b656420414c4420546f6b656e00000000000000000000000000000000602082015290565b600061059d338484610a92565b5060015b92915050565b60025490565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156106105760405162461bcd60e51b81526004018080602001828103825260278152602001806110b86027913960400191505060405180910390fd5b61061b858585610b7e565b61062f853361062a8487610be7565b610a92565b506001949350505050565b601290565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161059d91859061062a9086610a31565b60035490565b6004546001600160a01b031681565b6001600160a01b0381166000908152602081905260408120546106ac906109e8565b90505b919050565b600254600090806106c857829150506106af565b6106e7816106e160035486610c4490919063ffffffff16565b90610c9d565b9150506106af565b60408051808201909152600481527f78414c4400000000000000000000000000000000000000000000000000000000602082015290565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156107895760405162461bcd60e51b815260040180806020018281038252602481526020018061116a6024913960400191505060405180910390fd5b610798338561062a8487610be7565b5060019392505050565b600061059d338484610b7e565b6004546001600160a01b0316331461080e576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6000610819826106b4565b6002549091506108299083610a31565b6002556108368382610d04565b505050565b6004546001600160a01b0316331461089a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b60006108a5826106b4565b6002549091506108b59083610be7565b6002556108368382610dec565b6005546001600160a01b03163314610921576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206f6e6c7920696e697469616c697a657200000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661097c576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206e6f74207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600480546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600580549091169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600354600090806109fd5760009150506106af565b6106e7816106e160025486610c4490919063ffffffff16565b6001600160a01b031660009081526020819052604090205490565b600082820183811015610a8b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316610ad75760405162461bcd60e51b81526004018080602001828103825260238152602001806110526023913960400191505060405180910390fd5b6001600160a01b038216610b1c5760405162461bcd60e51b81526004018080602001828103825260218152602001806110df6021913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610b89826106b4565b9050610b96848483610f14565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600082821115610c3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082610c53575060006105a1565b82820282848281610c6057fe5b0414610a8b5760405162461bcd60e51b81526004018080602001828103825260218152602001806110756021913960400191505060405180910390fd5b6000808211610cf3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610cfc57fe5b049392505050565b6001600160a01b038216610d5f576040805162461bcd60e51b815260206004820152601e60248201527f58414c443a206d696e7420746f20746865207a65726f20616464726573730000604482015290519081900360640190fd5b600354610d6c9082610a31565b6003556001600160a01b038216600090815260208190526040902054610d929082610a31565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fa336a0cb19174a9c3ff5851ad3dd274df5c9323dbbc6e2177031c7f7c0319d77929181900390910190a15050565b6001600160a01b038216610e47576040805162461bcd60e51b815260206004820181905260248201527f58414c443a206275726e2066726f6d20746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205480821115610e9f5760405162461bcd60e51b81526004018080602001828103825260218152602001806111246021913960400191505060405180910390fd5b600354610eac9083610be7565b600355610eb98183610be7565b6001600160a01b0384166000818152602081815260409182902093909355805191825291810184905281517ffaddfec5b2541216c9e8d42ec31574199eae6b232c24690ab7f661eb95f5859f929181900390910190a1505050565b6001600160a01b038316610f595760405162461bcd60e51b81526004018080602001828103825260248152602001806111006024913960400191505060405180910390fd5b6001600160a01b038216610f9e5760405162461bcd60e51b81526004018080602001828103825260228152602001806110966022913960400191505060405180910390fd5b6001600160a01b03831660009081526020819052604090205480821115610ff65760405162461bcd60e51b81526004018080602001828103825260258152602001806111456025913960400191505060405180910390fd5b6110008183610be7565b6001600160a01b03808616600090815260208190526040808220939093559085168152205461102f9083610a31565b6001600160a01b0390931660009081526020819052604090209290925550505056fe58414c443a20617070726f76652066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7758414c443a207472616e7366657220746f20746865207a65726f206164647265737358414c443a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636558414c443a20617070726f766520746f20746865207a65726f206164647265737358414c443a207472616e736665722066726f6d20746865207a65726f206164647265737358414c443a206275726e20616d6f756e7420657863656564732062616c616e636558414c443a207472616e7366657220616d6f756e7420657863656564732062616c616e636558414c443a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df7f6fb3e02bfcfe49bd1a824071bd48939193a44d45fd47b82b4ba7ff6df9e864736f6c63430007060033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061016c5760003560e01c806375b9a54e116100cd578063c2a672e011610081578063dd62ed3e11610066578063dd62ed3e1461043a578063e920e0e414610468578063f5eb42dc146104855761016c565b8063c2a672e0146103e8578063c4d66de8146104145761016c565b8063a457c2d7116100b2578063a457c2d714610364578063a9059cbb14610390578063adc9772e146103bc5761016c565b806375b9a54e1461033f57806395d89b411461035c5761016c565b8063313ce567116101245780633a98ef39116101095780633a98ef39146102ed5780634cf088d9146102f557806370a08231146103195761016c565b8063313ce567146102a357806339509351146102c15761016c565b8063095ea7b311610155578063095ea7b31461021357806318160ddd1461025357806323b872dd1461026d5761016c565b8063058ecdb41461017157806306fdde0314610196575b600080fd5b6101946004803603604081101561018757600080fd5b50803590602001356104ab565b005b61019e610559565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d85781810151838201526020016101c0565b50505050905090810190601f1680156102055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023f6004803603604081101561022957600080fd5b506001600160a01b038135169060200135610590565b604080519115158252519081900360200190f35b61025b6105a7565b60408051918252519081900360200190f35b61023f6004803603606081101561028357600080fd5b506001600160a01b038135811691602081013590911690604001356105ad565b6102ab61063a565b6040805160ff9092168252519081900360200190f35b61023f600480360360408110156102d757600080fd5b506001600160a01b03813516906020013561063f565b61025b610675565b6102fd61067b565b604080516001600160a01b039092168252519081900360200190f35b61025b6004803603602081101561032f57600080fd5b50356001600160a01b031661068a565b61025b6004803603602081101561035557600080fd5b50356106b4565b61019e6106ef565b61023f6004803603604081101561037a57600080fd5b506001600160a01b038135169060200135610726565b61023f600480360360408110156103a657600080fd5b506001600160a01b0381351690602001356107a2565b610194600480360360408110156103d257600080fd5b506001600160a01b0381351690602001356107af565b610194600480360360408110156103fe57600080fd5b506001600160a01b03813516906020013561083b565b6101946004803603602081101561042a57600080fd5b50356001600160a01b03166108c2565b61025b6004803603604081101561045057600080fd5b506001600160a01b03813581169160200135166109bd565b61025b6004803603602081101561047e57600080fd5b50356109e8565b61025b6004803603602081101561049b57600080fd5b50356001600160a01b0316610a16565b6004546001600160a01b0316331461050a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6002546105179082610a31565b600255604080518381526020810183905281517f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511929181900390910190a15050565b60408051808201909152601081527f7374616b656420414c4420546f6b656e00000000000000000000000000000000602082015290565b600061059d338484610a92565b5060015b92915050565b60025490565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156106105760405162461bcd60e51b81526004018080602001828103825260278152602001806110b86027913960400191505060405180910390fd5b61061b858585610b7e565b61062f853361062a8487610be7565b610a92565b506001949350505050565b601290565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161059d91859061062a9086610a31565b60035490565b6004546001600160a01b031681565b6001600160a01b0381166000908152602081905260408120546106ac906109e8565b90505b919050565b600254600090806106c857829150506106af565b6106e7816106e160035486610c4490919063ffffffff16565b90610c9d565b9150506106af565b60408051808201909152600481527f78414c4400000000000000000000000000000000000000000000000000000000602082015290565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156107895760405162461bcd60e51b815260040180806020018281038252602481526020018061116a6024913960400191505060405180910390fd5b610798338561062a8487610be7565b5060019392505050565b600061059d338484610b7e565b6004546001600160a01b0316331461080e576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b6000610819826106b4565b6002549091506108299083610a31565b6002556108368382610d04565b505050565b6004546001600160a01b0316331461089a576040805162461bcd60e51b815260206004820152601b60248201527f58414c443a206f6e6c79207374616b696e6720636f6e74726163740000000000604482015290519081900360640190fd5b60006108a5826106b4565b6002549091506108b59083610be7565b6002556108368382610dec565b6005546001600160a01b03163314610921576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206f6e6c7920696e697469616c697a657200000000000000000000604482015290519081900360640190fd5b6001600160a01b03811661097c576040805162461bcd60e51b815260206004820152601660248201527f58414c443a206e6f74207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600480546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600580549091169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600354600090806109fd5760009150506106af565b6106e7816106e160025486610c4490919063ffffffff16565b6001600160a01b031660009081526020819052604090205490565b600082820183811015610a8b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038316610ad75760405162461bcd60e51b81526004018080602001828103825260238152602001806110526023913960400191505060405180910390fd5b6001600160a01b038216610b1c5760405162461bcd60e51b81526004018080602001828103825260218152602001806110df6021913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610b89826106b4565b9050610b96848483610f14565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b600082821115610c3e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082610c53575060006105a1565b82820282848281610c6057fe5b0414610a8b5760405162461bcd60e51b81526004018080602001828103825260218152602001806110756021913960400191505060405180910390fd5b6000808211610cf3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381610cfc57fe5b049392505050565b6001600160a01b038216610d5f576040805162461bcd60e51b815260206004820152601e60248201527f58414c443a206d696e7420746f20746865207a65726f20616464726573730000604482015290519081900360640190fd5b600354610d6c9082610a31565b6003556001600160a01b038216600090815260208190526040902054610d929082610a31565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fa336a0cb19174a9c3ff5851ad3dd274df5c9323dbbc6e2177031c7f7c0319d77929181900390910190a15050565b6001600160a01b038216610e47576040805162461bcd60e51b815260206004820181905260248201527f58414c443a206275726e2066726f6d20746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b03821660009081526020819052604090205480821115610e9f5760405162461bcd60e51b81526004018080602001828103825260218152602001806111246021913960400191505060405180910390fd5b600354610eac9083610be7565b600355610eb98183610be7565b6001600160a01b0384166000818152602081815260409182902093909355805191825291810184905281517ffaddfec5b2541216c9e8d42ec31574199eae6b232c24690ab7f661eb95f5859f929181900390910190a1505050565b6001600160a01b038316610f595760405162461bcd60e51b81526004018080602001828103825260248152602001806111006024913960400191505060405180910390fd5b6001600160a01b038216610f9e5760405162461bcd60e51b81526004018080602001828103825260228152602001806110966022913960400191505060405180910390fd5b6001600160a01b03831660009081526020819052604090205480821115610ff65760405162461bcd60e51b81526004018080602001828103825260258152602001806111456025913960400191505060405180910390fd5b6110008183610be7565b6001600160a01b03808616600090815260208190526040808220939093559085168152205461102f9083610a31565b6001600160a01b0390931660009081526020819052604090209290925550505056fe58414c443a20617070726f76652066726f6d20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7758414c443a207472616e7366657220746f20746865207a65726f206164647265737358414c443a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636558414c443a20617070726f766520746f20746865207a65726f206164647265737358414c443a207472616e736665722066726f6d20746865207a65726f206164647265737358414c443a206275726e20616d6f756e7420657863656564732062616c616e636558414c443a207472616e7366657220616d6f756e7420657863656564732062616c616e636558414c443a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df7f6fb3e02bfcfe49bd1a824071bd48939193a44d45fd47b82b4ba7ff6df9e864736f6c63430007060033

Deployed Bytecode Sourcemap

10924:8122:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15702:164;;;;;;;;;;;;;;;;-1:-1:-1;15702:164:0;;;;;;;:::i;:::-;;12234:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13808:153;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13808:153:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12739:94;;;:::i;:::-;;;;;;;;;;;;;;;;14019:418;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14019:418:0;;;;;;;;;;;;;;;;;:::i;12612:70::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14539:201;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14539:201:0;;;;;;;;:::i;12898:85::-;;;:::i;11695:22::-;;;:::i;:::-;;;;-1:-1:-1;;;;;11695:22:0;;;;;;;;;;;;;;13038:129;;;;;;;;;;;;;;;;-1:-1:-1;13038:129:0;-1:-1:-1;;;;;13038:129:0;;:::i;15872:276::-;;;;;;;;;;;;;;;;-1:-1:-1;15872:276:0;;:::i;12433:80::-;;;:::i;14842:355::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14842:355:0;;;;;;;;:::i;13400:159::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13400:159:0;;;;;;;;:::i;15203:243::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15203:243:0;;;;;;;;:::i;15452:244::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15452:244:0;;;;;;;;:::i;11928:::-;;;;;;;;;;;;;;;;-1:-1:-1;11928:244:0;-1:-1:-1;;;;;11928:244:0;;:::i;13614:141::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13614:141:0;;;;;;;;;;:::i;16154:267::-;;;;;;;;;;;;;;;;-1:-1:-1;16154:267:0;;:::i;13243:103::-;;;;;;;;;;;;;;;;-1:-1:-1;13243:103:0;-1:-1:-1;;;;;13243:103:0;;:::i;15702:164::-;11811:7;;-1:-1:-1;;;;;11811:7:0;11797:10;:21;11789:61;;;;;-1:-1:-1;;;11789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15801:12:::1;::::0;:24:::1;::::0;15818:6;15801:16:::1;:24::i;:::-;15786:12;:39:::0;15839:21:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;15702:164:::0;;:::o;12234:90::-;12293:25;;;;;;;;;;;;;;;;;12234:90;:::o;13808:153::-;13885:4;13898:39;13907:10;13919:8;13929:7;13898:8;:39::i;:::-;-1:-1:-1;13951:4:0;13808:153;;;;;:::o;12739:94::-;12815:12;;12739:94;:::o;14019:418::-;-1:-1:-1;;;;;14180:20:0;;14140:4;14180:20;;;:11;:20;;;;;;;;14201:10;14180:32;;;;;;;;14227:27;;;;14219:79;;;;-1:-1:-1;;;14219:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14307:39;14317:7;14326:10;14338:7;14307:9;:39::i;:::-;14353:60;14362:7;14371:10;14383:29;:16;14404:7;14383:20;:29::i;:::-;14353:8;:60::i;:::-;-1:-1:-1;14427:4:0;;14019:418;-1:-1:-1;;;;14019:418:0:o;12612:70::-;12674:2;12612:70;:::o;14539:201::-;14643:10;14621:4;14665:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14665:33:0;;;;;;;;;;14621:4;;14634:82;;14655:8;;14665:50;;14703:11;14665:37;:50::i;12898:85::-;12965:12;;12898:85;:::o;11695:22::-;;;-1:-1:-1;;;;;11695:22:0;;:::o;13038:129::-;-1:-1:-1;;;;;13143:17:0;;13105:7;13143:17;;;;;;;;;;;13128:33;;:14;:33::i;:::-;13121:40;;13038:129;;;;:::o;15872:276::-;15987:12;;15946:7;;16010:19;16006:137;;16047:10;16040:17;;;;;16006:137;16087:48;16120:14;16087:28;16102:12;;16087:10;:14;;:28;;;;:::i;:::-;:32;;:48::i;:::-;16080:55;;;;;12433:80;12494:13;;;;;;;;;;;;;;;;;12433:80;:::o;14842:355::-;14981:10;14929:4;14969:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14969:33:0;;;;;;;;;;15017:36;;;;15009:85;;;;-1:-1:-1;;;15009:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15103:70;15112:10;15124:8;15134:38;:16;15155;15134:20;:38::i;15103:70::-;-1:-1:-1;15187:4:0;;14842:355;-1:-1:-1;;;14842:355:0:o;13400:159::-;13480:4;13493:42;13503:10;13515;13527:7;13493:9;:42::i;15203:243::-;11811:7;;-1:-1:-1;;;;;11811:7:0;11797:10;:21;11789:61;;;;;-1:-1:-1;;;11789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15295:21:::1;15319:26;15334:10;15319:14;:26::i;:::-;15367:12;::::0;15295:50;;-1:-1:-1;15367:28:0::1;::::0;15384:10;15367:16:::1;:28::i;:::-;15352:12;:43:::0;15402:38:::1;15414:10:::0;15426:13;15402:11:::1;:38::i;:::-;11857:1;15203:243:::0;;:::o;15452:244::-;11811:7;;-1:-1:-1;;;;;11811:7:0;11797:10;:21;11789:61;;;;;-1:-1:-1;;;11789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15545:21:::1;15569:27;15584:11;15569:14;:27::i;:::-;15618:12;::::0;15545:51;;-1:-1:-1;15618:29:0::1;::::0;15635:11;15618:16:::1;:29::i;:::-;15603:12;:44:::0;15654:36:::1;15666:8:::0;15676:13;15654:11:::1;:36::i;11928:244::-:0;11990:12;;-1:-1:-1;;;;;11990:12:0;12006:10;11990:26;11982:61;;;;;-1:-1:-1;;;11982:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12058:22:0;;12050:57;;;;;-1:-1:-1;;;12050:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12116:7;:18;;-1:-1:-1;;;;;12116:18:0;;;;;;;;;;12141:12;:25;;;;;;;11928:244::o;13614:141::-;-1:-1:-1;;;;;13720:19:0;;;13697:7;13720:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;13614:141::o;16154:267::-;16270:12;;16231:7;;16293:17;16289:127;;16328:1;16321:8;;;;;16289:127;16359:49;16395:12;16359:31;16377:12;;16359:13;:17;;:31;;;;:::i;13243:103::-;-1:-1:-1;;;;;13323:17:0;13300:7;13323:17;;;;;;;;;;;;13243:103::o;2901:179::-;2959:7;2991:5;;;3015:6;;;;3007:46;;;;;-1:-1:-1;;;3007:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3071:1;2901:179;-1:-1:-1;;;2901:179:0:o;16890:349::-;-1:-1:-1;;;;;17003:20:0;;16995:68;;;;-1:-1:-1;;;16995:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17078:22:0;;17070:68;;;;-1:-1:-1;;;17070:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17147:19:0;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;17198:35;;;;;;;;;;;;;;;;;16890:349;;;:::o;16507:278::-;16616:25;16644:23;16659:7;16644:14;:23::i;:::-;16616:51;;16674:55;16690:7;16699:10;16711:17;16674:15;:55::i;:::-;16759:10;-1:-1:-1;;;;;16741:38:0;16750:7;-1:-1:-1;;;;;16741:38:0;;16771:7;16741:38;;;;;;;;;;;;;;;;;;16507:278;;;;:::o;3363:158::-;3421:7;3454:1;3449;:6;;3441:49;;;;;-1:-1:-1;;;3441:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3508:5:0;;;3363:158::o;3780:220::-;3838:7;3862:6;3858:20;;-1:-1:-1;3877:1:0;3870:8;;3858:20;3901:5;;;3905:1;3901;:5;:1;3925:5;;;;;:10;3917:56;;;;-1:-1:-1;;;3917:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4478:153;4536:7;4568:1;4564;:5;4556:44;;;;;-1:-1:-1;;;4556:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4622:1;4618;:5;;;;;;;4478:153;-1:-1:-1;;;4478:153:0:o;18080:327::-;-1:-1:-1;;;;;18168:24:0;;18160:67;;;;;-1:-1:-1;;;18160:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18251:12;;:31;;18268:13;18251:16;:31::i;:::-;18236:12;:46;-1:-1:-1;;;;;18313:19:0;;:7;:19;;;;;;;;;;;:38;;18337:13;18313:23;:38::i;:::-;-1:-1:-1;;;;;18291:19:0;;:7;:19;;;;;;;;;;;;:60;;;;18365:36;;;;;;;;;;;;;;;;;;;;;;;;18080:327;;:::o;18595:448::-;-1:-1:-1;;;;;18681:22:0;;18673:67;;;;;-1:-1:-1;;;18673:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18773:17:0;;18749:21;18773:17;;;;;;;;;;;18805:30;;;;18797:76;;;;-1:-1:-1;;;18797:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18897:12;;:31;;18914:13;18897:16;:31::i;:::-;18882:12;:46;18957:32;:13;18975;18957:17;:32::i;:::-;-1:-1:-1;;;;;18937:17:0;;:7;:17;;;;;;;;;;;;:52;;;;19003:34;;;;;;;;;;;;;;;;;;;;;;;;18595:448;;;:::o;17331:556::-;-1:-1:-1;;;;;17460:21:0;;17452:70;;;;-1:-1:-1;;;17452:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17537:24:0;;17529:71;;;;-1:-1:-1;;;17529:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17639:16:0;;17609:27;17639:16;;;;;;;;;;;17670:36;;;;17662:86;;;;-1:-1:-1;;;17662:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17776:38;:19;17800:13;17776:23;:38::i;:::-;-1:-1:-1;;;;;17757:16:0;;;:7;:16;;;;;;;;;;;:57;;;;17843:19;;;;;;;:38;;17867:13;17843:23;:38::i;:::-;-1:-1:-1;;;;;17821:19:0;;;:7;:19;;;;;;;;;;:60;;;;-1:-1:-1;;;17331:556:0:o

Swarm Source

ipfs://df7f6fb3e02bfcfe49bd1a824071bd48939193a44d45fd47b82b4ba7ff6df9e8
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.