ETH Price: $3,439.75 (-1.38%)
Gas: 8 Gwei

Token

AdventureSilver (ASIL)
 

Overview

Max Total Supply

7,500,000,000 ASIL

Holders

93

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
33,000 ASIL

Value
$0.00
0xb91b025739edd7b222b1f7b3e48841bbd658b86a
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:
AdventureSilver

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-07
*/

// SPDX-License-Identifier: UNLICENSED

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;
    }
}

/**
 * @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);
}

/**
 * @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);
}



/**
 * @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 {}
}


/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}



/**
 * @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);
}

/**
 * @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;
}


/**
 * @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);
}


/// @title Adventure Silver for everyone
/// @author Charlie Hulcher <https://twitter.com/chulcher>
/// @notice This contract mints Adventure Silver for active Ethereum wallets
/// and provides administrative functions to the controlling DAO. It allows:
/// * Any Ethereum wallet with a certain balance to claim Adventure Silver once per season
/// * A DAO to set seasons for new opportunities to claim Adventure Silver
/// * A DAO to mint Adventure Silver
/// @custom:unaudited This contract has not been audited. Use at your own risk.
contract AdventureSilver is Context, Ownable, ERC20 {
    address public constant lootContractAddress = 0xFF9C1b15B16263C61d017ee9F65C50e4AE0113D7;
    address public constant mLootContractAddress = 0x1dfe7Ca09e99d10835Bf73044a23B73Fc20623DF;
    address public constant roleContractAddress = 0xCd4D337554862F9bC9ffffB67465B7d643E4E3ad;

    IERC721Enumerable public lootContract;
    IERC721Enumerable public mLootContract;
    IERC721Enumerable public roleContract;

    // The amount sent to each claimant
    uint256 public award = 3000 * (10**decimals());

    // The maximum award that can be claimed
    uint256 public awardCap = 100 * award;

    // Seasons allow users to claim tokens regularly. Seasons
    // are decided by the DAO.
    uint256 public season = 0;

    // The minimum wallet balance required to make a claim
    // Set to 0.005 ETH
    uint256 public claimantMinimumBalance = 5 * (10**15);

    // Track claimed tokens for the current season
    // Format claims[season][address][claimed]
    mapping(uint256 => mapping(address => bool)) public claims;

    event Withdraw(address recipient, uint value);
    event BeginSeason(uint256 season);
    event Mint(uint256 amount);
    event Burn(uint256 amount);

    constructor() Ownable() ERC20("AdventureSilver", "ASIL"){
        // 7.125B to contract
        _mint(address(this), 7125000000 * (10**decimals()));
        // 375M to sender
        _mint(_msgSender(), 375000000 * (10**decimals()));

        daoSetSeason(1);

        lootContract = IERC721Enumerable(lootContractAddress);
        mLootContract = IERC721Enumerable(mLootContractAddress);
        roleContract = IERC721Enumerable(roleContractAddress);
    }

    /// @notice Claim tokens
    function claim() external {
        require(_msgSender().balance >= claimantMinimumBalance, "INSUFFICIENT_BALANCE_FOR_CLAIM");
        require(!claims[season][_msgSender()], "ALREADY_CLAIMED");

        uint256 lootBalance = lootContract.balanceOf(_msgSender())
            + mLootContract.balanceOf(_msgSender())
            + roleContract.balanceOf(_msgSender());

        _claim(_msgSender(), lootBalance);
    }

    /// @dev Internal function to award tokens upon claiming
    function _claim(address claimant, uint256 lootBalance) internal {
        uint256 multiplier = lootBalance + 1;
        uint256 totalToAward = award * multiplier;
        if (totalToAward > awardCap) {
            totalToAward = awardCap;
        }

        require(balanceOf(address(this)) >= totalToAward, "SUPPLY_EXHAUSTED");

        claims[season][claimant] = true;

        _transfer(address(this), claimant, totalToAward);
        emit Withdraw(claimant, totalToAward);
    }

    /// @notice Allows the DAO to set a season
    /// @param season_ The season to set
    function daoSetSeason(uint256 season_) public onlyOwner {
        season = season_;
        emit BeginSeason(season);
    }

    /// @notice Allows the DAO to set the award amount per claim
    /// @param award_ The award per claim
    function daoSetAward(uint256 award_) public onlyOwner {
        award = award_ * (10**decimals());
    }

    /// @notice Allows the DAO to set the award cap for loot holders
    /// @param cap_ The award cap per claim
    function daoSetAwardCap(uint256 cap_) public onlyOwner {
        awardCap = cap_ * (10**decimals());
    }

    /// @notice Allows the DAO to set the required minimum ethereum balance per claimant
    /// @param claimantMinimumBalance_ The award per claim
    function daoSetClaimantMinimumBalance(uint256 claimantMinimumBalance_) public onlyOwner {
        claimantMinimumBalance = claimantMinimumBalance_;
    }

    /// @notice Allows the DAO to mint new supply for awards
    /// @param newSupply The number of tokens to mint
    function daoMintSupply(uint256 newSupply) public onlyOwner {
        if (newSupply > 0) {
            _mint(address(this), newSupply * (10**decimals()));
        }
    }

    /// @notice Allows the DAO to mint new tokens.
    /// @param amount The number of tokens to mint (not in raw decimals).
    function daoMint(uint256 amount) external onlyOwner {
        uint256 total = amount * (10**decimals());
        _mint(owner(), total);
        emit Mint(total);
    }

    /// @notice Allows the DAO to burn tokens.
    /// @param amount The number of tokens to burn (not in raw decimals).
    function daoBurn(uint256 amount) external onlyOwner {
        uint256 total = amount * (10**decimals());
        _burn(address(this), total);
        emit Burn(total);
    }

    /// @notice Allows the DAO to set a season for new Adventure Silver claims
    /// @param season_ The season to start
    /// @param award_ The number of tokens to award each claimant in this season
    /// @param cap_ The award cap per claim
    /// @param claimantMinimumBalance_ The minimum required Ether balance of each claimant
    /// @param newSupply The number of tokens that should be minted for claims
    function daoBeginSeasonAtomic(uint256 season_, uint256 award_, uint256 cap_, uint256 claimantMinimumBalance_, uint256 newSupply) external onlyOwner {
        daoSetSeason(season_);
        daoSetAward(award_);
        daoSetAwardCap(cap_);
        daoSetClaimantMinimumBalance(claimantMinimumBalance_);
        daoMintSupply(newSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"season","type":"uint256"}],"name":"BeginSeason","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"award","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"awardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimantMinimumBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"claims","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"},{"internalType":"uint256","name":"award_","type":"uint256"},{"internalType":"uint256","name":"cap_","type":"uint256"},{"internalType":"uint256","name":"claimantMinimumBalance_","type":"uint256"},{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"daoBeginSeasonAtomic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"daoBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"daoMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"daoMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"award_","type":"uint256"}],"name":"daoSetAward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap_","type":"uint256"}],"name":"daoSetAwardCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimantMinimumBalance_","type":"uint256"}],"name":"daoSetClaimantMinimumBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"season_","type":"uint256"}],"name":"daoSetSeason","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lootContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lootContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mLootContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mLootContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"roleContract","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roleContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"season","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]

608060405262000014620002cd60201b60201c565b600a6200002291906200085c565b610bb862000031919062000999565b600955600954606462000045919062000999565b600a556000600b556611c37937e08000600c553480156200006557600080fd5b506040518060400160405280600f81526020017f416476656e7475726553696c76657200000000000000000000000000000000008152506040518060400160405280600481526020017f4153494c00000000000000000000000000000000000000000000000000000000815250620000f2620000e6620002d660201b60201c565b620002de60201b60201c565b81600490805190602001906200010a92919062000623565b5080600590805190602001906200012392919062000623565b50505062000167306200013b620002cd60201b60201c565b600a6200014991906200085c565b6401a8aedf406200015b919062000999565b620003a260201b60201c565b620001b66200017b620002d660201b60201c565b6200018b620002cd60201b60201c565b600a6200019991906200085c565b63165a0bc0620001aa919062000999565b620003a260201b60201c565b620001c860016200051c60201b60201c565b73ff9c1b15b16263c61d017ee9f65c50e4ae0113d7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731dfe7ca09e99d10835bf73044a23b73fc20623df600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cd4d337554862f9bc9ffffb67465b7d643e4e3ad600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000b04565b60006012905090565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000415576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040c9062000754565b60405180910390fd5b6200042960008383620005f060201b60201c565b80600360008282546200043d9190620007a4565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004959190620007a4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004fc919062000776565b60405180910390a36200051860008383620005f560201b60201c565b5050565b6200052c620002d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000552620005fa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a29062000732565b60405180910390fd5b80600b819055507f29db966c4a1e5d5fe0a3ba3a7250ed83596d4ec0ccb6820e649990ef22f29423600b54604051620005e5919062000776565b60405180910390a150565b505050565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006319062000a11565b90600052602060002090601f016020900481019282620006555760008555620006a1565b82601f106200067057805160ff1916838001178555620006a1565b82800160010185558215620006a1579182015b82811115620006a057825182559160200191906001019062000683565b5b509050620006b09190620006b4565b5090565b5b80821115620006cf576000816000905550600101620006b5565b5090565b6000620006e260208362000793565b9150620006ef8262000ab2565b602082019050919050565b600062000709601f8362000793565b9150620007168262000adb565b602082019050919050565b6200072c81620009fa565b82525050565b600060208201905081810360008301526200074d81620006d3565b9050919050565b600060208201905081810360008301526200076f81620006fa565b9050919050565b60006020820190506200078d600083018462000721565b92915050565b600082825260208201905092915050565b6000620007b182620009fa565b9150620007be83620009fa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007f657620007f562000a47565b5b828201905092915050565b6000808291508390505b600185111562000853578086048111156200082b576200082a62000a47565b5b60018516156200083b5780820291505b80810290506200084b8562000aa5565b94506200080b565b94509492505050565b60006200086982620009fa565b9150620008768362000a04565b9250620008a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008ad565b905092915050565b600082620008bf576001905062000992565b81620008cf576000905062000992565b8160018114620008e85760028114620008f35762000929565b600191505062000992565b60ff84111562000908576200090762000a47565b5b8360020a91508482111562000922576200092162000a47565b5b5062000992565b5060208310610133831016604e8410600b8410161715620009635782820a9050838111156200095d576200095c62000a47565b5b62000992565b62000972848484600162000801565b925090508184048111156200098c576200098b62000a47565b5b81810290505b9392505050565b6000620009a682620009fa565b9150620009b383620009fa565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009ef57620009ee62000a47565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000a2a57607f821691505b6020821081141562000a415762000a4062000a76565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6130338062000b146000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c806362759f6c1161011a578063a9059cbb116100ad578063dc444a701161007c578063dc444a70146105b8578063dd62ed3e146105d4578063f0dea7e214610604578063f2fde38b14610622578063f89723b81461063e57610205565b8063a9059cbb14610532578063abb0be6614610562578063b08f7b8d1461057e578063c50b0fb01461059a57610205565b80638fafd424116100e95780638fafd424146104aa57806395d89b41146104c6578063a457c2d7146104e4578063a8af32e91461051457610205565b806362759f6c1461043657806370a0823114610452578063715018a6146104825780638da5cb5b1461048c57610205565b8063313ce5671161019d578063395093511161016c57806339509351146103a657806341a494c5146103d657806342e47315146103f45780634e71d92d146104105780635d4ff4841461041a57610205565b8063313ce5671461033057806334dd58281461034e57806335b48afd1461036c5780633630b76b1461038a57610205565b80630a5b60f7116101d95780630a5b60f71461029457806318160ddd146102b25780631da4c66b146102d057806323b872dd1461030057610205565b80623cbabc1461020a57806306fdde031461022857806307a0e67a14610246578063095ea7b314610264575b600080fd5b61021261065c565b60405161021f9190612558565b60405180910390f35b610230610674565b60405161023d91906125d2565b60405180910390f35b61024e610706565b60405161025b91906127d4565b60405180910390f35b61027e60048036038101906102799190612172565b61070c565b60405161028b919061259c565b60405180910390f35b61029c61072a565b6040516102a99190612558565b60405180910390f35b6102ba610742565b6040516102c791906127d4565b60405180910390f35b6102ea60048036038101906102e5919061220c565b61074c565b6040516102f7919061259c565b60405180910390f35b61031a6004803603810190610315919061211f565b61077b565b604051610327919061259c565b60405180910390f35b610338610873565b60405161034591906127ef565b60405180910390f35b61035661087c565b60405161036391906125b7565b60405180910390f35b6103746108a2565b60405161038191906125b7565b60405180910390f35b6103a4600480360381019061039f91906121b2565b6108c8565b005b6103c060048036038101906103bb9190612172565b61094e565b6040516103cd919061259c565b60405180910390f35b6103de6109fa565b6040516103eb91906127d4565b60405180910390f35b61040e600480360381019061040991906121b2565b610a00565b005b610418610abf565b005b610434600480360381019061042f91906121b2565b610e0b565b005b610450600480360381019061044b91906121b2565b610ebc565b005b61046c600480360381019061046791906120b2565b610fa7565b60405161047991906127d4565b60405180910390f35b61048a610ff0565b005b610494611078565b6040516104a19190612558565b60405180910390f35b6104c460048036038101906104bf919061224c565b6110a1565b005b6104ce611151565b6040516104db91906125d2565b60405180910390f35b6104fe60048036038101906104f99190612172565b6111e3565b60405161050b919061259c565b60405180910390f35b61051c6112ce565b6040516105299190612558565b60405180910390f35b61054c60048036038101906105479190612172565b6112e6565b604051610559919061259c565b60405180910390f35b61057c600480360381019061057791906121b2565b611304565b005b610598600480360381019061059391906121b2565b6113e8565b005b6105a261148c565b6040516105af91906127d4565b60405180910390f35b6105d260048036038101906105cd91906121b2565b611492565b005b6105ee60048036038101906105e991906120df565b611536565b6040516105fb91906127d4565b60405180910390f35b61060c6115bd565b60405161061991906127d4565b60405180910390f35b61063c600480360381019061063791906120b2565b6115c3565b005b6106466116bb565b60405161065391906125b7565b60405180910390f35b73cd4d337554862f9bc9ffffb67465b7d643e4e3ad81565b60606004805461068390612b39565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612b39565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b600c5481565b60006107206107196116e1565b84846116e9565b6001905092915050565b731dfe7ca09e99d10835bf73044a23b73fc20623df81565b6000600354905090565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60006107888484846118b4565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107d36116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a906126d4565b60405180910390fd5b6108678561085f6116e1565b8584036116e9565b60019150509392505050565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108d06116e1565b73ffffffffffffffffffffffffffffffffffffffff166108ee611078565b73ffffffffffffffffffffffffffffffffffffffff1614610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b906126f4565b60405180910390fd5b80600c8190555050565b60006109f061095b6116e1565b8484600260006109696116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109eb9190612826565b6116e9565b6001905092915050565b60095481565b610a086116e1565b73ffffffffffffffffffffffffffffffffffffffff16610a26611078565b73ffffffffffffffffffffffffffffffffffffffff1614610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a73906126f4565b60405180910390fd5b80600b819055507f29db966c4a1e5d5fe0a3ba3a7250ed83596d4ec0ccb6820e649990ef22f29423600b54604051610ab491906127d4565b60405180910390a150565b600c54610aca6116e1565b73ffffffffffffffffffffffffffffffffffffffff16311015610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b19906126b4565b60405180910390fd5b600d6000600b5481526020019081526020016000206000610b416116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc0906127b4565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610c116116e1565b6040518263ffffffff1660e01b8152600401610c2d9190612558565b60206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906121df565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610cc36116e1565b6040518263ffffffff1660e01b8152600401610cdf9190612558565b60206040518083038186803b158015610cf757600080fd5b505afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f91906121df565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610d756116e1565b6040518263ffffffff1660e01b8152600401610d919190612558565b60206040518083038186803b158015610da957600080fd5b505afa158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de191906121df565b610deb9190612826565b610df59190612826565b9050610e08610e026116e1565b82611b38565b50565b610e136116e1565b73ffffffffffffffffffffffffffffffffffffffff16610e31611078565b73ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e906126f4565b60405180910390fd5b6000811115610eb957610eb830610e9c610873565b600a610ea891906128cf565b83610eb391906129ed565b611c6b565b5b50565b610ec46116e1565b73ffffffffffffffffffffffffffffffffffffffff16610ee2611078565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f906126f4565b60405180910390fd5b6000610f42610873565b600a610f4e91906128cf565b82610f5991906129ed565b9050610f6c610f66611078565b82611c6b565b7f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466581604051610f9b91906127d4565b60405180910390a15050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff86116e1565b73ffffffffffffffffffffffffffffffffffffffff16611016611078565b73ffffffffffffffffffffffffffffffffffffffff161461106c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611063906126f4565b60405180910390fd5b6110766000611dcc565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110a96116e1565b73ffffffffffffffffffffffffffffffffffffffff166110c7611078565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906126f4565b60405180910390fd5b61112685610a00565b61112f846113e8565b61113883611492565b611141826108c8565b61114a81610e0b565b5050505050565b60606005805461116090612b39565b80601f016020809104026020016040519081016040528092919081815260200182805461118c90612b39565b80156111d95780601f106111ae576101008083540402835291602001916111d9565b820191906000526020600020905b8154815290600101906020018083116111bc57829003601f168201915b5050505050905090565b600080600260006111f26116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690612774565b60405180910390fd5b6112c36112ba6116e1565b858584036116e9565b600191505092915050565b73ff9c1b15b16263c61d017ee9f65c50e4ae0113d781565b60006112fa6112f36116e1565b84846118b4565b6001905092915050565b61130c6116e1565b73ffffffffffffffffffffffffffffffffffffffff1661132a611078565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611377906126f4565b60405180910390fd5b600061138a610873565b600a61139691906128cf565b826113a191906129ed565b90506113ad3082611e90565b7fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb816040516113dc91906127d4565b60405180910390a15050565b6113f06116e1565b73ffffffffffffffffffffffffffffffffffffffff1661140e611078565b73ffffffffffffffffffffffffffffffffffffffff1614611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b906126f4565b60405180910390fd5b61146c610873565b600a61147891906128cf565b8161148391906129ed565b60098190555050565b600b5481565b61149a6116e1565b73ffffffffffffffffffffffffffffffffffffffff166114b8611078565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611505906126f4565b60405180910390fd5b611516610873565b600a61152291906128cf565b8161152d91906129ed565b600a8190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6115cb6116e1565b73ffffffffffffffffffffffffffffffffffffffff166115e9611078565b73ffffffffffffffffffffffffffffffffffffffff161461163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906126f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690612634565b60405180910390fd5b6116b881611dcc565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090612654565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118a791906127d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90612734565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b906125f4565b60405180910390fd5b61199f838383612069565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d90612674565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611abb9190612826565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b1f91906127d4565b60405180910390a3611b3284848461206e565b50505050565b6000600182611b479190612826565b9050600081600954611b5991906129ed565b9050600a54811115611b6b57600a5490505b80611b7530610fa7565b1015611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90612694565b60405180910390fd5b6001600d6000600b54815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c2c3085836118b4565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648482604051611c5d929190612573565b60405180910390a150505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290612794565b60405180910390fd5b611ce760008383612069565b8060036000828254611cf99190612826565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f9190612826565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611db491906127d4565b60405180910390a3611dc86000838361206e565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790612714565b60405180910390fd5b611f0c82600083612069565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90612614565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160036000828254611feb9190612a47565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161205091906127d4565b60405180910390a36120648360008461206e565b505050565b505050565b505050565b60008135905061208281612fcf565b92915050565b60008135905061209781612fe6565b92915050565b6000815190506120ac81612fe6565b92915050565b6000602082840312156120c8576120c7612bc9565b5b60006120d684828501612073565b91505092915050565b600080604083850312156120f6576120f5612bc9565b5b600061210485828601612073565b925050602061211585828601612073565b9150509250929050565b60008060006060848603121561213857612137612bc9565b5b600061214686828701612073565b935050602061215786828701612073565b925050604061216886828701612088565b9150509250925092565b6000806040838503121561218957612188612bc9565b5b600061219785828601612073565b92505060206121a885828601612088565b9150509250929050565b6000602082840312156121c8576121c7612bc9565b5b60006121d684828501612088565b91505092915050565b6000602082840312156121f5576121f4612bc9565b5b60006122038482850161209d565b91505092915050565b6000806040838503121561222357612222612bc9565b5b600061223185828601612088565b925050602061224285828601612073565b9150509250929050565b600080600080600060a0868803121561226857612267612bc9565b5b600061227688828901612088565b955050602061228788828901612088565b945050604061229888828901612088565b93505060606122a988828901612088565b92505060806122ba88828901612088565b9150509295509295909350565b6122d081612a7b565b82525050565b6122df81612a8d565b82525050565b6122ee81612ad0565b82525050565b60006122ff8261280a565b6123098185612815565b9350612319818560208601612b06565b61232281612bce565b840191505092915050565b600061233a602383612815565b915061234582612bec565b604082019050919050565b600061235d602283612815565b915061236882612c3b565b604082019050919050565b6000612380602683612815565b915061238b82612c8a565b604082019050919050565b60006123a3602283612815565b91506123ae82612cd9565b604082019050919050565b60006123c6602683612815565b91506123d182612d28565b604082019050919050565b60006123e9601083612815565b91506123f482612d77565b602082019050919050565b600061240c601e83612815565b915061241782612da0565b602082019050919050565b600061242f602883612815565b915061243a82612dc9565b604082019050919050565b6000612452602083612815565b915061245d82612e18565b602082019050919050565b6000612475602183612815565b915061248082612e41565b604082019050919050565b6000612498602583612815565b91506124a382612e90565b604082019050919050565b60006124bb602483612815565b91506124c682612edf565b604082019050919050565b60006124de602583612815565b91506124e982612f2e565b604082019050919050565b6000612501601f83612815565b915061250c82612f7d565b602082019050919050565b6000612524600f83612815565b915061252f82612fa6565b602082019050919050565b61254381612ab9565b82525050565b61255281612ac3565b82525050565b600060208201905061256d60008301846122c7565b92915050565b600060408201905061258860008301856122c7565b612595602083018461253a565b9392505050565b60006020820190506125b160008301846122d6565b92915050565b60006020820190506125cc60008301846122e5565b92915050565b600060208201905081810360008301526125ec81846122f4565b905092915050565b6000602082019050818103600083015261260d8161232d565b9050919050565b6000602082019050818103600083015261262d81612350565b9050919050565b6000602082019050818103600083015261264d81612373565b9050919050565b6000602082019050818103600083015261266d81612396565b9050919050565b6000602082019050818103600083015261268d816123b9565b9050919050565b600060208201905081810360008301526126ad816123dc565b9050919050565b600060208201905081810360008301526126cd816123ff565b9050919050565b600060208201905081810360008301526126ed81612422565b9050919050565b6000602082019050818103600083015261270d81612445565b9050919050565b6000602082019050818103600083015261272d81612468565b9050919050565b6000602082019050818103600083015261274d8161248b565b9050919050565b6000602082019050818103600083015261276d816124ae565b9050919050565b6000602082019050818103600083015261278d816124d1565b9050919050565b600060208201905081810360008301526127ad816124f4565b9050919050565b600060208201905081810360008301526127cd81612517565b9050919050565b60006020820190506127e9600083018461253a565b92915050565b60006020820190506128046000830184612549565b92915050565b600081519050919050565b600082825260208201905092915050565b600061283182612ab9565b915061283c83612ab9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561287157612870612b6b565b5b828201905092915050565b6000808291508390505b60018511156128c6578086048111156128a2576128a1612b6b565b5b60018516156128b15780820291505b80810290506128bf85612bdf565b9450612886565b94509492505050565b60006128da82612ab9565b91506128e583612ac3565b92506129127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461291a565b905092915050565b60008261292a57600190506129e6565b8161293857600090506129e6565b816001811461294e576002811461295857612987565b60019150506129e6565b60ff84111561296a57612969612b6b565b5b8360020a91508482111561298157612980612b6b565b5b506129e6565b5060208310610133831016604e8410600b84101617156129bc5782820a9050838111156129b7576129b6612b6b565b5b6129e6565b6129c9848484600161287c565b925090508184048111156129e0576129df612b6b565b5b81810290505b9392505050565b60006129f882612ab9565b9150612a0383612ab9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a3c57612a3b612b6b565b5b828202905092915050565b6000612a5282612ab9565b9150612a5d83612ab9565b925082821015612a7057612a6f612b6b565b5b828203905092915050565b6000612a8682612a99565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612adb82612ae2565b9050919050565b6000612aed82612af4565b9050919050565b6000612aff82612a99565b9050919050565b60005b83811015612b24578082015181840152602081019050612b09565b83811115612b33576000848401525b50505050565b60006002820490506001821680612b5157607f821691505b60208210811415612b6557612b64612b9a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f535550504c595f45584841555354454400000000000000000000000000000000600082015250565b7f494e53554646494349454e545f42414c414e43455f464f525f434c41494d0000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f414c52454144595f434c41494d45440000000000000000000000000000000000600082015250565b612fd881612a7b565b8114612fe357600080fd5b50565b612fef81612ab9565b8114612ffa57600080fd5b5056fea2646970667358221220684edaa3bb399c2450a1d04804a317ea606b571a239252ad9c13ebf930d031cb64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102055760003560e01c806362759f6c1161011a578063a9059cbb116100ad578063dc444a701161007c578063dc444a70146105b8578063dd62ed3e146105d4578063f0dea7e214610604578063f2fde38b14610622578063f89723b81461063e57610205565b8063a9059cbb14610532578063abb0be6614610562578063b08f7b8d1461057e578063c50b0fb01461059a57610205565b80638fafd424116100e95780638fafd424146104aa57806395d89b41146104c6578063a457c2d7146104e4578063a8af32e91461051457610205565b806362759f6c1461043657806370a0823114610452578063715018a6146104825780638da5cb5b1461048c57610205565b8063313ce5671161019d578063395093511161016c57806339509351146103a657806341a494c5146103d657806342e47315146103f45780634e71d92d146104105780635d4ff4841461041a57610205565b8063313ce5671461033057806334dd58281461034e57806335b48afd1461036c5780633630b76b1461038a57610205565b80630a5b60f7116101d95780630a5b60f71461029457806318160ddd146102b25780631da4c66b146102d057806323b872dd1461030057610205565b80623cbabc1461020a57806306fdde031461022857806307a0e67a14610246578063095ea7b314610264575b600080fd5b61021261065c565b60405161021f9190612558565b60405180910390f35b610230610674565b60405161023d91906125d2565b60405180910390f35b61024e610706565b60405161025b91906127d4565b60405180910390f35b61027e60048036038101906102799190612172565b61070c565b60405161028b919061259c565b60405180910390f35b61029c61072a565b6040516102a99190612558565b60405180910390f35b6102ba610742565b6040516102c791906127d4565b60405180910390f35b6102ea60048036038101906102e5919061220c565b61074c565b6040516102f7919061259c565b60405180910390f35b61031a6004803603810190610315919061211f565b61077b565b604051610327919061259c565b60405180910390f35b610338610873565b60405161034591906127ef565b60405180910390f35b61035661087c565b60405161036391906125b7565b60405180910390f35b6103746108a2565b60405161038191906125b7565b60405180910390f35b6103a4600480360381019061039f91906121b2565b6108c8565b005b6103c060048036038101906103bb9190612172565b61094e565b6040516103cd919061259c565b60405180910390f35b6103de6109fa565b6040516103eb91906127d4565b60405180910390f35b61040e600480360381019061040991906121b2565b610a00565b005b610418610abf565b005b610434600480360381019061042f91906121b2565b610e0b565b005b610450600480360381019061044b91906121b2565b610ebc565b005b61046c600480360381019061046791906120b2565b610fa7565b60405161047991906127d4565b60405180910390f35b61048a610ff0565b005b610494611078565b6040516104a19190612558565b60405180910390f35b6104c460048036038101906104bf919061224c565b6110a1565b005b6104ce611151565b6040516104db91906125d2565b60405180910390f35b6104fe60048036038101906104f99190612172565b6111e3565b60405161050b919061259c565b60405180910390f35b61051c6112ce565b6040516105299190612558565b60405180910390f35b61054c60048036038101906105479190612172565b6112e6565b604051610559919061259c565b60405180910390f35b61057c600480360381019061057791906121b2565b611304565b005b610598600480360381019061059391906121b2565b6113e8565b005b6105a261148c565b6040516105af91906127d4565b60405180910390f35b6105d260048036038101906105cd91906121b2565b611492565b005b6105ee60048036038101906105e991906120df565b611536565b6040516105fb91906127d4565b60405180910390f35b61060c6115bd565b60405161061991906127d4565b60405180910390f35b61063c600480360381019061063791906120b2565b6115c3565b005b6106466116bb565b60405161065391906125b7565b60405180910390f35b73cd4d337554862f9bc9ffffb67465b7d643e4e3ad81565b60606004805461068390612b39565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90612b39565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b5050505050905090565b600c5481565b60006107206107196116e1565b84846116e9565b6001905092915050565b731dfe7ca09e99d10835bf73044a23b73fc20623df81565b6000600354905090565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60006107888484846118b4565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107d36116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a906126d4565b60405180910390fd5b6108678561085f6116e1565b8584036116e9565b60019150509392505050565b60006012905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108d06116e1565b73ffffffffffffffffffffffffffffffffffffffff166108ee611078565b73ffffffffffffffffffffffffffffffffffffffff1614610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b906126f4565b60405180910390fd5b80600c8190555050565b60006109f061095b6116e1565b8484600260006109696116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109eb9190612826565b6116e9565b6001905092915050565b60095481565b610a086116e1565b73ffffffffffffffffffffffffffffffffffffffff16610a26611078565b73ffffffffffffffffffffffffffffffffffffffff1614610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a73906126f4565b60405180910390fd5b80600b819055507f29db966c4a1e5d5fe0a3ba3a7250ed83596d4ec0ccb6820e649990ef22f29423600b54604051610ab491906127d4565b60405180910390a150565b600c54610aca6116e1565b73ffffffffffffffffffffffffffffffffffffffff16311015610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b19906126b4565b60405180910390fd5b600d6000600b5481526020019081526020016000206000610b416116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc0906127b4565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610c116116e1565b6040518263ffffffff1660e01b8152600401610c2d9190612558565b60206040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7d91906121df565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610cc36116e1565b6040518263ffffffff1660e01b8152600401610cdf9190612558565b60206040518083038186803b158015610cf757600080fd5b505afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f91906121df565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231610d756116e1565b6040518263ffffffff1660e01b8152600401610d919190612558565b60206040518083038186803b158015610da957600080fd5b505afa158015610dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de191906121df565b610deb9190612826565b610df59190612826565b9050610e08610e026116e1565b82611b38565b50565b610e136116e1565b73ffffffffffffffffffffffffffffffffffffffff16610e31611078565b73ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e906126f4565b60405180910390fd5b6000811115610eb957610eb830610e9c610873565b600a610ea891906128cf565b83610eb391906129ed565b611c6b565b5b50565b610ec46116e1565b73ffffffffffffffffffffffffffffffffffffffff16610ee2611078565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f906126f4565b60405180910390fd5b6000610f42610873565b600a610f4e91906128cf565b82610f5991906129ed565b9050610f6c610f66611078565b82611c6b565b7f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466581604051610f9b91906127d4565b60405180910390a15050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff86116e1565b73ffffffffffffffffffffffffffffffffffffffff16611016611078565b73ffffffffffffffffffffffffffffffffffffffff161461106c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611063906126f4565b60405180910390fd5b6110766000611dcc565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110a96116e1565b73ffffffffffffffffffffffffffffffffffffffff166110c7611078565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611114906126f4565b60405180910390fd5b61112685610a00565b61112f846113e8565b61113883611492565b611141826108c8565b61114a81610e0b565b5050505050565b60606005805461116090612b39565b80601f016020809104026020016040519081016040528092919081815260200182805461118c90612b39565b80156111d95780601f106111ae576101008083540402835291602001916111d9565b820191906000526020600020905b8154815290600101906020018083116111bc57829003601f168201915b5050505050905090565b600080600260006111f26116e1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690612774565b60405180910390fd5b6112c36112ba6116e1565b858584036116e9565b600191505092915050565b73ff9c1b15b16263c61d017ee9f65c50e4ae0113d781565b60006112fa6112f36116e1565b84846118b4565b6001905092915050565b61130c6116e1565b73ffffffffffffffffffffffffffffffffffffffff1661132a611078565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611377906126f4565b60405180910390fd5b600061138a610873565b600a61139691906128cf565b826113a191906129ed565b90506113ad3082611e90565b7fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb816040516113dc91906127d4565b60405180910390a15050565b6113f06116e1565b73ffffffffffffffffffffffffffffffffffffffff1661140e611078565b73ffffffffffffffffffffffffffffffffffffffff1614611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b906126f4565b60405180910390fd5b61146c610873565b600a61147891906128cf565b8161148391906129ed565b60098190555050565b600b5481565b61149a6116e1565b73ffffffffffffffffffffffffffffffffffffffff166114b8611078565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611505906126f4565b60405180910390fd5b611516610873565b600a61152291906128cf565b8161152d91906129ed565b600a8190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6115cb6116e1565b73ffffffffffffffffffffffffffffffffffffffff166115e9611078565b73ffffffffffffffffffffffffffffffffffffffff161461163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906126f4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690612634565b60405180910390fd5b6116b881611dcc565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175090612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090612654565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118a791906127d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90612734565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b906125f4565b60405180910390fd5b61199f838383612069565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d90612674565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611abb9190612826565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b1f91906127d4565b60405180910390a3611b3284848461206e565b50505050565b6000600182611b479190612826565b9050600081600954611b5991906129ed565b9050600a54811115611b6b57600a5490505b80611b7530610fa7565b1015611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90612694565b60405180910390fd5b6001600d6000600b54815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c2c3085836118b4565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648482604051611c5d929190612573565b60405180910390a150505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290612794565b60405180910390fd5b611ce760008383612069565b8060036000828254611cf99190612826565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f9190612826565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611db491906127d4565b60405180910390a3611dc86000838361206e565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790612714565b60405180910390fd5b611f0c82600083612069565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90612614565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160036000828254611feb9190612a47565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161205091906127d4565b60405180910390a36120648360008461206e565b505050565b505050565b505050565b60008135905061208281612fcf565b92915050565b60008135905061209781612fe6565b92915050565b6000815190506120ac81612fe6565b92915050565b6000602082840312156120c8576120c7612bc9565b5b60006120d684828501612073565b91505092915050565b600080604083850312156120f6576120f5612bc9565b5b600061210485828601612073565b925050602061211585828601612073565b9150509250929050565b60008060006060848603121561213857612137612bc9565b5b600061214686828701612073565b935050602061215786828701612073565b925050604061216886828701612088565b9150509250925092565b6000806040838503121561218957612188612bc9565b5b600061219785828601612073565b92505060206121a885828601612088565b9150509250929050565b6000602082840312156121c8576121c7612bc9565b5b60006121d684828501612088565b91505092915050565b6000602082840312156121f5576121f4612bc9565b5b60006122038482850161209d565b91505092915050565b6000806040838503121561222357612222612bc9565b5b600061223185828601612088565b925050602061224285828601612073565b9150509250929050565b600080600080600060a0868803121561226857612267612bc9565b5b600061227688828901612088565b955050602061228788828901612088565b945050604061229888828901612088565b93505060606122a988828901612088565b92505060806122ba88828901612088565b9150509295509295909350565b6122d081612a7b565b82525050565b6122df81612a8d565b82525050565b6122ee81612ad0565b82525050565b60006122ff8261280a565b6123098185612815565b9350612319818560208601612b06565b61232281612bce565b840191505092915050565b600061233a602383612815565b915061234582612bec565b604082019050919050565b600061235d602283612815565b915061236882612c3b565b604082019050919050565b6000612380602683612815565b915061238b82612c8a565b604082019050919050565b60006123a3602283612815565b91506123ae82612cd9565b604082019050919050565b60006123c6602683612815565b91506123d182612d28565b604082019050919050565b60006123e9601083612815565b91506123f482612d77565b602082019050919050565b600061240c601e83612815565b915061241782612da0565b602082019050919050565b600061242f602883612815565b915061243a82612dc9565b604082019050919050565b6000612452602083612815565b915061245d82612e18565b602082019050919050565b6000612475602183612815565b915061248082612e41565b604082019050919050565b6000612498602583612815565b91506124a382612e90565b604082019050919050565b60006124bb602483612815565b91506124c682612edf565b604082019050919050565b60006124de602583612815565b91506124e982612f2e565b604082019050919050565b6000612501601f83612815565b915061250c82612f7d565b602082019050919050565b6000612524600f83612815565b915061252f82612fa6565b602082019050919050565b61254381612ab9565b82525050565b61255281612ac3565b82525050565b600060208201905061256d60008301846122c7565b92915050565b600060408201905061258860008301856122c7565b612595602083018461253a565b9392505050565b60006020820190506125b160008301846122d6565b92915050565b60006020820190506125cc60008301846122e5565b92915050565b600060208201905081810360008301526125ec81846122f4565b905092915050565b6000602082019050818103600083015261260d8161232d565b9050919050565b6000602082019050818103600083015261262d81612350565b9050919050565b6000602082019050818103600083015261264d81612373565b9050919050565b6000602082019050818103600083015261266d81612396565b9050919050565b6000602082019050818103600083015261268d816123b9565b9050919050565b600060208201905081810360008301526126ad816123dc565b9050919050565b600060208201905081810360008301526126cd816123ff565b9050919050565b600060208201905081810360008301526126ed81612422565b9050919050565b6000602082019050818103600083015261270d81612445565b9050919050565b6000602082019050818103600083015261272d81612468565b9050919050565b6000602082019050818103600083015261274d8161248b565b9050919050565b6000602082019050818103600083015261276d816124ae565b9050919050565b6000602082019050818103600083015261278d816124d1565b9050919050565b600060208201905081810360008301526127ad816124f4565b9050919050565b600060208201905081810360008301526127cd81612517565b9050919050565b60006020820190506127e9600083018461253a565b92915050565b60006020820190506128046000830184612549565b92915050565b600081519050919050565b600082825260208201905092915050565b600061283182612ab9565b915061283c83612ab9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561287157612870612b6b565b5b828201905092915050565b6000808291508390505b60018511156128c6578086048111156128a2576128a1612b6b565b5b60018516156128b15780820291505b80810290506128bf85612bdf565b9450612886565b94509492505050565b60006128da82612ab9565b91506128e583612ac3565b92506129127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461291a565b905092915050565b60008261292a57600190506129e6565b8161293857600090506129e6565b816001811461294e576002811461295857612987565b60019150506129e6565b60ff84111561296a57612969612b6b565b5b8360020a91508482111561298157612980612b6b565b5b506129e6565b5060208310610133831016604e8410600b84101617156129bc5782820a9050838111156129b7576129b6612b6b565b5b6129e6565b6129c9848484600161287c565b925090508184048111156129e0576129df612b6b565b5b81810290505b9392505050565b60006129f882612ab9565b9150612a0383612ab9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a3c57612a3b612b6b565b5b828202905092915050565b6000612a5282612ab9565b9150612a5d83612ab9565b925082821015612a7057612a6f612b6b565b5b828203905092915050565b6000612a8682612a99565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612adb82612ae2565b9050919050565b6000612aed82612af4565b9050919050565b6000612aff82612a99565b9050919050565b60005b83811015612b24578082015181840152602081019050612b09565b83811115612b33576000848401525b50505050565b60006002820490506001821680612b5157607f821691505b60208210811415612b6557612b64612b9a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f535550504c595f45584841555354454400000000000000000000000000000000600082015250565b7f494e53554646494349454e545f42414c414e43455f464f525f434c41494d0000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b7f414c52454144595f434c41494d45440000000000000000000000000000000000600082015250565b612fd881612a7b565b8114612fe357600080fd5b50565b612fef81612ab9565b8114612ffa57600080fd5b5056fea2646970667358221220684edaa3bb399c2450a1d04804a317ea606b571a239252ad9c13ebf930d031cb64736f6c63430008070033

Deployed Bytecode Sourcemap

25137:5452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25387:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6098:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26021:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8265:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25291:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7218:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26182:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8916:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7060:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25528:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25484:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28740:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9817:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25660:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28002:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26915:424;;;:::i;:::-;;29020:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29328:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7389:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17622:94;;;:::i;:::-;;16971:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30238:348;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6317:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10535:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25196:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7729:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29630:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28245:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25902:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28474:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7967:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25761:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17871:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25573:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25387:88;25433:42;25387:88;:::o;6098:100::-;6152:13;6185:5;6178:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6098:100;:::o;26021:52::-;;;;:::o;8265:169::-;8348:4;8365:39;8374:12;:10;:12::i;:::-;8388:7;8397:6;8365:8;:39::i;:::-;8422:4;8415:11;;8265:169;;;;:::o;25291:89::-;25338:42;25291:89;:::o;7218:108::-;7279:7;7306:12;;7299:19;;7218:108;:::o;26182:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8916:492::-;9056:4;9073:36;9083:6;9091:9;9102:6;9073:9;:36::i;:::-;9122:24;9149:11;:19;9161:6;9149:19;;;;;;;;;;;;;;;:33;9169:12;:10;:12::i;:::-;9149:33;;;;;;;;;;;;;;;;9122:60;;9221:6;9201:16;:26;;9193:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9308:57;9317:6;9325:12;:10;:12::i;:::-;9358:6;9339:16;:25;9308:8;:57::i;:::-;9396:4;9389:11;;;8916:492;;;;;:::o;7060:93::-;7118:5;7143:2;7136:9;;7060:93;:::o;25528:38::-;;;;;;;;;;;;;:::o;25484:37::-;;;;;;;;;;;;;:::o;28740:155::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28864:23:::1;28839:22;:48;;;;28740:155:::0;:::o;9817:215::-;9905:4;9922:80;9931:12;:10;:12::i;:::-;9945:7;9991:10;9954:11;:25;9966:12;:10;:12::i;:::-;9954:25;;;;;;;;;;;;;;;:34;9980:7;9954:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9922:8;:80::i;:::-;10020:4;10013:11;;9817:215;;;;:::o;25660:46::-;;;;:::o;28002:126::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28078:7:::1;28069:6;:16;;;;28101:19;28113:6;;28101:19;;;;;;:::i;:::-;;;;;;;;28002:126:::0;:::o;26915:424::-;26984:22;;26960:12;:10;:12::i;:::-;:20;;;:46;;26952:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;27061:6;:14;27068:6;;27061:14;;;;;;;;;;;:28;27076:12;:10;:12::i;:::-;27061:28;;;;;;;;;;;;;;;;;;;;;;;;;27060:29;27052:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27122:19;27249:12;;;;;;;;;;;:22;;;27272:12;:10;:12::i;:::-;27249:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27196:13;;;;;;;;;;;:23;;;27220:12;:10;:12::i;:::-;27196:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27144:12;;;;;;;;;;;:22;;;27167:12;:10;:12::i;:::-;27144:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;;;:::i;:::-;:141;;;;:::i;:::-;27122:163;;27298:33;27305:12;:10;:12::i;:::-;27319:11;27298:6;:33::i;:::-;26941:398;26915:424::o;29020:173::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29106:1:::1;29094:9;:13;29090:96;;;29124:50;29138:4;29162:10;:8;:10::i;:::-;29158:2;:14;;;;:::i;:::-;29145:9;:28;;;;:::i;:::-;29124:5;:50::i;:::-;29090:96;29020:173:::0;:::o;29328:171::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29391:13:::1;29421:10;:8;:10::i;:::-;29417:2;:14;;;;:::i;:::-;29407:6;:25;;;;:::i;:::-;29391:41;;29443:21;29449:7;:5;:7::i;:::-;29458:5;29443;:21::i;:::-;29480:11;29485:5;29480:11;;;;;;:::i;:::-;;;;;;;;29380:119;29328:171:::0;:::o;7389:127::-;7463:7;7490:9;:18;7500:7;7490:18;;;;;;;;;;;;;;;;7483:25;;7389:127;;;:::o;17622:94::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17687:21:::1;17705:1;17687:9;:21::i;:::-;17622:94::o:0;16971:87::-;17017:7;17044:6;;;;;;;;;;;17037:13;;16971:87;:::o;30238:348::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30397:21:::1;30410:7;30397:12;:21::i;:::-;30429:19;30441:6;30429:11;:19::i;:::-;30459:20;30474:4;30459:14;:20::i;:::-;30490:53;30519:23;30490:28;:53::i;:::-;30554:24;30568:9;30554:13;:24::i;:::-;30238:348:::0;;;;;:::o;6317:104::-;6373:13;6406:7;6399:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6317:104;:::o;10535:413::-;10628:4;10645:24;10672:11;:25;10684:12;:10;:12::i;:::-;10672:25;;;;;;;;;;;;;;;:34;10698:7;10672:34;;;;;;;;;;;;;;;;10645:61;;10745:15;10725:16;:35;;10717:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10838:67;10847:12;:10;:12::i;:::-;10861:7;10889:15;10870:16;:34;10838:8;:67::i;:::-;10936:4;10929:11;;;10535:413;;;;:::o;25196:88::-;25242:42;25196:88;:::o;7729:175::-;7815:4;7832:42;7842:12;:10;:12::i;:::-;7856:9;7867:6;7832:9;:42::i;:::-;7892:4;7885:11;;7729:175;;;;:::o;29630:177::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29693:13:::1;29723:10;:8;:10::i;:::-;29719:2;:14;;;;:::i;:::-;29709:6;:25;;;;:::i;:::-;29693:41;;29745:27;29759:4;29766:5;29745;:27::i;:::-;29788:11;29793:5;29788:11;;;;;;:::i;:::-;;;;;;;;29682:125;29630:177:::0;:::o;28245:106::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28332:10:::1;:8;:10::i;:::-;28328:2;:14;;;;:::i;:::-;28318:6;:25;;;;:::i;:::-;28310:5;:33;;;;28245:106:::0;:::o;25902:25::-;;;;:::o;28474:108::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28563:10:::1;:8;:10::i;:::-;28559:2;:14;;;;:::i;:::-;28551:4;:23;;;;:::i;:::-;28540:8;:34;;;;28474:108:::0;:::o;7967:151::-;8056:7;8083:11;:18;8095:5;8083:18;;;;;;;;;;;;;;;:27;8102:7;8083:27;;;;;;;;;;;;;;;;8076:34;;7967:151;;;;:::o;25761:37::-;;;;:::o;17871:192::-;17202:12;:10;:12::i;:::-;17191:23;;:7;:5;:7::i;:::-;:23;;;17183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17980:1:::1;17960:22;;:8;:22;;;;17952:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18036:19;18046:8;18036:9;:19::i;:::-;17871:192:::0;:::o;25573:37::-;;;;;;;;;;;;;:::o;609:98::-;662:7;689:10;682:17;;609:98;:::o;14219:380::-;14372:1;14355:19;;:5;:19;;;;14347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14453:1;14434:21;;:7;:21;;;;14426:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14537:6;14507:11;:18;14519:5;14507:18;;;;;;;;;;;;;;;:27;14526:7;14507:27;;;;;;;;;;;;;;;:36;;;;14575:7;14559:32;;14568:5;14559:32;;;14584:6;14559:32;;;;;;:::i;:::-;;;;;;;;14219:380;;;:::o;11438:733::-;11596:1;11578:20;;:6;:20;;;;11570:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11680:1;11659:23;;:9;:23;;;;11651:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11735:47;11756:6;11764:9;11775:6;11735:20;:47::i;:::-;11795:21;11819:9;:17;11829:6;11819:17;;;;;;;;;;;;;;;;11795:41;;11872:6;11855:13;:23;;11847:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11993:6;11977:13;:22;11957:9;:17;11967:6;11957:17;;;;;;;;;;;;;;;:42;;;;12045:6;12021:9;:20;12031:9;12021:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12086:9;12069:35;;12078:6;12069:35;;;12097:6;12069:35;;;;;;:::i;:::-;;;;;;;;12117:46;12137:6;12145:9;12156:6;12117:19;:46::i;:::-;11559:612;11438:733;;;:::o;27409:495::-;27484:18;27519:1;27505:11;:15;;;;:::i;:::-;27484:36;;27531:20;27562:10;27554:5;;:18;;;;:::i;:::-;27531:41;;27602:8;;27587:12;:23;27583:79;;;27642:8;;27627:23;;27583:79;27710:12;27682:24;27700:4;27682:9;:24::i;:::-;:40;;27674:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;27783:4;27756:6;:14;27763:6;;27756:14;;;;;;;;;;;:24;27771:8;27756:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;27800:48;27818:4;27825:8;27835:12;27800:9;:48::i;:::-;27864:32;27873:8;27883:12;27864:32;;;;;;;:::i;:::-;;;;;;;;27473:431;;27409:495;;:::o;12458:399::-;12561:1;12542:21;;:7;:21;;;;12534:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12612:49;12641:1;12645:7;12654:6;12612:20;:49::i;:::-;12690:6;12674:12;;:22;;;;;;;:::i;:::-;;;;;;;;12729:6;12707:9;:18;12717:7;12707:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12772:7;12751:37;;12768:1;12751:37;;;12781:6;12751:37;;;;;;:::i;:::-;;;;;;;;12801:48;12829:1;12833:7;12842:6;12801:19;:48::i;:::-;12458:399;;:::o;18071:173::-;18127:16;18146:6;;;;;;;;;;;18127:25;;18172:8;18163:6;;:17;;;;;;;;;;;;;;;;;;18227:8;18196:40;;18217:8;18196:40;;;;;;;;;;;;18116:128;18071:173;:::o;13190:591::-;13293:1;13274:21;;:7;:21;;;;13266:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13346:49;13367:7;13384:1;13388:6;13346:20;:49::i;:::-;13408:22;13433:9;:18;13443:7;13433:18;;;;;;;;;;;;;;;;13408:43;;13488:6;13470:14;:24;;13462:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13607:6;13590:14;:23;13569:9;:18;13579:7;13569:18;;;;;;;;;;;;;;;:44;;;;13651:6;13635:12;;:22;;;;;;;:::i;:::-;;;;;;;;13701:1;13675:37;;13684:7;13675:37;;;13705:6;13675:37;;;;;;:::i;:::-;;;;;;;;13725:48;13745:7;13762:1;13766:6;13725:19;:48::i;:::-;13255:526;13190:591;;:::o;15199:125::-;;;;:::o;15928:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:143::-;354:5;385:6;379:13;370:22;;401:33;428:5;401:33;:::i;:::-;297:143;;;;:::o;446:329::-;505:6;554:2;542:9;533:7;529:23;525:32;522:119;;;560:79;;:::i;:::-;522:119;680:1;705:53;750:7;741:6;730:9;726:22;705:53;:::i;:::-;695:63;;651:117;446:329;;;;:::o;781:474::-;849:6;857;906:2;894:9;885:7;881:23;877:32;874:119;;;912:79;;:::i;:::-;874:119;1032:1;1057:53;1102:7;1093:6;1082:9;1078:22;1057:53;:::i;:::-;1047:63;;1003:117;1159:2;1185:53;1230:7;1221:6;1210:9;1206:22;1185:53;:::i;:::-;1175:63;;1130:118;781:474;;;;;:::o;1261:619::-;1338:6;1346;1354;1403:2;1391:9;1382:7;1378:23;1374:32;1371:119;;;1409:79;;:::i;:::-;1371:119;1529:1;1554:53;1599:7;1590:6;1579:9;1575:22;1554:53;:::i;:::-;1544:63;;1500:117;1656:2;1682:53;1727:7;1718:6;1707:9;1703:22;1682:53;:::i;:::-;1672:63;;1627:118;1784:2;1810:53;1855:7;1846:6;1835:9;1831:22;1810:53;:::i;:::-;1800:63;;1755:118;1261:619;;;;;:::o;1886:474::-;1954:6;1962;2011:2;1999:9;1990:7;1986:23;1982:32;1979:119;;;2017:79;;:::i;:::-;1979:119;2137:1;2162:53;2207:7;2198:6;2187:9;2183:22;2162:53;:::i;:::-;2152:63;;2108:117;2264:2;2290:53;2335:7;2326:6;2315:9;2311:22;2290:53;:::i;:::-;2280:63;;2235:118;1886:474;;;;;:::o;2366:329::-;2425:6;2474:2;2462:9;2453:7;2449:23;2445:32;2442:119;;;2480:79;;:::i;:::-;2442:119;2600:1;2625:53;2670:7;2661:6;2650:9;2646:22;2625:53;:::i;:::-;2615:63;;2571:117;2366:329;;;;:::o;2701:351::-;2771:6;2820:2;2808:9;2799:7;2795:23;2791:32;2788:119;;;2826:79;;:::i;:::-;2788:119;2946:1;2971:64;3027:7;3018:6;3007:9;3003:22;2971:64;:::i;:::-;2961:74;;2917:128;2701:351;;;;:::o;3058:474::-;3126:6;3134;3183:2;3171:9;3162:7;3158:23;3154:32;3151:119;;;3189:79;;:::i;:::-;3151:119;3309:1;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3280:117;3436:2;3462:53;3507:7;3498:6;3487:9;3483:22;3462:53;:::i;:::-;3452:63;;3407:118;3058:474;;;;;:::o;3538:911::-;3633:6;3641;3649;3657;3665;3714:3;3702:9;3693:7;3689:23;3685:33;3682:120;;;3721:79;;:::i;:::-;3682:120;3841:1;3866:53;3911:7;3902:6;3891:9;3887:22;3866:53;:::i;:::-;3856:63;;3812:117;3968:2;3994:53;4039:7;4030:6;4019:9;4015:22;3994:53;:::i;:::-;3984:63;;3939:118;4096:2;4122:53;4167:7;4158:6;4147:9;4143:22;4122:53;:::i;:::-;4112:63;;4067:118;4224:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;:::i;:::-;4240:63;;4195:118;4352:3;4379:53;4424:7;4415:6;4404:9;4400:22;4379:53;:::i;:::-;4369:63;;4323:119;3538:911;;;;;;;;:::o;4455:118::-;4542:24;4560:5;4542:24;:::i;:::-;4537:3;4530:37;4455:118;;:::o;4579:109::-;4660:21;4675:5;4660:21;:::i;:::-;4655:3;4648:34;4579:109;;:::o;4694:181::-;4806:62;4862:5;4806:62;:::i;:::-;4801:3;4794:75;4694:181;;:::o;4881:364::-;4969:3;4997:39;5030:5;4997:39;:::i;:::-;5052:71;5116:6;5111:3;5052:71;:::i;:::-;5045:78;;5132:52;5177:6;5172:3;5165:4;5158:5;5154:16;5132:52;:::i;:::-;5209:29;5231:6;5209:29;:::i;:::-;5204:3;5200:39;5193:46;;4973:272;4881:364;;;;:::o;5251:366::-;5393:3;5414:67;5478:2;5473:3;5414:67;:::i;:::-;5407:74;;5490:93;5579:3;5490:93;:::i;:::-;5608:2;5603:3;5599:12;5592:19;;5251:366;;;:::o;5623:::-;5765:3;5786:67;5850:2;5845:3;5786:67;:::i;:::-;5779:74;;5862:93;5951:3;5862:93;:::i;:::-;5980:2;5975:3;5971:12;5964:19;;5623:366;;;:::o;5995:::-;6137:3;6158:67;6222:2;6217:3;6158:67;:::i;:::-;6151:74;;6234:93;6323:3;6234:93;:::i;:::-;6352:2;6347:3;6343:12;6336:19;;5995:366;;;:::o;6367:::-;6509:3;6530:67;6594:2;6589:3;6530:67;:::i;:::-;6523:74;;6606:93;6695:3;6606:93;:::i;:::-;6724:2;6719:3;6715:12;6708:19;;6367:366;;;:::o;6739:::-;6881:3;6902:67;6966:2;6961:3;6902:67;:::i;:::-;6895:74;;6978:93;7067:3;6978:93;:::i;:::-;7096:2;7091:3;7087:12;7080:19;;6739:366;;;:::o;7111:::-;7253:3;7274:67;7338:2;7333:3;7274:67;:::i;:::-;7267:74;;7350:93;7439:3;7350:93;:::i;:::-;7468:2;7463:3;7459:12;7452:19;;7111:366;;;:::o;7483:::-;7625:3;7646:67;7710:2;7705:3;7646:67;:::i;:::-;7639:74;;7722:93;7811:3;7722:93;:::i;:::-;7840:2;7835:3;7831:12;7824:19;;7483:366;;;:::o;7855:::-;7997:3;8018:67;8082:2;8077:3;8018:67;:::i;:::-;8011:74;;8094:93;8183:3;8094:93;:::i;:::-;8212:2;8207:3;8203:12;8196:19;;7855:366;;;:::o;8227:::-;8369:3;8390:67;8454:2;8449:3;8390:67;:::i;:::-;8383:74;;8466:93;8555:3;8466:93;:::i;:::-;8584:2;8579:3;8575:12;8568:19;;8227:366;;;:::o;8599:::-;8741:3;8762:67;8826:2;8821:3;8762:67;:::i;:::-;8755:74;;8838:93;8927:3;8838:93;:::i;:::-;8956:2;8951:3;8947:12;8940:19;;8599:366;;;:::o;8971:::-;9113:3;9134:67;9198:2;9193:3;9134:67;:::i;:::-;9127:74;;9210:93;9299:3;9210:93;:::i;:::-;9328:2;9323:3;9319:12;9312:19;;8971:366;;;:::o;9343:::-;9485:3;9506:67;9570:2;9565:3;9506:67;:::i;:::-;9499:74;;9582:93;9671:3;9582:93;:::i;:::-;9700:2;9695:3;9691:12;9684:19;;9343:366;;;:::o;9715:::-;9857:3;9878:67;9942:2;9937:3;9878:67;:::i;:::-;9871:74;;9954:93;10043:3;9954:93;:::i;:::-;10072:2;10067:3;10063:12;10056:19;;9715:366;;;:::o;10087:::-;10229:3;10250:67;10314:2;10309:3;10250:67;:::i;:::-;10243:74;;10326:93;10415:3;10326:93;:::i;:::-;10444:2;10439:3;10435:12;10428:19;;10087:366;;;:::o;10459:::-;10601:3;10622:67;10686:2;10681:3;10622:67;:::i;:::-;10615:74;;10698:93;10787:3;10698:93;:::i;:::-;10816:2;10811:3;10807:12;10800:19;;10459:366;;;:::o;10831:118::-;10918:24;10936:5;10918:24;:::i;:::-;10913:3;10906:37;10831:118;;:::o;10955:112::-;11038:22;11054:5;11038:22;:::i;:::-;11033:3;11026:35;10955:112;;:::o;11073:222::-;11166:4;11204:2;11193:9;11189:18;11181:26;;11217:71;11285:1;11274:9;11270:17;11261:6;11217:71;:::i;:::-;11073:222;;;;:::o;11301:332::-;11422:4;11460:2;11449:9;11445:18;11437:26;;11473:71;11541:1;11530:9;11526:17;11517:6;11473:71;:::i;:::-;11554:72;11622:2;11611:9;11607:18;11598:6;11554:72;:::i;:::-;11301:332;;;;;:::o;11639:210::-;11726:4;11764:2;11753:9;11749:18;11741:26;;11777:65;11839:1;11828:9;11824:17;11815:6;11777:65;:::i;:::-;11639:210;;;;:::o;11855:272::-;11973:4;12011:2;12000:9;11996:18;11988:26;;12024:96;12117:1;12106:9;12102:17;12093:6;12024:96;:::i;:::-;11855:272;;;;:::o;12133:313::-;12246:4;12284:2;12273:9;12269:18;12261:26;;12333:9;12327:4;12323:20;12319:1;12308:9;12304:17;12297:47;12361:78;12434:4;12425:6;12361:78;:::i;:::-;12353:86;;12133:313;;;;:::o;12452:419::-;12618:4;12656:2;12645:9;12641:18;12633:26;;12705:9;12699:4;12695:20;12691:1;12680:9;12676:17;12669:47;12733:131;12859:4;12733:131;:::i;:::-;12725:139;;12452:419;;;:::o;12877:::-;13043:4;13081:2;13070:9;13066:18;13058:26;;13130:9;13124:4;13120:20;13116:1;13105:9;13101:17;13094:47;13158:131;13284:4;13158:131;:::i;:::-;13150:139;;12877:419;;;:::o;13302:::-;13468:4;13506:2;13495:9;13491:18;13483:26;;13555:9;13549:4;13545:20;13541:1;13530:9;13526:17;13519:47;13583:131;13709:4;13583:131;:::i;:::-;13575:139;;13302:419;;;:::o;13727:::-;13893:4;13931:2;13920:9;13916:18;13908:26;;13980:9;13974:4;13970:20;13966:1;13955:9;13951:17;13944:47;14008:131;14134:4;14008:131;:::i;:::-;14000:139;;13727:419;;;:::o;14152:::-;14318:4;14356:2;14345:9;14341:18;14333:26;;14405:9;14399:4;14395:20;14391:1;14380:9;14376:17;14369:47;14433:131;14559:4;14433:131;:::i;:::-;14425:139;;14152:419;;;:::o;14577:::-;14743:4;14781:2;14770:9;14766:18;14758:26;;14830:9;14824:4;14820:20;14816:1;14805:9;14801:17;14794:47;14858:131;14984:4;14858:131;:::i;:::-;14850:139;;14577:419;;;:::o;15002:::-;15168:4;15206:2;15195:9;15191:18;15183:26;;15255:9;15249:4;15245:20;15241:1;15230:9;15226:17;15219:47;15283:131;15409:4;15283:131;:::i;:::-;15275:139;;15002:419;;;:::o;15427:::-;15593:4;15631:2;15620:9;15616:18;15608:26;;15680:9;15674:4;15670:20;15666:1;15655:9;15651:17;15644:47;15708:131;15834:4;15708:131;:::i;:::-;15700:139;;15427:419;;;:::o;15852:::-;16018:4;16056:2;16045:9;16041:18;16033:26;;16105:9;16099:4;16095:20;16091:1;16080:9;16076:17;16069:47;16133:131;16259:4;16133:131;:::i;:::-;16125:139;;15852:419;;;:::o;16277:::-;16443:4;16481:2;16470:9;16466:18;16458:26;;16530:9;16524:4;16520:20;16516:1;16505:9;16501:17;16494:47;16558:131;16684:4;16558:131;:::i;:::-;16550:139;;16277:419;;;:::o;16702:::-;16868:4;16906:2;16895:9;16891:18;16883:26;;16955:9;16949:4;16945:20;16941:1;16930:9;16926:17;16919:47;16983:131;17109:4;16983:131;:::i;:::-;16975:139;;16702:419;;;:::o;17127:::-;17293:4;17331:2;17320:9;17316:18;17308:26;;17380:9;17374:4;17370:20;17366:1;17355:9;17351:17;17344:47;17408:131;17534:4;17408:131;:::i;:::-;17400:139;;17127:419;;;:::o;17552:::-;17718:4;17756:2;17745:9;17741:18;17733:26;;17805:9;17799:4;17795:20;17791:1;17780:9;17776:17;17769:47;17833:131;17959:4;17833:131;:::i;:::-;17825:139;;17552:419;;;:::o;17977:::-;18143:4;18181:2;18170:9;18166:18;18158:26;;18230:9;18224:4;18220:20;18216:1;18205:9;18201:17;18194:47;18258:131;18384:4;18258:131;:::i;:::-;18250:139;;17977:419;;;:::o;18402:::-;18568:4;18606:2;18595:9;18591:18;18583:26;;18655:9;18649:4;18645:20;18641:1;18630:9;18626:17;18619:47;18683:131;18809:4;18683:131;:::i;:::-;18675:139;;18402:419;;;:::o;18827:222::-;18920:4;18958:2;18947:9;18943:18;18935:26;;18971:71;19039:1;19028:9;19024:17;19015:6;18971:71;:::i;:::-;18827:222;;;;:::o;19055:214::-;19144:4;19182:2;19171:9;19167:18;19159:26;;19195:67;19259:1;19248:9;19244:17;19235:6;19195:67;:::i;:::-;19055:214;;;;:::o;19356:99::-;19408:6;19442:5;19436:12;19426:22;;19356:99;;;:::o;19461:169::-;19545:11;19579:6;19574:3;19567:19;19619:4;19614:3;19610:14;19595:29;;19461:169;;;;:::o;19636:305::-;19676:3;19695:20;19713:1;19695:20;:::i;:::-;19690:25;;19729:20;19747:1;19729:20;:::i;:::-;19724:25;;19883:1;19815:66;19811:74;19808:1;19805:81;19802:107;;;19889:18;;:::i;:::-;19802:107;19933:1;19930;19926:9;19919:16;;19636:305;;;;:::o;19947:848::-;20008:5;20015:4;20039:6;20030:15;;20063:5;20054:14;;20077:712;20098:1;20088:8;20085:15;20077:712;;;20193:4;20188:3;20184:14;20178:4;20175:24;20172:50;;;20202:18;;:::i;:::-;20172:50;20252:1;20242:8;20238:16;20235:451;;;20667:4;20660:5;20656:16;20647:25;;20235:451;20717:4;20711;20707:15;20699:23;;20747:32;20770:8;20747:32;:::i;:::-;20735:44;;20077:712;;;19947:848;;;;;;;:::o;20801:281::-;20859:5;20883:23;20901:4;20883:23;:::i;:::-;20875:31;;20927:25;20943:8;20927:25;:::i;:::-;20915:37;;20971:104;21008:66;20998:8;20992:4;20971:104;:::i;:::-;20962:113;;20801:281;;;;:::o;21088:1073::-;21142:5;21333:8;21323:40;;21354:1;21345:10;;21356:5;;21323:40;21382:4;21372:36;;21399:1;21390:10;;21401:5;;21372:36;21468:4;21516:1;21511:27;;;;21552:1;21547:191;;;;21461:277;;21511:27;21529:1;21520:10;;21531:5;;;21547:191;21592:3;21582:8;21579:17;21576:43;;;21599:18;;:::i;:::-;21576:43;21648:8;21645:1;21641:16;21632:25;;21683:3;21676:5;21673:14;21670:40;;;21690:18;;:::i;:::-;21670:40;21723:5;;;21461:277;;21847:2;21837:8;21834:16;21828:3;21822:4;21819:13;21815:36;21797:2;21787:8;21784:16;21779:2;21773:4;21770:12;21766:35;21750:111;21747:246;;;21903:8;21897:4;21893:19;21884:28;;21938:3;21931:5;21928:14;21925:40;;;21945:18;;:::i;:::-;21925:40;21978:5;;21747:246;22018:42;22056:3;22046:8;22040:4;22037:1;22018:42;:::i;:::-;22003:57;;;;22092:4;22087:3;22083:14;22076:5;22073:25;22070:51;;;22101:18;;:::i;:::-;22070:51;22150:4;22143:5;22139:16;22130:25;;21088:1073;;;;;;:::o;22167:348::-;22207:7;22230:20;22248:1;22230:20;:::i;:::-;22225:25;;22264:20;22282:1;22264:20;:::i;:::-;22259:25;;22452:1;22384:66;22380:74;22377:1;22374:81;22369:1;22362:9;22355:17;22351:105;22348:131;;;22459:18;;:::i;:::-;22348:131;22507:1;22504;22500:9;22489:20;;22167:348;;;;:::o;22521:191::-;22561:4;22581:20;22599:1;22581:20;:::i;:::-;22576:25;;22615:20;22633:1;22615:20;:::i;:::-;22610:25;;22654:1;22651;22648:8;22645:34;;;22659:18;;:::i;:::-;22645:34;22704:1;22701;22697:9;22689:17;;22521:191;;;;:::o;22718:96::-;22755:7;22784:24;22802:5;22784:24;:::i;:::-;22773:35;;22718:96;;;:::o;22820:90::-;22854:7;22897:5;22890:13;22883:21;22872:32;;22820:90;;;:::o;22916:126::-;22953:7;22993:42;22986:5;22982:54;22971:65;;22916:126;;;:::o;23048:77::-;23085:7;23114:5;23103:16;;23048:77;;;:::o;23131:86::-;23166:7;23206:4;23199:5;23195:16;23184:27;;23131:86;;;:::o;23223:151::-;23298:9;23331:37;23362:5;23331:37;:::i;:::-;23318:50;;23223:151;;;:::o;23380:126::-;23430:9;23463:37;23494:5;23463:37;:::i;:::-;23450:50;;23380:126;;;:::o;23512:113::-;23562:9;23595:24;23613:5;23595:24;:::i;:::-;23582:37;;23512:113;;;:::o;23631:307::-;23699:1;23709:113;23723:6;23720:1;23717:13;23709:113;;;23808:1;23803:3;23799:11;23793:18;23789:1;23784:3;23780:11;23773:39;23745:2;23742:1;23738:10;23733:15;;23709:113;;;23840:6;23837:1;23834:13;23831:101;;;23920:1;23911:6;23906:3;23902:16;23895:27;23831:101;23680:258;23631:307;;;:::o;23944:320::-;23988:6;24025:1;24019:4;24015:12;24005:22;;24072:1;24066:4;24062:12;24093:18;24083:81;;24149:4;24141:6;24137:17;24127:27;;24083:81;24211:2;24203:6;24200:14;24180:18;24177:38;24174:84;;;24230:18;;:::i;:::-;24174:84;23995:269;23944:320;;;:::o;24270:180::-;24318:77;24315:1;24308:88;24415:4;24412:1;24405:15;24439:4;24436:1;24429:15;24456:180;24504:77;24501:1;24494:88;24601:4;24598:1;24591:15;24625:4;24622:1;24615:15;24765:117;24874:1;24871;24864:12;24888:102;24929:6;24980:2;24976:7;24971:2;24964:5;24960:14;24956:28;24946:38;;24888:102;;;:::o;24996:::-;25038:8;25085:5;25082:1;25078:13;25057:34;;24996:102;;;:::o;25104:222::-;25244:34;25240:1;25232:6;25228:14;25221:58;25313:5;25308:2;25300:6;25296:15;25289:30;25104:222;:::o;25332:221::-;25472:34;25468:1;25460:6;25456:14;25449:58;25541:4;25536:2;25528:6;25524:15;25517:29;25332:221;:::o;25559:225::-;25699:34;25695:1;25687:6;25683:14;25676:58;25768:8;25763:2;25755:6;25751:15;25744:33;25559:225;:::o;25790:221::-;25930:34;25926:1;25918:6;25914:14;25907:58;25999:4;25994:2;25986:6;25982:15;25975:29;25790:221;:::o;26017:225::-;26157:34;26153:1;26145:6;26141:14;26134:58;26226:8;26221:2;26213:6;26209:15;26202:33;26017:225;:::o;26248:166::-;26388:18;26384:1;26376:6;26372:14;26365:42;26248:166;:::o;26420:180::-;26560:32;26556:1;26548:6;26544:14;26537:56;26420:180;:::o;26606:227::-;26746:34;26742:1;26734:6;26730:14;26723:58;26815:10;26810:2;26802:6;26798:15;26791:35;26606:227;:::o;26839:182::-;26979:34;26975:1;26967:6;26963:14;26956:58;26839:182;:::o;27027:220::-;27167:34;27163:1;27155:6;27151:14;27144:58;27236:3;27231:2;27223:6;27219:15;27212:28;27027:220;:::o;27253:224::-;27393:34;27389:1;27381:6;27377:14;27370:58;27462:7;27457:2;27449:6;27445:15;27438:32;27253:224;:::o;27483:223::-;27623:34;27619:1;27611:6;27607:14;27600:58;27692:6;27687:2;27679:6;27675:15;27668:31;27483:223;:::o;27712:224::-;27852:34;27848:1;27840:6;27836:14;27829:58;27921:7;27916:2;27908:6;27904:15;27897:32;27712:224;:::o;27942:181::-;28082:33;28078:1;28070:6;28066:14;28059:57;27942:181;:::o;28129:165::-;28269:17;28265:1;28257:6;28253:14;28246:41;28129:165;:::o;28300:122::-;28373:24;28391:5;28373:24;:::i;:::-;28366:5;28363:35;28353:63;;28412:1;28409;28402:12;28353:63;28300:122;:::o;28428:::-;28501:24;28519:5;28501:24;:::i;:::-;28494:5;28491:35;28481:63;;28540:1;28537;28530:12;28481:63;28428:122;:::o

Swarm Source

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