ETH Price: $3,029.76 (+1.04%)
Gas: 8 Gwei

Token

TOOPI (TOOPI)
 

Overview

Max Total Supply

1,000,000 TOOPI

Holders

242

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
73.2 TOOPI

Value
$0.00
0xeb82bae43c6c75adffc9131fd4819737bbdf1798
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Toopi

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-28
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: toopi.sol


// OpenZeppelin Contracts v4.3.2 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.7;






       
/**
 * @dev Interface for checking active staked balance of a user.
 */
interface IToopiSource {
  function getAccumulatedAmount(address staker) external view returns (uint256);
}

/**
 * @dev Implementation of the {IERC20} interface.
 */
contract Toopi is ERC20, ReentrancyGuard, Ownable {
    IToopiSource public ToopiSource;

    uint256 public MAX_SUPPLY;
    uint256 public constant MAX_TAX_VALUE = 100;

    uint256 public spendTaxAmount;
    uint256 public withdrawTaxAmount;

    uint256 public bribesDistributed;
    uint256 public activeTaxCollectedAmount;

    bool public tokenCapSet;

    bool public withdrawTaxCollectionStopped;
    bool public spendTaxCollectionStopped;

    bool public isPaused;
    bool public isDepositPaused;
    bool public isWithdrawPaused;
    bool public isTransferPaused;

    mapping (address => bool) private _isAuthorised;
    address[] public authorisedLog;

    mapping(address => uint256) public depositedAmount;
    mapping(address => uint256) public spentAmount;

    modifier onlyAuthorised {
      require(_isAuthorised[_msgSender()], "Not Authorised");
      _;
    }

    modifier whenNotPaused {
      require(!isPaused, "Transfers paused!");
      _;
    }

    event Withdraw(address indexed userAddress, uint256 amount, uint256 tax);
    event Deposit(address indexed userAddress, uint256 amount);
    event DepositFor(address indexed caller, address indexed userAddress, uint256 amount);
    event Spend(address indexed caller, address indexed userAddress, uint256 amount, uint256 tax);
    event ClaimTax(address indexed caller, address indexed userAddress, uint256 amount);
    event InternalTransfer(address indexed from, address indexed to, uint256 amount);

    constructor(address _source) ERC20("TOOPI", "TOOPI") {
      _isAuthorised[_msgSender()] = true;
      isPaused = true;
      isTransferPaused = true;

      withdrawTaxAmount = 25;
      spendTaxAmount = 25;

      ToopiSource = IToopiSource(_source);
    }

    /**
    * @dev Returnes current spendable balance of a specific user. This balance can be spent by user for other collections without
    *      withdrawal to ERC-20 Toopi OR can be withdrawn to ERC-20 Toopi.
    */
    function getUserBalance(address user) public view returns (uint256) {
      return (ToopiSource.getAccumulatedAmount(user) + depositedAmount[user] - spentAmount[user]);
    }

    /**
    * @dev Function to deposit ERC-20 Toopi to the game balance.
    */
    function depositToopi(uint256 amount) public nonReentrant whenNotPaused {
      require(!isDepositPaused, "Deposit Paused");
      require(balanceOf(_msgSender()) >= amount, "Insufficient balance");

      _burn(_msgSender(), amount);
      depositedAmount[_msgSender()] += amount;

      emit Deposit(
        _msgSender(),
        amount
      );
    }

    /**
    * @dev Function to withdraw game Toopi to ERC-20 Toopi.
    */
    function withdrawToopi(uint256 amount) public nonReentrant whenNotPaused {
      require(!isWithdrawPaused, "Withdraw Paused");
      require(getUserBalance(_msgSender()) >= amount, "Insufficient balance");
      uint256 tax = withdrawTaxCollectionStopped ? 0 : (amount * withdrawTaxAmount) / 100;

      spentAmount[_msgSender()] += amount;
      activeTaxCollectedAmount += tax;
      _mint(_msgSender(), (amount - tax));

      emit Withdraw(
        _msgSender(),
        amount,
        tax
      );
    }

    /**
    * @dev Function to transfer game Toopi from one account to another.
    */
    function transferToopi(address to, uint256 amount) public nonReentrant whenNotPaused {
      require(!isTransferPaused, "Transfer Paused");
      require(getUserBalance(_msgSender()) >= amount, "Insufficient balance");

      spentAmount[_msgSender()] += amount;
      depositedAmount[to] += amount;

      emit InternalTransfer(
        _msgSender(),
        to,
        amount
      );
    }

    /**
    * @dev Function to spend user balance. Can be called by other authorised contracts. To be used for internal purchases of other NFTs, etc.
    */
    function spendToopi(address user, uint256 amount) external onlyAuthorised nonReentrant {
      require(getUserBalance(user) >= amount, "Insufficient balance");
      uint256 tax = spendTaxCollectionStopped ? 0 : (amount * spendTaxAmount) / 100;

      spentAmount[user] += amount;
      activeTaxCollectedAmount += tax;

      emit Spend(
        _msgSender(),
        user,
        amount,
        tax
      );
    }

    /**
    * @dev Function to deposit tokens to a user balance. Can be only called by an authorised contracts.
    */
    function depositToopiFor(address user, uint256 amount) public onlyAuthorised nonReentrant {
      _depositToopiFor(user, amount);
    }

    /**
    * @dev Function to tokens to the user balances. Can be only called by an authorised users.
    */
    function distributeToopi(address[] memory user, uint256[] memory amount) public onlyAuthorised nonReentrant {
      require(user.length == amount.length, "Wrong arrays passed");

      for (uint256 i; i < user.length; i++) {
        _depositToopiFor(user[i], amount[i]);
      }
    }

    function _depositToopiFor(address user, uint256 amount) internal {
      require(user != address(0), "Deposit to 0 address");
      depositedAmount[user] += amount;

      emit DepositFor(
        _msgSender(),
        user,
        amount
      );
    }

    /**
    * @dev Function to mint tokens to a user balance. Can be only called by an authorised contracts.
    */
    function mintFor(address user, uint256 amount) external onlyAuthorised nonReentrant {
      if (tokenCapSet) require(totalSupply() + amount <= MAX_SUPPLY, "You try to mint more than max supply");
      _mint(user, amount);
    }

    /**
    * @dev Function to claim tokens from the tax accumulated pot. Can be only called by an authorised contracts.
    */
    function claimToopiTax(address user, uint256 amount) public onlyAuthorised nonReentrant {
      require(activeTaxCollectedAmount >= amount, "Insufficiend tax balance");

      activeTaxCollectedAmount -= amount;
      depositedAmount[user] += amount;
      bribesDistributed += amount;

      emit ClaimTax(
        _msgSender(),
        user,
        amount
      );
    }

    /**
    * @dev Function returns maxSupply set by admin. By default returns error (Max supply is not set).
    */
    function getMaxSupply() public view returns (uint256) {
      require(tokenCapSet, "Max supply is not set");
      return MAX_SUPPLY;
    }

    /*
      ADMIN FUNCTIONS
    */

    /**
    * @dev Function allows admin to set total supply of Toopi token.
    */
    function setTokenCap(uint256 tokenCup) public onlyOwner {
      require(totalSupply() < tokenCup, "Value is smaller than the number of existing tokens");
      require(!tokenCapSet, "Token cap has been already set");

      MAX_SUPPLY = tokenCup;
    }

    /**
    * @dev Function allows admin add authorised address. The function also logs what addresses were authorised for transparancy.
    */
    function authorise(address addressToAuth) public onlyOwner {
      _isAuthorised[addressToAuth] = true;
      authorisedLog.push(addressToAuth);
    }

    /**
    * @dev Function allows admin add unauthorised address.
    */
    function unauthorise(address addressToUnAuth) public onlyOwner {
      _isAuthorised[addressToUnAuth] = false;
    }

    /**
    * @dev Function allows admin update the address of staking address.
    */
    function changeToopiSourceContract(address _source) public onlyOwner {
      ToopiSource = IToopiSource(_source);
      authorise(_source);
    }

    /**
    * @dev Function allows admin to update limmit of tax on withdraw.
    */
    function updateWithdrawTaxAmount(uint256 _taxAmount) public onlyOwner {
      require(_taxAmount < MAX_TAX_VALUE, "Wrong value passed");
      withdrawTaxAmount = _taxAmount;
    }

    /**
    * @dev Function allows admin to update tax amount on spend.
    */
    function updateSpendTaxAmount(uint256 _taxAmount) public onlyOwner {
      require(_taxAmount < MAX_TAX_VALUE, "Wrong value passed");
      spendTaxAmount = _taxAmount;
    }

    /**
    * @dev Function allows admin to stop tax collection on withdraw.
    */
    function stopTaxCollectionOnWithdraw(bool _stop) public onlyOwner {
      withdrawTaxCollectionStopped = _stop;
    }

    /**
    * @dev Function allows admin to stop tax collection on spend.
    */
    function stopTaxCollectionOnSpend(bool _stop) public onlyOwner {
      spendTaxCollectionStopped = _stop;
    }

    /**
    * @dev Function allows admin to pause all in game Toopi transfactions.
    */
    function pauseGameToopi(bool _pause) public onlyOwner {
      isPaused = _pause;
    }

    /**
    * @dev Function allows admin to pause in game Toopi transfers.
    */
    function pauseTransfers(bool _pause) public onlyOwner {
      isTransferPaused = _pause;
    }

    /**
    * @dev Function allows admin to pause in game Toopi withdraw.
    */
    function pauseWithdraw(bool _pause) public onlyOwner {
      isWithdrawPaused = _pause;
    }

    /**
    * @dev Function allows admin to pause in game Toopi deposit.
    */
    function pauseDeposits(bool _pause) public onlyOwner {
      isDepositPaused = _pause;
    }

    /**
    * @dev Function allows admin to withdraw ETH accidentally dropped to the contract.
    */
    function rescue() external onlyOwner {
      payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_source","type":"address"}],"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":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositFor","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":"amount","type":"uint256"}],"name":"InternalTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"Spend","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TAX_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ToopiSource","outputs":[{"internalType":"contract IToopiSource","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeTaxCollectedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"addressToAuth","type":"address"}],"name":"authorise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"authorisedLog","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bribesDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_source","type":"address"}],"name":"changeToopiSourceContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimToopiTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"amount","type":"uint256"}],"name":"depositToopi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositToopiFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"distributeToopi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserBalance","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":[],"name":"isDepositPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWithdrawPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseGameToopi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenCup","type":"uint256"}],"name":"setTokenCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spendTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"spendTaxCollectionStopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"spendToopi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"spentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_stop","type":"bool"}],"name":"stopTaxCollectionOnSpend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_stop","type":"bool"}],"name":"stopTaxCollectionOnWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCapSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToopi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToUnAuth","type":"address"}],"name":"unauthorise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxAmount","type":"uint256"}],"name":"updateSpendTaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxAmount","type":"uint256"}],"name":"updateWithdrawTaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTaxCollectionStopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToopi","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002797380380620027978339810160408190526200003491620001fa565b604080518082018252600580825264544f4f504960d81b602080840182815285518087019096529285528401528151919291620000749160039162000154565b5080516200008a90600490602084019062000154565b50506001600555506200009d3362000102565b336000908152600e602052604090208054600160ff19909116179055600d805466ff0000ff000000191666010000010000001790556019600a819055600955600780546001600160a01b0319166001600160a01b039290921691909117905562000269565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000162906200022c565b90600052602060002090601f016020900481019282620001865760008555620001d1565b82601f10620001a157805160ff1916838001178555620001d1565b82800160010185558215620001d1579182015b82811115620001d1578251825591602001919060010190620001b4565b50620001df929150620001e3565b5090565b5b80821115620001df5760008155600101620001e4565b6000602082840312156200020d57600080fd5b81516001600160a01b03811681146200022557600080fd5b9392505050565b600181811c908216806200024157607f821691505b602082108114156200026357634e487b7160e01b600052602260045260246000fd5b50919050565b61251e80620002796000396000f3fe608060405234801561001057600080fd5b50600436106103425760003560e01c8063715018a6116101b8578063bb3ccf9e11610104578063e6bcc16e116100a2578063f2fde38b1161007c578063f2fde38b14610720578063f560d0b214610733578063f677889b14610748578063fec061531461075b57600080fd5b8063e6bcc16e146106e7578063ebd462cb146106fa578063f11aafe11461070d57600080fd5b8063c62e0ccb116100de578063c62e0ccb14610675578063c82bc61d14610688578063da1919b31461069b578063dd62ed3e146106ae57600080fd5b8063bb3ccf9e1461063c578063c0b2946a1461064f578063c5178a051461066257600080fd5b80639a25ad7c11610171578063a457c2d71161014b578063a457c2d7146105f9578063a9059cbb1461060c578063aa3a8f671461061f578063b187bd261461062857600080fd5b80639a25ad7c146105c9578063a183c77c146105d2578063a1a1ef43146105e557600080fd5b8063715018a61461056f578063738b62e5146105775780637e22e39d1461058a57806380833d781461059d5780638da5cb5b146105b057806395d89b41146105c157600080fd5b8063395093511161029257806359d7d9de116102305780636d031d0a1161020a5780636d031d0a146105015780636f92a74a1461052157806370a0823114610534578063710cf8e61461055d57600080fd5b806359d7d9de146104c557806366e6c8af146104d857806367800b5f146104eb57600080fd5b8063477348921161026c57806347734892146104775780634a4643f71461048a5780634c0f38c2146104aa57806351a25566146104b257600080fd5b8063395093511461043e578063440e3550146104515780634667f7111461046457600080fd5b8063200847dd116102ff5780632854bc7e116102d95780632854bc7e146104005780633064d97314610413578063313ce5671461042657806332cb6b0c1461043557600080fd5b8063200847dd146103d75780632041baf1146103e457806323b872dd146103ed57600080fd5b806306fdde0314610347578063095ea7b3146103655780630c09ef4c1461038857806318160ddd146103b35780631fbe1979146103c557806320076ee6146103cf575b600080fd5b61034f610764565b60405161035c9190611ff3565b60405180910390f35b610378610373366004612064565b6107f6565b604051901515815260200161035c565b60075461039b906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b6002545b60405190815260200161035c565b6103cd61080e565b005b6103b7606481565b600d546103789060ff1681565b6103b7600c5481565b6103786103fb36600461208e565b61087d565b6103cd61040e3660046120ca565b6108a1565b6103cd6104213660046120e3565b610996565b6040516012815260200161035c565b6103b760085481565b61037861044c366004612064565b6109e4565b6103cd61045f366004612064565b610a23565b6103cd6104723660046120ca565b610b84565b6103b76104853660046120e3565b610cb5565b6103b76104983660046120e3565b60106020526000908152604090205481565b6103b7610d5d565b6103cd6104c0366004612105565b610db1565b6103cd6104d3366004612105565b610df5565b6103cd6104e63660046120e3565b610e3b565b600d546103789065010000000000900460ff1681565b6103b761050f3660046120e3565b60116020526000908152604090205481565b6103cd61052f3660046120ca565b610ecb565b6103b76105423660046120e3565b6001600160a01b031660009081526020819052604090205490565b600d5461037890610100900460ff1681565b6103cd610f3f565b6103cd610585366004612105565b610f75565b600d546103789062010000900460ff1681565b6103cd6105ab3660046120e3565b610fbf565b6006546001600160a01b031661039b565b61034f61100a565b6103b7600a5481565b6103cd6105e0366004612064565b611019565b600d5461037890600160301b900460ff1681565b610378610607366004612064565b611168565b61037861061a366004612064565b6111fa565b6103b7600b5481565b600d54610378906301000000900460ff1681565b6103cd61064a366004612064565b611208565b6103cd61065d366004612064565b61134b565b6103cd6106703660046120ca565b6113b5565b6103cd610683366004612105565b61154b565b61039b6106963660046120ca565b611593565b6103cd6106a9366004612064565b6115bd565b6103b76106bc366004612127565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103cd6106f53660046120ca565b61169a565b6103cd610708366004612105565b61170e565b6103cd61071b366004612105565b61175a565b6103cd61072e3660046120e3565b6117a5565b600d5461037890640100000000900460ff1681565b6103cd610756366004612230565b61183d565b6103b760095481565b606060038054610773906122f0565b80601f016020809104026020016040519081016040528092919081815260200182805461079f906122f0565b80156107ec5780601f106107c1576101008083540402835291602001916107ec565b820191906000526020600020905b8154815290600101906020018083116107cf57829003601f168201915b5050505050905090565b60003361080481858561193f565b5060019392505050565b6006546001600160a01b031633146108415760405162461bcd60e51b81526004016108389061232b565b60405180910390fd5b6006546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561087a573d6000803e3d6000fd5b50565b60003361088b858285611a64565b610896858585611af6565b506001949350505050565b6006546001600160a01b031633146108cb5760405162461bcd60e51b81526004016108389061232b565b806108d560025490565b1061093e5760405162461bcd60e51b815260206004820152603360248201527f56616c756520697320736d616c6c6572207468616e20746865206e756d626572604482015272206f66206578697374696e6720746f6b656e7360681b6064820152608401610838565b600d5460ff16156109915760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e2063617020686173206265656e20616c72656164792073657400006044820152606401610838565b600855565b6006546001600160a01b031633146109c05760405162461bcd60e51b81526004016108389061232b565b600780546001600160a01b0319166001600160a01b03831617905561087a81610e3b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906108049082908690610a1e908790612376565b61193f565b60026005541415610a465760405162461bcd60e51b81526004016108389061238e565b6002600555600d546301000000900460ff1615610a755760405162461bcd60e51b8152600401610838906123c5565b600d54600160301b900460ff1615610ac15760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8814185d5cd959608a1b6044820152606401610838565b80610acb33610cb5565b1015610ae95760405162461bcd60e51b8152600401610838906123f0565b3360009081526011602052604081208054839290610b08908490612376565b90915550506001600160a01b03821660009081526010602052604081208054839290610b35908490612376565b90915550506040518181526001600160a01b0383169033907fe2080c8fc8d86c864d8dc081fadaebf2be7191086615e786f954420f13ed122a906020015b60405180910390a350506001600555565b60026005541415610ba75760405162461bcd60e51b81526004016108389061238e565b6002600555600d546301000000900460ff1615610bd65760405162461bcd60e51b8152600401610838906123c5565b600d54640100000000900460ff1615610c225760405162461bcd60e51b815260206004820152600e60248201526d11195c1bdcda5d0814185d5cd95960921b6044820152606401610838565b80610c2c33610542565b1015610c4a5760405162461bcd60e51b8152600401610838906123f0565b610c543382611cc4565b3360009081526010602052604081208054839290610c73908490612376565b909155505060405181815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2506001600555565b6001600160a01b038181166000818152601160209081526040808320546010909252808320546007549151630412966760e01b8152600481019590955292949193911690630412966790602401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d43919061241e565b610d4d9190612376565b610d579190612437565b92915050565b600d5460009060ff16610daa5760405162461bcd60e51b815260206004820152601560248201527413585e081cdd5c1c1b1e481a5cc81b9bdd081cd95d605a1b6044820152606401610838565b5060085490565b6006546001600160a01b03163314610ddb5760405162461bcd60e51b81526004016108389061232b565b600d80549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108389061232b565b600d8054911515620100000262ff000019909216919091179055565b6006546001600160a01b03163314610e655760405162461bcd60e51b81526004016108389061232b565b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6006546001600160a01b03163314610ef55760405162461bcd60e51b81526004016108389061232b565b60648110610f3a5760405162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d985b1d59481c185cdcd95960721b6044820152606401610838565b600955565b6006546001600160a01b03163314610f695760405162461bcd60e51b81526004016108389061232b565b610f736000611e0a565b565b6006546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016108389061232b565b600d80549115156401000000000264ff0000000019909216919091179055565b6006546001600160a01b03163314610fe95760405162461bcd60e51b81526004016108389061232b565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b606060048054610773906122f0565b336000908152600e602052604090205460ff166110485760405162461bcd60e51b81526004016108389061244e565b6002600554141561106b5760405162461bcd60e51b81526004016108389061238e565b60026005558061107a83610cb5565b10156110985760405162461bcd60e51b8152600401610838906123f0565b600d5460009062010000900460ff166110ca576064600954836110bb9190612476565b6110c59190612495565b6110cd565b60005b6001600160a01b0384166000908152601160205260408120805492935084929091906110fa908490612376565b9250508190555080600c60008282546111139190612376565b909155505060408051838152602081018390526001600160a01b0385169133917fed8cfe3600cacf009dc67354491d44da19a77f26a4aed42181ba6824ccb35d72910160405180910390a35050600160055550565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156111ed5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610838565b610896828686840361193f565b600033610804818585611af6565b336000908152600e602052604090205460ff166112375760405162461bcd60e51b81526004016108389061244e565b6002600554141561125a5760405162461bcd60e51b81526004016108389061238e565b6002600555600c548111156112b15760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e64207461782062616c616e636500000000000000006044820152606401610838565b80600c60008282546112c39190612437565b90915550506001600160a01b038216600090815260106020526040812080548392906112f0908490612376565b9250508190555080600b60008282546113099190612376565b90915550506040518181526001600160a01b0383169033907f1ad2283cc65e3e122c0a874bda25abbd844e8ae88fa9512b4849ee1b58b6570d90602001610b73565b336000908152600e602052604090205460ff1661137a5760405162461bcd60e51b81526004016108389061244e565b6002600554141561139d5760405162461bcd60e51b81526004016108389061238e565b60026005556113ac8282611e5c565b50506001600555565b600260055414156113d85760405162461bcd60e51b81526004016108389061238e565b6002600555600d546301000000900460ff16156114075760405162461bcd60e51b8152600401610838906123c5565b600d5465010000000000900460ff16156114555760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc814185d5cd959608a1b6044820152606401610838565b8061145f33610cb5565b101561147d5760405162461bcd60e51b8152600401610838906123f0565b600d54600090610100900460ff166114ae576064600a548361149f9190612476565b6114a99190612495565b6114b1565b60005b336000908152601160205260408120805492935084929091906114d5908490612376565b9250508190555080600c60008282546114ee9190612376565b909155506115079050336115028385612437565b611f1b565b604080518381526020810183905233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a250506001600555565b6006546001600160a01b031633146115755760405162461bcd60e51b81526004016108389061232b565b600d805491151563010000000263ff00000019909216919091179055565b600f81815481106115a357600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600e602052604090205460ff166115ec5760405162461bcd60e51b81526004016108389061244e565b6002600554141561160f5760405162461bcd60e51b81526004016108389061238e565b6002600555600d5460ff1615611690576008548161162c60025490565b6116369190612376565b11156116905760405162461bcd60e51b8152602060048201526024808201527f596f752074727920746f206d696e74206d6f7265207468616e206d617820737560448201526370706c7960e01b6064820152608401610838565b6113ac8282611f1b565b6006546001600160a01b031633146116c45760405162461bcd60e51b81526004016108389061232b565b606481106117095760405162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d985b1d59481c185cdcd95960721b6044820152606401610838565b600a55565b6006546001600160a01b031633146117385760405162461bcd60e51b81526004016108389061232b565b600d8054911515650100000000000265ff000000000019909216919091179055565b6006546001600160a01b031633146117845760405162461bcd60e51b81526004016108389061232b565b600d8054911515600160301b0266ff00000000000019909216919091179055565b6006546001600160a01b031633146117cf5760405162461bcd60e51b81526004016108389061232b565b6001600160a01b0381166118345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610838565b61087a81611e0a565b336000908152600e602052604090205460ff1661186c5760405162461bcd60e51b81526004016108389061244e565b6002600554141561188f5760405162461bcd60e51b81526004016108389061238e565b600260055580518251146118db5760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c8185c9c985e5cc81c185cdcd959606a1b6044820152606401610838565b60005b8251811015611935576119238382815181106118fc576118fc6124b7565b6020026020010151838381518110611916576119166124b7565b6020026020010151611e5c565b8061192d816124cd565b9150506118de565b5050600160055550565b6001600160a01b0383166119a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610838565b6001600160a01b038216611a025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610838565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611af05781811015611ae35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610838565b611af0848484840361193f565b50505050565b6001600160a01b038316611b5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610838565b6001600160a01b038216611bbc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610838565b6001600160a01b03831660009081526020819052604090205481811015611c345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610838565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c6b908490612376565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cb791815260200190565b60405180910390a3611af0565b6001600160a01b038216611d245760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610838565b6001600160a01b03821660009081526020819052604090205481811015611d985760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610838565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611dc7908490612437565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611a57565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611ea95760405162461bcd60e51b81526020600482015260146024820152734465706f73697420746f2030206164647265737360601b6044820152606401610838565b6001600160a01b03821660009081526010602052604081208054839290611ed1908490612376565b90915550506040518181526001600160a01b0383169033907f6b64443f4cc3aac2df66fff76675a29dc321ce9efebffb006f528db1690179a0906020015b60405180910390a35050565b6001600160a01b038216611f715760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610838565b8060026000828254611f839190612376565b90915550506001600160a01b03821660009081526020819052604081208054839290611fb0908490612376565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f0f565b600060208083528351808285015260005b8181101561202057858101830151858201604001528201612004565b81811115612032576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461205f57600080fd5b919050565b6000806040838503121561207757600080fd5b61208083612048565b946020939093013593505050565b6000806000606084860312156120a357600080fd5b6120ac84612048565b92506120ba60208501612048565b9150604084013590509250925092565b6000602082840312156120dc57600080fd5b5035919050565b6000602082840312156120f557600080fd5b6120fe82612048565b9392505050565b60006020828403121561211757600080fd5b813580151581146120fe57600080fd5b6000806040838503121561213a57600080fd5b61214383612048565b915061215160208401612048565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156121995761219961215a565b604052919050565b600067ffffffffffffffff8211156121bb576121bb61215a565b5060051b60200190565b600082601f8301126121d657600080fd5b813560206121eb6121e6836121a1565b612170565b82815260059290921b8401810191818101908684111561220a57600080fd5b8286015b84811015612225578035835291830191830161220e565b509695505050505050565b6000806040838503121561224357600080fd5b823567ffffffffffffffff8082111561225b57600080fd5b818501915085601f83011261226f57600080fd5b8135602061227f6121e6836121a1565b82815260059290921b8401810191818101908984111561229e57600080fd5b948201945b838610156122c3576122b486612048565b825294820194908201906122a3565b965050860135925050808211156122d957600080fd5b506122e6858286016121c5565b9150509250929050565b600181811c9082168061230457607f821691505b6020821081141561232557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561238957612389612360565b500190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601190820152705472616e7366657273207061757365642160781b604082015260600190565b602080825260149082015273496e73756666696369656e742062616c616e636560601b604082015260600190565b60006020828403121561243057600080fd5b5051919050565b60008282101561244957612449612360565b500390565b6020808252600e908201526d139bdd08105d5d1a1bdc9a5cd95960921b604082015260600190565b600081600019048311821515161561249057612490612360565b500290565b6000826124b257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156124e1576124e1612360565b506001019056fea2646970667358221220f7566819de7dc39d82e197693bb899bfde091c287e513762c5b4cdef3c9bedff64736f6c634300080c0033000000000000000000000000a82f5f34956f3e618c161d0dbd5b3323b18f0733

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103425760003560e01c8063715018a6116101b8578063bb3ccf9e11610104578063e6bcc16e116100a2578063f2fde38b1161007c578063f2fde38b14610720578063f560d0b214610733578063f677889b14610748578063fec061531461075b57600080fd5b8063e6bcc16e146106e7578063ebd462cb146106fa578063f11aafe11461070d57600080fd5b8063c62e0ccb116100de578063c62e0ccb14610675578063c82bc61d14610688578063da1919b31461069b578063dd62ed3e146106ae57600080fd5b8063bb3ccf9e1461063c578063c0b2946a1461064f578063c5178a051461066257600080fd5b80639a25ad7c11610171578063a457c2d71161014b578063a457c2d7146105f9578063a9059cbb1461060c578063aa3a8f671461061f578063b187bd261461062857600080fd5b80639a25ad7c146105c9578063a183c77c146105d2578063a1a1ef43146105e557600080fd5b8063715018a61461056f578063738b62e5146105775780637e22e39d1461058a57806380833d781461059d5780638da5cb5b146105b057806395d89b41146105c157600080fd5b8063395093511161029257806359d7d9de116102305780636d031d0a1161020a5780636d031d0a146105015780636f92a74a1461052157806370a0823114610534578063710cf8e61461055d57600080fd5b806359d7d9de146104c557806366e6c8af146104d857806367800b5f146104eb57600080fd5b8063477348921161026c57806347734892146104775780634a4643f71461048a5780634c0f38c2146104aa57806351a25566146104b257600080fd5b8063395093511461043e578063440e3550146104515780634667f7111461046457600080fd5b8063200847dd116102ff5780632854bc7e116102d95780632854bc7e146104005780633064d97314610413578063313ce5671461042657806332cb6b0c1461043557600080fd5b8063200847dd146103d75780632041baf1146103e457806323b872dd146103ed57600080fd5b806306fdde0314610347578063095ea7b3146103655780630c09ef4c1461038857806318160ddd146103b35780631fbe1979146103c557806320076ee6146103cf575b600080fd5b61034f610764565b60405161035c9190611ff3565b60405180910390f35b610378610373366004612064565b6107f6565b604051901515815260200161035c565b60075461039b906001600160a01b031681565b6040516001600160a01b03909116815260200161035c565b6002545b60405190815260200161035c565b6103cd61080e565b005b6103b7606481565b600d546103789060ff1681565b6103b7600c5481565b6103786103fb36600461208e565b61087d565b6103cd61040e3660046120ca565b6108a1565b6103cd6104213660046120e3565b610996565b6040516012815260200161035c565b6103b760085481565b61037861044c366004612064565b6109e4565b6103cd61045f366004612064565b610a23565b6103cd6104723660046120ca565b610b84565b6103b76104853660046120e3565b610cb5565b6103b76104983660046120e3565b60106020526000908152604090205481565b6103b7610d5d565b6103cd6104c0366004612105565b610db1565b6103cd6104d3366004612105565b610df5565b6103cd6104e63660046120e3565b610e3b565b600d546103789065010000000000900460ff1681565b6103b761050f3660046120e3565b60116020526000908152604090205481565b6103cd61052f3660046120ca565b610ecb565b6103b76105423660046120e3565b6001600160a01b031660009081526020819052604090205490565b600d5461037890610100900460ff1681565b6103cd610f3f565b6103cd610585366004612105565b610f75565b600d546103789062010000900460ff1681565b6103cd6105ab3660046120e3565b610fbf565b6006546001600160a01b031661039b565b61034f61100a565b6103b7600a5481565b6103cd6105e0366004612064565b611019565b600d5461037890600160301b900460ff1681565b610378610607366004612064565b611168565b61037861061a366004612064565b6111fa565b6103b7600b5481565b600d54610378906301000000900460ff1681565b6103cd61064a366004612064565b611208565b6103cd61065d366004612064565b61134b565b6103cd6106703660046120ca565b6113b5565b6103cd610683366004612105565b61154b565b61039b6106963660046120ca565b611593565b6103cd6106a9366004612064565b6115bd565b6103b76106bc366004612127565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6103cd6106f53660046120ca565b61169a565b6103cd610708366004612105565b61170e565b6103cd61071b366004612105565b61175a565b6103cd61072e3660046120e3565b6117a5565b600d5461037890640100000000900460ff1681565b6103cd610756366004612230565b61183d565b6103b760095481565b606060038054610773906122f0565b80601f016020809104026020016040519081016040528092919081815260200182805461079f906122f0565b80156107ec5780601f106107c1576101008083540402835291602001916107ec565b820191906000526020600020905b8154815290600101906020018083116107cf57829003601f168201915b5050505050905090565b60003361080481858561193f565b5060019392505050565b6006546001600160a01b031633146108415760405162461bcd60e51b81526004016108389061232b565b60405180910390fd5b6006546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561087a573d6000803e3d6000fd5b50565b60003361088b858285611a64565b610896858585611af6565b506001949350505050565b6006546001600160a01b031633146108cb5760405162461bcd60e51b81526004016108389061232b565b806108d560025490565b1061093e5760405162461bcd60e51b815260206004820152603360248201527f56616c756520697320736d616c6c6572207468616e20746865206e756d626572604482015272206f66206578697374696e6720746f6b656e7360681b6064820152608401610838565b600d5460ff16156109915760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e2063617020686173206265656e20616c72656164792073657400006044820152606401610838565b600855565b6006546001600160a01b031633146109c05760405162461bcd60e51b81526004016108389061232b565b600780546001600160a01b0319166001600160a01b03831617905561087a81610e3b565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906108049082908690610a1e908790612376565b61193f565b60026005541415610a465760405162461bcd60e51b81526004016108389061238e565b6002600555600d546301000000900460ff1615610a755760405162461bcd60e51b8152600401610838906123c5565b600d54600160301b900460ff1615610ac15760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8814185d5cd959608a1b6044820152606401610838565b80610acb33610cb5565b1015610ae95760405162461bcd60e51b8152600401610838906123f0565b3360009081526011602052604081208054839290610b08908490612376565b90915550506001600160a01b03821660009081526010602052604081208054839290610b35908490612376565b90915550506040518181526001600160a01b0383169033907fe2080c8fc8d86c864d8dc081fadaebf2be7191086615e786f954420f13ed122a906020015b60405180910390a350506001600555565b60026005541415610ba75760405162461bcd60e51b81526004016108389061238e565b6002600555600d546301000000900460ff1615610bd65760405162461bcd60e51b8152600401610838906123c5565b600d54640100000000900460ff1615610c225760405162461bcd60e51b815260206004820152600e60248201526d11195c1bdcda5d0814185d5cd95960921b6044820152606401610838565b80610c2c33610542565b1015610c4a5760405162461bcd60e51b8152600401610838906123f0565b610c543382611cc4565b3360009081526010602052604081208054839290610c73908490612376565b909155505060405181815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2506001600555565b6001600160a01b038181166000818152601160209081526040808320546010909252808320546007549151630412966760e01b8152600481019590955292949193911690630412966790602401602060405180830381865afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d43919061241e565b610d4d9190612376565b610d579190612437565b92915050565b600d5460009060ff16610daa5760405162461bcd60e51b815260206004820152601560248201527413585e081cdd5c1c1b1e481a5cc81b9bdd081cd95d605a1b6044820152606401610838565b5060085490565b6006546001600160a01b03163314610ddb5760405162461bcd60e51b81526004016108389061232b565b600d80549115156101000261ff0019909216919091179055565b6006546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108389061232b565b600d8054911515620100000262ff000019909216919091179055565b6006546001600160a01b03163314610e655760405162461bcd60e51b81526004016108389061232b565b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6006546001600160a01b03163314610ef55760405162461bcd60e51b81526004016108389061232b565b60648110610f3a5760405162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d985b1d59481c185cdcd95960721b6044820152606401610838565b600955565b6006546001600160a01b03163314610f695760405162461bcd60e51b81526004016108389061232b565b610f736000611e0a565b565b6006546001600160a01b03163314610f9f5760405162461bcd60e51b81526004016108389061232b565b600d80549115156401000000000264ff0000000019909216919091179055565b6006546001600160a01b03163314610fe95760405162461bcd60e51b81526004016108389061232b565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b606060048054610773906122f0565b336000908152600e602052604090205460ff166110485760405162461bcd60e51b81526004016108389061244e565b6002600554141561106b5760405162461bcd60e51b81526004016108389061238e565b60026005558061107a83610cb5565b10156110985760405162461bcd60e51b8152600401610838906123f0565b600d5460009062010000900460ff166110ca576064600954836110bb9190612476565b6110c59190612495565b6110cd565b60005b6001600160a01b0384166000908152601160205260408120805492935084929091906110fa908490612376565b9250508190555080600c60008282546111139190612376565b909155505060408051838152602081018390526001600160a01b0385169133917fed8cfe3600cacf009dc67354491d44da19a77f26a4aed42181ba6824ccb35d72910160405180910390a35050600160055550565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156111ed5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610838565b610896828686840361193f565b600033610804818585611af6565b336000908152600e602052604090205460ff166112375760405162461bcd60e51b81526004016108389061244e565b6002600554141561125a5760405162461bcd60e51b81526004016108389061238e565b6002600555600c548111156112b15760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e64207461782062616c616e636500000000000000006044820152606401610838565b80600c60008282546112c39190612437565b90915550506001600160a01b038216600090815260106020526040812080548392906112f0908490612376565b9250508190555080600b60008282546113099190612376565b90915550506040518181526001600160a01b0383169033907f1ad2283cc65e3e122c0a874bda25abbd844e8ae88fa9512b4849ee1b58b6570d90602001610b73565b336000908152600e602052604090205460ff1661137a5760405162461bcd60e51b81526004016108389061244e565b6002600554141561139d5760405162461bcd60e51b81526004016108389061238e565b60026005556113ac8282611e5c565b50506001600555565b600260055414156113d85760405162461bcd60e51b81526004016108389061238e565b6002600555600d546301000000900460ff16156114075760405162461bcd60e51b8152600401610838906123c5565b600d5465010000000000900460ff16156114555760405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc814185d5cd959608a1b6044820152606401610838565b8061145f33610cb5565b101561147d5760405162461bcd60e51b8152600401610838906123f0565b600d54600090610100900460ff166114ae576064600a548361149f9190612476565b6114a99190612495565b6114b1565b60005b336000908152601160205260408120805492935084929091906114d5908490612376565b9250508190555080600c60008282546114ee9190612376565b909155506115079050336115028385612437565b611f1b565b604080518381526020810183905233917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568910160405180910390a250506001600555565b6006546001600160a01b031633146115755760405162461bcd60e51b81526004016108389061232b565b600d805491151563010000000263ff00000019909216919091179055565b600f81815481106115a357600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600e602052604090205460ff166115ec5760405162461bcd60e51b81526004016108389061244e565b6002600554141561160f5760405162461bcd60e51b81526004016108389061238e565b6002600555600d5460ff1615611690576008548161162c60025490565b6116369190612376565b11156116905760405162461bcd60e51b8152602060048201526024808201527f596f752074727920746f206d696e74206d6f7265207468616e206d617820737560448201526370706c7960e01b6064820152608401610838565b6113ac8282611f1b565b6006546001600160a01b031633146116c45760405162461bcd60e51b81526004016108389061232b565b606481106117095760405162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d985b1d59481c185cdcd95960721b6044820152606401610838565b600a55565b6006546001600160a01b031633146117385760405162461bcd60e51b81526004016108389061232b565b600d8054911515650100000000000265ff000000000019909216919091179055565b6006546001600160a01b031633146117845760405162461bcd60e51b81526004016108389061232b565b600d8054911515600160301b0266ff00000000000019909216919091179055565b6006546001600160a01b031633146117cf5760405162461bcd60e51b81526004016108389061232b565b6001600160a01b0381166118345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610838565b61087a81611e0a565b336000908152600e602052604090205460ff1661186c5760405162461bcd60e51b81526004016108389061244e565b6002600554141561188f5760405162461bcd60e51b81526004016108389061238e565b600260055580518251146118db5760405162461bcd60e51b815260206004820152601360248201527215dc9bdb99c8185c9c985e5cc81c185cdcd959606a1b6044820152606401610838565b60005b8251811015611935576119238382815181106118fc576118fc6124b7565b6020026020010151838381518110611916576119166124b7565b6020026020010151611e5c565b8061192d816124cd565b9150506118de565b5050600160055550565b6001600160a01b0383166119a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610838565b6001600160a01b038216611a025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610838565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611af05781811015611ae35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610838565b611af0848484840361193f565b50505050565b6001600160a01b038316611b5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610838565b6001600160a01b038216611bbc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610838565b6001600160a01b03831660009081526020819052604090205481811015611c345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610838565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c6b908490612376565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cb791815260200190565b60405180910390a3611af0565b6001600160a01b038216611d245760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610838565b6001600160a01b03821660009081526020819052604090205481811015611d985760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610838565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611dc7908490612437565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611a57565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611ea95760405162461bcd60e51b81526020600482015260146024820152734465706f73697420746f2030206164647265737360601b6044820152606401610838565b6001600160a01b03821660009081526010602052604081208054839290611ed1908490612376565b90915550506040518181526001600160a01b0383169033907f6b64443f4cc3aac2df66fff76675a29dc321ce9efebffb006f528db1690179a0906020015b60405180910390a35050565b6001600160a01b038216611f715760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610838565b8060026000828254611f839190612376565b90915550506001600160a01b03821660009081526020819052604081208054839290611fb0908490612376565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611f0f565b600060208083528351808285015260005b8181101561202057858101830151858201604001528201612004565b81811115612032576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461205f57600080fd5b919050565b6000806040838503121561207757600080fd5b61208083612048565b946020939093013593505050565b6000806000606084860312156120a357600080fd5b6120ac84612048565b92506120ba60208501612048565b9150604084013590509250925092565b6000602082840312156120dc57600080fd5b5035919050565b6000602082840312156120f557600080fd5b6120fe82612048565b9392505050565b60006020828403121561211757600080fd5b813580151581146120fe57600080fd5b6000806040838503121561213a57600080fd5b61214383612048565b915061215160208401612048565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156121995761219961215a565b604052919050565b600067ffffffffffffffff8211156121bb576121bb61215a565b5060051b60200190565b600082601f8301126121d657600080fd5b813560206121eb6121e6836121a1565b612170565b82815260059290921b8401810191818101908684111561220a57600080fd5b8286015b84811015612225578035835291830191830161220e565b509695505050505050565b6000806040838503121561224357600080fd5b823567ffffffffffffffff8082111561225b57600080fd5b818501915085601f83011261226f57600080fd5b8135602061227f6121e6836121a1565b82815260059290921b8401810191818101908984111561229e57600080fd5b948201945b838610156122c3576122b486612048565b825294820194908201906122a3565b965050860135925050808211156122d957600080fd5b506122e6858286016121c5565b9150509250929050565b600181811c9082168061230457607f821691505b6020821081141561232557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561238957612389612360565b500190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601190820152705472616e7366657273207061757365642160781b604082015260600190565b602080825260149082015273496e73756666696369656e742062616c616e636560601b604082015260600190565b60006020828403121561243057600080fd5b5051919050565b60008282101561244957612449612360565b500390565b6020808252600e908201526d139bdd08105d5d1a1bdc9a5cd95960921b604082015260600190565b600081600019048311821515161561249057612490612360565b500290565b6000826124b257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006000198214156124e1576124e1612360565b506001019056fea2646970667358221220f7566819de7dc39d82e197693bb899bfde091c287e513762c5b4cdef3c9bedff64736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a82f5f34956f3e618c161d0dbd5b3323b18f0733

-----Decoded View---------------
Arg [0] : _source (address): 0xA82f5F34956f3e618c161d0Dbd5B3323b18f0733

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a82f5f34956f3e618c161d0dbd5b3323b18f0733


Deployed Bytecode Sourcemap

23116:9559:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9412:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11763:201;;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;11763:201:0;1053:187:1;23173:31:0;;;;;-1:-1:-1;;;;;23173:31:0;;;;;;-1:-1:-1;;;;;1429:32:1;;;1411:51;;1399:2;1384:18;23173:31:0;1245:223:1;10532:108:0;10620:12;;10532:108;;;1619:25:1;;;1607:2;1592:18;10532:108:0;1473:177:1;32570:102:0;;;:::i;:::-;;23245:43;;23285:3;23245:43;;23461:23;;;;;;;;;23413:39;;;;;;12544:295;;;;;;:::i;:::-;;:::i;29728:257::-;;;;;;:::i;:::-;;:::i;30594:148::-;;;;;;:::i;:::-;;:::i;10374:93::-;;;10457:2;2506:36:1;;2494:2;2479:18;10374:93:0;2364:184:1;23213:25:0;;;;;;13248:240;;;;;;:::i;:::-;;:::i;26488:405::-;;;;;;:::i;:::-;;:::i;25415:365::-;;;;;;:::i;:::-;;:::i;25148:176::-;;;;;;:::i;:::-;;:::i;23812:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;29450:142;;;:::i;31383:119::-;;;;;;:::i;:::-;;:::i;31594:113::-;;;;;;:::i;:::-;;:::i;30140:153::-;;;;;;:::i;:::-;;:::i;23647:28::-;;;;;;;;;;;;23869:46;;;;;;:::i;:::-;;;;;;;;;;;;;;31111:177;;;;;;:::i;:::-;;:::i;10703:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10804:18:0;10777:7;10804:18;;;;;;;;;;;;10703:127;23493:40;;;;;;;;;;;;21920:103;;;:::i;32363:94::-;;;;;;:::i;:::-;;:::i;23540:37::-;;;;;;;;;;;;30378:118;;;;;;:::i;:::-;;:::i;21269:87::-;21342:6;;-1:-1:-1;;;;;21342:6:0;21269:87;;9631:104;;;:::i;23333:32::-;;;;;;27061:430;;;;;;:::i;:::-;;:::i;23682:28::-;;;;;-1:-1:-1;;;23682:28:0;;;;;;13991:438;;;;;;:::i;:::-;;:::i;11036:193::-;;;;;;:::i;:::-;;:::i;23374:32::-;;;;;;23586:20;;;;;;;;;;;;28937:385;;;;;;:::i;:::-;;:::i;27621:137::-;;;;;;:::i;:::-;;:::i;25866:524::-;;;;;;:::i;:::-;;:::i;31808:88::-;;;;;;:::i;:::-;;:::i;23773:30::-;;;;;;:::i;:::-;;:::i;28567:231::-;;;;;;:::i;:::-;;:::i;11292:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;11408:18:0;;;11381:7;11408:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11292:151;30838:183;;;;;;:::i;:::-;;:::i;32177:95::-;;;;;;:::i;:::-;;:::i;31989:96::-;;;;;;:::i;:::-;;:::i;22178:201::-;;;;;;:::i;:::-;;:::i;23613:27::-;;;;;;;;;;;;27879:290;;;;;;:::i;:::-;;:::i;23297:29::-;;;;;;9412:100;9466:13;9499:5;9492:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9412:100;:::o;11763:201::-;11846:4;7132:10;11902:32;7132:10;11918:7;11927:6;11902:8;:32::i;:::-;-1:-1:-1;11952:4:0;;11763:201;-1:-1:-1;;;11763:201:0:o;32570:102::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;;;;;;;;;21342:6;;32616:48:::1;::::0;-1:-1:-1;;;;;21342:6:0;;;;32642:21:::1;32616:48:::0;::::1;;;::::0;::::1;::::0;;;32642:21;21342:6;32616:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32570:102::o:0;12544:295::-;12675:4;7132:10;12733:38;12749:4;7132:10;12764:6;12733:15;:38::i;:::-;12782:27;12792:4;12798:2;12802:6;12782:9;:27::i;:::-;-1:-1:-1;12827:4:0;;12544:295;-1:-1:-1;;;;12544:295:0:o;29728:257::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;29817:8:::1;29801:13;10620:12:::0;;;10532:108;29801:13:::1;:24;29793:88;;;::::0;-1:-1:-1;;;29793:88:0;;6670:2:1;29793:88:0::1;::::0;::::1;6652:21:1::0;6709:2;6689:18;;;6682:30;6748:34;6728:18;;;6721:62;-1:-1:-1;;;6799:18:1;;;6792:49;6858:19;;29793:88:0::1;6468:415:1::0;29793:88:0::1;29899:11;::::0;::::1;;29898:12;29890:55;;;::::0;-1:-1:-1;;;29890:55:0;;7090:2:1;29890:55:0::1;::::0;::::1;7072:21:1::0;7129:2;7109:18;;;7102:30;7168:32;7148:18;;;7141:60;7218:18;;29890:55:0::1;6888:354:1::0;29890:55:0::1;29956:10;:21:::0;29728:257::o;30594:148::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;30672:11:::1;:35:::0;;-1:-1:-1;;;;;;30672:35:0::1;-1:-1:-1::0;;;;;30672:35:0;::::1;;::::0;;30716:18:::1;30672:35:::0;30716:9:::1;:18::i;13248:240::-:0;7132:10;13336:4;13417:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;13417:27:0;;;;;;;;;;13336:4;;7132:10;13392:66;;7132:10;;13417:27;;:40;;13447:10;;13417:40;:::i;:::-;13392:8;:66::i;26488:405::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;24078:8:::1;::::0;;;::::1;;;24077:9;24069:39;;;;-1:-1:-1::0;;;24069:39:0::1;;;;;;;:::i;:::-;26591:16:::2;::::0;-1:-1:-1;;;26591:16:0;::::2;;;26590:17;26582:45;;;::::0;-1:-1:-1;;;26582:45:0;;8420:2:1;26582:45:0::2;::::0;::::2;8402:21:1::0;8459:2;8439:18;;;8432:30;-1:-1:-1;;;8478:18:1;;;8471:45;8533:18;;26582:45:0::2;8218:339:1::0;26582:45:0::2;26676:6:::0;26644:28:::2;7132:10:::0;25148:176;:::i;26644:28::-:2;:38;;26636:71;;;;-1:-1:-1::0;;;26636:71:0::2;;;;;;;:::i;:::-;7132:10:::0;26718:25:::2;::::0;;;:11:::2;:25;::::0;;;;:35;;26747:6;;26718:25;:35:::2;::::0;26747:6;;26718:35:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;26762:19:0;::::2;;::::0;;;:15:::2;:19;::::0;;;;:29;;26785:6;;26762:19;:29:::2;::::0;26785:6;;26762:29:::2;:::i;:::-;::::0;;;-1:-1:-1;;26807:78:0::2;::::0;1619:25:1;;;-1:-1:-1;;;;;26807:78:0;::::2;::::0;7132:10;;26807:78:::2;::::0;1607:2:1;1592:18;26807:78:0::2;;;;;;;;-1:-1:-1::0;;1768:1:0;2722:7;:22;26488:405::o;25415:365::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;24078:8:::1;::::0;;;::::1;;;24077:9;24069:39;;;;-1:-1:-1::0;;;24069:39:0::1;;;;;;;:::i;:::-;25505:15:::2;::::0;;;::::2;;;25504:16;25496:43;;;::::0;-1:-1:-1;;;25496:43:0;;9113:2:1;25496:43:0::2;::::0;::::2;9095:21:1::0;9152:2;9132:18;;;9125:30;-1:-1:-1;;;9171:18:1;;;9164:44;9225:18;;25496:43:0::2;8911:338:1::0;25496:43:0::2;25583:6:::0;25556:23:::2;7132:10:::0;25566:12:::2;7052:98:::0;25556:23:::2;:33;;25548:66;;;;-1:-1:-1::0;;;25548:66:0::2;;;;;;;:::i;:::-;25625:27;7132:10:::0;25645:6:::2;25625:5;:27::i;:::-;7132:10:::0;25661:29:::2;::::0;;;:15:::2;:29;::::0;;;;:39;;25694:6;;25661:29;:39:::2;::::0;25694:6;;25661:39:::2;:::i;:::-;::::0;;;-1:-1:-1;;25716:56:0::2;::::0;1619:25:1;;;7132:10:0;;25716:56:::2;::::0;1607:2:1;1592:18;25716:56:0::2;;;;;;;-1:-1:-1::0;1768:1:0;2722:7;:22;25415:365::o;25148:176::-;-1:-1:-1;;;;;25298:17:0;;;25207:7;25298:17;;;:11;:17;;;;;;;;;25274:15;:21;;;;;;;25233:11;;:38;;-1:-1:-1;;;25233:38:0;;;;;1411:51:1;;;;25207:7:0;;25298:17;;25233:11;;;:32;;1384:18:1;;25233:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;:82;;;;:::i;:::-;25225:91;25148:176;-1:-1:-1;;25148:176:0:o;29450:142::-;29521:11;;29495:7;;29521:11;;29513:45;;;;-1:-1:-1;;;29513:45:0;;9775:2:1;29513:45:0;;;9757:21:1;9814:2;9794:18;;;9787:30;-1:-1:-1;;;9833:18:1;;;9826:51;9894:18;;29513:45:0;9573:345:1;29513:45:0;-1:-1:-1;29574:10:0;;;29450:142::o;31383:119::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;31458:28:::1;:36:::0;;;::::1;;;;-1:-1:-1::0;;31458:36:0;;::::1;::::0;;;::::1;::::0;;31383:119::o;31594:113::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;31666:25:::1;:33:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31666:33:0;;::::1;::::0;;;::::1;::::0;;31594:113::o;30140:153::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30208:28:0::1;;::::0;;;:13:::1;:28;::::0;;;;:35;;-1:-1:-1;;30208:35:0::1;30239:4;30208:35:::0;;::::1;::::0;;;30252:13:::1;:33:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30252:33:0::1;::::0;;::::1;::::0;;30140:153::o;31111:177::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;23285:3:::1;31195:10;:26;31187:57;;;::::0;-1:-1:-1;;;31187:57:0;;10125:2:1;31187:57:0::1;::::0;::::1;10107:21:1::0;10164:2;10144:18;;;10137:30;-1:-1:-1;;;10183:18:1;;;10176:48;10241:18;;31187:57:0::1;9923:342:1::0;31187:57:0::1;31253:14;:27:::0;31111:177::o;21920:103::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;21985:30:::1;22012:1;21985:18;:30::i;:::-;21920:103::o:0;32363:94::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;32425:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32425:24:0;;::::1;::::0;;;::::1;::::0;;32363:94::o;30378:118::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30450:30:0::1;30483:5;30450:30:::0;;;:13:::1;:30;::::0;;;;:38;;-1:-1:-1;;30450:38:0::1;::::0;;30378:118::o;9631:104::-;9687:13;9720:7;9713:14;;;;;:::i;27061:430::-;7132:10;23965:27;;;;:13;:27;;;;;;;;23957:54;;;;-1:-1:-1;;;23957:54:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;1812:1;2543:7;:18:::0;27189:6;27165:20:::2;27180:4:::0;27165:14:::2;:20::i;:::-;:30;;27157:63;;;;-1:-1:-1::0;;;27157:63:0::2;;;;;;;:::i;:::-;27243:25;::::0;27229:11:::2;::::0;27243:25;;::::2;;;:63;;27303:3;27285:14;;27276:6;:23;;;;:::i;:::-;27275:31;;;;:::i;:::-;27243:63;;;27271:1;27243:63;-1:-1:-1::0;;;;;27317:17:0;::::2;;::::0;;;:11:::2;:17;::::0;;;;:27;;27229:77;;-1:-1:-1;27338:6:0;;27317:17;;;:27:::2;::::0;27338:6;;27317:27:::2;:::i;:::-;;;;;;;;27381:3;27353:24;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27400:83:0::2;::::0;;11182:25:1;;;11238:2;11223:18;;11216:34;;;-1:-1:-1;;;;;27400:83:0;::::2;::::0;7132:10;;27400:83:::2;::::0;11155:18:1;27400:83:0::2;;;;;;;-1:-1:-1::0;;1768:1:0::1;2722:7;:22:::0;-1:-1:-1;27061:430:0:o;13991:438::-;7132:10;14084:4;14167:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;14167:27:0;;;;;;;;;;14084:4;;7132:10;14213:35;;;;14205:85;;;;-1:-1:-1;;;14205:85:0;;11463:2:1;14205:85:0;;;11445:21:1;11502:2;11482:18;;;11475:30;11541:34;11521:18;;;11514:62;-1:-1:-1;;;11592:18:1;;;11585:35;11637:19;;14205:85:0;11261:401:1;14205:85:0;14326:60;14335:5;14342:7;14370:15;14351:16;:34;14326:8;:60::i;11036:193::-;11115:4;7132:10;11171:28;7132:10;11188:2;11192:6;11171:9;:28::i;28937:385::-;7132:10;23965:27;;;;:13;:27;;;;;;;;23957:54;;;;-1:-1:-1;;;23957:54:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;1812:1;2543:7;:18:::0;29042:24:::2;::::0;:34;-1:-1:-1;29042:34:0::2;29034:71;;;::::0;-1:-1:-1;;;29034:71:0;;11869:2:1;29034:71:0::2;::::0;::::2;11851:21:1::0;11908:2;11888:18;;;11881:30;11947:26;11927:18;;;11920:54;11991:18;;29034:71:0::2;11667:348:1::0;29034:71:0::2;29144:6;29116:24;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;29159:21:0;::::2;;::::0;;;:15:::2;:21;::::0;;;;:31;;29184:6;;29159:21;:31:::2;::::0;29184:6;;29159:31:::2;:::i;:::-;;;;;;;;29220:6;29199:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29242:72:0::2;::::0;1619:25:1;;;-1:-1:-1;;;;;29242:72:0;::::2;::::0;7132:10;;29242:72:::2;::::0;1607:2:1;1592:18;29242:72:0::2;1473:177:1::0;27621:137:0;7132:10;23965:27;;;;:13;:27;;;;;;;;23957:54;;;;-1:-1:-1;;;23957:54:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;1812:1;2543:7;:18:::0;27720:30:::2;27737:4:::0;27743:6;27720:16:::2;:30::i;:::-;-1:-1:-1::0;;1768:1:0::1;2722:7;:22:::0;27621:137::o;25866:524::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;24078:8:::1;::::0;;;::::1;;;24077:9;24069:39;;;;-1:-1:-1::0;;;24069:39:0::1;;;;;;;:::i;:::-;25957:16:::2;::::0;;;::::2;;;25956:17;25948:45;;;::::0;-1:-1:-1;;;25948:45:0;;12222:2:1;25948:45:0::2;::::0;::::2;12204:21:1::0;12261:2;12241:18;;;12234:30;-1:-1:-1;;;12280:18:1;;;12273:45;12335:18;;25948:45:0::2;12020:339:1::0;25948:45:0::2;26042:6:::0;26010:28:::2;7132:10:::0;25148:176;:::i;26010:28::-:2;:38;;26002:71;;;;-1:-1:-1::0;;;26002:71:0::2;;;;;;;:::i;:::-;26096:28;::::0;26082:11:::2;::::0;26096:28:::2;::::0;::::2;;;:69;;26162:3;26141:17;;26132:6;:26;;;;:::i;:::-;26131:34;;;;:::i;:::-;26096:69;;;26127:1;26096:69;7132:10:::0;26176:25:::2;::::0;;;:11:::2;:25;::::0;;;;:35;;26082:83;;-1:-1:-1;26205:6:0;;26176:25;;;:35:::2;::::0;26205:6;;26176:35:::2;:::i;:::-;;;;;;;;26248:3;26220:24;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;26260:35:0::2;::::0;-1:-1:-1;7132:10:0;26281:12:::2;26290:3:::0;26281:6;:12:::2;:::i;:::-;26260:5;:35::i;:::-;26311:71;::::0;;11182:25:1;;;11238:2;11223:18;;11216:34;;;7132:10:0;;26311:71:::2;::::0;11155:18:1;26311:71:0::2;;;;;;;-1:-1:-1::0;;1768:1:0;2722:7;:22;25866:524::o;31808:88::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;31871:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31871:17:0;;::::1;::::0;;;::::1;::::0;;31808:88::o;23773:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23773:30:0;;-1:-1:-1;23773:30:0;:::o;28567:231::-;7132:10;23965:27;;;;:13;:27;;;;;;;;23957:54;;;;-1:-1:-1;;;23957:54:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;1812:1;2543:7;:18:::0;28664:11:::2;::::0;::::2;;28660:102;;;28711:10;;28701:6;28685:13;10620:12:::0;;;10532:108;28685:13:::2;:22;;;;:::i;:::-;:36;;28677:85;;;::::0;-1:-1:-1;;;28677:85:0;;12566:2:1;28677:85:0::2;::::0;::::2;12548:21:1::0;12605:2;12585:18;;;12578:30;12644:34;12624:18;;;12617:62;-1:-1:-1;;;12695:18:1;;;12688:34;12739:19;;28677:85:0::2;12364:400:1::0;28677:85:0::2;28771:19;28777:4;28783:6;28771:5;:19::i;30838:183::-:0;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;23285:3:::1;30925:10;:26;30917:57;;;::::0;-1:-1:-1;;;30917:57:0;;10125:2:1;30917:57:0::1;::::0;::::1;10107:21:1::0;10164:2;10144:18;;;10137:30;-1:-1:-1;;;10183:18:1;;;10176:48;10241:18;;30917:57:0::1;9923:342:1::0;30917:57:0::1;30983:17;:30:::0;30838:183::o;32177:95::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;32239:16:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32239:25:0;;::::1;::::0;;;::::1;::::0;;32177:95::o;31989:96::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;32052:16:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;32052:25:0::1;-1:-1:-1::0;;32052:25:0;;::::1;::::0;;;::::1;::::0;;31989:96::o;22178:201::-;21342:6;;-1:-1:-1;;;;;21342:6:0;7132:10;21489:23;21481:68;;;;-1:-1:-1;;;21481:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22267:22:0;::::1;22259:73;;;::::0;-1:-1:-1;;;22259:73:0;;12971:2:1;22259:73:0::1;::::0;::::1;12953:21:1::0;13010:2;12990:18;;;12983:30;13049:34;13029:18;;;13022:62;-1:-1:-1;;;13100:18:1;;;13093:36;13146:19;;22259:73:0::1;12769:402:1::0;22259:73:0::1;22343:28;22362:8;22343:18;:28::i;27879:290::-:0;7132:10;23965:27;;;;:13;:27;;;;;;;;23957:54;;;;-1:-1:-1;;;23957:54:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;1812:1;2543:7;:18:::0;28019:13;;28004:11;;:28:::2;27996:60;;;::::0;-1:-1:-1;;;27996:60:0;;13378:2:1;27996:60:0::2;::::0;::::2;13360:21:1::0;13417:2;13397:18;;;13390:30;-1:-1:-1;;;13436:18:1;;;13429:49;13495:18;;27996:60:0::2;13176:343:1::0;27996:60:0::2;28072:9;28067:95;28087:4;:11;28083:1;:15;28067:95;;;28116:36;28133:4;28138:1;28133:7;;;;;;;;:::i;:::-;;;;;;;28142:6;28149:1;28142:9;;;;;;;;:::i;:::-;;;;;;;28116:16;:36::i;:::-;28100:3:::0;::::2;::::0;::::2;:::i;:::-;;;;28067:95;;;-1:-1:-1::0;;1768:1:0::1;2722:7;:22:::0;-1:-1:-1;27879:290:0:o;17627:380::-;-1:-1:-1;;;;;17763:19:0;;17755:68;;;;-1:-1:-1;;;17755:68:0;;13998:2:1;17755:68:0;;;13980:21:1;14037:2;14017:18;;;14010:30;14076:34;14056:18;;;14049:62;-1:-1:-1;;;14127:18:1;;;14120:34;14171:19;;17755:68:0;13796:400:1;17755:68:0;-1:-1:-1;;;;;17842:21:0;;17834:68;;;;-1:-1:-1;;;17834:68:0;;14403:2:1;17834:68:0;;;14385:21:1;14442:2;14422:18;;;14415:30;14481:34;14461:18;;;14454:62;-1:-1:-1;;;14532:18:1;;;14525:32;14574:19;;17834:68:0;14201:398:1;17834:68:0;-1:-1:-1;;;;;17915:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17967:32;;1619:25:1;;;17967:32:0;;1592:18:1;17967:32:0;;;;;;;;17627:380;;;:::o;18294:453::-;-1:-1:-1;;;;;11408:18:0;;;18429:24;11408:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;18496:37:0;;18492:248;;18578:6;18558:16;:26;;18550:68;;;;-1:-1:-1;;;18550:68:0;;14806:2:1;18550:68:0;;;14788:21:1;14845:2;14825:18;;;14818:30;14884:31;14864:18;;;14857:59;14933:18;;18550:68:0;14604:353:1;18550:68:0;18662:51;18671:5;18678:7;18706:6;18687:16;:25;18662:8;:51::i;:::-;18418:329;18294:453;;;:::o;14908:671::-;-1:-1:-1;;;;;15039:18:0;;15031:68;;;;-1:-1:-1;;;15031:68:0;;15164:2:1;15031:68:0;;;15146:21:1;15203:2;15183:18;;;15176:30;15242:34;15222:18;;;15215:62;-1:-1:-1;;;15293:18:1;;;15286:35;15338:19;;15031:68:0;14962:401:1;15031:68:0;-1:-1:-1;;;;;15118:16:0;;15110:64;;;;-1:-1:-1;;;15110:64:0;;15570:2:1;15110:64:0;;;15552:21:1;15609:2;15589:18;;;15582:30;15648:34;15628:18;;;15621:62;-1:-1:-1;;;15699:18:1;;;15692:33;15742:19;;15110:64:0;15368:399:1;15110:64:0;-1:-1:-1;;;;;15260:15:0;;15238:19;15260:15;;;;;;;;;;;15294:21;;;;15286:72;;;;-1:-1:-1;;;15286:72:0;;15974:2:1;15286:72:0;;;15956:21:1;16013:2;15993:18;;;15986:30;16052:34;16032:18;;;16025:62;-1:-1:-1;;;16103:18:1;;;16096:36;16149:19;;15286:72:0;15772:402:1;15286:72:0;-1:-1:-1;;;;;15394:15:0;;;:9;:15;;;;;;;;;;;15412:20;;;15394:38;;15454:13;;;;;;;;:23;;15426:6;;15394:9;15454:23;;15426:6;;15454:23;:::i;:::-;;;;;;;;15510:2;-1:-1:-1;;;;;15495:26:0;15504:4;-1:-1:-1;;;;;15495:26:0;;15514:6;15495:26;;;;1619:25:1;;1607:2;1592:18;;1473:177;15495:26:0;;;;;;;;15534:37;16598:591;;-1:-1:-1;;;;;16682:21:0;;16674:67;;;;-1:-1:-1;;;16674:67:0;;16381:2:1;16674:67:0;;;16363:21:1;16420:2;16400:18;;;16393:30;16459:34;16439:18;;;16432:62;-1:-1:-1;;;16510:18:1;;;16503:31;16551:19;;16674:67:0;16179:397:1;16674:67:0;-1:-1:-1;;;;;16841:18:0;;16816:22;16841:18;;;;;;;;;;;16878:24;;;;16870:71;;;;-1:-1:-1;;;16870:71:0;;16783:2:1;16870:71:0;;;16765:21:1;16822:2;16802:18;;;16795:30;16861:34;16841:18;;;16834:62;-1:-1:-1;;;16912:18:1;;;16905:32;16954:19;;16870:71:0;16581:398:1;16870:71:0;-1:-1:-1;;;;;16977:18:0;;:9;:18;;;;;;;;;;16998:23;;;16977:44;;17043:12;:22;;17015:6;;16977:9;17043:22;;17015:6;;17043:22;:::i;:::-;;;;-1:-1:-1;;17083:37:0;;1619:25:1;;;17109:1:0;;-1:-1:-1;;;;;17083:37:0;;;;;1607:2:1;1592:18;17083:37:0;1473:177:1;22539:191:0;22632:6;;;-1:-1:-1;;;;;22649:17:0;;;-1:-1:-1;;;;;;22649:17:0;;;;;;;22682:40;;22632:6;;;22649:17;22632:6;;22682:40;;22613:16;;22682:40;22602:128;22539:191;:::o;28177:263::-;-1:-1:-1;;;;;28259:18:0;;28251:51;;;;-1:-1:-1;;;28251:51:0;;17186:2:1;28251:51:0;;;17168:21:1;17225:2;17205:18;;;17198:30;-1:-1:-1;;;17244:18:1;;;17237:50;17304:18;;28251:51:0;16984:344:1;28251:51:0;-1:-1:-1;;;;;28311:21:0;;;;;;:15;:21;;;;;:31;;28336:6;;28311:21;:31;;28336:6;;28311:31;:::i;:::-;;;;-1:-1:-1;;28358:74:0;;1619:25:1;;;-1:-1:-1;;;;;28358:74:0;;;7132:10;;28358:74;;1607:2:1;1592:18;28358:74:0;;;;;;;;28177:263;;:::o;15866:399::-;-1:-1:-1;;;;;15950:21:0;;15942:65;;;;-1:-1:-1;;;15942:65:0;;17535:2:1;15942:65:0;;;17517:21:1;17574:2;17554:18;;;17547:30;17613:33;17593:18;;;17586:61;17664:18;;15942:65:0;17333:355:1;15942:65:0;16098:6;16082:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16115:18:0;;:9;:18;;;;;;;;;;:28;;16137:6;;16115:9;:28;;16137:6;;16115:28;:::i;:::-;;;;-1:-1:-1;;16159:37:0;;1619:25:1;;;-1:-1:-1;;;;;16159:37:0;;;16176:1;;16159:37;;1607:2:1;1592:18;16159:37:0;1473:177:1;14:597;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;713:70;616:173;;;:::o;794:254::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1655:328::-;1732:6;1740;1748;1801:2;1789:9;1780:7;1776:23;1772:32;1769:52;;;1817:1;1814;1807:12;1769:52;1840:29;1859:9;1840:29;:::i;:::-;1830:39;;1888:38;1922:2;1911:9;1907:18;1888:38;:::i;:::-;1878:48;;1973:2;1962:9;1958:18;1945:32;1935:42;;1655:328;;;;;:::o;1988:180::-;2047:6;2100:2;2088:9;2079:7;2075:23;2071:32;2068:52;;;2116:1;2113;2106:12;2068:52;-1:-1:-1;2139:23:1;;1988:180;-1:-1:-1;1988:180:1:o;2173:186::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2324:29;2343:9;2324:29;:::i;:::-;2314:39;2173:186;-1:-1:-1;;;2173:186:1:o;2553:273::-;2609:6;2662:2;2650:9;2641:7;2637:23;2633:32;2630:52;;;2678:1;2675;2668:12;2630:52;2717:9;2704:23;2770:5;2763:13;2756:21;2749:5;2746:32;2736:60;;2792:1;2789;2782:12;3039:260;3107:6;3115;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3207:29;3226:9;3207:29;:::i;:::-;3197:39;;3255:38;3289:2;3278:9;3274:18;3255:38;:::i;:::-;3245:48;;3039:260;;;;;:::o;3304:127::-;3365:10;3360:3;3356:20;3353:1;3346:31;3396:4;3393:1;3386:15;3420:4;3417:1;3410:15;3436:275;3507:2;3501:9;3572:2;3553:13;;-1:-1:-1;;3549:27:1;3537:40;;3607:18;3592:34;;3628:22;;;3589:62;3586:88;;;3654:18;;:::i;:::-;3690:2;3683:22;3436:275;;-1:-1:-1;3436:275:1:o;3716:183::-;3776:4;3809:18;3801:6;3798:30;3795:56;;;3831:18;;:::i;:::-;-1:-1:-1;3876:1:1;3872:14;3888:4;3868:25;;3716:183::o;3904:662::-;3958:5;4011:3;4004:4;3996:6;3992:17;3988:27;3978:55;;4029:1;4026;4019:12;3978:55;4065:6;4052:20;4091:4;4115:60;4131:43;4171:2;4131:43;:::i;:::-;4115:60;:::i;:::-;4209:15;;;4295:1;4291:10;;;;4279:23;;4275:32;;;4240:12;;;;4319:15;;;4316:35;;;4347:1;4344;4337:12;4316:35;4383:2;4375:6;4371:15;4395:142;4411:6;4406:3;4403:15;4395:142;;;4477:17;;4465:30;;4515:12;;;;4428;;4395:142;;;-1:-1:-1;4555:5:1;3904:662;-1:-1:-1;;;;;;3904:662:1:o;4571:1146::-;4689:6;4697;4750:2;4738:9;4729:7;4725:23;4721:32;4718:52;;;4766:1;4763;4756:12;4718:52;4806:9;4793:23;4835:18;4876:2;4868:6;4865:14;4862:34;;;4892:1;4889;4882:12;4862:34;4930:6;4919:9;4915:22;4905:32;;4975:7;4968:4;4964:2;4960:13;4956:27;4946:55;;4997:1;4994;4987:12;4946:55;5033:2;5020:16;5055:4;5079:60;5095:43;5135:2;5095:43;:::i;5079:60::-;5173:15;;;5255:1;5251:10;;;;5243:19;;5239:28;;;5204:12;;;;5279:19;;;5276:39;;;5311:1;5308;5301:12;5276:39;5335:11;;;;5355:148;5371:6;5366:3;5363:15;5355:148;;;5437:23;5456:3;5437:23;:::i;:::-;5425:36;;5388:12;;;;5481;;;;5355:148;;;5522:5;-1:-1:-1;;5565:18:1;;5552:32;;-1:-1:-1;;5596:16:1;;;5593:36;;;5625:1;5622;5615:12;5593:36;;5648:63;5703:7;5692:8;5681:9;5677:24;5648:63;:::i;:::-;5638:73;;;4571:1146;;;;;:::o;5722:380::-;5801:1;5797:12;;;;5844;;;5865:61;;5919:4;5911:6;5907:17;5897:27;;5865:61;5972:2;5964:6;5961:14;5941:18;5938:38;5935:161;;;6018:10;6013:3;6009:20;6006:1;5999:31;6053:4;6050:1;6043:15;6081:4;6078:1;6071:15;5935:161;;5722:380;;;:::o;6107:356::-;6309:2;6291:21;;;6328:18;;;6321:30;6387:34;6382:2;6367:18;;6360:62;6454:2;6439:18;;6107:356::o;7247:127::-;7308:10;7303:3;7299:20;7296:1;7289:31;7339:4;7336:1;7329:15;7363:4;7360:1;7353:15;7379:128;7419:3;7450:1;7446:6;7443:1;7440:13;7437:39;;;7456:18;;:::i;:::-;-1:-1:-1;7492:9:1;;7379:128::o;7512:355::-;7714:2;7696:21;;;7753:2;7733:18;;;7726:30;7792:33;7787:2;7772:18;;7765:61;7858:2;7843:18;;7512:355::o;7872:341::-;8074:2;8056:21;;;8113:2;8093:18;;;8086:30;-1:-1:-1;;;8147:2:1;8132:18;;8125:47;8204:2;8189:18;;7872:341::o;8562:344::-;8764:2;8746:21;;;8803:2;8783:18;;;8776:30;-1:-1:-1;;;8837:2:1;8822:18;;8815:50;8897:2;8882:18;;8562:344::o;9254:184::-;9324:6;9377:2;9365:9;9356:7;9352:23;9348:32;9345:52;;;9393:1;9390;9383:12;9345:52;-1:-1:-1;9416:16:1;;9254:184;-1:-1:-1;9254:184:1:o;9443:125::-;9483:4;9511:1;9508;9505:8;9502:34;;;9516:18;;:::i;:::-;-1:-1:-1;9553:9:1;;9443:125::o;10270:338::-;10472:2;10454:21;;;10511:2;10491:18;;;10484:30;-1:-1:-1;;;10545:2:1;10530:18;;10523:44;10599:2;10584:18;;10270:338::o;10613:168::-;10653:7;10719:1;10715;10711:6;10707:14;10704:1;10701:21;10696:1;10689:9;10682:17;10678:45;10675:71;;;10726:18;;:::i;:::-;-1:-1:-1;10766:9:1;;10613:168::o;10786:217::-;10826:1;10852;10842:132;;10896:10;10891:3;10887:20;10884:1;10877:31;10931:4;10928:1;10921:15;10959:4;10956:1;10949:15;10842:132;-1:-1:-1;10988:9:1;;10786:217::o;13524:127::-;13585:10;13580:3;13576:20;13573:1;13566:31;13616:4;13613:1;13606:15;13640:4;13637:1;13630:15;13656:135;13695:3;-1:-1:-1;;13716:17:1;;13713:43;;;13736:18;;:::i;:::-;-1:-1:-1;13783:1:1;13772:13;;13656:135::o

Swarm Source

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