ETH Price: $2,397.65 (-1.68%)

Token

Bananaz (BNZ)
 

Overview

Max Total Supply

100,303.616087962962962783 BNZ

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
240.439351851851851851 BNZ

Value
$0.00
0xed0b8a5c93d1900fe797657d175288576e43e6df
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:
Bananaz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: Bananaz.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";

interface ICoolApeClub {
    function ownerOf(uint256 tokenId) external  returns(address);
}

contract Bananaz is ERC20, Ownable {
    using SafeMath for uint256;
    
    ICoolApeClub public CoolApeClub;
    address public capeverseAddress;

    uint256 public startTime;
    uint256 public earningRate = 10 ether;

    bool public claimingLive = false;
    mapping(uint256 => uint256) public lastClaim;

    mapping(address => bool) public allowedAddresses;
    
    constructor() ERC20("Bananaz", "BNZ") {}

    /*////////////////////////////////////////////////////////////////////
    //                        ERC20 Logic                             //
    ////////////////////////////////////////////////////////////////////*/

    function burn(address user, uint256 amount) external {
        require(msg.sender == capeverseAddress || allowedAddresses[msg.sender], "Address not authorized to burn Bananaz");
        require(msg.sender == user, "You can't burn someone else's Bananaz");
        _burn(user, amount);
    }

    function mint(address to, uint256 value) external {
        require(msg.sender == capeverseAddress || allowedAddresses[msg.sender], "Address not authorized to mint Bananaz");
        _mint(to, value);
    }

    function setAllowedAddresses(address _address, bool _access) public onlyOwner {
        allowedAddresses[_address] = _access;
    }

    function setCapeverseAddress(address _capeverseAddress) external onlyOwner {
        capeverseAddress = _capeverseAddress;
    }

    function setCoolApeClubAddr(address _coolApeClubAddress) external onlyOwner {
        CoolApeClub = ICoolApeClub(_coolApeClubAddress);
    }

    /*////////////////////////////////////////////////////////////////////
    //                        Staking Logic                             //
    ////////////////////////////////////////////////////////////////////*/
    
    //Function to set staking start time for $Bananaz
    function setStakingStartTime() external onlyOwner {
        startTime = block.timestamp;
    }

    //Internal Claim function for $Bananaz
    function _claim(uint id) internal {
        require(claimingLive, "Claiming $Bananaz is currently paused");
        require(CoolApeClub.ownerOf(id) == msg.sender, "You do not own this Cool Ape");
        _mint(msg.sender, getEarnings(id));
        lastClaim[id] = block.timestamp;
    }

    //External Claim function for $Bananaz
    function claimMany(uint256[] calldata ids) external {
        for(uint256 i = 0; i < ids.length; i++){
            _claim(ids[i]);
        }
    }

    function getTotalClaimable(uint256[] calldata ids) external view returns(uint256){
        uint256 claimableBananaz = 0;
        for(uint256 i = 0; i < ids.length; i++){
            claimableBananaz += getEarnings(ids[i]);
        }
        return claimableBananaz;
    }

    function getEarnings(uint256 id) internal view returns(uint256) {
        return earningRate * (block.timestamp - (lastClaim[id] >= startTime ? lastClaim[id] : startTime))/ 1 days;
    }

    //Toggle status of claiming $Bananaz
    function toggleClaiming() public onlyOwner {
        claimingLive = !claimingLive;
    }
}

File 2 of 7: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 3 of 7: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 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 4 of 7: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

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

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

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

File 5 of 7: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @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 6 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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 7 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CoolApeClub","outputs":[{"internalType":"contract ICoolApeClub","name":"","type":"address"}],"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":"","type":"address"}],"name":"allowedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capeverseAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claimMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"earningRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"getTotalClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_access","type":"bool"}],"name":"setAllowedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_capeverseAddress","type":"address"}],"name":"setCapeverseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_coolApeClubAddress","type":"address"}],"name":"setCoolApeClubAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStakingStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleClaiming","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052678ac7230489e800006009556000600a60006101000a81548160ff0219169083151502179055503480156200003857600080fd5b506040518060400160405280600781526020017f42616e616e617a000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424e5a00000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bd929190620001cd565b508060049080519060200190620000d6929190620001cd565b505050620000f9620000ed620000ff60201b60201c565b6200010760201b60201c565b620002e2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001db906200027d565b90600052602060002090601f016020900481019282620001ff57600085556200024b565b82601f106200021a57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024a5782518255916020019190600101906200022d565b5b5090506200025a91906200025e565b5090565b5b80821115620002795760008160009055506001016200025f565b5090565b600060028204905060018216806200029657607f821691505b60208210811415620002ad57620002ac620002b3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612e8e80620002f26000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806378e9792511610104578063a457c2d7116100a2578063df84e51111610071578063df84e51114610547578063f2fde38b14610565578063f9a4e53614610581578063fbfe0efb1461059d576101da565b8063a457c2d7146104ad578063a9059cbb146104dd578063bea4ebdc1461050d578063dd62ed3e14610517576101da565b80638da5cb5b116100de5780638da5cb5b14610439578063925489a81461045757806395d89b41146104735780639dc29fac14610491576101da565b806378e97925146103f55780638010fc4514610413578063897819121461041d576101da565b8063375c6d031161017c5780634120657a1161014b5780634120657a1461036f578063564a662b1461039f57806370a08231146103bb578063715018a6146103eb576101da565b8063375c6d03146102d557806339509351146102f35780633d3728b51461032357806340c10f1914610353576101da565b806318160ddd116101b857806318160ddd1461024b57806319c2b8ff1461026957806323b872dd14610287578063313ce567146102b7576101da565b806306fdde03146101df57806308f09a89146101fd578063095ea7b31461021b575b600080fd5b6101e76105cd565b6040516101f4919061237e565b60405180910390f35b61020561065f565b60405161021291906125c0565b60405180910390f35b61023560048036038101906102309190611f9c565b610665565b6040516102429190612348565b60405180910390f35b610253610683565b60405161026091906125c0565b60405180910390f35b61027161068d565b60405161027e919061232d565b60405180910390f35b6102a1600480360381019061029c9190611f09565b6106b3565b6040516102ae9190612348565b60405180910390f35b6102bf6107ab565b6040516102cc91906125db565b60405180910390f35b6102dd6107b4565b6040516102ea9190612348565b60405180910390f35b61030d60048036038101906103089190611f9c565b6107c7565b60405161031a9190612348565b60405180910390f35b61033d60048036038101906103389190612029565b610873565b60405161034a91906125c0565b60405180910390f35b61036d60048036038101906103689190611f9c565b61088b565b005b61038960048036038101906103849190611e6f565b61097d565b6040516103969190612348565b60405180910390f35b6103b960048036038101906103b49190611e6f565b61099d565b005b6103d560048036038101906103d09190611e6f565b610a5d565b6040516103e291906125c0565b60405180910390f35b6103f3610aa5565b005b6103fd610b2d565b60405161040a91906125c0565b60405180910390f35b61041b610b33565b005b61043760048036038101906104329190611f5c565b610bdb565b005b610441610cb2565b60405161044e919061232d565b60405180910390f35b610471600480360381019061046c9190611fdc565b610cdc565b005b61047b610d24565b604051610488919061237e565b60405180910390f35b6104ab60048036038101906104a69190611f9c565b610db6565b005b6104c760048036038101906104c29190611f9c565b610f16565b6040516104d49190612348565b60405180910390f35b6104f760048036038101906104f29190611f9c565b611001565b6040516105049190612348565b60405180910390f35b61051561101f565b005b610531600480360381019061052c9190611ec9565b6110a4565b60405161053e91906125c0565b60405180910390f35b61054f61112b565b60405161055c9190612363565b60405180910390f35b61057f600480360381019061057a9190611e6f565b611151565b005b61059b60048036038101906105969190611e6f565b611249565b005b6105b760048036038101906105b29190611fdc565b611309565b6040516105c491906125c0565b60405180910390f35b6060600380546105dc906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610608906127e5565b80156106555780601f1061062a57610100808354040283529160200191610655565b820191906000526020600020905b81548152906001019060200180831161063857829003601f168201915b5050505050905090565b60095481565b600061067961067261136b565b8484611373565b6001905092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006106c084848461153e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061070b61136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561078b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610782906124a0565b60405180910390fd5b61079f8561079761136b565b858403611373565b60019150509392505050565b60006012905090565b600a60009054906101000a900460ff1681565b60006108696107d461136b565b8484600160006107e261136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108649190612612565b611373565b6001905092915050565b600b6020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109305750600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61096f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096690612540565b60405180910390fd5b61097982826117bf565b5050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6109a561136b565b73ffffffffffffffffffffffffffffffffffffffff166109c3610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906124c0565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aad61136b565b73ffffffffffffffffffffffffffffffffffffffff16610acb610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906124c0565b60405180910390fd5b610b2b600061191f565b565b60085481565b610b3b61136b565b73ffffffffffffffffffffffffffffffffffffffff16610b59610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906124c0565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610be361136b565b73ffffffffffffffffffffffffffffffffffffffff16610c01610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906124c0565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60005b82829050811015610d1f57610d0c838383818110610d0057610cff6128ed565b5b905060200201356119e5565b8080610d1790612817565b915050610cdf565b505050565b606060048054610d33906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5f906127e5565b8015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e5b5750600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906123e0565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff90612560565b60405180910390fd5b610f128282611b7b565b5050565b60008060016000610f2561136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990612580565b60405180910390fd5b610ff6610fed61136b565b85858403611373565b600191505092915050565b600061101561100e61136b565b848461153e565b6001905092915050565b61102761136b565b73ffffffffffffffffffffffffffffffffffffffff16611045610cb2565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906124c0565b60405180910390fd5b42600881905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61115961136b565b73ffffffffffffffffffffffffffffffffffffffff16611177610cb2565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906124c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612400565b60405180910390fd5b6112468161191f565b50565b61125161136b565b73ffffffffffffffffffffffffffffffffffffffff1661126f610cb2565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906124c0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000905060005b8484905081101561136057611340858583818110611334576113336128ed565b5b90506020020135611d52565b8261134b9190612612565b9150808061135890612817565b915050611313565b508091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90612520565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90612420565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161153191906125c0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590612500565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611615906123a0565b60405180910390fd5b611629838383611dbb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690612460565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117429190612612565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117a691906125c0565b60405180910390a36117b9848484611dc0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906125a0565b60405180910390fd5b61183b60008383611dbb565b806002600082825461184d9190612612565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a29190612612565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190791906125c0565b60405180910390a361191b60008383611dc0565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff16611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90612480565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611aa691906125c0565b602060405180830381600087803b158015611ac057600080fd5b505af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190611e9c565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590612440565b60405180910390fd5b611b6033611b5b83611d52565b6117bf565b42600b60008381526020019081526020016000208190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be2906124e0565b60405180910390fd5b611bf782600083611dbb565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906123c0565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611cd491906126f3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3991906125c0565b60405180910390a3611d4d83600084611dc0565b505050565b600062015180600854600b6000858152602001908152602001600020541015611d7d57600854611d92565b600b6000848152602001908152602001600020545b42611d9d91906126f3565b600954611daa9190612699565b611db49190612668565b9050919050565b505050565b505050565b600081359050611dd481612e13565b92915050565b600081519050611de981612e13565b92915050565b60008083601f840112611e0557611e04612921565b5b8235905067ffffffffffffffff811115611e2257611e2161291c565b5b602083019150836020820283011115611e3e57611e3d612926565b5b9250929050565b600081359050611e5481612e2a565b92915050565b600081359050611e6981612e41565b92915050565b600060208284031215611e8557611e84612930565b5b6000611e9384828501611dc5565b91505092915050565b600060208284031215611eb257611eb1612930565b5b6000611ec084828501611dda565b91505092915050565b60008060408385031215611ee057611edf612930565b5b6000611eee85828601611dc5565b9250506020611eff85828601611dc5565b9150509250929050565b600080600060608486031215611f2257611f21612930565b5b6000611f3086828701611dc5565b9350506020611f4186828701611dc5565b9250506040611f5286828701611e5a565b9150509250925092565b60008060408385031215611f7357611f72612930565b5b6000611f8185828601611dc5565b9250506020611f9285828601611e45565b9150509250929050565b60008060408385031215611fb357611fb2612930565b5b6000611fc185828601611dc5565b9250506020611fd285828601611e5a565b9150509250929050565b60008060208385031215611ff357611ff2612930565b5b600083013567ffffffffffffffff8111156120115761201061292b565b5b61201d85828601611def565b92509250509250929050565b60006020828403121561203f5761203e612930565b5b600061204d84828501611e5a565b91505092915050565b61205f81612727565b82525050565b61206e81612739565b82525050565b61207d8161277c565b82525050565b600061208e826125f6565b6120988185612601565b93506120a88185602086016127b2565b6120b181612935565b840191505092915050565b60006120c9602383612601565b91506120d482612946565b604082019050919050565b60006120ec602283612601565b91506120f782612995565b604082019050919050565b600061210f602683612601565b915061211a826129e4565b604082019050919050565b6000612132602683612601565b915061213d82612a33565b604082019050919050565b6000612155602283612601565b915061216082612a82565b604082019050919050565b6000612178601c83612601565b915061218382612ad1565b602082019050919050565b600061219b602683612601565b91506121a682612afa565b604082019050919050565b60006121be602583612601565b91506121c982612b49565b604082019050919050565b60006121e1602883612601565b91506121ec82612b98565b604082019050919050565b6000612204602083612601565b915061220f82612be7565b602082019050919050565b6000612227602183612601565b915061223282612c10565b604082019050919050565b600061224a602583612601565b915061225582612c5f565b604082019050919050565b600061226d602483612601565b915061227882612cae565b604082019050919050565b6000612290602683612601565b915061229b82612cfd565b604082019050919050565b60006122b3602583612601565b91506122be82612d4c565b604082019050919050565b60006122d6602583612601565b91506122e182612d9b565b604082019050919050565b60006122f9601f83612601565b915061230482612dea565b602082019050919050565b61231881612765565b82525050565b6123278161276f565b82525050565b60006020820190506123426000830184612056565b92915050565b600060208201905061235d6000830184612065565b92915050565b60006020820190506123786000830184612074565b92915050565b600060208201905081810360008301526123988184612083565b905092915050565b600060208201905081810360008301526123b9816120bc565b9050919050565b600060208201905081810360008301526123d9816120df565b9050919050565b600060208201905081810360008301526123f981612102565b9050919050565b6000602082019050818103600083015261241981612125565b9050919050565b6000602082019050818103600083015261243981612148565b9050919050565b600060208201905081810360008301526124598161216b565b9050919050565b600060208201905081810360008301526124798161218e565b9050919050565b60006020820190508181036000830152612499816121b1565b9050919050565b600060208201905081810360008301526124b9816121d4565b9050919050565b600060208201905081810360008301526124d9816121f7565b9050919050565b600060208201905081810360008301526124f98161221a565b9050919050565b600060208201905081810360008301526125198161223d565b9050919050565b6000602082019050818103600083015261253981612260565b9050919050565b6000602082019050818103600083015261255981612283565b9050919050565b60006020820190508181036000830152612579816122a6565b9050919050565b60006020820190508181036000830152612599816122c9565b9050919050565b600060208201905081810360008301526125b9816122ec565b9050919050565b60006020820190506125d5600083018461230f565b92915050565b60006020820190506125f0600083018461231e565b92915050565b600081519050919050565b600082825260208201905092915050565b600061261d82612765565b915061262883612765565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561265d5761265c612860565b5b828201905092915050565b600061267382612765565b915061267e83612765565b92508261268e5761268d61288f565b5b828204905092915050565b60006126a482612765565b91506126af83612765565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126e8576126e7612860565b5b828202905092915050565b60006126fe82612765565b915061270983612765565b92508282101561271c5761271b612860565b5b828203905092915050565b600061273282612745565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127878261278e565b9050919050565b6000612799826127a0565b9050919050565b60006127ab82612745565b9050919050565b60005b838110156127d05780820151818401526020810190506127b5565b838111156127df576000848401525b50505050565b600060028204905060018216806127fd57607f821691505b60208210811415612811576128106128be565b5b50919050565b600061282282612765565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561285557612854612860565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420617574686f72697a656420746f206275726e204260008201527f616e616e617a0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f206e6f74206f776e207468697320436f6f6c2041706500000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f436c61696d696e67202442616e616e617a2069732063757272656e746c79207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420617574686f72697a656420746f206d696e74204260008201527f616e616e617a0000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206275726e20736f6d656f6e6520656c7365277320426160008201527f6e616e617a000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612e1c81612727565b8114612e2757600080fd5b50565b612e3381612739565b8114612e3e57600080fd5b50565b612e4a81612765565b8114612e5557600080fd5b5056fea26469706673582212201030ad033794e80242adecee33c94d8828708e0a60a364f730e44d7d651e86a364736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806378e9792511610104578063a457c2d7116100a2578063df84e51111610071578063df84e51114610547578063f2fde38b14610565578063f9a4e53614610581578063fbfe0efb1461059d576101da565b8063a457c2d7146104ad578063a9059cbb146104dd578063bea4ebdc1461050d578063dd62ed3e14610517576101da565b80638da5cb5b116100de5780638da5cb5b14610439578063925489a81461045757806395d89b41146104735780639dc29fac14610491576101da565b806378e97925146103f55780638010fc4514610413578063897819121461041d576101da565b8063375c6d031161017c5780634120657a1161014b5780634120657a1461036f578063564a662b1461039f57806370a08231146103bb578063715018a6146103eb576101da565b8063375c6d03146102d557806339509351146102f35780633d3728b51461032357806340c10f1914610353576101da565b806318160ddd116101b857806318160ddd1461024b57806319c2b8ff1461026957806323b872dd14610287578063313ce567146102b7576101da565b806306fdde03146101df57806308f09a89146101fd578063095ea7b31461021b575b600080fd5b6101e76105cd565b6040516101f4919061237e565b60405180910390f35b61020561065f565b60405161021291906125c0565b60405180910390f35b61023560048036038101906102309190611f9c565b610665565b6040516102429190612348565b60405180910390f35b610253610683565b60405161026091906125c0565b60405180910390f35b61027161068d565b60405161027e919061232d565b60405180910390f35b6102a1600480360381019061029c9190611f09565b6106b3565b6040516102ae9190612348565b60405180910390f35b6102bf6107ab565b6040516102cc91906125db565b60405180910390f35b6102dd6107b4565b6040516102ea9190612348565b60405180910390f35b61030d60048036038101906103089190611f9c565b6107c7565b60405161031a9190612348565b60405180910390f35b61033d60048036038101906103389190612029565b610873565b60405161034a91906125c0565b60405180910390f35b61036d60048036038101906103689190611f9c565b61088b565b005b61038960048036038101906103849190611e6f565b61097d565b6040516103969190612348565b60405180910390f35b6103b960048036038101906103b49190611e6f565b61099d565b005b6103d560048036038101906103d09190611e6f565b610a5d565b6040516103e291906125c0565b60405180910390f35b6103f3610aa5565b005b6103fd610b2d565b60405161040a91906125c0565b60405180910390f35b61041b610b33565b005b61043760048036038101906104329190611f5c565b610bdb565b005b610441610cb2565b60405161044e919061232d565b60405180910390f35b610471600480360381019061046c9190611fdc565b610cdc565b005b61047b610d24565b604051610488919061237e565b60405180910390f35b6104ab60048036038101906104a69190611f9c565b610db6565b005b6104c760048036038101906104c29190611f9c565b610f16565b6040516104d49190612348565b60405180910390f35b6104f760048036038101906104f29190611f9c565b611001565b6040516105049190612348565b60405180910390f35b61051561101f565b005b610531600480360381019061052c9190611ec9565b6110a4565b60405161053e91906125c0565b60405180910390f35b61054f61112b565b60405161055c9190612363565b60405180910390f35b61057f600480360381019061057a9190611e6f565b611151565b005b61059b60048036038101906105969190611e6f565b611249565b005b6105b760048036038101906105b29190611fdc565b611309565b6040516105c491906125c0565b60405180910390f35b6060600380546105dc906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610608906127e5565b80156106555780601f1061062a57610100808354040283529160200191610655565b820191906000526020600020905b81548152906001019060200180831161063857829003601f168201915b5050505050905090565b60095481565b600061067961067261136b565b8484611373565b6001905092915050565b6000600254905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006106c084848461153e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061070b61136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561078b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610782906124a0565b60405180910390fd5b61079f8561079761136b565b858403611373565b60019150509392505050565b60006012905090565b600a60009054906101000a900460ff1681565b60006108696107d461136b565b8484600160006107e261136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108649190612612565b611373565b6001905092915050565b600b6020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109305750600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61096f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096690612540565b60405180910390fd5b61097982826117bf565b5050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6109a561136b565b73ffffffffffffffffffffffffffffffffffffffff166109c3610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906124c0565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aad61136b565b73ffffffffffffffffffffffffffffffffffffffff16610acb610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906124c0565b60405180910390fd5b610b2b600061191f565b565b60085481565b610b3b61136b565b73ffffffffffffffffffffffffffffffffffffffff16610b59610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba6906124c0565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b610be361136b565b73ffffffffffffffffffffffffffffffffffffffff16610c01610cb2565b73ffffffffffffffffffffffffffffffffffffffff1614610c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4e906124c0565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60005b82829050811015610d1f57610d0c838383818110610d0057610cff6128ed565b5b905060200201356119e5565b8080610d1790612817565b915050610cdf565b505050565b606060048054610d33906127e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5f906127e5565b8015610dac5780601f10610d8157610100808354040283529160200191610dac565b820191906000526020600020905b815481529060010190602001808311610d8f57829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e5b5750600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906123e0565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff90612560565b60405180910390fd5b610f128282611b7b565b5050565b60008060016000610f2561136b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990612580565b60405180910390fd5b610ff6610fed61136b565b85858403611373565b600191505092915050565b600061101561100e61136b565b848461153e565b6001905092915050565b61102761136b565b73ffffffffffffffffffffffffffffffffffffffff16611045610cb2565b73ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906124c0565b60405180910390fd5b42600881905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61115961136b565b73ffffffffffffffffffffffffffffffffffffffff16611177610cb2565b73ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906124c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490612400565b60405180910390fd5b6112468161191f565b50565b61125161136b565b73ffffffffffffffffffffffffffffffffffffffff1661126f610cb2565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906124c0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000905060005b8484905081101561136057611340858583818110611334576113336128ed565b5b90506020020135611d52565b8261134b9190612612565b9150808061135890612817565b915050611313565b508091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da90612520565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90612420565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161153191906125c0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590612500565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611615906123a0565b60405180910390fd5b611629838383611dbb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690612460565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117429190612612565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117a691906125c0565b60405180910390a36117b9848484611dc0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906125a0565b60405180910390fd5b61183b60008383611dbb565b806002600082825461184d9190612612565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a29190612612565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190791906125c0565b60405180910390a361191b60008383611dc0565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff16611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90612480565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611aa691906125c0565b602060405180830381600087803b158015611ac057600080fd5b505af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190611e9c565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590612440565b60405180910390fd5b611b6033611b5b83611d52565b6117bf565b42600b60008381526020019081526020016000208190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be2906124e0565b60405180910390fd5b611bf782600083611dbb565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906123c0565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611cd491906126f3565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3991906125c0565b60405180910390a3611d4d83600084611dc0565b505050565b600062015180600854600b6000858152602001908152602001600020541015611d7d57600854611d92565b600b6000848152602001908152602001600020545b42611d9d91906126f3565b600954611daa9190612699565b611db49190612668565b9050919050565b505050565b505050565b600081359050611dd481612e13565b92915050565b600081519050611de981612e13565b92915050565b60008083601f840112611e0557611e04612921565b5b8235905067ffffffffffffffff811115611e2257611e2161291c565b5b602083019150836020820283011115611e3e57611e3d612926565b5b9250929050565b600081359050611e5481612e2a565b92915050565b600081359050611e6981612e41565b92915050565b600060208284031215611e8557611e84612930565b5b6000611e9384828501611dc5565b91505092915050565b600060208284031215611eb257611eb1612930565b5b6000611ec084828501611dda565b91505092915050565b60008060408385031215611ee057611edf612930565b5b6000611eee85828601611dc5565b9250506020611eff85828601611dc5565b9150509250929050565b600080600060608486031215611f2257611f21612930565b5b6000611f3086828701611dc5565b9350506020611f4186828701611dc5565b9250506040611f5286828701611e5a565b9150509250925092565b60008060408385031215611f7357611f72612930565b5b6000611f8185828601611dc5565b9250506020611f9285828601611e45565b9150509250929050565b60008060408385031215611fb357611fb2612930565b5b6000611fc185828601611dc5565b9250506020611fd285828601611e5a565b9150509250929050565b60008060208385031215611ff357611ff2612930565b5b600083013567ffffffffffffffff8111156120115761201061292b565b5b61201d85828601611def565b92509250509250929050565b60006020828403121561203f5761203e612930565b5b600061204d84828501611e5a565b91505092915050565b61205f81612727565b82525050565b61206e81612739565b82525050565b61207d8161277c565b82525050565b600061208e826125f6565b6120988185612601565b93506120a88185602086016127b2565b6120b181612935565b840191505092915050565b60006120c9602383612601565b91506120d482612946565b604082019050919050565b60006120ec602283612601565b91506120f782612995565b604082019050919050565b600061210f602683612601565b915061211a826129e4565b604082019050919050565b6000612132602683612601565b915061213d82612a33565b604082019050919050565b6000612155602283612601565b915061216082612a82565b604082019050919050565b6000612178601c83612601565b915061218382612ad1565b602082019050919050565b600061219b602683612601565b91506121a682612afa565b604082019050919050565b60006121be602583612601565b91506121c982612b49565b604082019050919050565b60006121e1602883612601565b91506121ec82612b98565b604082019050919050565b6000612204602083612601565b915061220f82612be7565b602082019050919050565b6000612227602183612601565b915061223282612c10565b604082019050919050565b600061224a602583612601565b915061225582612c5f565b604082019050919050565b600061226d602483612601565b915061227882612cae565b604082019050919050565b6000612290602683612601565b915061229b82612cfd565b604082019050919050565b60006122b3602583612601565b91506122be82612d4c565b604082019050919050565b60006122d6602583612601565b91506122e182612d9b565b604082019050919050565b60006122f9601f83612601565b915061230482612dea565b602082019050919050565b61231881612765565b82525050565b6123278161276f565b82525050565b60006020820190506123426000830184612056565b92915050565b600060208201905061235d6000830184612065565b92915050565b60006020820190506123786000830184612074565b92915050565b600060208201905081810360008301526123988184612083565b905092915050565b600060208201905081810360008301526123b9816120bc565b9050919050565b600060208201905081810360008301526123d9816120df565b9050919050565b600060208201905081810360008301526123f981612102565b9050919050565b6000602082019050818103600083015261241981612125565b9050919050565b6000602082019050818103600083015261243981612148565b9050919050565b600060208201905081810360008301526124598161216b565b9050919050565b600060208201905081810360008301526124798161218e565b9050919050565b60006020820190508181036000830152612499816121b1565b9050919050565b600060208201905081810360008301526124b9816121d4565b9050919050565b600060208201905081810360008301526124d9816121f7565b9050919050565b600060208201905081810360008301526124f98161221a565b9050919050565b600060208201905081810360008301526125198161223d565b9050919050565b6000602082019050818103600083015261253981612260565b9050919050565b6000602082019050818103600083015261255981612283565b9050919050565b60006020820190508181036000830152612579816122a6565b9050919050565b60006020820190508181036000830152612599816122c9565b9050919050565b600060208201905081810360008301526125b9816122ec565b9050919050565b60006020820190506125d5600083018461230f565b92915050565b60006020820190506125f0600083018461231e565b92915050565b600081519050919050565b600082825260208201905092915050565b600061261d82612765565b915061262883612765565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561265d5761265c612860565b5b828201905092915050565b600061267382612765565b915061267e83612765565b92508261268e5761268d61288f565b5b828204905092915050565b60006126a482612765565b91506126af83612765565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126e8576126e7612860565b5b828202905092915050565b60006126fe82612765565b915061270983612765565b92508282101561271c5761271b612860565b5b828203905092915050565b600061273282612745565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127878261278e565b9050919050565b6000612799826127a0565b9050919050565b60006127ab82612745565b9050919050565b60005b838110156127d05780820151818401526020810190506127b5565b838111156127df576000848401525b50505050565b600060028204905060018216806127fd57607f821691505b60208210811415612811576128106128be565b5b50919050565b600061282282612765565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561285557612854612860565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420617574686f72697a656420746f206275726e204260008201527f616e616e617a0000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f206e6f74206f776e207468697320436f6f6c2041706500000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f436c61696d696e67202442616e616e617a2069732063757272656e746c79207060008201527f6175736564000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206e6f7420617574686f72697a656420746f206d696e74204260008201527f616e616e617a0000000000000000000000000000000000000000000000000000602082015250565b7f596f752063616e2774206275726e20736f6d656f6e6520656c7365277320426160008201527f6e616e617a000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612e1c81612727565b8114612e2757600080fd5b50565b612e3381612739565b8114612e3e57600080fd5b50565b612e4a81612765565b8114612e5557600080fd5b5056fea26469706673582212201030ad033794e80242adecee33c94d8828708e0a60a364f730e44d7d651e86a364736f6c63430008070033

Deployed Bytecode Sourcemap

236:3167:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2181:100:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;426:37:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4348:169:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3301:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;355:31:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4999:492:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3143:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;472:32:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5900:215:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;511:44:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1203:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;564:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1561:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3472:127:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:5;;;:::i;:::-;;395:24:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3310:90;;;:::i;:::-;;1420:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1063:87:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2629:150:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2400:104:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;901:294:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6618:413:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3812:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2138:96:0;;;:::i;:::-;;4050:151:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;317:31:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1699:142:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2787:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2181:100:2;2235:13;2268:5;2261:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2181:100;:::o;426:37:0:-;;;;:::o;4348:169:2:-;4431:4;4448:39;4457:12;:10;:12::i;:::-;4471:7;4480:6;4448:8;:39::i;:::-;4505:4;4498:11;;4348:169;;;;:::o;3301:108::-;3362:7;3389:12;;3382:19;;3301:108;:::o;355:31:0:-;;;;;;;;;;;;;:::o;4999:492:2:-;5139:4;5156:36;5166:6;5174:9;5185:6;5156:9;:36::i;:::-;5205:24;5232:11;:19;5244:6;5232:19;;;;;;;;;;;;;;;:33;5252:12;:10;:12::i;:::-;5232:33;;;;;;;;;;;;;;;;5205:60;;5304:6;5284:16;:26;;5276:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5391:57;5400:6;5408:12;:10;:12::i;:::-;5441:6;5422:16;:25;5391:8;:57::i;:::-;5479:4;5472:11;;;4999:492;;;;;:::o;3143:93::-;3201:5;3226:2;3219:9;;3143:93;:::o;472:32:0:-;;;;;;;;;;;;;:::o;5900:215:2:-;5988:4;6005:80;6014:12;:10;:12::i;:::-;6028:7;6074:10;6037:11;:25;6049:12;:10;:12::i;:::-;6037:25;;;;;;;;;;;;;;;:34;6063:7;6037:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6005:8;:80::i;:::-;6103:4;6096:11;;5900:215;;;;:::o;511:44:0:-;;;;;;;;;;;;;;;;;:::o;1203:209::-;1286:16;;;;;;;;;;;1272:30;;:10;:30;;;:62;;;;1306:16;:28;1323:10;1306:28;;;;;;;;;;;;;;;;;;;;;;;;;1272:62;1264:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;1388:16;1394:2;1398:5;1388;:16::i;:::-;1203:209;;:::o;564:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;1561:130::-;1294:12:5;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1666:17:0::1;1647:16;;:36;;;;;;;;;;;;;;;;;;1561:130:::0;:::o;3472:127:2:-;3546:7;3573:9;:18;3583:7;3573:18;;;;;;;;;;;;;;;;3566:25;;3472:127;;;:::o;1714:103:5:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;395:24:0:-;;;;:::o;3310:90::-;1294:12:5;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3380:12:0::1;;;;;;;;;;;3379:13;3364:12;;:28;;;;;;;;;;;;;;;;;;3310:90::o:0;1420:133::-;1294:12:5;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1538:7:0::1;1509:16;:26;1526:8;1509:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;1420:133:::0;;:::o;1063:87:5:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;2629:150:0:-;2696:9;2692:80;2715:3;;:10;;2711:1;:14;2692:80;;;2746:14;2753:3;;2757:1;2753:6;;;;;;;:::i;:::-;;;;;;;;2746;:14::i;:::-;2727:3;;;;;:::i;:::-;;;;2692:80;;;;2629:150;;:::o;2400:104:2:-;2456:13;2489:7;2482:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2400:104;:::o;901:294:0:-;987:16;;;;;;;;;;;973:30;;:10;:30;;;:62;;;;1007:16;:28;1024:10;1007:28;;;;;;;;;;;;;;;;;;;;;;;;;973:62;965:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;1111:4;1097:18;;:10;:18;;;1089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1168:19;1174:4;1180:6;1168:5;:19::i;:::-;901:294;;:::o;6618:413:2:-;6711:4;6728:24;6755:11;:25;6767:12;:10;:12::i;:::-;6755:25;;;;;;;;;;;;;;;:34;6781:7;6755:34;;;;;;;;;;;;;;;;6728:61;;6828:15;6808:16;:35;;6800:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6921:67;6930:12;:10;:12::i;:::-;6944:7;6972:15;6953:16;:34;6921:8;:67::i;:::-;7019:4;7012:11;;;6618:413;;;;:::o;3812:175::-;3898:4;3915:42;3925:12;:10;:12::i;:::-;3939:9;3950:6;3915:9;:42::i;:::-;3975:4;3968:11;;3812:175;;;;:::o;2138:96:0:-;1294:12:5;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2211:15:0::1;2199:9;:27;;;;2138:96::o:0;4050:151:2:-;4139:7;4166:11;:18;4178:5;4166:18;;;;;;;;;;;;;;;:27;4185:7;4166:27;;;;;;;;;;;;;;;;4159:34;;4050:151;;;;:::o;317:31:0:-;;;;;;;;;;;;;:::o;1972:201:5:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;1699:142:0:-;1294:12:5;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1813:19:0::1;1786:11;;:47;;;;;;;;;;;;;;;;;;1699:142:::0;:::o;2787:277::-;2860:7;2879:24;2906:1;2879:28;;2922:9;2918:105;2941:3;;:10;;2937:1;:14;2918:105;;;2992:19;3004:3;;3008:1;3004:6;;;;;;;:::i;:::-;;;;;;;;2992:11;:19::i;:::-;2972:39;;;;;:::i;:::-;;;2953:3;;;;;:::i;:::-;;;;2918:105;;;;3040:16;3033:23;;;2787:277;;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;10302:380:2:-;10455:1;10438:19;;:5;:19;;;;10430:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10536:1;10517:21;;:7;:21;;;;10509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10620:6;10590:11;:18;10602:5;10590:18;;;;;;;;;;;;;;;:27;10609:7;10590:27;;;;;;;;;;;;;;;:36;;;;10658:7;10642:32;;10651:5;10642:32;;;10667:6;10642:32;;;;;;:::i;:::-;;;;;;;;10302:380;;;:::o;7521:733::-;7679:1;7661:20;;:6;:20;;;;7653:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7763:1;7742:23;;:9;:23;;;;7734:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7818:47;7839:6;7847:9;7858:6;7818:20;:47::i;:::-;7878:21;7902:9;:17;7912:6;7902:17;;;;;;;;;;;;;;;;7878:41;;7955:6;7938:13;:23;;7930:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8076:6;8060:13;:22;8040:9;:17;8050:6;8040:17;;;;;;;;;;;;;;;:42;;;;8128:6;8104:9;:20;8114:9;8104:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8169:9;8152:35;;8161:6;8152:35;;;8180:6;8152:35;;;;;;:::i;:::-;;;;;;;;8200:46;8220:6;8228:9;8239:6;8200:19;:46::i;:::-;7642:612;7521:733;;;:::o;8541:399::-;8644:1;8625:21;;:7;:21;;;;8617:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8695:49;8724:1;8728:7;8737:6;8695:20;:49::i;:::-;8773:6;8757:12;;:22;;;;;;;:::i;:::-;;;;;;;;8812:6;8790:9;:18;8800:7;8790:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8855:7;8834:37;;8851:1;8834:37;;;8864:6;8834:37;;;;;;:::i;:::-;;;;;;;;8884:48;8912:1;8916:7;8925:6;8884:19;:48::i;:::-;8541:399;;:::o;2333:191:5:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;2286:291:0:-;2339:12;;;;;;;;;;;2331:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2439:10;2412:37;;:11;;;;;;;;;;;:19;;;2432:2;2412:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;;2404:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2493:34;2499:10;2511:15;2523:2;2511:11;:15::i;:::-;2493:5;:34::i;:::-;2554:15;2538:9;:13;2548:2;2538:13;;;;;;;;;;;:31;;;;2286:291;:::o;9273:591:2:-;9376:1;9357:21;;:7;:21;;;;9349:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9429:49;9450:7;9467:1;9471:6;9429:20;:49::i;:::-;9491:22;9516:9;:18;9526:7;9516:18;;;;;;;;;;;;;;;;9491:43;;9571:6;9553:14;:24;;9545:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9690:6;9673:14;:23;9652:9;:18;9662:7;9652:18;;;;;;;;;;;;;;;:44;;;;9734:6;9718:12;;:22;;;;;;;:::i;:::-;;;;;;;;9784:1;9758:37;;9767:7;9758:37;;;9788:6;9758:37;;;;;;:::i;:::-;;;;;;;;9808:48;9828:7;9845:1;9849:6;9808:19;:48::i;:::-;9338:526;9273:591;;:::o;3072:188:0:-;3127:7;3246:6;3205:9;;3188;:13;3198:2;3188:13;;;;;;;;;;;;:26;;:54;;3233:9;;3188:54;;;3217:9;:13;3227:2;3217:13;;;;;;;;;;;;3188:54;3169:15;:74;;;;:::i;:::-;3154:11;;:90;;;;:::i;:::-;:98;;;;:::i;:::-;3147:105;;3072:188;;;:::o;11282:125:2:-;;;;:::o;12011:124::-;;;;:::o;7:139:7:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;318:568::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:122;;459:79;;:::i;:::-;418:122;572:6;559:20;549:30;;602:18;594:6;591:30;588:117;;;624:79;;:::i;:::-;588:117;738:4;730:6;726:17;714:29;;792:3;784:4;776:6;772:17;762:8;758:32;755:41;752:128;;;799:79;;:::i;:::-;752:128;318:568;;;;;:::o;892:133::-;935:5;973:6;960:20;951:29;;989:30;1013:5;989:30;:::i;:::-;892:133;;;;:::o;1031:139::-;1077:5;1115:6;1102:20;1093:29;;1131:33;1158:5;1131:33;:::i;:::-;1031:139;;;;:::o;1176:329::-;1235:6;1284:2;1272:9;1263:7;1259:23;1255:32;1252:119;;;1290:79;;:::i;:::-;1252:119;1410:1;1435:53;1480:7;1471:6;1460:9;1456:22;1435:53;:::i;:::-;1425:63;;1381:117;1176:329;;;;:::o;1511:351::-;1581:6;1630:2;1618:9;1609:7;1605:23;1601:32;1598:119;;;1636:79;;:::i;:::-;1598:119;1756:1;1781:64;1837:7;1828:6;1817:9;1813:22;1781:64;:::i;:::-;1771:74;;1727:128;1511:351;;;;:::o;1868:474::-;1936:6;1944;1993:2;1981:9;1972:7;1968:23;1964:32;1961:119;;;1999:79;;:::i;:::-;1961:119;2119:1;2144:53;2189:7;2180:6;2169:9;2165:22;2144:53;:::i;:::-;2134:63;;2090:117;2246:2;2272:53;2317:7;2308:6;2297:9;2293:22;2272:53;:::i;:::-;2262:63;;2217:118;1868:474;;;;;:::o;2348:619::-;2425:6;2433;2441;2490:2;2478:9;2469:7;2465:23;2461:32;2458:119;;;2496:79;;:::i;:::-;2458:119;2616:1;2641:53;2686:7;2677:6;2666:9;2662:22;2641:53;:::i;:::-;2631:63;;2587:117;2743:2;2769:53;2814:7;2805:6;2794:9;2790:22;2769:53;:::i;:::-;2759:63;;2714:118;2871:2;2897:53;2942:7;2933:6;2922:9;2918:22;2897:53;:::i;:::-;2887:63;;2842:118;2348:619;;;;;:::o;2973:468::-;3038:6;3046;3095:2;3083:9;3074:7;3070:23;3066:32;3063:119;;;3101:79;;:::i;:::-;3063:119;3221:1;3246:53;3291:7;3282:6;3271:9;3267:22;3246:53;:::i;:::-;3236:63;;3192:117;3348:2;3374:50;3416:7;3407:6;3396:9;3392:22;3374:50;:::i;:::-;3364:60;;3319:115;2973:468;;;;;:::o;3447:474::-;3515:6;3523;3572:2;3560:9;3551:7;3547:23;3543:32;3540:119;;;3578:79;;:::i;:::-;3540:119;3698:1;3723:53;3768:7;3759:6;3748:9;3744:22;3723:53;:::i;:::-;3713:63;;3669:117;3825:2;3851:53;3896:7;3887:6;3876:9;3872:22;3851:53;:::i;:::-;3841:63;;3796:118;3447:474;;;;;:::o;3927:559::-;4013:6;4021;4070:2;4058:9;4049:7;4045:23;4041:32;4038:119;;;4076:79;;:::i;:::-;4038:119;4224:1;4213:9;4209:17;4196:31;4254:18;4246:6;4243:30;4240:117;;;4276:79;;:::i;:::-;4240:117;4389:80;4461:7;4452:6;4441:9;4437:22;4389:80;:::i;:::-;4371:98;;;;4167:312;3927:559;;;;;:::o;4492:329::-;4551:6;4600:2;4588:9;4579:7;4575:23;4571:32;4568:119;;;4606:79;;:::i;:::-;4568:119;4726:1;4751:53;4796:7;4787:6;4776:9;4772:22;4751:53;:::i;:::-;4741:63;;4697:117;4492:329;;;;:::o;4827:118::-;4914:24;4932:5;4914:24;:::i;:::-;4909:3;4902:37;4827:118;;:::o;4951:109::-;5032:21;5047:5;5032:21;:::i;:::-;5027:3;5020:34;4951:109;;:::o;5066:169::-;5172:56;5222:5;5172:56;:::i;:::-;5167:3;5160:69;5066:169;;:::o;5241:364::-;5329:3;5357:39;5390:5;5357:39;:::i;:::-;5412:71;5476:6;5471:3;5412:71;:::i;:::-;5405:78;;5492:52;5537:6;5532:3;5525:4;5518:5;5514:16;5492:52;:::i;:::-;5569:29;5591:6;5569:29;:::i;:::-;5564:3;5560:39;5553:46;;5333:272;5241:364;;;;:::o;5611:366::-;5753:3;5774:67;5838:2;5833:3;5774:67;:::i;:::-;5767:74;;5850:93;5939:3;5850:93;:::i;:::-;5968:2;5963:3;5959:12;5952:19;;5611:366;;;:::o;5983:::-;6125:3;6146:67;6210:2;6205:3;6146:67;:::i;:::-;6139:74;;6222:93;6311:3;6222:93;:::i;:::-;6340:2;6335:3;6331:12;6324:19;;5983:366;;;:::o;6355:::-;6497:3;6518:67;6582:2;6577:3;6518:67;:::i;:::-;6511:74;;6594:93;6683:3;6594:93;:::i;:::-;6712:2;6707:3;6703:12;6696:19;;6355:366;;;:::o;6727:::-;6869:3;6890:67;6954:2;6949:3;6890:67;:::i;:::-;6883:74;;6966:93;7055:3;6966:93;:::i;:::-;7084:2;7079:3;7075:12;7068:19;;6727:366;;;:::o;7099:::-;7241:3;7262:67;7326:2;7321:3;7262:67;:::i;:::-;7255:74;;7338:93;7427:3;7338:93;:::i;:::-;7456:2;7451:3;7447:12;7440:19;;7099:366;;;:::o;7471:::-;7613:3;7634:67;7698:2;7693:3;7634:67;:::i;:::-;7627:74;;7710:93;7799:3;7710:93;:::i;:::-;7828:2;7823:3;7819:12;7812:19;;7471:366;;;:::o;7843:::-;7985:3;8006:67;8070:2;8065:3;8006:67;:::i;:::-;7999:74;;8082:93;8171:3;8082:93;:::i;:::-;8200:2;8195:3;8191:12;8184:19;;7843:366;;;:::o;8215:::-;8357:3;8378:67;8442:2;8437:3;8378:67;:::i;:::-;8371:74;;8454:93;8543:3;8454:93;:::i;:::-;8572:2;8567:3;8563:12;8556:19;;8215:366;;;:::o;8587:::-;8729:3;8750:67;8814:2;8809:3;8750:67;:::i;:::-;8743:74;;8826:93;8915:3;8826:93;:::i;:::-;8944:2;8939:3;8935:12;8928:19;;8587:366;;;:::o;8959:::-;9101:3;9122:67;9186:2;9181:3;9122:67;:::i;:::-;9115:74;;9198:93;9287:3;9198:93;:::i;:::-;9316:2;9311:3;9307:12;9300:19;;8959:366;;;:::o;9331:::-;9473:3;9494:67;9558:2;9553:3;9494:67;:::i;:::-;9487:74;;9570:93;9659:3;9570:93;:::i;:::-;9688:2;9683:3;9679:12;9672:19;;9331:366;;;:::o;9703:::-;9845:3;9866:67;9930:2;9925:3;9866:67;:::i;:::-;9859:74;;9942:93;10031:3;9942:93;:::i;:::-;10060:2;10055:3;10051:12;10044:19;;9703:366;;;:::o;10075:::-;10217:3;10238:67;10302:2;10297:3;10238:67;:::i;:::-;10231:74;;10314:93;10403:3;10314:93;:::i;:::-;10432:2;10427:3;10423:12;10416:19;;10075:366;;;:::o;10447:::-;10589:3;10610:67;10674:2;10669:3;10610:67;:::i;:::-;10603:74;;10686:93;10775:3;10686:93;:::i;:::-;10804:2;10799:3;10795:12;10788:19;;10447:366;;;:::o;10819:::-;10961:3;10982:67;11046:2;11041:3;10982:67;:::i;:::-;10975:74;;11058:93;11147:3;11058:93;:::i;:::-;11176:2;11171:3;11167:12;11160:19;;10819:366;;;:::o;11191:::-;11333:3;11354:67;11418:2;11413:3;11354:67;:::i;:::-;11347:74;;11430:93;11519:3;11430:93;:::i;:::-;11548:2;11543:3;11539:12;11532:19;;11191:366;;;:::o;11563:::-;11705:3;11726:67;11790:2;11785:3;11726:67;:::i;:::-;11719:74;;11802:93;11891:3;11802:93;:::i;:::-;11920:2;11915:3;11911:12;11904:19;;11563:366;;;:::o;11935:118::-;12022:24;12040:5;12022:24;:::i;:::-;12017:3;12010:37;11935:118;;:::o;12059:112::-;12142:22;12158:5;12142:22;:::i;:::-;12137:3;12130:35;12059:112;;:::o;12177:222::-;12270:4;12308:2;12297:9;12293:18;12285:26;;12321:71;12389:1;12378:9;12374:17;12365:6;12321:71;:::i;:::-;12177:222;;;;:::o;12405:210::-;12492:4;12530:2;12519:9;12515:18;12507:26;;12543:65;12605:1;12594:9;12590:17;12581:6;12543:65;:::i;:::-;12405:210;;;;:::o;12621:260::-;12733:4;12771:2;12760:9;12756:18;12748:26;;12784:90;12871:1;12860:9;12856:17;12847:6;12784:90;:::i;:::-;12621:260;;;;:::o;12887:313::-;13000:4;13038:2;13027:9;13023:18;13015:26;;13087:9;13081:4;13077:20;13073:1;13062:9;13058:17;13051:47;13115:78;13188:4;13179:6;13115:78;:::i;:::-;13107:86;;12887:313;;;;:::o;13206:419::-;13372:4;13410:2;13399:9;13395:18;13387:26;;13459:9;13453:4;13449:20;13445:1;13434:9;13430:17;13423:47;13487:131;13613:4;13487:131;:::i;:::-;13479:139;;13206:419;;;:::o;13631:::-;13797:4;13835:2;13824:9;13820:18;13812:26;;13884:9;13878:4;13874:20;13870:1;13859:9;13855:17;13848:47;13912:131;14038:4;13912:131;:::i;:::-;13904:139;;13631:419;;;:::o;14056:::-;14222:4;14260:2;14249:9;14245:18;14237:26;;14309:9;14303:4;14299:20;14295:1;14284:9;14280:17;14273:47;14337:131;14463:4;14337:131;:::i;:::-;14329:139;;14056:419;;;:::o;14481:::-;14647:4;14685:2;14674:9;14670:18;14662:26;;14734:9;14728:4;14724:20;14720:1;14709:9;14705:17;14698:47;14762:131;14888:4;14762:131;:::i;:::-;14754:139;;14481:419;;;:::o;14906:::-;15072:4;15110:2;15099:9;15095:18;15087:26;;15159:9;15153:4;15149:20;15145:1;15134:9;15130:17;15123:47;15187:131;15313:4;15187:131;:::i;:::-;15179:139;;14906:419;;;:::o;15331:::-;15497:4;15535:2;15524:9;15520:18;15512:26;;15584:9;15578:4;15574:20;15570:1;15559:9;15555:17;15548:47;15612:131;15738:4;15612:131;:::i;:::-;15604:139;;15331:419;;;:::o;15756:::-;15922:4;15960:2;15949:9;15945:18;15937:26;;16009:9;16003:4;15999:20;15995:1;15984:9;15980:17;15973:47;16037:131;16163:4;16037:131;:::i;:::-;16029:139;;15756:419;;;:::o;16181:::-;16347:4;16385:2;16374:9;16370:18;16362:26;;16434:9;16428:4;16424:20;16420:1;16409:9;16405:17;16398:47;16462:131;16588:4;16462:131;:::i;:::-;16454:139;;16181:419;;;:::o;16606:::-;16772:4;16810:2;16799:9;16795:18;16787:26;;16859:9;16853:4;16849:20;16845:1;16834:9;16830:17;16823:47;16887:131;17013:4;16887:131;:::i;:::-;16879:139;;16606:419;;;:::o;17031:::-;17197:4;17235:2;17224:9;17220:18;17212:26;;17284:9;17278:4;17274:20;17270:1;17259:9;17255:17;17248:47;17312:131;17438:4;17312:131;:::i;:::-;17304:139;;17031:419;;;:::o;17456:::-;17622:4;17660:2;17649:9;17645:18;17637:26;;17709:9;17703:4;17699:20;17695:1;17684:9;17680:17;17673:47;17737:131;17863:4;17737:131;:::i;:::-;17729:139;;17456:419;;;:::o;17881:::-;18047:4;18085:2;18074:9;18070:18;18062:26;;18134:9;18128:4;18124:20;18120:1;18109:9;18105:17;18098:47;18162:131;18288:4;18162:131;:::i;:::-;18154:139;;17881:419;;;:::o;18306:::-;18472:4;18510:2;18499:9;18495:18;18487:26;;18559:9;18553:4;18549:20;18545:1;18534:9;18530:17;18523:47;18587:131;18713:4;18587:131;:::i;:::-;18579:139;;18306:419;;;:::o;18731:::-;18897:4;18935:2;18924:9;18920:18;18912:26;;18984:9;18978:4;18974:20;18970:1;18959:9;18955:17;18948:47;19012:131;19138:4;19012:131;:::i;:::-;19004:139;;18731:419;;;:::o;19156:::-;19322:4;19360:2;19349:9;19345:18;19337:26;;19409:9;19403:4;19399:20;19395:1;19384:9;19380:17;19373:47;19437:131;19563:4;19437:131;:::i;:::-;19429:139;;19156:419;;;:::o;19581:::-;19747:4;19785:2;19774:9;19770:18;19762:26;;19834:9;19828:4;19824:20;19820:1;19809:9;19805:17;19798:47;19862:131;19988:4;19862:131;:::i;:::-;19854:139;;19581:419;;;:::o;20006:::-;20172:4;20210:2;20199:9;20195:18;20187:26;;20259:9;20253:4;20249:20;20245:1;20234:9;20230:17;20223:47;20287:131;20413:4;20287:131;:::i;:::-;20279:139;;20006:419;;;:::o;20431:222::-;20524:4;20562:2;20551:9;20547:18;20539:26;;20575:71;20643:1;20632:9;20628:17;20619:6;20575:71;:::i;:::-;20431:222;;;;:::o;20659:214::-;20748:4;20786:2;20775:9;20771:18;20763:26;;20799:67;20863:1;20852:9;20848:17;20839:6;20799:67;:::i;:::-;20659:214;;;;:::o;20960:99::-;21012:6;21046:5;21040:12;21030:22;;20960:99;;;:::o;21065:169::-;21149:11;21183:6;21178:3;21171:19;21223:4;21218:3;21214:14;21199:29;;21065:169;;;;:::o;21240:305::-;21280:3;21299:20;21317:1;21299:20;:::i;:::-;21294:25;;21333:20;21351:1;21333:20;:::i;:::-;21328:25;;21487:1;21419:66;21415:74;21412:1;21409:81;21406:107;;;21493:18;;:::i;:::-;21406:107;21537:1;21534;21530:9;21523:16;;21240:305;;;;:::o;21551:185::-;21591:1;21608:20;21626:1;21608:20;:::i;:::-;21603:25;;21642:20;21660:1;21642:20;:::i;:::-;21637:25;;21681:1;21671:35;;21686:18;;:::i;:::-;21671:35;21728:1;21725;21721:9;21716:14;;21551:185;;;;:::o;21742:348::-;21782:7;21805:20;21823:1;21805:20;:::i;:::-;21800:25;;21839:20;21857:1;21839:20;:::i;:::-;21834:25;;22027:1;21959:66;21955:74;21952:1;21949:81;21944:1;21937:9;21930:17;21926:105;21923:131;;;22034:18;;:::i;:::-;21923:131;22082:1;22079;22075:9;22064:20;;21742:348;;;;:::o;22096:191::-;22136:4;22156:20;22174:1;22156:20;:::i;:::-;22151:25;;22190:20;22208:1;22190:20;:::i;:::-;22185:25;;22229:1;22226;22223:8;22220:34;;;22234:18;;:::i;:::-;22220:34;22279:1;22276;22272:9;22264:17;;22096:191;;;;:::o;22293:96::-;22330:7;22359:24;22377:5;22359:24;:::i;:::-;22348:35;;22293:96;;;:::o;22395:90::-;22429:7;22472:5;22465:13;22458:21;22447:32;;22395:90;;;:::o;22491:126::-;22528:7;22568:42;22561:5;22557:54;22546:65;;22491:126;;;:::o;22623:77::-;22660:7;22689:5;22678:16;;22623:77;;;:::o;22706:86::-;22741:7;22781:4;22774:5;22770:16;22759:27;;22706:86;;;:::o;22798:145::-;22867:9;22900:37;22931:5;22900:37;:::i;:::-;22887:50;;22798:145;;;:::o;22949:126::-;22999:9;23032:37;23063:5;23032:37;:::i;:::-;23019:50;;22949:126;;;:::o;23081:113::-;23131:9;23164:24;23182:5;23164:24;:::i;:::-;23151:37;;23081:113;;;:::o;23200:307::-;23268:1;23278:113;23292:6;23289:1;23286:13;23278:113;;;23377:1;23372:3;23368:11;23362:18;23358:1;23353:3;23349:11;23342:39;23314:2;23311:1;23307:10;23302:15;;23278:113;;;23409:6;23406:1;23403:13;23400:101;;;23489:1;23480:6;23475:3;23471:16;23464:27;23400:101;23249:258;23200:307;;;:::o;23513:320::-;23557:6;23594:1;23588:4;23584:12;23574:22;;23641:1;23635:4;23631:12;23662:18;23652:81;;23718:4;23710:6;23706:17;23696:27;;23652:81;23780:2;23772:6;23769:14;23749:18;23746:38;23743:84;;;23799:18;;:::i;:::-;23743:84;23564:269;23513:320;;;:::o;23839:233::-;23878:3;23901:24;23919:5;23901:24;:::i;:::-;23892:33;;23947:66;23940:5;23937:77;23934:103;;;24017:18;;:::i;:::-;23934:103;24064:1;24057:5;24053:13;24046:20;;23839:233;;;:::o;24078:180::-;24126:77;24123:1;24116:88;24223:4;24220:1;24213:15;24247:4;24244:1;24237:15;24264:180;24312:77;24309:1;24302:88;24409:4;24406:1;24399:15;24433:4;24430:1;24423:15;24450:180;24498:77;24495:1;24488:88;24595:4;24592:1;24585:15;24619:4;24616:1;24609:15;24636:180;24684:77;24681:1;24674:88;24781:4;24778:1;24771:15;24805:4;24802:1;24795:15;24822:117;24931:1;24928;24921:12;24945:117;25054:1;25051;25044:12;25068:117;25177:1;25174;25167:12;25191:117;25300:1;25297;25290:12;25314:117;25423:1;25420;25413:12;25437:102;25478:6;25529:2;25525:7;25520:2;25513:5;25509:14;25505:28;25495:38;;25437:102;;;:::o;25545:222::-;25685:34;25681:1;25673:6;25669:14;25662:58;25754:5;25749:2;25741:6;25737:15;25730:30;25545:222;:::o;25773:221::-;25913:34;25909:1;25901:6;25897:14;25890:58;25982:4;25977:2;25969:6;25965:15;25958:29;25773:221;:::o;26000:225::-;26140:34;26136:1;26128:6;26124:14;26117:58;26209:8;26204:2;26196:6;26192:15;26185:33;26000:225;:::o;26231:::-;26371:34;26367:1;26359:6;26355:14;26348:58;26440:8;26435:2;26427:6;26423:15;26416:33;26231:225;:::o;26462:221::-;26602:34;26598:1;26590:6;26586:14;26579:58;26671:4;26666:2;26658:6;26654:15;26647:29;26462:221;:::o;26689:178::-;26829:30;26825:1;26817:6;26813:14;26806:54;26689:178;:::o;26873:225::-;27013:34;27009:1;27001:6;26997:14;26990:58;27082:8;27077:2;27069:6;27065:15;27058:33;26873:225;:::o;27104:224::-;27244:34;27240:1;27232:6;27228:14;27221:58;27313:7;27308:2;27300:6;27296:15;27289:32;27104:224;:::o;27334:227::-;27474:34;27470:1;27462:6;27458:14;27451:58;27543:10;27538:2;27530:6;27526:15;27519:35;27334:227;:::o;27567:182::-;27707:34;27703:1;27695:6;27691:14;27684:58;27567:182;:::o;27755:220::-;27895:34;27891:1;27883:6;27879:14;27872:58;27964:3;27959:2;27951:6;27947:15;27940:28;27755:220;:::o;27981:224::-;28121:34;28117:1;28109:6;28105:14;28098:58;28190:7;28185:2;28177:6;28173:15;28166:32;27981:224;:::o;28211:223::-;28351:34;28347:1;28339:6;28335:14;28328:58;28420:6;28415:2;28407:6;28403:15;28396:31;28211:223;:::o;28440:225::-;28580:34;28576:1;28568:6;28564:14;28557:58;28649:8;28644:2;28636:6;28632:15;28625:33;28440:225;:::o;28671:224::-;28811:34;28807:1;28799:6;28795:14;28788:58;28880:7;28875:2;28867:6;28863:15;28856:32;28671:224;:::o;28901:::-;29041:34;29037:1;29029:6;29025:14;29018:58;29110:7;29105:2;29097:6;29093:15;29086:32;28901:224;:::o;29131:181::-;29271:33;29267:1;29259:6;29255:14;29248:57;29131:181;:::o;29318:122::-;29391:24;29409:5;29391:24;:::i;:::-;29384:5;29381:35;29371:63;;29430:1;29427;29420:12;29371:63;29318:122;:::o;29446:116::-;29516:21;29531:5;29516:21;:::i;:::-;29509:5;29506:32;29496:60;;29552:1;29549;29542:12;29496:60;29446:116;:::o;29568:122::-;29641:24;29659:5;29641:24;:::i;:::-;29634:5;29631:35;29621:63;;29680:1;29677;29670:12;29621:63;29568:122;:::o

Swarm Source

ipfs://1030ad033794e80242adecee33c94d8828708e0a60a364f730e44d7d651e86a3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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