ETH Price: $3,804.73 (+5.29%)

Token

ERC-20: BOBL (BOBL)
 

Overview

Max Total Supply

2,554,377.568729018 BOBL

Holders

375

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
86.506842186 BOBL

Value
$0.00
0x6Dcb08BDa5A5f210087f61D59b86e4dFA08907a0
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:
BOBLToken

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-25
*/

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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


// OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: bobl.sol


pragma solidity ^0.8.0;




contract BOBLToken is ERC20, Ownable {
    IERC721Enumerable public immutable ROO_CONTRACT;
    uint256 public immutable BOBL_PER_SECOND_PER_ROWDY_ROO = 11574 gwei;
    uint256 public immutable BOBL_PER_SECOND_PER_RAGING_ROO = 34722 gwei;
    uint256 public immutable BOBL_PER_SECOND_PER_ROYAL_ROO = 69444 gwei;
    uint32 public immutable GENESIS = 1641852000;
    uint32 public immutable ENDDATE;

    uint32[9999] private last;
    uint8[9999] private rank;

    constructor(address roo_contract) ERC20("BOBL", "BOBL") {
        ROO_CONTRACT = IERC721Enumerable(roo_contract);
        ENDDATE = GENESIS + 315576000;
        _mint(msg.sender, 2500000 ether);
    }

    function getAccumulatedForUser(address user) external view returns (uint256) {
        uint256 total = ROO_CONTRACT.balanceOf(user);
        uint256 totalOwed = 0;
        for (uint256 i = 0; i < total; i++) {
            uint256 id = ROO_CONTRACT.tokenOfOwnerByIndex(user, i);
            uint32 last_claimed = lastClaim(id);
            uint32 can_claim = 0;
            if(block.timestamp > ENDDATE) {
                can_claim = ENDDATE - last_claimed;
            } else {
                can_claim = uint32(block.timestamp) - last_claimed;
            }
            uint8 roo_rank = rank[id-1];
            if(roo_rank == 0) {
                totalOwed += (can_claim * BOBL_PER_SECOND_PER_ROWDY_ROO);
            } else if(roo_rank == 1) {
                totalOwed += (can_claim * BOBL_PER_SECOND_PER_RAGING_ROO);
            }else if(roo_rank == 2) {
                totalOwed += (can_claim * BOBL_PER_SECOND_PER_ROYAL_ROO);
            }
        }
        return totalOwed;
    }

    function getAccumulatedForIds(uint16[] calldata ids) external view returns (uint256) {
        uint256 totalOwed = 0;
        for (uint256 i = 0; i < ids.length; i++) {
            uint16 id = ids[i];
            uint32 last_claimed = lastClaim(id);
            uint32 can_claim = 0;
            if(block.timestamp > ENDDATE) {
                can_claim = ENDDATE - last_claimed;
            } else {
                can_claim = uint32(block.timestamp) - last_claimed;
            }
            uint256 owed = 0;
            uint8 roo_rank = rank[id-1];
            if(roo_rank == 0) {
                owed = can_claim * BOBL_PER_SECOND_PER_ROWDY_ROO;
            } else if (roo_rank == 1) {
                owed = can_claim * BOBL_PER_SECOND_PER_RAGING_ROO;
            } else if (roo_rank == 2) {
                owed = can_claim * BOBL_PER_SECOND_PER_ROYAL_ROO;
            }
            totalOwed += owed;
        }
        return totalOwed;
    }

    function mintForUser(address user) external {
        uint256 total = ROO_CONTRACT.balanceOf(user);
        require(total > 0, "User does not own any rowdy roos");
        uint256 totalOwed = 0;
        uint256 id;
        for (uint16 i = 0; i < total; i++) {
            id = ROO_CONTRACT.tokenOfOwnerByIndex(user, i);
            uint32 last_claimed = lastClaim(id);
            uint32 can_claim = 0;
            if(block.timestamp > ENDDATE) {
                can_claim = ENDDATE - last_claimed;
            } else {
                can_claim = uint32(block.timestamp) - last_claimed;
            }
            uint8 roo_rank = rank[id-1];
            if(roo_rank == 0) {
                totalOwed += (can_claim * BOBL_PER_SECOND_PER_ROWDY_ROO);
            } else if(roo_rank == 1) {
                totalOwed += (can_claim * BOBL_PER_SECOND_PER_RAGING_ROO);
            }else if(roo_rank == 2) {
                totalOwed += (can_claim * BOBL_PER_SECOND_PER_ROYAL_ROO);
            }
            last[id-1] = uint32(block.timestamp);
        }
        _mint(user, totalOwed);
    }

    function mintForIds(uint16[] calldata ids) external {
        for (uint16 i = 0; i < ids.length; i++) {
            uint16 id = ids[i];
            require(id > 0 && id < 10000, "Token id is out of range");
            address owner = ROO_CONTRACT.ownerOf(id);
            uint32 last_claimed = lastClaim(id);
            uint32 can_claim = 0;
            if(block.timestamp > ENDDATE) {
                can_claim = ENDDATE - last_claimed;
            } else {
                can_claim = uint32(block.timestamp) - last_claimed;
            }
            uint256 owed = 0;
            uint8 roo_rank = rank[id-1];
            if(roo_rank == 0) {
                owed = can_claim * BOBL_PER_SECOND_PER_ROWDY_ROO;
            } else if (roo_rank == 1) {
                owed = can_claim * BOBL_PER_SECOND_PER_RAGING_ROO;
            } else if (roo_rank == 2) {
                owed = can_claim * BOBL_PER_SECOND_PER_ROYAL_ROO;
            }
            last[id-1] = uint32(block.timestamp);
            _mint(owner, owed);
        }
    }

    function setRowdyIds(uint16[] calldata tokenIds) external onlyOwner {
        for (uint16 i = 0; i < tokenIds.length; i++) {
            rank[tokenIds[i]-1] = 0;
        }
    }

    function setRagingIds(uint16[] calldata tokenIds) external onlyOwner {
        for (uint16 i = 0; i < tokenIds.length; i++) {
            rank[tokenIds[i]-1] = 1;
        }
    }

    function setRoyalIds(uint16[] calldata tokenIds) external onlyOwner {
        for (uint16 i = 0; i < tokenIds.length; i++) {
            rank[tokenIds[i]-1] = 2;
        }
    }

    function lastClaim(uint256 id) public view returns (uint32) {
        require(id > 0 && id < 10000, "Token id is out of range");
        if (last[id-1] > GENESIS) {
            return last[id-1];
        } else {
            return GENESIS;
        }
    }

    function getRank(uint256 id) external view returns (uint256) {
        require(id > 0 && id < 10000, "Token id is out of range");
        return rank[id-1];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"roo_contract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"BOBL_PER_SECOND_PER_RAGING_ROO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOBL_PER_SECOND_PER_ROWDY_ROO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOBL_PER_SECOND_PER_ROYAL_ROO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENDDATE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GENESIS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROO_CONTRACT","outputs":[{"internalType":"contract IERC721Enumerable","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":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"getAccumulatedForIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAccumulatedForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getRank","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":"id","type":"uint256"}],"name":"lastClaim","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"mintForIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"mintForUser","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":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"setRagingIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"setRowdyIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"}],"name":"setRoyalIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

610140604052650a86c8289c0060a090815250651f945879d40060c090815250653f28b0f3a80060e0908152506361dcac6063ffffffff166101009063ffffffff168152503480156200005157600080fd5b5060405162003c5538038062003c55833981810160405281019062000077919062000523565b6040518060400160405280600481526020017f424f424c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f424f424c000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000fb92919062000409565b5080600490805190602001906200011492919062000409565b505050620001376200012b620001b860201b60201c565b620001c060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506312cf4ec06101005162000180919062000594565b63ffffffff166101208163ffffffff1681525050620001b1336a02116545850052128000006200028660201b60201c565b5062000752565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f09062000636565b60405180910390fd5b6200030d60008383620003ff60201b60201c565b806002600082825462000321919062000662565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000378919062000662565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003df9190620006d0565b60405180910390a3620003fb600083836200040460201b60201c565b5050565b505050565b505050565b82805462000417906200071c565b90600052602060002090601f0160209004810192826200043b576000855562000487565b82601f106200045657805160ff191683800117855562000487565b8280016001018555821562000487579182015b828111156200048657825182559160200191906001019062000469565b5b5090506200049691906200049a565b5090565b5b80821115620004b55760008160009055506001016200049b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004eb82620004be565b9050919050565b620004fd81620004de565b81146200050957600080fd5b50565b6000815190506200051d81620004f2565b92915050565b6000602082840312156200053c576200053b620004b9565b5b60006200054c848285016200050c565b91505092915050565b600063ffffffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620005a18262000555565b9150620005ae8362000555565b92508263ffffffff03821115620005ca57620005c962000565565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200061e601f83620005d5565b91506200062b82620005e6565b602082019050919050565b6000602082019050818103600083015262000651816200060f565b9050919050565b6000819050919050565b60006200066f8262000658565b91506200067c8362000658565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006b457620006b362000565565b5b828201905092915050565b620006ca8162000658565b82525050565b6000602082019050620006e76000830184620006bf565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073557607f821691505b602082108114156200074c576200074b620006ed565b5b50919050565b60805160a05160c05160e05161010051610120516133f66200085f600039600081816106e6015281816107150152818161089f01528181610b4201528181610b710152818161109f015281816110ce0152818161197401526119a3015260008181610dfb01528181610eaf0152611b6901526000818161082d015281816109c401528181610c9a015281816111f70152611abb0152600081816107e801528181610c4a01528181610ed8015281816111a70152611a760152600081816107a301528181610bfa01528181611157015281816114940152611a310152600081816109eb01528181610a9501528181610efe01528181610ff2015281816118c50152611e2501526133f66000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a9059cbb116100a2578063dcb1dd0711610071578063dcb1dd071461055a578063dd62ed3e14610576578063f2fde38b146105a6578063f4fc823b146105c2576101cf565b8063a9059cbb146104d4578063ac8f953c14610504578063b2feda4514610520578063b7dec1b71461053c576101cf565b80638da5cb5b116100de5780638da5cb5b1461043857806395d89b4114610456578063a457c2d714610474578063a5099bae146104a4576101cf565b806370a08231146103e0578063715018a6146104105780637f39c11e1461041a576101cf565b80633807bee3116101715780633d3728b51161014b5780633d3728b51461035a5780635e525d711461038a57806363250887146103a8578063674a7c57146103c4576101cf565b80633807bee3146102dc5780633838e54d146102fa578063395093511461032a576101cf565b806318160ddd116101ad57806318160ddd146102525780631db9ec2c1461027057806323b872dd1461028e578063313ce567146102be576101cf565b806306fdde03146101d4578063095ea7b3146101f25780630ac6773514610222575b600080fd5b6101dc6105e0565b6040516101e99190612564565b60405180910390f35b61020c60048036038101906102079190612624565b610672565b604051610219919061267f565b60405180910390f35b61023c600480360381019061023791906126ff565b610690565b604051610249919061275b565b60405180910390f35b61025a610893565b604051610267919061275b565b60405180910390f35b61027861089d565b6040516102859190612795565b60405180910390f35b6102a860048036038101906102a391906127b0565b6108c1565b6040516102b5919061267f565b60405180910390f35b6102c66109b9565b6040516102d3919061281f565b60405180910390f35b6102e46109c2565b6040516102f1919061275b565b60405180910390f35b610314600480360381019061030f919061283a565b6109e6565b604051610321919061275b565b60405180910390f35b610344600480360381019061033f9190612624565b610cfc565b604051610351919061267f565b60405180910390f35b610374600480360381019061036f9190612867565b610da8565b6040516103819190612795565b60405180910390f35b610392610ed6565b60405161039f919061275b565b60405180910390f35b6103c260048036038101906103bd919061283a565b610efa565b005b6103de60048036038101906103d991906126ff565b6112a9565b005b6103fa60048036038101906103f5919061283a565b6113c2565b604051610407919061275b565b60405180910390f35b61041861140a565b005b610422611492565b60405161042f919061275b565b60405180910390f35b6104406114b6565b60405161044d91906128a3565b60405180910390f35b61045e6114e0565b60405161046b9190612564565b60405180910390f35b61048e60048036038101906104899190612624565b611572565b60405161049b919061267f565b60405180910390f35b6104be60048036038101906104b99190612867565b61165d565b6040516104cb919061275b565b60405180910390f35b6104ee60048036038101906104e99190612624565b6116f0565b6040516104fb919061267f565b60405180910390f35b61051e600480360381019061051991906126ff565b61170e565b005b61053a600480360381019061053591906126ff565b611827565b005b610544611b67565b6040516105519190612795565b60405180910390f35b610574600480360381019061056f91906126ff565b611b8b565b005b610590600480360381019061058b91906128be565b611ca4565b60405161059d919061275b565b60405180910390f35b6105c060048036038101906105bb919061283a565b611d2b565b005b6105ca611e23565b6040516105d7919061295d565b60405180910390f35b6060600380546105ef906129a7565b80601f016020809104026020016040519081016040528092919081815260200182805461061b906129a7565b80156106685780601f1061063d57610100808354040283529160200191610668565b820191906000526020600020905b81548152906001019060200180831161064b57829003601f168201915b5050505050905090565b600061068661067f611e47565b8484611e4f565b6001905092915050565b6000806000905060005b848490508110156108885760008585838181106106ba576106b96129d9565b5b90506020020160208101906106cf9190612a42565b905060006106e08261ffff16610da8565b905060007f000000000000000000000000000000000000000000000000000000000000000063ffffffff1642111561074557817f000000000000000000000000000000000000000000000000000000000000000061073e9190612a9e565b9050610754565b81426107519190612a9e565b90505b6000806104e86001866107679190612ad2565b61ffff1661270f811061077d5761077c6129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff1614156107da577f00000000000000000000000000000000000000000000000000000000000000008363ffffffff166107d39190612b06565b9150610862565b60018160ff16141561081f577f00000000000000000000000000000000000000000000000000000000000000008363ffffffff166108189190612b06565b9150610861565b60028160ff161415610860577f00000000000000000000000000000000000000000000000000000000000000008363ffffffff1661085d9190612b06565b91505b5b5b818761086e9190612b60565b96505050505050808061088090612bb6565b91505061069a565b508091505092915050565b6000600254905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006108ce84848461201a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610919611e47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099090612c71565b60405180910390fd5b6109ad856109a5611e47565b858403611e4f565b60019150509392505050565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610a4291906128a3565b602060405180830381865afa158015610a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a839190612ca6565b90506000805b82811015610cf15760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401610aee929190612cd3565b602060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f9190612ca6565b90506000610b3c82610da8565b905060007f000000000000000000000000000000000000000000000000000000000000000063ffffffff16421115610ba157817f0000000000000000000000000000000000000000000000000000000000000000610b9a9190612a9e565b9050610bb0565b8142610bad9190612a9e565b90505b60006104e8600185610bc29190612cfc565b61270f8110610bd457610bd36129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff161415610c3c577f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16610c2a9190612b06565b86610c359190612b60565b9550610cda565b60018160ff161415610c8c577f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16610c7a9190612b06565b86610c859190612b60565b9550610cd9565b60028160ff161415610cd8577f00000000000000000000000000000000000000000000000000000000000000008263ffffffff16610cca9190612b06565b86610cd59190612b60565b95505b5b5b505050508080610ce990612bb6565b915050610a89565b508092505050919050565b6000610d9e610d09611e47565b848460016000610d17611e47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d999190612b60565b611e4f565b6001905092915050565b60008082118015610dba575061271082105b610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090612d7c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff166006600184610e2f9190612cfc565b61270f8110610e4157610e406129d9565b5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff161115610ead576006600183610e789190612cfc565b61270f8110610e8a57610e896129d9565b5b600891828204019190066004029054906101000a900463ffffffff169050610ed1565b7f000000000000000000000000000000000000000000000000000000000000000090505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f5591906128a3565b602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190612ca6565b905060008111610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290612de8565b60405180910390fd5b60008080600090505b838161ffff161015611298577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b815260040161104b929190612e39565b602060405180830381865afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c9190612ca6565b9150600061109983610da8565b905060007f000000000000000000000000000000000000000000000000000000000000000063ffffffff164211156110fe57817f00000000000000000000000000000000000000000000000000000000000000006110f79190612a9e565b905061110d565b814261110a9190612a9e565b90505b60006104e860018661111f9190612cfc565b61270f8110611131576111306129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff161415611199577f00000000000000000000000000000000000000000000000000000000000000008263ffffffff166111879190612b06565b866111929190612b60565b9550611237565b60018160ff1614156111e9577f00000000000000000000000000000000000000000000000000000000000000008263ffffffff166111d79190612b06565b866111e29190612b60565b9550611236565b60028160ff161415611235577f00000000000000000000000000000000000000000000000000000000000000008263ffffffff166112279190612b06565b866112329190612b60565b95505b5b5b4260066001876112479190612cfc565b61270f8110611259576112586129d9565b5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550505050808061129090612e62565b915050610fe4565b506112a3848361229b565b50505050565b6112b1611e47565b73ffffffffffffffffffffffffffffffffffffffff166112cf6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90612ed9565b60405180910390fd5b60005b828290508161ffff1610156113bd5760016104e8600185858561ffff16818110611355576113546129d9565b5b905060200201602081019061136a9190612a42565b6113749190612ad2565b61ffff1661270f811061138a576113896129d9565b5b602091828204019190066101000a81548160ff021916908360ff16021790555080806113b590612e62565b915050611328565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611412611e47565b73ffffffffffffffffffffffffffffffffffffffff166114306114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90612ed9565b60405180910390fd5b61149060006123fb565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ef906129a7565b80601f016020809104026020016040519081016040528092919081815260200182805461151b906129a7565b80156115685780601f1061153d57610100808354040283529160200191611568565b820191906000526020600020905b81548152906001019060200180831161154b57829003601f168201915b5050505050905090565b60008060016000611581611e47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590612f6b565b60405180910390fd5b611652611649611e47565b85858403611e4f565b600191505092915050565b6000808211801561166f575061271082105b6116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590612d7c565b60405180910390fd5b6104e86001836116be9190612cfc565b61270f81106116d0576116cf6129d9565b5b602091828204019190069054906101000a900460ff1660ff169050919050565b60006117046116fd611e47565b848461201a565b6001905092915050565b611716611e47565b73ffffffffffffffffffffffffffffffffffffffff166117346114b6565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190612ed9565b60405180910390fd5b60005b828290508161ffff1610156118225760006104e8600185858561ffff168181106117ba576117b96129d9565b5b90506020020160208101906117cf9190612a42565b6117d99190612ad2565b61ffff1661270f81106117ef576117ee6129d9565b5b602091828204019190066101000a81548160ff021916908360ff160217905550808061181a90612e62565b91505061178d565b505050565b60005b828290508161ffff161015611b6257600083838361ffff16818110611852576118516129d9565b5b90506020020160208101906118679190612a42565b905060008161ffff1611801561188257506127108161ffff16105b6118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b890612d7c565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161191c9190612f8b565b602060405180830381865afa158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d9190612fbb565b9050600061196e8361ffff16610da8565b905060007f000000000000000000000000000000000000000000000000000000000000000063ffffffff164211156119d357817f00000000000000000000000000000000000000000000000000000000000000006119cc9190612a9e565b90506119e2565b81426119df9190612a9e565b90505b6000806104e86001876119f59190612ad2565b61ffff1661270f8110611a0b57611a0a6129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff161415611a68577f00000000000000000000000000000000000000000000000000000000000000008363ffffffff16611a619190612b06565b9150611af0565b60018160ff161415611aad577f00000000000000000000000000000000000000000000000000000000000000008363ffffffff16611aa69190612b06565b9150611aef565b60028160ff161415611aee577f00000000000000000000000000000000000000000000000000000000000000008363ffffffff16611aeb9190612b06565b91505b5b5b426006600188611b009190612ad2565b61ffff1661270f8110611b1657611b156129d9565b5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550611b49858361229b565b5050505050508080611b5a90612e62565b91505061182a565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b93611e47565b73ffffffffffffffffffffffffffffffffffffffff16611bb16114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90612ed9565b60405180910390fd5b60005b828290508161ffff161015611c9f5760026104e8600185858561ffff16818110611c3757611c366129d9565b5b9050602002016020810190611c4c9190612a42565b611c569190612ad2565b61ffff1661270f8110611c6c57611c6b6129d9565b5b602091828204019190066101000a81548160ff021916908360ff1602179055508080611c9790612e62565b915050611c0a565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d33611e47565b73ffffffffffffffffffffffffffffffffffffffff16611d516114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90612ed9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e9061305a565b60405180910390fd5b611e20816123fb565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906130ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f269061317e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200d919061275b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613210565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f1906132a2565b60405180910390fd5b6121058383836124c1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290613334565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221e9190612b60565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612282919061275b565b60405180910390a36122958484846124c6565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906133a0565b60405180910390fd5b612317600083836124c1565b80600260008282546123299190612b60565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237e9190612b60565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123e3919061275b565b60405180910390a36123f7600083836124c6565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125055780820151818401526020810190506124ea565b83811115612514576000848401525b50505050565b6000601f19601f8301169050919050565b6000612536826124cb565b61254081856124d6565b93506125508185602086016124e7565b6125598161251a565b840191505092915050565b6000602082019050818103600083015261257e818461252b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125bb82612590565b9050919050565b6125cb816125b0565b81146125d657600080fd5b50565b6000813590506125e8816125c2565b92915050565b6000819050919050565b612601816125ee565b811461260c57600080fd5b50565b60008135905061261e816125f8565b92915050565b6000806040838503121561263b5761263a612586565b5b6000612649858286016125d9565b925050602061265a8582860161260f565b9150509250929050565b60008115159050919050565b61267981612664565b82525050565b60006020820190506126946000830184612670565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126126bf576126be61269a565b5b8235905067ffffffffffffffff8111156126dc576126db61269f565b5b6020830191508360208202830111156126f8576126f76126a4565b5b9250929050565b6000806020838503121561271657612715612586565b5b600083013567ffffffffffffffff8111156127345761273361258b565b5b612740858286016126a9565b92509250509250929050565b612755816125ee565b82525050565b6000602082019050612770600083018461274c565b92915050565b600063ffffffff82169050919050565b61278f81612776565b82525050565b60006020820190506127aa6000830184612786565b92915050565b6000806000606084860312156127c9576127c8612586565b5b60006127d7868287016125d9565b93505060206127e8868287016125d9565b92505060406127f98682870161260f565b9150509250925092565b600060ff82169050919050565b61281981612803565b82525050565b60006020820190506128346000830184612810565b92915050565b6000602082840312156128505761284f612586565b5b600061285e848285016125d9565b91505092915050565b60006020828403121561287d5761287c612586565b5b600061288b8482850161260f565b91505092915050565b61289d816125b0565b82525050565b60006020820190506128b86000830184612894565b92915050565b600080604083850312156128d5576128d4612586565b5b60006128e3858286016125d9565b92505060206128f4858286016125d9565b9150509250929050565b6000819050919050565b600061292361291e61291984612590565b6128fe565b612590565b9050919050565b600061293582612908565b9050919050565b60006129478261292a565b9050919050565b6129578161293c565b82525050565b6000602082019050612972600083018461294e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129bf57607f821691505b602082108114156129d3576129d2612978565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b612a1f81612a08565b8114612a2a57600080fd5b50565b600081359050612a3c81612a16565b92915050565b600060208284031215612a5857612a57612586565b5b6000612a6684828501612a2d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aa982612776565b9150612ab483612776565b925082821015612ac757612ac6612a6f565b5b828203905092915050565b6000612add82612a08565b9150612ae883612a08565b925082821015612afb57612afa612a6f565b5b828203905092915050565b6000612b11826125ee565b9150612b1c836125ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b5557612b54612a6f565b5b828202905092915050565b6000612b6b826125ee565b9150612b76836125ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bab57612baa612a6f565b5b828201905092915050565b6000612bc1826125ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612bf457612bf3612a6f565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612c5b6028836124d6565b9150612c6682612bff565b604082019050919050565b60006020820190508181036000830152612c8a81612c4e565b9050919050565b600081519050612ca0816125f8565b92915050565b600060208284031215612cbc57612cbb612586565b5b6000612cca84828501612c91565b91505092915050565b6000604082019050612ce86000830185612894565b612cf5602083018461274c565b9392505050565b6000612d07826125ee565b9150612d12836125ee565b925082821015612d2557612d24612a6f565b5b828203905092915050565b7f546f6b656e206964206973206f7574206f662072616e67650000000000000000600082015250565b6000612d666018836124d6565b9150612d7182612d30565b602082019050919050565b60006020820190508181036000830152612d9581612d59565b9050919050565b7f5573657220646f6573206e6f74206f776e20616e7920726f77647920726f6f73600082015250565b6000612dd26020836124d6565b9150612ddd82612d9c565b602082019050919050565b60006020820190508181036000830152612e0181612dc5565b9050919050565b6000612e23612e1e612e1984612a08565b6128fe565b6125ee565b9050919050565b612e3381612e08565b82525050565b6000604082019050612e4e6000830185612894565b612e5b6020830184612e2a565b9392505050565b6000612e6d82612a08565b915061ffff821415612e8257612e81612a6f565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ec36020836124d6565b9150612ece82612e8d565b602082019050919050565b60006020820190508181036000830152612ef281612eb6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f556025836124d6565b9150612f6082612ef9565b604082019050919050565b60006020820190508181036000830152612f8481612f48565b9050919050565b6000602082019050612fa06000830184612e2a565b92915050565b600081519050612fb5816125c2565b92915050565b600060208284031215612fd157612fd0612586565b5b6000612fdf84828501612fa6565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130446026836124d6565b915061304f82612fe8565b604082019050919050565b6000602082019050818103600083015261307381613037565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130d66024836124d6565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131686022836124d6565b91506131738261310c565b604082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131fa6025836124d6565b91506132058261319e565b604082019050919050565b60006020820190508181036000830152613229816131ed565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061328c6023836124d6565b915061329782613230565b604082019050919050565b600060208201905081810360008301526132bb8161327f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061331e6026836124d6565b9150613329826132c2565b604082019050919050565b6000602082019050818103600083015261334d81613311565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061338a601f836124d6565b915061339582613354565b602082019050919050565b600060208201905081810360008301526133b98161337d565b905091905056fea2646970667358221220a8e3e8dcad584ce30e9c4e7f435fca54adddb66b769b5f77745c690528552b3f64736f6c634300080b0033000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a9059cbb116100a2578063dcb1dd0711610071578063dcb1dd071461055a578063dd62ed3e14610576578063f2fde38b146105a6578063f4fc823b146105c2576101cf565b8063a9059cbb146104d4578063ac8f953c14610504578063b2feda4514610520578063b7dec1b71461053c576101cf565b80638da5cb5b116100de5780638da5cb5b1461043857806395d89b4114610456578063a457c2d714610474578063a5099bae146104a4576101cf565b806370a08231146103e0578063715018a6146104105780637f39c11e1461041a576101cf565b80633807bee3116101715780633d3728b51161014b5780633d3728b51461035a5780635e525d711461038a57806363250887146103a8578063674a7c57146103c4576101cf565b80633807bee3146102dc5780633838e54d146102fa578063395093511461032a576101cf565b806318160ddd116101ad57806318160ddd146102525780631db9ec2c1461027057806323b872dd1461028e578063313ce567146102be576101cf565b806306fdde03146101d4578063095ea7b3146101f25780630ac6773514610222575b600080fd5b6101dc6105e0565b6040516101e99190612564565b60405180910390f35b61020c60048036038101906102079190612624565b610672565b604051610219919061267f565b60405180910390f35b61023c600480360381019061023791906126ff565b610690565b604051610249919061275b565b60405180910390f35b61025a610893565b604051610267919061275b565b60405180910390f35b61027861089d565b6040516102859190612795565b60405180910390f35b6102a860048036038101906102a391906127b0565b6108c1565b6040516102b5919061267f565b60405180910390f35b6102c66109b9565b6040516102d3919061281f565b60405180910390f35b6102e46109c2565b6040516102f1919061275b565b60405180910390f35b610314600480360381019061030f919061283a565b6109e6565b604051610321919061275b565b60405180910390f35b610344600480360381019061033f9190612624565b610cfc565b604051610351919061267f565b60405180910390f35b610374600480360381019061036f9190612867565b610da8565b6040516103819190612795565b60405180910390f35b610392610ed6565b60405161039f919061275b565b60405180910390f35b6103c260048036038101906103bd919061283a565b610efa565b005b6103de60048036038101906103d991906126ff565b6112a9565b005b6103fa60048036038101906103f5919061283a565b6113c2565b604051610407919061275b565b60405180910390f35b61041861140a565b005b610422611492565b60405161042f919061275b565b60405180910390f35b6104406114b6565b60405161044d91906128a3565b60405180910390f35b61045e6114e0565b60405161046b9190612564565b60405180910390f35b61048e60048036038101906104899190612624565b611572565b60405161049b919061267f565b60405180910390f35b6104be60048036038101906104b99190612867565b61165d565b6040516104cb919061275b565b60405180910390f35b6104ee60048036038101906104e99190612624565b6116f0565b6040516104fb919061267f565b60405180910390f35b61051e600480360381019061051991906126ff565b61170e565b005b61053a600480360381019061053591906126ff565b611827565b005b610544611b67565b6040516105519190612795565b60405180910390f35b610574600480360381019061056f91906126ff565b611b8b565b005b610590600480360381019061058b91906128be565b611ca4565b60405161059d919061275b565b60405180910390f35b6105c060048036038101906105bb919061283a565b611d2b565b005b6105ca611e23565b6040516105d7919061295d565b60405180910390f35b6060600380546105ef906129a7565b80601f016020809104026020016040519081016040528092919081815260200182805461061b906129a7565b80156106685780601f1061063d57610100808354040283529160200191610668565b820191906000526020600020905b81548152906001019060200180831161064b57829003601f168201915b5050505050905090565b600061068661067f611e47565b8484611e4f565b6001905092915050565b6000806000905060005b848490508110156108885760008585838181106106ba576106b96129d9565b5b90506020020160208101906106cf9190612a42565b905060006106e08261ffff16610da8565b905060007f0000000000000000000000000000000000000000000000000000000074abfb2063ffffffff1642111561074557817f0000000000000000000000000000000000000000000000000000000074abfb2061073e9190612a9e565b9050610754565b81426107519190612a9e565b90505b6000806104e86001866107679190612ad2565b61ffff1661270f811061077d5761077c6129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff1614156107da577f00000000000000000000000000000000000000000000000000000a86c8289c008363ffffffff166107d39190612b06565b9150610862565b60018160ff16141561081f577f00000000000000000000000000000000000000000000000000001f945879d4008363ffffffff166108189190612b06565b9150610861565b60028160ff161415610860577f00000000000000000000000000000000000000000000000000003f28b0f3a8008363ffffffff1661085d9190612b06565b91505b5b5b818761086e9190612b60565b96505050505050808061088090612bb6565b91505061069a565b508091505092915050565b6000600254905090565b7f0000000000000000000000000000000000000000000000000000000074abfb2081565b60006108ce84848461201a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610919611e47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099090612c71565b60405180910390fd5b6109ad856109a5611e47565b858403611e4f565b60019150509392505050565b60006012905090565b7f00000000000000000000000000000000000000000000000000003f28b0f3a80081565b6000807f000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db73ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610a4291906128a3565b602060405180830381865afa158015610a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a839190612ca6565b90506000805b82811015610cf15760007f000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db73ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401610aee929190612cd3565b602060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f9190612ca6565b90506000610b3c82610da8565b905060007f0000000000000000000000000000000000000000000000000000000074abfb2063ffffffff16421115610ba157817f0000000000000000000000000000000000000000000000000000000074abfb20610b9a9190612a9e565b9050610bb0565b8142610bad9190612a9e565b90505b60006104e8600185610bc29190612cfc565b61270f8110610bd457610bd36129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff161415610c3c577f00000000000000000000000000000000000000000000000000000a86c8289c008263ffffffff16610c2a9190612b06565b86610c359190612b60565b9550610cda565b60018160ff161415610c8c577f00000000000000000000000000000000000000000000000000001f945879d4008263ffffffff16610c7a9190612b06565b86610c859190612b60565b9550610cd9565b60028160ff161415610cd8577f00000000000000000000000000000000000000000000000000003f28b0f3a8008263ffffffff16610cca9190612b06565b86610cd59190612b60565b95505b5b5b505050508080610ce990612bb6565b915050610a89565b508092505050919050565b6000610d9e610d09611e47565b848460016000610d17611e47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d999190612b60565b611e4f565b6001905092915050565b60008082118015610dba575061271082105b610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df090612d7c565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000061dcac6063ffffffff166006600184610e2f9190612cfc565b61270f8110610e4157610e406129d9565b5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff161115610ead576006600183610e789190612cfc565b61270f8110610e8a57610e896129d9565b5b600891828204019190066004029054906101000a900463ffffffff169050610ed1565b7f0000000000000000000000000000000000000000000000000000000061dcac6090505b919050565b7f00000000000000000000000000000000000000000000000000001f945879d40081565b60007f000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610f5591906128a3565b602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190612ca6565b905060008111610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd290612de8565b60405180910390fd5b60008080600090505b838161ffff161015611298577f000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db73ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b815260040161104b929190612e39565b602060405180830381865afa158015611068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108c9190612ca6565b9150600061109983610da8565b905060007f0000000000000000000000000000000000000000000000000000000074abfb2063ffffffff164211156110fe57817f0000000000000000000000000000000000000000000000000000000074abfb206110f79190612a9e565b905061110d565b814261110a9190612a9e565b90505b60006104e860018661111f9190612cfc565b61270f8110611131576111306129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff161415611199577f00000000000000000000000000000000000000000000000000000a86c8289c008263ffffffff166111879190612b06565b866111929190612b60565b9550611237565b60018160ff1614156111e9577f00000000000000000000000000000000000000000000000000001f945879d4008263ffffffff166111d79190612b06565b866111e29190612b60565b9550611236565b60028160ff161415611235577f00000000000000000000000000000000000000000000000000003f28b0f3a8008263ffffffff166112279190612b06565b866112329190612b60565b95505b5b5b4260066001876112479190612cfc565b61270f8110611259576112586129d9565b5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550505050808061129090612e62565b915050610fe4565b506112a3848361229b565b50505050565b6112b1611e47565b73ffffffffffffffffffffffffffffffffffffffff166112cf6114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90612ed9565b60405180910390fd5b60005b828290508161ffff1610156113bd5760016104e8600185858561ffff16818110611355576113546129d9565b5b905060200201602081019061136a9190612a42565b6113749190612ad2565b61ffff1661270f811061138a576113896129d9565b5b602091828204019190066101000a81548160ff021916908360ff16021790555080806113b590612e62565b915050611328565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611412611e47565b73ffffffffffffffffffffffffffffffffffffffff166114306114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90612ed9565b60405180910390fd5b61149060006123fb565b565b7f00000000000000000000000000000000000000000000000000000a86c8289c0081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ef906129a7565b80601f016020809104026020016040519081016040528092919081815260200182805461151b906129a7565b80156115685780601f1061153d57610100808354040283529160200191611568565b820191906000526020600020905b81548152906001019060200180831161154b57829003601f168201915b5050505050905090565b60008060016000611581611e47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590612f6b565b60405180910390fd5b611652611649611e47565b85858403611e4f565b600191505092915050565b6000808211801561166f575061271082105b6116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590612d7c565b60405180910390fd5b6104e86001836116be9190612cfc565b61270f81106116d0576116cf6129d9565b5b602091828204019190069054906101000a900460ff1660ff169050919050565b60006117046116fd611e47565b848461201a565b6001905092915050565b611716611e47565b73ffffffffffffffffffffffffffffffffffffffff166117346114b6565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190612ed9565b60405180910390fd5b60005b828290508161ffff1610156118225760006104e8600185858561ffff168181106117ba576117b96129d9565b5b90506020020160208101906117cf9190612a42565b6117d99190612ad2565b61ffff1661270f81106117ef576117ee6129d9565b5b602091828204019190066101000a81548160ff021916908360ff160217905550808061181a90612e62565b91505061178d565b505050565b60005b828290508161ffff161015611b6257600083838361ffff16818110611852576118516129d9565b5b90506020020160208101906118679190612a42565b905060008161ffff1611801561188257506127108161ffff16105b6118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b890612d7c565b60405180910390fd5b60007f000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161191c9190612f8b565b602060405180830381865afa158015611939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195d9190612fbb565b9050600061196e8361ffff16610da8565b905060007f0000000000000000000000000000000000000000000000000000000074abfb2063ffffffff164211156119d357817f0000000000000000000000000000000000000000000000000000000074abfb206119cc9190612a9e565b90506119e2565b81426119df9190612a9e565b90505b6000806104e86001876119f59190612ad2565b61ffff1661270f8110611a0b57611a0a6129d9565b5b602091828204019190069054906101000a900460ff16905060008160ff161415611a68577f00000000000000000000000000000000000000000000000000000a86c8289c008363ffffffff16611a619190612b06565b9150611af0565b60018160ff161415611aad577f00000000000000000000000000000000000000000000000000001f945879d4008363ffffffff16611aa69190612b06565b9150611aef565b60028160ff161415611aee577f00000000000000000000000000000000000000000000000000003f28b0f3a8008363ffffffff16611aeb9190612b06565b91505b5b5b426006600188611b009190612ad2565b61ffff1661270f8110611b1657611b156129d9565b5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550611b49858361229b565b5050505050508080611b5a90612e62565b91505061182a565b505050565b7f0000000000000000000000000000000000000000000000000000000061dcac6081565b611b93611e47565b73ffffffffffffffffffffffffffffffffffffffff16611bb16114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe90612ed9565b60405180910390fd5b60005b828290508161ffff161015611c9f5760026104e8600185858561ffff16818110611c3757611c366129d9565b5b9050602002016020810190611c4c9190612a42565b611c569190612ad2565b61ffff1661270f8110611c6c57611c6b6129d9565b5b602091828204019190066101000a81548160ff021916908360ff1602179055508080611c9790612e62565b915050611c0a565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d33611e47565b73ffffffffffffffffffffffffffffffffffffffff16611d516114b6565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90612ed9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e9061305a565b60405180910390fd5b611e20816123fb565b50565b7f000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb6906130ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f269061317e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200d919061275b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190613210565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f1906132a2565b60405180910390fd5b6121058383836124c1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290613334565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461221e9190612b60565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612282919061275b565b60405180910390a36122958484846124c6565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906133a0565b60405180910390fd5b612317600083836124c1565b80600260008282546123299190612b60565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237e9190612b60565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123e3919061275b565b60405180910390a36123f7600083836124c6565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125055780820151818401526020810190506124ea565b83811115612514576000848401525b50505050565b6000601f19601f8301169050919050565b6000612536826124cb565b61254081856124d6565b93506125508185602086016124e7565b6125598161251a565b840191505092915050565b6000602082019050818103600083015261257e818461252b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125bb82612590565b9050919050565b6125cb816125b0565b81146125d657600080fd5b50565b6000813590506125e8816125c2565b92915050565b6000819050919050565b612601816125ee565b811461260c57600080fd5b50565b60008135905061261e816125f8565b92915050565b6000806040838503121561263b5761263a612586565b5b6000612649858286016125d9565b925050602061265a8582860161260f565b9150509250929050565b60008115159050919050565b61267981612664565b82525050565b60006020820190506126946000830184612670565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126126bf576126be61269a565b5b8235905067ffffffffffffffff8111156126dc576126db61269f565b5b6020830191508360208202830111156126f8576126f76126a4565b5b9250929050565b6000806020838503121561271657612715612586565b5b600083013567ffffffffffffffff8111156127345761273361258b565b5b612740858286016126a9565b92509250509250929050565b612755816125ee565b82525050565b6000602082019050612770600083018461274c565b92915050565b600063ffffffff82169050919050565b61278f81612776565b82525050565b60006020820190506127aa6000830184612786565b92915050565b6000806000606084860312156127c9576127c8612586565b5b60006127d7868287016125d9565b93505060206127e8868287016125d9565b92505060406127f98682870161260f565b9150509250925092565b600060ff82169050919050565b61281981612803565b82525050565b60006020820190506128346000830184612810565b92915050565b6000602082840312156128505761284f612586565b5b600061285e848285016125d9565b91505092915050565b60006020828403121561287d5761287c612586565b5b600061288b8482850161260f565b91505092915050565b61289d816125b0565b82525050565b60006020820190506128b86000830184612894565b92915050565b600080604083850312156128d5576128d4612586565b5b60006128e3858286016125d9565b92505060206128f4858286016125d9565b9150509250929050565b6000819050919050565b600061292361291e61291984612590565b6128fe565b612590565b9050919050565b600061293582612908565b9050919050565b60006129478261292a565b9050919050565b6129578161293c565b82525050565b6000602082019050612972600083018461294e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129bf57607f821691505b602082108114156129d3576129d2612978565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b612a1f81612a08565b8114612a2a57600080fd5b50565b600081359050612a3c81612a16565b92915050565b600060208284031215612a5857612a57612586565b5b6000612a6684828501612a2d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aa982612776565b9150612ab483612776565b925082821015612ac757612ac6612a6f565b5b828203905092915050565b6000612add82612a08565b9150612ae883612a08565b925082821015612afb57612afa612a6f565b5b828203905092915050565b6000612b11826125ee565b9150612b1c836125ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b5557612b54612a6f565b5b828202905092915050565b6000612b6b826125ee565b9150612b76836125ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bab57612baa612a6f565b5b828201905092915050565b6000612bc1826125ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612bf457612bf3612a6f565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612c5b6028836124d6565b9150612c6682612bff565b604082019050919050565b60006020820190508181036000830152612c8a81612c4e565b9050919050565b600081519050612ca0816125f8565b92915050565b600060208284031215612cbc57612cbb612586565b5b6000612cca84828501612c91565b91505092915050565b6000604082019050612ce86000830185612894565b612cf5602083018461274c565b9392505050565b6000612d07826125ee565b9150612d12836125ee565b925082821015612d2557612d24612a6f565b5b828203905092915050565b7f546f6b656e206964206973206f7574206f662072616e67650000000000000000600082015250565b6000612d666018836124d6565b9150612d7182612d30565b602082019050919050565b60006020820190508181036000830152612d9581612d59565b9050919050565b7f5573657220646f6573206e6f74206f776e20616e7920726f77647920726f6f73600082015250565b6000612dd26020836124d6565b9150612ddd82612d9c565b602082019050919050565b60006020820190508181036000830152612e0181612dc5565b9050919050565b6000612e23612e1e612e1984612a08565b6128fe565b6125ee565b9050919050565b612e3381612e08565b82525050565b6000604082019050612e4e6000830185612894565b612e5b6020830184612e2a565b9392505050565b6000612e6d82612a08565b915061ffff821415612e8257612e81612a6f565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612ec36020836124d6565b9150612ece82612e8d565b602082019050919050565b60006020820190508181036000830152612ef281612eb6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f556025836124d6565b9150612f6082612ef9565b604082019050919050565b60006020820190508181036000830152612f8481612f48565b9050919050565b6000602082019050612fa06000830184612e2a565b92915050565b600081519050612fb5816125c2565b92915050565b600060208284031215612fd157612fd0612586565b5b6000612fdf84828501612fa6565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130446026836124d6565b915061304f82612fe8565b604082019050919050565b6000602082019050818103600083015261307381613037565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130d66024836124d6565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131686022836124d6565b91506131738261310c565b604082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131fa6025836124d6565b91506132058261319e565b604082019050919050565b60006020820190508181036000830152613229816131ed565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061328c6023836124d6565b915061329782613230565b604082019050919050565b600060208201905081810360008301526132bb8161327f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061331e6026836124d6565b9150613329826132c2565b604082019050919050565b6000602082019050818103600083015261334d81613311565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061338a601f836124d6565b915061339582613354565b602082019050919050565b600060208201905081810360008301526133b98161337d565b905091905056fea2646970667358221220a8e3e8dcad584ce30e9c4e7f435fca54adddb66b769b5f77745c690528552b3f64736f6c634300080b0033

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

000000000000000000000000ca49b939ad0b0b148fa61641d799e7777ad2e5db

-----Decoded View---------------
Arg [0] : roo_contract (address): 0xcA49b939Ad0B0b148FA61641d799e7777Ad2e5db

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


Deployed Bytecode Sourcemap

26054:5883:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13507:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15674:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27761:974;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14627:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26426:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16325:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14469:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26301:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26743:1010;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17226:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31498:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26226:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28743:1111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31119:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14798:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25181:103;;;:::i;:::-;;26152:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24530:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13726:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17944:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31769:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15138:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30930:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29862:1060;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26375:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31309:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15376:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25439:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26098:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13507:100;13561:13;13594:5;13587:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13507:100;:::o;15674:169::-;15757:4;15774:39;15783:12;:10;:12::i;:::-;15797:7;15806:6;15774:8;:39::i;:::-;15831:4;15824:11;;15674:169;;;;:::o;27761:974::-;27837:7;27857:17;27877:1;27857:21;;27894:9;27889:812;27913:3;;:10;;27909:1;:14;27889:812;;;27945:9;27957:3;;27961:1;27957:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27945:18;;27978:19;28000:13;28010:2;28000:13;;:9;:13::i;:::-;27978:35;;28028:16;28084:7;28066:25;;:15;:25;28063:190;;;28134:12;28124:7;:22;;;;:::i;:::-;28112:34;;28063:190;;;28225:12;28206:15;28199:38;;;;:::i;:::-;28187:50;;28063:190;28267:12;28298:14;28315:4;28323:1;28320:2;:4;;;;:::i;:::-;28315:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;28298:27;;28355:1;28343:8;:13;;;28340:318;;;28396:29;28384:9;:41;;;;;;:::i;:::-;28377:48;;28340:318;;;28463:1;28451:8;:13;;;28447:211;;;28504:30;28492:9;:42;;;;;;:::i;:::-;28485:49;;28447:211;;;28572:1;28560:8;:13;;;28556:102;;;28613:29;28601:9;:41;;;;;;:::i;:::-;28594:48;;28556:102;28447:211;28340:318;28685:4;28672:17;;;;;:::i;:::-;;;27930:771;;;;;27925:3;;;;;:::i;:::-;;;;27889:812;;;;28718:9;28711:16;;;27761:974;;;;:::o;14627:108::-;14688:7;14715:12;;14708:19;;14627:108;:::o;26426:31::-;;;:::o;16325:492::-;16465:4;16482:36;16492:6;16500:9;16511:6;16482:9;:36::i;:::-;16531:24;16558:11;:19;16570:6;16558:19;;;;;;;;;;;;;;;:33;16578:12;:10;:12::i;:::-;16558:33;;;;;;;;;;;;;;;;16531:60;;16630:6;16610:16;:26;;16602:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16717:57;16726:6;16734:12;:10;:12::i;:::-;16767:6;16748:16;:25;16717:8;:57::i;:::-;16805:4;16798:11;;;16325:492;;;;;:::o;14469:93::-;14527:5;14552:2;14545:9;;14469:93;:::o;26301:67::-;;;:::o;26743:1010::-;26811:7;26831:13;26847:12;:22;;;26870:4;26847:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26831:44;;26886:17;26923:9;26918:801;26942:5;26938:1;:9;26918:801;;;26969:10;26982:12;:32;;;27015:4;27021:1;26982:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26969:54;;27038:19;27060:13;27070:2;27060:9;:13::i;:::-;27038:35;;27088:16;27144:7;27126:25;;:15;:25;27123:190;;;27194:12;27184:7;:22;;;;:::i;:::-;27172:34;;27123:190;;;27285:12;27266:15;27259:38;;;;:::i;:::-;27247:50;;27123:190;27327:14;27344:4;27352:1;27349:2;:4;;;;:::i;:::-;27344:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;27327:27;;27384:1;27372:8;:13;;;27369:339;;;27432:29;27420:9;:41;;;;;;:::i;:::-;27406:56;;;;;:::i;:::-;;;27369:339;;;27499:1;27487:8;:13;;;27484:224;;;27547:30;27535:9;:42;;;;;;:::i;:::-;27521:57;;;;;:::i;:::-;;;27484:224;;;27614:1;27602:8;:13;;;27599:109;;;27662:29;27650:9;:41;;;;;;:::i;:::-;27636:56;;;;;:::i;:::-;;;27599:109;27484:224;27369:339;26954:765;;;;26949:3;;;;;:::i;:::-;;;;26918:801;;;;27736:9;27729:16;;;;26743:1010;;;:::o;17226:215::-;17314:4;17331:80;17340:12;:10;:12::i;:::-;17354:7;17400:10;17363:11;:25;17375:12;:10;:12::i;:::-;17363:25;;;;;;;;;;;;;;;:34;17389:7;17363:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;17331:8;:80::i;:::-;17429:4;17422:11;;17226:215;;;;:::o;31498:263::-;31550:6;31582:1;31577:2;:6;:20;;;;;31592:5;31587:2;:10;31577:20;31569:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31654:7;31641:20;;:4;31649:1;31646:2;:4;;;;:::i;:::-;31641:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:20;;;31637:117;;;31685:4;31693:1;31690:2;:4;;;;:::i;:::-;31685:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;31678:17;;;;31637:117;31735:7;31728:14;;31498:263;;;;:::o;26226:68::-;;;:::o;28743:1111::-;28798:13;28814:12;:22;;;28837:4;28814:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28798:44;;28869:1;28861:5;:9;28853:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28918:17;28950:10;28976:8;28987:1;28976:12;;28971:843;28994:5;28990:1;:9;;;28971:843;;;29026:12;:32;;;29059:4;29065:1;29026:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29021:46;;29082:19;29104:13;29114:2;29104:9;:13::i;:::-;29082:35;;29132:16;29188:7;29170:25;;:15;:25;29167:190;;;29238:12;29228:7;:22;;;;:::i;:::-;29216:34;;29167:190;;;29329:12;29310:15;29303:38;;;;:::i;:::-;29291:50;;29167:190;29371:14;29388:4;29396:1;29393:2;:4;;;;:::i;:::-;29388:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;29371:27;;29428:1;29416:8;:13;;;29413:339;;;29476:29;29464:9;:41;;;;;;:::i;:::-;29450:56;;;;;:::i;:::-;;;29413:339;;;29543:1;29531:8;:13;;;29528:224;;;29591:30;29579:9;:42;;;;;;:::i;:::-;29565:57;;;;;:::i;:::-;;;29528:224;;;29658:1;29646:8;:13;;;29643:109;;;29706:29;29694:9;:41;;;;;;:::i;:::-;29680:56;;;;;:::i;:::-;;;29643:109;29528:224;29413:339;29786:15;29766:4;29774:1;29771:2;:4;;;;:::i;:::-;29766:10;;;;;;;:::i;:::-;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;29006:808;;;29001:3;;;;;:::i;:::-;;;;28971:843;;;;29824:22;29830:4;29836:9;29824:5;:22::i;:::-;28787:1067;;;28743:1111;:::o;31119:182::-;24761:12;:10;:12::i;:::-;24750:23;;:7;:5;:7::i;:::-;:23;;;24742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31204:8:::1;31199:95;31222:8;;:15;;31218:1;:19;;;31199:95;;;31281:1;31259:4;31276:1;31264:8;;31273:1;31264:11;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:13;;;;:::i;:::-;31259:19;;;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;31239:3;;;;;:::i;:::-;;;;31199:95;;;;31119:182:::0;;:::o;14798:127::-;14872:7;14899:9;:18;14909:7;14899:18;;;;;;;;;;;;;;;;14892:25;;14798:127;;;:::o;25181:103::-;24761:12;:10;:12::i;:::-;24750:23;;:7;:5;:7::i;:::-;:23;;;24742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25246:30:::1;25273:1;25246:18;:30::i;:::-;25181:103::o:0;26152:67::-;;;:::o;24530:87::-;24576:7;24603:6;;;;;;;;;;;24596:13;;24530:87;:::o;13726:104::-;13782:13;13815:7;13808:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13726:104;:::o;17944:413::-;18037:4;18054:24;18081:11;:25;18093:12;:10;:12::i;:::-;18081:25;;;;;;;;;;;;;;;:34;18107:7;18081:34;;;;;;;;;;;;;;;;18054:61;;18154:15;18134:16;:35;;18126:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18247:67;18256:12;:10;:12::i;:::-;18270:7;18298:15;18279:16;:34;18247:8;:67::i;:::-;18345:4;18338:11;;;17944:413;;;;:::o;31769:165::-;31821:7;31854:1;31849:2;:6;:20;;;;;31864:5;31859:2;:10;31849:20;31841:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31916:4;31924:1;31921:2;:4;;;;:::i;:::-;31916:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;31909:17;;;;31769:165;;;:::o;15138:175::-;15224:4;15241:42;15251:12;:10;:12::i;:::-;15265:9;15276:6;15241:9;:42::i;:::-;15301:4;15294:11;;15138:175;;;;:::o;30930:181::-;24761:12;:10;:12::i;:::-;24750:23;;:7;:5;:7::i;:::-;:23;;;24742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31014:8:::1;31009:95;31032:8;;:15;;31028:1;:19;;;31009:95;;;31091:1;31069:4;31086:1;31074:8;;31083:1;31074:11;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:13;;;;:::i;:::-;31069:19;;;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;31049:3;;;;;:::i;:::-;;;;31009:95;;;;30930:181:::0;;:::o;29862:1060::-;29930:8;29925:990;29948:3;;:10;;29944:1;:14;;;29925:990;;;29980:9;29992:3;;29996:1;29992:6;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29980:18;;30026:1;30021:2;:6;;;:20;;;;;30036:5;30031:2;:10;;;30021:20;30013:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30085:13;30101:12;:20;;;30122:2;30101:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30085:40;;30140:19;30162:13;30172:2;30162:13;;:9;:13::i;:::-;30140:35;;30190:16;30246:7;30228:25;;:15;:25;30225:190;;;30296:12;30286:7;:22;;;;:::i;:::-;30274:34;;30225:190;;;30387:12;30368:15;30361:38;;;;:::i;:::-;30349:50;;30225:190;30429:12;30460:14;30477:4;30485:1;30482:2;:4;;;;:::i;:::-;30477:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;30460:27;;30517:1;30505:8;:13;;;30502:318;;;30558:29;30546:9;:41;;;;;;:::i;:::-;30539:48;;30502:318;;;30625:1;30613:8;:13;;;30609:211;;;30666:30;30654:9;:42;;;;;;:::i;:::-;30647:49;;30609:211;;;30734:1;30722:8;:13;;;30718:102;;;30775:29;30763:9;:41;;;;;;:::i;:::-;30756:48;;30718:102;30609:211;30502:318;30854:15;30834:4;30842:1;30839:2;:4;;;;:::i;:::-;30834:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30885:18;30891:5;30898:4;30885:5;:18::i;:::-;29965:950;;;;;;29960:3;;;;;:::i;:::-;;;;29925:990;;;;29862:1060;;:::o;26375:44::-;;;:::o;31309:181::-;24761:12;:10;:12::i;:::-;24750:23;;:7;:5;:7::i;:::-;:23;;;24742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31393:8:::1;31388:95;31411:8;;:15;;31407:1;:19;;;31388:95;;;31470:1;31448:4;31465:1;31453:8;;31462:1;31453:11;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:13;;;;:::i;:::-;31448:19;;;;;;;;;:::i;:::-;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;31428:3;;;;;:::i;:::-;;;;31388:95;;;;31309:181:::0;;:::o;15376:151::-;15465:7;15492:11;:18;15504:5;15492:18;;;;;;;;;;;;;;;:27;15511:7;15492:27;;;;;;;;;;;;;;;;15485:34;;15376:151;;;;:::o;25439:201::-;24761:12;:10;:12::i;:::-;24750:23;;:7;:5;:7::i;:::-;:23;;;24742:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25548:1:::1;25528:22;;:8;:22;;;;25520:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25604:28;25623:8;25604:18;:28::i;:::-;25439:201:::0;:::o;26098:47::-;;;:::o;11162:98::-;11215:7;11242:10;11235:17;;11162:98;:::o;21628:380::-;21781:1;21764:19;;:5;:19;;;;21756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21862:1;21843:21;;:7;:21;;;;21835:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21946:6;21916:11;:18;21928:5;21916:18;;;;;;;;;;;;;;;:27;21935:7;21916:27;;;;;;;;;;;;;;;:36;;;;21984:7;21968:32;;21977:5;21968:32;;;21993:6;21968:32;;;;;;:::i;:::-;;;;;;;;21628:380;;;:::o;18847:733::-;19005:1;18987:20;;:6;:20;;;;18979:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19089:1;19068:23;;:9;:23;;;;19060:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19144:47;19165:6;19173:9;19184:6;19144:20;:47::i;:::-;19204:21;19228:9;:17;19238:6;19228:17;;;;;;;;;;;;;;;;19204:41;;19281:6;19264:13;:23;;19256:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19402:6;19386:13;:22;19366:9;:17;19376:6;19366:17;;;;;;;;;;;;;;;:42;;;;19454:6;19430:9;:20;19440:9;19430:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;19495:9;19478:35;;19487:6;19478:35;;;19506:6;19478:35;;;;;;:::i;:::-;;;;;;;;19526:46;19546:6;19554:9;19565:6;19526:19;:46::i;:::-;18968:612;18847:733;;;:::o;19867:399::-;19970:1;19951:21;;:7;:21;;;;19943:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20021:49;20050:1;20054:7;20063:6;20021:20;:49::i;:::-;20099:6;20083:12;;:22;;;;;;;:::i;:::-;;;;;;;;20138:6;20116:9;:18;20126:7;20116:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;20181:7;20160:37;;20177:1;20160:37;;;20190:6;20160:37;;;;;;:::i;:::-;;;;;;;;20210:48;20238:1;20242:7;20251:6;20210:19;:48::i;:::-;19867:399;;:::o;25800:191::-;25874:16;25893:6;;;;;;;;;;;25874:25;;25919:8;25910:6;;:17;;;;;;;;;;;;;;;;;;25974:8;25943:40;;25964:8;25943:40;;;;;;;;;;;;25863:128;25800:191;:::o;22608:125::-;;;;:::o;23337:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:117::-;3603:1;3600;3593:12;3617:117;3726:1;3723;3716:12;3740:117;3849:1;3846;3839:12;3879:567;3951:8;3961:6;4011:3;4004:4;3996:6;3992:17;3988:27;3978:122;;4019:79;;:::i;:::-;3978:122;4132:6;4119:20;4109:30;;4162:18;4154:6;4151:30;4148:117;;;4184:79;;:::i;:::-;4148:117;4298:4;4290:6;4286:17;4274:29;;4352:3;4344:4;4336:6;4332:17;4322:8;4318:32;4315:41;4312:128;;;4359:79;;:::i;:::-;4312:128;3879:567;;;;;:::o;4452:557::-;4537:6;4545;4594:2;4582:9;4573:7;4569:23;4565:32;4562:119;;;4600:79;;:::i;:::-;4562:119;4748:1;4737:9;4733:17;4720:31;4778:18;4770:6;4767:30;4764:117;;;4800:79;;:::i;:::-;4764:117;4913:79;4984:7;4975:6;4964:9;4960:22;4913:79;:::i;:::-;4895:97;;;;4691:311;4452:557;;;;;:::o;5015:118::-;5102:24;5120:5;5102:24;:::i;:::-;5097:3;5090:37;5015:118;;:::o;5139:222::-;5232:4;5270:2;5259:9;5255:18;5247:26;;5283:71;5351:1;5340:9;5336:17;5327:6;5283:71;:::i;:::-;5139:222;;;;:::o;5367:93::-;5403:7;5443:10;5436:5;5432:22;5421:33;;5367:93;;;:::o;5466:115::-;5551:23;5568:5;5551:23;:::i;:::-;5546:3;5539:36;5466:115;;:::o;5587:218::-;5678:4;5716:2;5705:9;5701:18;5693:26;;5729:69;5795:1;5784:9;5780:17;5771:6;5729:69;:::i;:::-;5587:218;;;;:::o;5811:619::-;5888:6;5896;5904;5953:2;5941:9;5932:7;5928:23;5924:32;5921:119;;;5959:79;;:::i;:::-;5921:119;6079:1;6104:53;6149:7;6140:6;6129:9;6125:22;6104:53;:::i;:::-;6094:63;;6050:117;6206:2;6232:53;6277:7;6268:6;6257:9;6253:22;6232:53;:::i;:::-;6222:63;;6177:118;6334:2;6360:53;6405:7;6396:6;6385:9;6381:22;6360:53;:::i;:::-;6350:63;;6305:118;5811:619;;;;;:::o;6436:86::-;6471:7;6511:4;6504:5;6500:16;6489:27;;6436:86;;;:::o;6528:112::-;6611:22;6627:5;6611:22;:::i;:::-;6606:3;6599:35;6528:112;;:::o;6646:214::-;6735:4;6773:2;6762:9;6758:18;6750:26;;6786:67;6850:1;6839:9;6835:17;6826:6;6786:67;:::i;:::-;6646:214;;;;:::o;6866:329::-;6925:6;6974:2;6962:9;6953:7;6949:23;6945:32;6942:119;;;6980:79;;:::i;:::-;6942:119;7100:1;7125:53;7170:7;7161:6;7150:9;7146:22;7125:53;:::i;:::-;7115:63;;7071:117;6866:329;;;;:::o;7201:::-;7260:6;7309:2;7297:9;7288:7;7284:23;7280:32;7277:119;;;7315:79;;:::i;:::-;7277:119;7435:1;7460:53;7505:7;7496:6;7485:9;7481:22;7460:53;:::i;:::-;7450:63;;7406:117;7201:329;;;;:::o;7536:118::-;7623:24;7641:5;7623:24;:::i;:::-;7618:3;7611:37;7536:118;;:::o;7660:222::-;7753:4;7791:2;7780:9;7776:18;7768:26;;7804:71;7872:1;7861:9;7857:17;7848:6;7804:71;:::i;:::-;7660:222;;;;:::o;7888:474::-;7956:6;7964;8013:2;8001:9;7992:7;7988:23;7984:32;7981:119;;;8019:79;;:::i;:::-;7981:119;8139:1;8164:53;8209:7;8200:6;8189:9;8185:22;8164:53;:::i;:::-;8154:63;;8110:117;8266:2;8292:53;8337:7;8328:6;8317:9;8313:22;8292:53;:::i;:::-;8282:63;;8237:118;7888:474;;;;;:::o;8368:60::-;8396:3;8417:5;8410:12;;8368:60;;;:::o;8434:142::-;8484:9;8517:53;8535:34;8544:24;8562:5;8544:24;:::i;:::-;8535:34;:::i;:::-;8517:53;:::i;:::-;8504:66;;8434:142;;;:::o;8582:126::-;8632:9;8665:37;8696:5;8665:37;:::i;:::-;8652:50;;8582:126;;;:::o;8714:151::-;8789:9;8822:37;8853:5;8822:37;:::i;:::-;8809:50;;8714:151;;;:::o;8871:181::-;8983:62;9039:5;8983:62;:::i;:::-;8978:3;8971:75;8871:181;;:::o;9058:272::-;9176:4;9214:2;9203:9;9199:18;9191:26;;9227:96;9320:1;9309:9;9305:17;9296:6;9227:96;:::i;:::-;9058:272;;;;:::o;9336:180::-;9384:77;9381:1;9374:88;9481:4;9478:1;9471:15;9505:4;9502:1;9495:15;9522:320;9566:6;9603:1;9597:4;9593:12;9583:22;;9650:1;9644:4;9640:12;9671:18;9661:81;;9727:4;9719:6;9715:17;9705:27;;9661:81;9789:2;9781:6;9778:14;9758:18;9755:38;9752:84;;;9808:18;;:::i;:::-;9752:84;9573:269;9522:320;;;:::o;9848:180::-;9896:77;9893:1;9886:88;9993:4;9990:1;9983:15;10017:4;10014:1;10007:15;10034:89;10070:7;10110:6;10103:5;10099:18;10088:29;;10034:89;;;:::o;10129:120::-;10201:23;10218:5;10201:23;:::i;:::-;10194:5;10191:34;10181:62;;10239:1;10236;10229:12;10181:62;10129:120;:::o;10255:137::-;10300:5;10338:6;10325:20;10316:29;;10354:32;10380:5;10354:32;:::i;:::-;10255:137;;;;:::o;10398:327::-;10456:6;10505:2;10493:9;10484:7;10480:23;10476:32;10473:119;;;10511:79;;:::i;:::-;10473:119;10631:1;10656:52;10700:7;10691:6;10680:9;10676:22;10656:52;:::i;:::-;10646:62;;10602:116;10398:327;;;;:::o;10731:180::-;10779:77;10776:1;10769:88;10876:4;10873:1;10866:15;10900:4;10897:1;10890:15;10917:188;10956:4;10976:19;10993:1;10976:19;:::i;:::-;10971:24;;11009:19;11026:1;11009:19;:::i;:::-;11004:24;;11047:1;11044;11041:8;11038:34;;;11052:18;;:::i;:::-;11038:34;11097:1;11094;11090:9;11082:17;;10917:188;;;;:::o;11111:::-;11150:4;11170:19;11187:1;11170:19;:::i;:::-;11165:24;;11203:19;11220:1;11203:19;:::i;:::-;11198:24;;11241:1;11238;11235:8;11232:34;;;11246:18;;:::i;:::-;11232:34;11291:1;11288;11284:9;11276:17;;11111:188;;;;:::o;11305:348::-;11345:7;11368:20;11386:1;11368:20;:::i;:::-;11363:25;;11402:20;11420:1;11402:20;:::i;:::-;11397:25;;11590:1;11522:66;11518:74;11515:1;11512:81;11507:1;11500:9;11493:17;11489:105;11486:131;;;11597:18;;:::i;:::-;11486:131;11645:1;11642;11638:9;11627:20;;11305:348;;;;:::o;11659:305::-;11699:3;11718:20;11736:1;11718:20;:::i;:::-;11713:25;;11752:20;11770:1;11752:20;:::i;:::-;11747:25;;11906:1;11838:66;11834:74;11831:1;11828:81;11825:107;;;11912:18;;:::i;:::-;11825:107;11956:1;11953;11949:9;11942:16;;11659:305;;;;:::o;11970:233::-;12009:3;12032:24;12050:5;12032:24;:::i;:::-;12023:33;;12078:66;12071:5;12068:77;12065:103;;;12148:18;;:::i;:::-;12065:103;12195:1;12188:5;12184:13;12177:20;;11970:233;;;:::o;12209:227::-;12349:34;12345:1;12337:6;12333:14;12326:58;12418:10;12413:2;12405:6;12401:15;12394:35;12209:227;:::o;12442:366::-;12584:3;12605:67;12669:2;12664:3;12605:67;:::i;:::-;12598:74;;12681:93;12770:3;12681:93;:::i;:::-;12799:2;12794:3;12790:12;12783:19;;12442:366;;;:::o;12814:419::-;12980:4;13018:2;13007:9;13003:18;12995:26;;13067:9;13061:4;13057:20;13053:1;13042:9;13038:17;13031:47;13095:131;13221:4;13095:131;:::i;:::-;13087:139;;12814:419;;;:::o;13239:143::-;13296:5;13327:6;13321:13;13312:22;;13343:33;13370:5;13343:33;:::i;:::-;13239:143;;;;:::o;13388:351::-;13458:6;13507:2;13495:9;13486:7;13482:23;13478:32;13475:119;;;13513:79;;:::i;:::-;13475:119;13633:1;13658:64;13714:7;13705:6;13694:9;13690:22;13658:64;:::i;:::-;13648:74;;13604:128;13388:351;;;;:::o;13745:332::-;13866:4;13904:2;13893:9;13889:18;13881:26;;13917:71;13985:1;13974:9;13970:17;13961:6;13917:71;:::i;:::-;13998:72;14066:2;14055:9;14051:18;14042:6;13998:72;:::i;:::-;13745:332;;;;;:::o;14083:191::-;14123:4;14143:20;14161:1;14143:20;:::i;:::-;14138:25;;14177:20;14195:1;14177:20;:::i;:::-;14172:25;;14216:1;14213;14210:8;14207:34;;;14221:18;;:::i;:::-;14207:34;14266:1;14263;14259:9;14251:17;;14083:191;;;;:::o;14280:174::-;14420:26;14416:1;14408:6;14404:14;14397:50;14280:174;:::o;14460:366::-;14602:3;14623:67;14687:2;14682:3;14623:67;:::i;:::-;14616:74;;14699:93;14788:3;14699:93;:::i;:::-;14817:2;14812:3;14808:12;14801:19;;14460:366;;;:::o;14832:419::-;14998:4;15036:2;15025:9;15021:18;15013:26;;15085:9;15079:4;15075:20;15071:1;15060:9;15056:17;15049:47;15113:131;15239:4;15113:131;:::i;:::-;15105:139;;14832:419;;;:::o;15257:182::-;15397:34;15393:1;15385:6;15381:14;15374:58;15257:182;:::o;15445:366::-;15587:3;15608:67;15672:2;15667:3;15608:67;:::i;:::-;15601:74;;15684:93;15773:3;15684:93;:::i;:::-;15802:2;15797:3;15793:12;15786:19;;15445:366;;;:::o;15817:419::-;15983:4;16021:2;16010:9;16006:18;15998:26;;16070:9;16064:4;16060:20;16056:1;16045:9;16041:17;16034:47;16098:131;16224:4;16098:131;:::i;:::-;16090:139;;15817:419;;;:::o;16242:140::-;16291:9;16324:52;16342:33;16351:23;16368:5;16351:23;:::i;:::-;16342:33;:::i;:::-;16324:52;:::i;:::-;16311:65;;16242:140;;;:::o;16388:129::-;16474:36;16504:5;16474:36;:::i;:::-;16469:3;16462:49;16388:129;;:::o;16523:330::-;16643:4;16681:2;16670:9;16666:18;16658:26;;16694:71;16762:1;16751:9;16747:17;16738:6;16694:71;:::i;:::-;16775;16842:2;16831:9;16827:18;16818:6;16775:71;:::i;:::-;16523:330;;;;;:::o;16859:171::-;16897:3;16920:23;16937:5;16920:23;:::i;:::-;16911:32;;16965:6;16958:5;16955:17;16952:43;;;16975:18;;:::i;:::-;16952:43;17022:1;17015:5;17011:13;17004:20;;16859:171;;;:::o;17036:182::-;17176:34;17172:1;17164:6;17160:14;17153:58;17036:182;:::o;17224:366::-;17366:3;17387:67;17451:2;17446:3;17387:67;:::i;:::-;17380:74;;17463:93;17552:3;17463:93;:::i;:::-;17581:2;17576:3;17572:12;17565:19;;17224:366;;;:::o;17596:419::-;17762:4;17800:2;17789:9;17785:18;17777:26;;17849:9;17843:4;17839:20;17835:1;17824:9;17820:17;17813:47;17877:131;18003:4;17877:131;:::i;:::-;17869:139;;17596:419;;;:::o;18021:224::-;18161:34;18157:1;18149:6;18145:14;18138:58;18230:7;18225:2;18217:6;18213:15;18206:32;18021:224;:::o;18251:366::-;18393:3;18414:67;18478:2;18473:3;18414:67;:::i;:::-;18407:74;;18490:93;18579:3;18490:93;:::i;:::-;18608:2;18603:3;18599:12;18592:19;;18251:366;;;:::o;18623:419::-;18789:4;18827:2;18816:9;18812:18;18804:26;;18876:9;18870:4;18866:20;18862:1;18851:9;18847:17;18840:47;18904:131;19030:4;18904:131;:::i;:::-;18896:139;;18623:419;;;:::o;19048:220::-;19140:4;19178:2;19167:9;19163:18;19155:26;;19191:70;19258:1;19247:9;19243:17;19234:6;19191:70;:::i;:::-;19048:220;;;;:::o;19274:143::-;19331:5;19362:6;19356:13;19347:22;;19378:33;19405:5;19378:33;:::i;:::-;19274:143;;;;:::o;19423:351::-;19493:6;19542:2;19530:9;19521:7;19517:23;19513:32;19510:119;;;19548:79;;:::i;:::-;19510:119;19668:1;19693:64;19749:7;19740:6;19729:9;19725:22;19693:64;:::i;:::-;19683:74;;19639:128;19423:351;;;;:::o;19780:225::-;19920:34;19916:1;19908:6;19904:14;19897:58;19989:8;19984:2;19976:6;19972:15;19965:33;19780:225;:::o;20011:366::-;20153:3;20174:67;20238:2;20233:3;20174:67;:::i;:::-;20167:74;;20250:93;20339:3;20250:93;:::i;:::-;20368:2;20363:3;20359:12;20352:19;;20011:366;;;:::o;20383:419::-;20549:4;20587:2;20576:9;20572:18;20564:26;;20636:9;20630:4;20626:20;20622:1;20611:9;20607:17;20600:47;20664:131;20790:4;20664:131;:::i;:::-;20656:139;;20383:419;;;:::o;20808:223::-;20948:34;20944:1;20936:6;20932:14;20925:58;21017:6;21012:2;21004:6;21000:15;20993:31;20808:223;:::o;21037:366::-;21179:3;21200:67;21264:2;21259:3;21200:67;:::i;:::-;21193:74;;21276:93;21365:3;21276:93;:::i;:::-;21394:2;21389:3;21385:12;21378:19;;21037:366;;;:::o;21409:419::-;21575:4;21613:2;21602:9;21598:18;21590:26;;21662:9;21656:4;21652:20;21648:1;21637:9;21633:17;21626:47;21690:131;21816:4;21690:131;:::i;:::-;21682:139;;21409:419;;;:::o;21834:221::-;21974:34;21970:1;21962:6;21958:14;21951:58;22043:4;22038:2;22030:6;22026:15;22019:29;21834:221;:::o;22061:366::-;22203:3;22224:67;22288:2;22283:3;22224:67;:::i;:::-;22217:74;;22300:93;22389:3;22300:93;:::i;:::-;22418:2;22413:3;22409:12;22402:19;;22061:366;;;:::o;22433:419::-;22599:4;22637:2;22626:9;22622:18;22614:26;;22686:9;22680:4;22676:20;22672:1;22661:9;22657:17;22650:47;22714:131;22840:4;22714:131;:::i;:::-;22706:139;;22433:419;;;:::o;22858:224::-;22998:34;22994:1;22986:6;22982:14;22975:58;23067:7;23062:2;23054:6;23050:15;23043:32;22858:224;:::o;23088:366::-;23230:3;23251:67;23315:2;23310:3;23251:67;:::i;:::-;23244:74;;23327:93;23416:3;23327:93;:::i;:::-;23445:2;23440:3;23436:12;23429:19;;23088:366;;;:::o;23460:419::-;23626:4;23664:2;23653:9;23649:18;23641:26;;23713:9;23707:4;23703:20;23699:1;23688:9;23684:17;23677:47;23741:131;23867:4;23741:131;:::i;:::-;23733:139;;23460:419;;;:::o;23885:222::-;24025:34;24021:1;24013:6;24009:14;24002:58;24094:5;24089:2;24081:6;24077:15;24070:30;23885:222;:::o;24113:366::-;24255:3;24276:67;24340:2;24335:3;24276:67;:::i;:::-;24269:74;;24352:93;24441:3;24352:93;:::i;:::-;24470:2;24465:3;24461:12;24454:19;;24113:366;;;:::o;24485:419::-;24651:4;24689:2;24678:9;24674:18;24666:26;;24738:9;24732:4;24728:20;24724:1;24713:9;24709:17;24702:47;24766:131;24892:4;24766:131;:::i;:::-;24758:139;;24485:419;;;:::o;24910:225::-;25050:34;25046:1;25038:6;25034:14;25027:58;25119:8;25114:2;25106:6;25102:15;25095:33;24910:225;:::o;25141:366::-;25283:3;25304:67;25368:2;25363:3;25304:67;:::i;:::-;25297:74;;25380:93;25469:3;25380:93;:::i;:::-;25498:2;25493:3;25489:12;25482:19;;25141:366;;;:::o;25513:419::-;25679:4;25717:2;25706:9;25702:18;25694:26;;25766:9;25760:4;25756:20;25752:1;25741:9;25737:17;25730:47;25794:131;25920:4;25794:131;:::i;:::-;25786:139;;25513:419;;;:::o;25938:181::-;26078:33;26074:1;26066:6;26062:14;26055:57;25938:181;:::o;26125:366::-;26267:3;26288:67;26352:2;26347:3;26288:67;:::i;:::-;26281:74;;26364:93;26453:3;26364:93;:::i;:::-;26482:2;26477:3;26473:12;26466:19;;26125:366;;;:::o;26497:419::-;26663:4;26701:2;26690:9;26686:18;26678:26;;26750:9;26744:4;26740:20;26736:1;26725:9;26721:17;26714:47;26778:131;26904:4;26778:131;:::i;:::-;26770:139;;26497:419;;;:::o

Swarm Source

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