ETH Price: $2,517.74 (+2.59%)

Token

Pawn Bots Burn Token (BURN)
 

Overview

Max Total Supply

8,888 BURN

Holders

98 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*超级图狗王.eth
Balance
1 BURN

Value
$0.00
0xa2da1b49191D3d26481842081a32B1E9C4577d7c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Nostalgic collateral with a DeFi a Hifi.Finance Ecosystem project.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PB_BurnToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-04
*/

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


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

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC20} that adds a cap to the supply of tokens.
 */
abstract contract ERC20Capped is ERC20 {
    uint256 private immutable _cap;

    /**
     * @dev Sets the value of the `cap`. This value is immutable, it can only be
     * set once during construction.
     */
    constructor(uint256 cap_) {
        require(cap_ > 0, "ERC20Capped: cap is 0");
        _cap = cap_;
    }

    /**
     * @dev Returns the cap on the token's total supply.
     */
    function cap() public view virtual returns (uint256) {
        return _cap;
    }

    /**
     * @dev See {ERC20-_mint}.
     */
    function _mint(address account, uint256 amount) internal virtual override {
        require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded");
        super._mint(account, amount);
    }
}

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


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

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: PB_BurnToken.sol


pragma solidity >=0.8.4;






/// @title PB_BurnToken
/// @author Hifi
/// @notice Manages the mint and distribution of BURN tokens in exchange for burned BOTS.
contract PB_BurnToken is ERC20Burnable, ERC20Capped, Ownable {
    IERC721 public bots;

    constructor() ERC20("Pawn Bots Burn Token", "BURN") ERC20Capped(8888 * 10**decimals()) {
        bots = IERC721(0x28F0521c77923F107E29a5502a5a1152517F9000);
    }

    function _mint(address account, uint256 amount) internal override(ERC20, ERC20Capped) {
        ERC20Capped._mint(account, amount);
    }

    function adminMint(address recipient, uint256 amount) external onlyOwner {
        _mint(recipient, amount);
    }

    function updateBots(address newBots) external onlyOwner {
        bots = IERC721(newBots);
    }

    function mint(uint256[] memory botIds) external {
        for (uint256 i; i < botIds.length; ) {
            bots.transferFrom(msg.sender, 0x000000000000000000000000000000000000dEaD, botIds[i]);
            unchecked {
                i++;
            }
        }
        _mint(msg.sender, botIds.length * 10**decimals());
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bots","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"botIds","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBots","type":"address"}],"name":"updateBots","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5062000022620001a960201b60201c565b600a620000309190620003e5565b6122b86200003f919062000522565b6040518060400160405280601481526020017f5061776e20426f7473204275726e20546f6b656e0000000000000000000000008152506040518060400160405280600481526020017f4255524e000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000c392919062000280565b508060049080519060200190620000dc92919062000280565b5050506000811162000125576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200011c9062000357565b60405180910390fd5b8060808181525050506200014e62000142620001b260201b60201c565b620001ba60201b60201c565b7328f0521c77923f107e29a5502a5a1152517f9000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000664565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028e906200059a565b90600052602060002090601f016020900481019282620002b25760008555620002fe565b82601f10620002cd57805160ff1916838001178555620002fe565b82800160010185558215620002fe579182015b82811115620002fd578251825591602001919060010190620002e0565b5b5090506200030d919062000311565b5090565b5b808211156200032c57600081600090555060010162000312565b5090565b60006200033f60158362000379565b91506200034c826200063b565b602082019050919050565b60006020820190508181036000830152620003728162000330565b9050919050565b600082825260208201905092915050565b6000808291508390505b6001851115620003dc57808604811115620003b457620003b3620005d0565b5b6001851615620003c45780820291505b8081029050620003d4856200062e565b945062000394565b94509492505050565b6000620003f28262000583565b9150620003ff836200058d565b92506200042e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000436565b905092915050565b6000826200044857600190506200051b565b816200045857600090506200051b565b81600181146200047157600281146200047c57620004b2565b60019150506200051b565b60ff841115620004915762000490620005d0565b5b8360020a915084821115620004ab57620004aa620005d0565b5b506200051b565b5060208310610133831016604e8410600b8410161715620004ec5782820a905083811115620004e657620004e5620005d0565b5b6200051b565b620004fb84848460016200038a565b92509050818404811115620005155762000514620005d0565b5b81810290505b9392505050565b60006200052f8262000583565b91506200053c8362000583565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620005785762000577620005d0565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b60006002820490506001821680620005b357607f821691505b60208210811415620005ca57620005c9620005ff565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332304361707065643a2063617020697320300000000000000000000000600082015250565b60805161235862000680600039600061050b01526123586000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806379cc6790116100b8578063dcf7952b1161007c578063dcf7952b14610352578063dd62ed3e14610370578063e1e2f888146103a0578063e58306f9146103bc578063f2fde38b146103d8578063f8e93ef9146103f457610137565b806379cc67901461029a5780638da5cb5b146102b657806395d89b41146102d4578063a457c2d7146102f2578063a9059cbb1461032257610137565b8063355274ea116100ff578063355274ea146101f6578063395093511461021457806342966c681461024457806370a0823114610260578063715018a61461029057610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610410565b60405161015191906118c0565b60405180910390f35b610174600480360381019061016f9190611537565b6104a2565b604051610181919061188a565b60405180910390f35b6101926104c5565b60405161019f9190611a82565b60405180910390f35b6101c260048036038101906101bd91906114e4565b6104cf565b6040516101cf919061188a565b60405180910390f35b6101e06104fe565b6040516101ed9190611a9d565b60405180910390f35b6101fe610507565b60405161020b9190611a82565b60405180910390f35b61022e60048036038101906102299190611537565b61052f565b60405161023b919061188a565b60405180910390f35b61025e600480360381019061025991906115c0565b610566565b005b61027a60048036038101906102759190611477565b61057a565b6040516102879190611a82565b60405180910390f35b6102986105c2565b005b6102b460048036038101906102af9190611537565b6105d6565b005b6102be6105f6565b6040516102cb9190611838565b60405180910390f35b6102dc610620565b6040516102e991906118c0565b60405180910390f35b61030c60048036038101906103079190611537565b6106b2565b604051610319919061188a565b60405180910390f35b61033c60048036038101906103379190611537565b610729565b604051610349919061188a565b60405180910390f35b61035a61074c565b60405161036791906118a5565b60405180910390f35b61038a600480360381019061038591906114a4565b610772565b6040516103979190611a82565b60405180910390f35b6103ba60048036038101906103b59190611477565b6107f9565b005b6103d660048036038101906103d19190611537565b610845565b005b6103f260048036038101906103ed9190611477565b61085b565b005b61040e60048036038101906104099190611577565b6108df565b005b60606003805461041f90611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461044b90611e38565b80156104985780601f1061046d57610100808354040283529160200191610498565b820191906000526020600020905b81548152906001019060200180831161047b57829003601f168201915b5050505050905090565b6000806104ad6109d2565b90506104ba8185856109da565b600191505092915050565b6000600254905090565b6000806104da6109d2565b90506104e7858285610ba5565b6104f2858585610c31565b60019150509392505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60008061053a6109d2565b905061055b81858561054c8589610772565b6105569190611b25565b6109da565b600191505092915050565b6105776105716109d2565b82610eb2565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105ca611089565b6105d46000611107565b565b6105e8826105e26109d2565b83610ba5565b6105f28282610eb2565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461062f90611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461065b90611e38565b80156106a85780601f1061067d576101008083540402835291602001916106a8565b820191906000526020600020905b81548152906001019060200180831161068b57829003601f168201915b5050505050905090565b6000806106bd6109d2565b905060006106cb8286610772565b905083811015610710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070790611a42565b60405180910390fd5b61071d82868684036109da565b60019250505092915050565b6000806107346109d2565b9050610741818585610c31565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610801611089565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61084d611089565b61085782826111cd565b5050565b610863611089565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90611922565b60405180910390fd5b6108dc81611107565b50565b60005b81518110156109a557600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead8585815181106109405761093f611ef9565b5b60200260200101516040518463ffffffff1660e01b815260040161096693929190611853565b600060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b5050505080806001019150506108e2565b506109cf336109b26104fe565b600a6109be9190611bce565b83516109ca9190611cec565b6111cd565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611a22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190611942565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b989190611a82565b60405180910390a3505050565b6000610bb18484610772565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c2b5781811015610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490611962565b60405180910390fd5b610c2a84848484036109da565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c98906119e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d08906118e2565b60405180910390fd5b610d1c8383836111db565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990611982565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e359190611b25565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e999190611a82565b60405180910390a3610eac8484846111e0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906119c2565b60405180910390fd5b610f2e826000836111db565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90611902565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461100b9190611d46565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110709190611a82565b60405180910390a3611084836000846111e0565b505050565b6110916109d2565b73ffffffffffffffffffffffffffffffffffffffff166110af6105f6565b73ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906119a2565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6111d782826111e5565b5050565b505050565b505050565b6111ed610507565b816111f66104c5565b6112009190611b25565b1115611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890611a02565b60405180910390fd5b61124b828261124f565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690611a62565b60405180910390fd5b6112cb600083836111db565b80600260008282546112dd9190611b25565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113329190611b25565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113979190611a82565b60405180910390a36113ab600083836111e0565b5050565b60006113c26113bd84611add565b611ab8565b905080838252602082019050828560208602820111156113e5576113e4611f5c565b5b60005b8581101561141557816113fb8882611462565b8452602084019350602083019250506001810190506113e8565b5050509392505050565b60008135905061142e816122f4565b92915050565b600082601f83011261144957611448611f57565b5b81356114598482602086016113af565b91505092915050565b6000813590506114718161230b565b92915050565b60006020828403121561148d5761148c611f66565b5b600061149b8482850161141f565b91505092915050565b600080604083850312156114bb576114ba611f66565b5b60006114c98582860161141f565b92505060206114da8582860161141f565b9150509250929050565b6000806000606084860312156114fd576114fc611f66565b5b600061150b8682870161141f565b935050602061151c8682870161141f565b925050604061152d86828701611462565b9150509250925092565b6000806040838503121561154e5761154d611f66565b5b600061155c8582860161141f565b925050602061156d85828601611462565b9150509250929050565b60006020828403121561158d5761158c611f66565b5b600082013567ffffffffffffffff8111156115ab576115aa611f61565b5b6115b784828501611434565b91505092915050565b6000602082840312156115d6576115d5611f66565b5b60006115e484828501611462565b91505092915050565b6115f681611d7a565b82525050565b61160581611d8c565b82525050565b61161481611dcf565b82525050565b600061162582611b09565b61162f8185611b14565b935061163f818560208601611e05565b61164881611f6b565b840191505092915050565b6000611660602383611b14565b915061166b82611f89565b604082019050919050565b6000611683602283611b14565b915061168e82611fd8565b604082019050919050565b60006116a6602683611b14565b91506116b182612027565b604082019050919050565b60006116c9602283611b14565b91506116d482612076565b604082019050919050565b60006116ec601d83611b14565b91506116f7826120c5565b602082019050919050565b600061170f602683611b14565b915061171a826120ee565b604082019050919050565b6000611732602083611b14565b915061173d8261213d565b602082019050919050565b6000611755602183611b14565b915061176082612166565b604082019050919050565b6000611778602583611b14565b9150611783826121b5565b604082019050919050565b600061179b601983611b14565b91506117a682612204565b602082019050919050565b60006117be602483611b14565b91506117c98261222d565b604082019050919050565b60006117e1602583611b14565b91506117ec8261227c565b604082019050919050565b6000611804601f83611b14565b915061180f826122cb565b602082019050919050565b61182381611db8565b82525050565b61183281611dc2565b82525050565b600060208201905061184d60008301846115ed565b92915050565b600060608201905061186860008301866115ed565b61187560208301856115ed565b611882604083018461181a565b949350505050565b600060208201905061189f60008301846115fc565b92915050565b60006020820190506118ba600083018461160b565b92915050565b600060208201905081810360008301526118da818461161a565b905092915050565b600060208201905081810360008301526118fb81611653565b9050919050565b6000602082019050818103600083015261191b81611676565b9050919050565b6000602082019050818103600083015261193b81611699565b9050919050565b6000602082019050818103600083015261195b816116bc565b9050919050565b6000602082019050818103600083015261197b816116df565b9050919050565b6000602082019050818103600083015261199b81611702565b9050919050565b600060208201905081810360008301526119bb81611725565b9050919050565b600060208201905081810360008301526119db81611748565b9050919050565b600060208201905081810360008301526119fb8161176b565b9050919050565b60006020820190508181036000830152611a1b8161178e565b9050919050565b60006020820190508181036000830152611a3b816117b1565b9050919050565b60006020820190508181036000830152611a5b816117d4565b9050919050565b60006020820190508181036000830152611a7b816117f7565b9050919050565b6000602082019050611a97600083018461181a565b92915050565b6000602082019050611ab26000830184611829565b92915050565b6000611ac2611ad3565b9050611ace8282611e6a565b919050565b6000604051905090565b600067ffffffffffffffff821115611af857611af7611f28565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000611b3082611db8565b9150611b3b83611db8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b7057611b6f611e9b565b5b828201905092915050565b6000808291508390505b6001851115611bc557808604811115611ba157611ba0611e9b565b5b6001851615611bb05780820291505b8081029050611bbe85611f7c565b9450611b85565b94509492505050565b6000611bd982611db8565b9150611be483611dc2565b9250611c117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611c19565b905092915050565b600082611c295760019050611ce5565b81611c375760009050611ce5565b8160018114611c4d5760028114611c5757611c86565b6001915050611ce5565b60ff841115611c6957611c68611e9b565b5b8360020a915084821115611c8057611c7f611e9b565b5b50611ce5565b5060208310610133831016604e8410600b8410161715611cbb5782820a905083811115611cb657611cb5611e9b565b5b611ce5565b611cc88484846001611b7b565b92509050818404811115611cdf57611cde611e9b565b5b81810290505b9392505050565b6000611cf782611db8565b9150611d0283611db8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d3b57611d3a611e9b565b5b828202905092915050565b6000611d5182611db8565b9150611d5c83611db8565b925082821015611d6f57611d6e611e9b565b5b828203905092915050565b6000611d8582611d98565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611dda82611de1565b9050919050565b6000611dec82611df3565b9050919050565b6000611dfe82611d98565b9050919050565b60005b83811015611e23578082015181840152602081019050611e08565b83811115611e32576000848401525b50505050565b60006002820490506001821680611e5057607f821691505b60208210811415611e6457611e63611eca565b5b50919050565b611e7382611f6b565b810181811067ffffffffffffffff82111715611e9257611e91611f28565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6122fd81611d7a565b811461230857600080fd5b50565b61231481611db8565b811461231f57600080fd5b5056fea2646970667358221220da27cb4774cc1968c01a939f0d09b40831b0deaf0da89bdb05d7977be18083ae64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806379cc6790116100b8578063dcf7952b1161007c578063dcf7952b14610352578063dd62ed3e14610370578063e1e2f888146103a0578063e58306f9146103bc578063f2fde38b146103d8578063f8e93ef9146103f457610137565b806379cc67901461029a5780638da5cb5b146102b657806395d89b41146102d4578063a457c2d7146102f2578063a9059cbb1461032257610137565b8063355274ea116100ff578063355274ea146101f6578063395093511461021457806342966c681461024457806370a0823114610260578063715018a61461029057610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610410565b60405161015191906118c0565b60405180910390f35b610174600480360381019061016f9190611537565b6104a2565b604051610181919061188a565b60405180910390f35b6101926104c5565b60405161019f9190611a82565b60405180910390f35b6101c260048036038101906101bd91906114e4565b6104cf565b6040516101cf919061188a565b60405180910390f35b6101e06104fe565b6040516101ed9190611a9d565b60405180910390f35b6101fe610507565b60405161020b9190611a82565b60405180910390f35b61022e60048036038101906102299190611537565b61052f565b60405161023b919061188a565b60405180910390f35b61025e600480360381019061025991906115c0565b610566565b005b61027a60048036038101906102759190611477565b61057a565b6040516102879190611a82565b60405180910390f35b6102986105c2565b005b6102b460048036038101906102af9190611537565b6105d6565b005b6102be6105f6565b6040516102cb9190611838565b60405180910390f35b6102dc610620565b6040516102e991906118c0565b60405180910390f35b61030c60048036038101906103079190611537565b6106b2565b604051610319919061188a565b60405180910390f35b61033c60048036038101906103379190611537565b610729565b604051610349919061188a565b60405180910390f35b61035a61074c565b60405161036791906118a5565b60405180910390f35b61038a600480360381019061038591906114a4565b610772565b6040516103979190611a82565b60405180910390f35b6103ba60048036038101906103b59190611477565b6107f9565b005b6103d660048036038101906103d19190611537565b610845565b005b6103f260048036038101906103ed9190611477565b61085b565b005b61040e60048036038101906104099190611577565b6108df565b005b60606003805461041f90611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461044b90611e38565b80156104985780601f1061046d57610100808354040283529160200191610498565b820191906000526020600020905b81548152906001019060200180831161047b57829003601f168201915b5050505050905090565b6000806104ad6109d2565b90506104ba8185856109da565b600191505092915050565b6000600254905090565b6000806104da6109d2565b90506104e7858285610ba5565b6104f2858585610c31565b60019150509392505050565b60006012905090565b60007f0000000000000000000000000000000000000000000001e1d1c72d5b97e00000905090565b60008061053a6109d2565b905061055b81858561054c8589610772565b6105569190611b25565b6109da565b600191505092915050565b6105776105716109d2565b82610eb2565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105ca611089565b6105d46000611107565b565b6105e8826105e26109d2565b83610ba5565b6105f28282610eb2565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461062f90611e38565b80601f016020809104026020016040519081016040528092919081815260200182805461065b90611e38565b80156106a85780601f1061067d576101008083540402835291602001916106a8565b820191906000526020600020905b81548152906001019060200180831161068b57829003601f168201915b5050505050905090565b6000806106bd6109d2565b905060006106cb8286610772565b905083811015610710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070790611a42565b60405180910390fd5b61071d82868684036109da565b60019250505092915050565b6000806107346109d2565b9050610741818585610c31565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610801611089565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61084d611089565b61085782826111cd565b5050565b610863611089565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ca90611922565b60405180910390fd5b6108dc81611107565b50565b60005b81518110156109a557600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead8585815181106109405761093f611ef9565b5b60200260200101516040518463ffffffff1660e01b815260040161096693929190611853565b600060405180830381600087803b15801561098057600080fd5b505af1158015610994573d6000803e3d6000fd5b5050505080806001019150506108e2565b506109cf336109b26104fe565b600a6109be9190611bce565b83516109ca9190611cec565b6111cd565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190611a22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab190611942565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b989190611a82565b60405180910390a3505050565b6000610bb18484610772565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c2b5781811015610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490611962565b60405180910390fd5b610c2a84848484036109da565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c98906119e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d08906118e2565b60405180910390fd5b610d1c8383836111db565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9990611982565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e359190611b25565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e999190611a82565b60405180910390a3610eac8484846111e0565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f19906119c2565b60405180910390fd5b610f2e826000836111db565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90611902565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461100b9190611d46565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110709190611a82565b60405180910390a3611084836000846111e0565b505050565b6110916109d2565b73ffffffffffffffffffffffffffffffffffffffff166110af6105f6565b73ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906119a2565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6111d782826111e5565b5050565b505050565b505050565b6111ed610507565b816111f66104c5565b6112009190611b25565b1115611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890611a02565b60405180910390fd5b61124b828261124f565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690611a62565b60405180910390fd5b6112cb600083836111db565b80600260008282546112dd9190611b25565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113329190611b25565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113979190611a82565b60405180910390a36113ab600083836111e0565b5050565b60006113c26113bd84611add565b611ab8565b905080838252602082019050828560208602820111156113e5576113e4611f5c565b5b60005b8581101561141557816113fb8882611462565b8452602084019350602083019250506001810190506113e8565b5050509392505050565b60008135905061142e816122f4565b92915050565b600082601f83011261144957611448611f57565b5b81356114598482602086016113af565b91505092915050565b6000813590506114718161230b565b92915050565b60006020828403121561148d5761148c611f66565b5b600061149b8482850161141f565b91505092915050565b600080604083850312156114bb576114ba611f66565b5b60006114c98582860161141f565b92505060206114da8582860161141f565b9150509250929050565b6000806000606084860312156114fd576114fc611f66565b5b600061150b8682870161141f565b935050602061151c8682870161141f565b925050604061152d86828701611462565b9150509250925092565b6000806040838503121561154e5761154d611f66565b5b600061155c8582860161141f565b925050602061156d85828601611462565b9150509250929050565b60006020828403121561158d5761158c611f66565b5b600082013567ffffffffffffffff8111156115ab576115aa611f61565b5b6115b784828501611434565b91505092915050565b6000602082840312156115d6576115d5611f66565b5b60006115e484828501611462565b91505092915050565b6115f681611d7a565b82525050565b61160581611d8c565b82525050565b61161481611dcf565b82525050565b600061162582611b09565b61162f8185611b14565b935061163f818560208601611e05565b61164881611f6b565b840191505092915050565b6000611660602383611b14565b915061166b82611f89565b604082019050919050565b6000611683602283611b14565b915061168e82611fd8565b604082019050919050565b60006116a6602683611b14565b91506116b182612027565b604082019050919050565b60006116c9602283611b14565b91506116d482612076565b604082019050919050565b60006116ec601d83611b14565b91506116f7826120c5565b602082019050919050565b600061170f602683611b14565b915061171a826120ee565b604082019050919050565b6000611732602083611b14565b915061173d8261213d565b602082019050919050565b6000611755602183611b14565b915061176082612166565b604082019050919050565b6000611778602583611b14565b9150611783826121b5565b604082019050919050565b600061179b601983611b14565b91506117a682612204565b602082019050919050565b60006117be602483611b14565b91506117c98261222d565b604082019050919050565b60006117e1602583611b14565b91506117ec8261227c565b604082019050919050565b6000611804601f83611b14565b915061180f826122cb565b602082019050919050565b61182381611db8565b82525050565b61183281611dc2565b82525050565b600060208201905061184d60008301846115ed565b92915050565b600060608201905061186860008301866115ed565b61187560208301856115ed565b611882604083018461181a565b949350505050565b600060208201905061189f60008301846115fc565b92915050565b60006020820190506118ba600083018461160b565b92915050565b600060208201905081810360008301526118da818461161a565b905092915050565b600060208201905081810360008301526118fb81611653565b9050919050565b6000602082019050818103600083015261191b81611676565b9050919050565b6000602082019050818103600083015261193b81611699565b9050919050565b6000602082019050818103600083015261195b816116bc565b9050919050565b6000602082019050818103600083015261197b816116df565b9050919050565b6000602082019050818103600083015261199b81611702565b9050919050565b600060208201905081810360008301526119bb81611725565b9050919050565b600060208201905081810360008301526119db81611748565b9050919050565b600060208201905081810360008301526119fb8161176b565b9050919050565b60006020820190508181036000830152611a1b8161178e565b9050919050565b60006020820190508181036000830152611a3b816117b1565b9050919050565b60006020820190508181036000830152611a5b816117d4565b9050919050565b60006020820190508181036000830152611a7b816117f7565b9050919050565b6000602082019050611a97600083018461181a565b92915050565b6000602082019050611ab26000830184611829565b92915050565b6000611ac2611ad3565b9050611ace8282611e6a565b919050565b6000604051905090565b600067ffffffffffffffff821115611af857611af7611f28565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000611b3082611db8565b9150611b3b83611db8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b7057611b6f611e9b565b5b828201905092915050565b6000808291508390505b6001851115611bc557808604811115611ba157611ba0611e9b565b5b6001851615611bb05780820291505b8081029050611bbe85611f7c565b9450611b85565b94509492505050565b6000611bd982611db8565b9150611be483611dc2565b9250611c117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611c19565b905092915050565b600082611c295760019050611ce5565b81611c375760009050611ce5565b8160018114611c4d5760028114611c5757611c86565b6001915050611ce5565b60ff841115611c6957611c68611e9b565b5b8360020a915084821115611c8057611c7f611e9b565b5b50611ce5565b5060208310610133831016604e8410600b8410161715611cbb5782820a905083811115611cb657611cb5611e9b565b5b611ce5565b611cc88484846001611b7b565b92509050818404811115611cdf57611cde611e9b565b5b81810290505b9392505050565b6000611cf782611db8565b9150611d0283611db8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d3b57611d3a611e9b565b5b828202905092915050565b6000611d5182611db8565b9150611d5c83611db8565b925082821015611d6f57611d6e611e9b565b5b828203905092915050565b6000611d8582611d98565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611dda82611de1565b9050919050565b6000611dec82611df3565b9050919050565b6000611dfe82611d98565b9050919050565b60005b83811015611e23578082015181840152602081019050611e08565b83811115611e32576000848401525b50505050565b60006002820490506001821680611e5057607f821691505b60208210811415611e6457611e63611eca565b5b50919050565b611e7382611f6b565b810181811067ffffffffffffffff82111715611e9257611e91611f28565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6122fd81611d7a565b811461230857600080fd5b50565b61231481611db8565b811461231f57600080fd5b5056fea2646970667358221220da27cb4774cc1968c01a939f0d09b40831b0deaf0da89bdb05d7977be18083ae64736f6c63430008070033

Deployed Bytecode Sourcemap

28332:984:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15144:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17495:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16264:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18276:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16106:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26610:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18980:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27548:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16435:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8567:103;;;:::i;:::-;;27958:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7919:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15363:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19721:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16768:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28400:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17024:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28871:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28747:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8825:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28977:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15144:100;15198:13;15231:5;15224:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15144:100;:::o;17495:201::-;17578:4;17595:13;17611:12;:10;:12::i;:::-;17595:28;;17634:32;17643:5;17650:7;17659:6;17634:8;:32::i;:::-;17684:4;17677:11;;;17495:201;;;;:::o;16264:108::-;16325:7;16352:12;;16345:19;;16264:108;:::o;18276:295::-;18407:4;18424:15;18442:12;:10;:12::i;:::-;18424:30;;18465:38;18481:4;18487:7;18496:6;18465:15;:38::i;:::-;18514:27;18524:4;18530:2;18534:6;18514:9;:27::i;:::-;18559:4;18552:11;;;18276:295;;;;;:::o;16106:93::-;16164:5;16189:2;16182:9;;16106:93;:::o;26610:83::-;26654:7;26681:4;26674:11;;26610:83;:::o;18980:238::-;19068:4;19085:13;19101:12;:10;:12::i;:::-;19085:28;;19124:64;19133:5;19140:7;19177:10;19149:25;19159:5;19166:7;19149:9;:25::i;:::-;:38;;;;:::i;:::-;19124:8;:64::i;:::-;19206:4;19199:11;;;18980:238;;;;:::o;27548:91::-;27604:27;27610:12;:10;:12::i;:::-;27624:6;27604:5;:27::i;:::-;27548:91;:::o;16435:127::-;16509:7;16536:9;:18;16546:7;16536:18;;;;;;;;;;;;;;;;16529:25;;16435:127;;;:::o;8567:103::-;7805:13;:11;:13::i;:::-;8632:30:::1;8659:1;8632:18;:30::i;:::-;8567:103::o:0;27958:164::-;28035:46;28051:7;28060:12;:10;:12::i;:::-;28074:6;28035:15;:46::i;:::-;28092:22;28098:7;28107:6;28092:5;:22::i;:::-;27958:164;;:::o;7919:87::-;7965:7;7992:6;;;;;;;;;;;7985:13;;7919:87;:::o;15363:104::-;15419:13;15452:7;15445:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15363:104;:::o;19721:436::-;19814:4;19831:13;19847:12;:10;:12::i;:::-;19831:28;;19870:24;19897:25;19907:5;19914:7;19897:9;:25::i;:::-;19870:52;;19961:15;19941:16;:35;;19933:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20054:60;20063:5;20070:7;20098:15;20079:16;:34;20054:8;:60::i;:::-;20145:4;20138:11;;;;19721:436;;;;:::o;16768:193::-;16847:4;16864:13;16880:12;:10;:12::i;:::-;16864:28;;16903;16913:5;16920:2;16924:6;16903:9;:28::i;:::-;16949:4;16942:11;;;16768:193;;;;:::o;28400:19::-;;;;;;;;;;;;;:::o;17024:151::-;17113:7;17140:11;:18;17152:5;17140:18;;;;;;;;;;;;;;;:27;17159:7;17140:27;;;;;;;;;;;;;;;;17133:34;;17024:151;;;;:::o;28871:98::-;7805:13;:11;:13::i;:::-;28953:7:::1;28938:4;;:23;;;;;;;;;;;;;;;;;;28871:98:::0;:::o;28747:116::-;7805:13;:11;:13::i;:::-;28831:24:::1;28837:9;28848:6;28831:5;:24::i;:::-;28747:116:::0;;:::o;8825:201::-;7805:13;:11;:13::i;:::-;8934:1:::1;8914:22;;:8;:22;;;;8906:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8990:28;9009:8;8990:18;:28::i;:::-;8825:201:::0;:::o;28977:336::-;29041:9;29036:210;29056:6;:13;29052:1;:17;29036:210;;;29088:4;;;;;;;;;;;:17;;;29106:10;29118:42;29162:6;29169:1;29162:9;;;;;;;;:::i;:::-;;;;;;;;29088:84;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29216:3;;;;;;;29036:210;;;;29256:49;29262:10;29294;:8;:10::i;:::-;29290:2;:14;;;;:::i;:::-;29274:6;:13;:30;;;;:::i;:::-;29256:5;:49::i;:::-;28977:336;:::o;6470:98::-;6523:7;6550:10;6543:17;;6470:98;:::o;23346:380::-;23499:1;23482:19;;:5;:19;;;;23474:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23580:1;23561:21;;:7;:21;;;;23553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23664:6;23634:11;:18;23646:5;23634:18;;;;;;;;;;;;;;;:27;23653:7;23634:27;;;;;;;;;;;;;;;:36;;;;23702:7;23686:32;;23695:5;23686:32;;;23711:6;23686:32;;;;;;:::i;:::-;;;;;;;;23346:380;;;:::o;24017:453::-;24152:24;24179:25;24189:5;24196:7;24179:9;:25::i;:::-;24152:52;;24239:17;24219:16;:37;24215:248;;24301:6;24281:16;:26;;24273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24385:51;24394:5;24401:7;24429:6;24410:16;:25;24385:8;:51::i;:::-;24215:248;24141:329;24017:453;;;:::o;20627:671::-;20774:1;20758:18;;:4;:18;;;;20750:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20851:1;20837:16;;:2;:16;;;;20829:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20906:38;20927:4;20933:2;20937:6;20906:20;:38::i;:::-;20957:19;20979:9;:15;20989:4;20979:15;;;;;;;;;;;;;;;;20957:37;;21028:6;21013:11;:21;;21005:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21145:6;21131:11;:20;21113:9;:15;21123:4;21113:15;;;;;;;;;;;;;;;:38;;;;21190:6;21173:9;:13;21183:2;21173:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21229:2;21214:26;;21223:4;21214:26;;;21233:6;21214:26;;;;;;:::i;:::-;;;;;;;;21253:37;21273:4;21279:2;21283:6;21253:19;:37::i;:::-;20739:559;20627:671;;;:::o;22317:591::-;22420:1;22401:21;;:7;:21;;;;22393:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22473:49;22494:7;22511:1;22515:6;22473:20;:49::i;:::-;22535:22;22560:9;:18;22570:7;22560:18;;;;;;;;;;;;;;;;22535:43;;22615:6;22597:14;:24;;22589:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22734:6;22717:14;:23;22696:9;:18;22706:7;22696:18;;;;;;;;;;;;;;;:44;;;;22778:6;22762:12;;:22;;;;;;;:::i;:::-;;;;;;;;22828:1;22802:37;;22811:7;22802:37;;;22832:6;22802:37;;;;;;:::i;:::-;;;;;;;;22852:48;22872:7;22889:1;22893:6;22852:19;:48::i;:::-;22382:526;22317:591;;:::o;8084:132::-;8159:12;:10;:12::i;:::-;8148:23;;:7;:5;:7::i;:::-;:23;;;8140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8084:132::o;9186:191::-;9260:16;9279:6;;;;;;;;;;;9260:25;;9305:8;9296:6;;:17;;;;;;;;;;;;;;;;;;9360:8;9329:40;;9350:8;9329:40;;;;;;;;;;;;9249:128;9186:191;:::o;28600:139::-;28697:34;28715:7;28724:6;28697:17;:34::i;:::-;28600:139;;:::o;25070:125::-;;;;:::o;25799:124::-;;;;:::o;26751:207::-;26876:5;:3;:5::i;:::-;26866:6;26844:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:37;;26836:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26922:28;26934:7;26943:6;26922:11;:28::i;:::-;26751:207;;:::o;21585:399::-;21688:1;21669:21;;:7;:21;;;;21661:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;21739:49;21768:1;21772:7;21781:6;21739:20;:49::i;:::-;21817:6;21801:12;;:22;;;;;;;:::i;:::-;;;;;;;;21856:6;21834:9;:18;21844:7;21834:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21899:7;21878:37;;21895:1;21878:37;;;21908:6;21878:37;;;;;;:::i;:::-;;;;;;;;21928:48;21956:1;21960:7;21969:6;21928:19;:48::i;:::-;21585:399;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;914:370::-;985:5;1034:3;1027:4;1019:6;1015:17;1011:27;1001:122;;1042:79;;:::i;:::-;1001:122;1159:6;1146:20;1184:94;1274:3;1266:6;1259:4;1251:6;1247:17;1184:94;:::i;:::-;1175:103;;991:293;914:370;;;;:::o;1290:139::-;1336:5;1374:6;1361:20;1352:29;;1390:33;1417:5;1390:33;:::i;:::-;1290:139;;;;:::o;1435:329::-;1494:6;1543:2;1531:9;1522:7;1518:23;1514:32;1511:119;;;1549:79;;:::i;:::-;1511:119;1669:1;1694:53;1739:7;1730:6;1719:9;1715:22;1694:53;:::i;:::-;1684:63;;1640:117;1435:329;;;;:::o;1770:474::-;1838:6;1846;1895:2;1883:9;1874:7;1870:23;1866:32;1863:119;;;1901:79;;:::i;:::-;1863:119;2021:1;2046:53;2091:7;2082:6;2071:9;2067:22;2046:53;:::i;:::-;2036:63;;1992:117;2148:2;2174:53;2219:7;2210:6;2199:9;2195:22;2174:53;:::i;:::-;2164:63;;2119:118;1770:474;;;;;:::o;2250:619::-;2327:6;2335;2343;2392:2;2380:9;2371:7;2367:23;2363:32;2360:119;;;2398:79;;:::i;:::-;2360:119;2518:1;2543:53;2588:7;2579:6;2568:9;2564:22;2543:53;:::i;:::-;2533:63;;2489:117;2645:2;2671:53;2716:7;2707:6;2696:9;2692:22;2671:53;:::i;:::-;2661:63;;2616:118;2773:2;2799:53;2844:7;2835:6;2824:9;2820:22;2799:53;:::i;:::-;2789:63;;2744:118;2250:619;;;;;:::o;2875:474::-;2943:6;2951;3000:2;2988:9;2979:7;2975:23;2971:32;2968:119;;;3006:79;;:::i;:::-;2968:119;3126:1;3151:53;3196:7;3187:6;3176:9;3172:22;3151:53;:::i;:::-;3141:63;;3097:117;3253:2;3279:53;3324:7;3315:6;3304:9;3300:22;3279:53;:::i;:::-;3269:63;;3224:118;2875:474;;;;;:::o;3355:539::-;3439:6;3488:2;3476:9;3467:7;3463:23;3459:32;3456:119;;;3494:79;;:::i;:::-;3456:119;3642:1;3631:9;3627:17;3614:31;3672:18;3664:6;3661:30;3658:117;;;3694:79;;:::i;:::-;3658:117;3799:78;3869:7;3860:6;3849:9;3845:22;3799:78;:::i;:::-;3789:88;;3585:302;3355:539;;;;:::o;3900:329::-;3959:6;4008:2;3996:9;3987:7;3983:23;3979:32;3976:119;;;4014:79;;:::i;:::-;3976:119;4134:1;4159:53;4204:7;4195:6;4184:9;4180:22;4159:53;:::i;:::-;4149:63;;4105:117;3900:329;;;;:::o;4235:118::-;4322:24;4340:5;4322:24;:::i;:::-;4317:3;4310:37;4235:118;;:::o;4359:109::-;4440:21;4455:5;4440:21;:::i;:::-;4435:3;4428:34;4359:109;;:::o;4474:161::-;4576:52;4622:5;4576:52;:::i;:::-;4571:3;4564:65;4474:161;;:::o;4641:364::-;4729:3;4757:39;4790:5;4757:39;:::i;:::-;4812:71;4876:6;4871:3;4812:71;:::i;:::-;4805:78;;4892:52;4937:6;4932:3;4925:4;4918:5;4914:16;4892:52;:::i;:::-;4969:29;4991:6;4969:29;:::i;:::-;4964:3;4960:39;4953:46;;4733:272;4641:364;;;;:::o;5011:366::-;5153:3;5174:67;5238:2;5233:3;5174:67;:::i;:::-;5167:74;;5250:93;5339:3;5250:93;:::i;:::-;5368:2;5363:3;5359:12;5352:19;;5011:366;;;:::o;5383:::-;5525:3;5546:67;5610:2;5605:3;5546:67;:::i;:::-;5539:74;;5622:93;5711:3;5622:93;:::i;:::-;5740:2;5735:3;5731:12;5724:19;;5383:366;;;:::o;5755:::-;5897:3;5918:67;5982:2;5977:3;5918:67;:::i;:::-;5911:74;;5994:93;6083:3;5994:93;:::i;:::-;6112:2;6107:3;6103:12;6096:19;;5755:366;;;:::o;6127:::-;6269:3;6290:67;6354:2;6349:3;6290:67;:::i;:::-;6283:74;;6366:93;6455:3;6366:93;:::i;:::-;6484:2;6479:3;6475:12;6468:19;;6127:366;;;:::o;6499:::-;6641:3;6662:67;6726:2;6721:3;6662:67;:::i;:::-;6655:74;;6738:93;6827:3;6738:93;:::i;:::-;6856:2;6851:3;6847:12;6840:19;;6499:366;;;:::o;6871:::-;7013:3;7034:67;7098:2;7093:3;7034:67;:::i;:::-;7027:74;;7110:93;7199:3;7110:93;:::i;:::-;7228:2;7223:3;7219:12;7212:19;;6871:366;;;:::o;7243:::-;7385:3;7406:67;7470:2;7465:3;7406:67;:::i;:::-;7399:74;;7482:93;7571:3;7482:93;:::i;:::-;7600:2;7595:3;7591:12;7584:19;;7243:366;;;:::o;7615:::-;7757:3;7778:67;7842:2;7837:3;7778:67;:::i;:::-;7771:74;;7854:93;7943:3;7854:93;:::i;:::-;7972:2;7967:3;7963:12;7956:19;;7615:366;;;:::o;7987:::-;8129:3;8150:67;8214:2;8209:3;8150:67;:::i;:::-;8143:74;;8226:93;8315:3;8226:93;:::i;:::-;8344:2;8339:3;8335:12;8328:19;;7987:366;;;:::o;8359:::-;8501:3;8522:67;8586:2;8581:3;8522:67;:::i;:::-;8515:74;;8598:93;8687:3;8598:93;:::i;:::-;8716:2;8711:3;8707:12;8700:19;;8359:366;;;:::o;8731:::-;8873:3;8894:67;8958:2;8953:3;8894:67;:::i;:::-;8887:74;;8970:93;9059:3;8970:93;:::i;:::-;9088:2;9083:3;9079:12;9072:19;;8731:366;;;:::o;9103:::-;9245:3;9266:67;9330:2;9325:3;9266:67;:::i;:::-;9259:74;;9342:93;9431:3;9342:93;:::i;:::-;9460:2;9455:3;9451:12;9444:19;;9103:366;;;:::o;9475:::-;9617:3;9638:67;9702:2;9697:3;9638:67;:::i;:::-;9631:74;;9714:93;9803:3;9714:93;:::i;:::-;9832:2;9827:3;9823:12;9816:19;;9475:366;;;:::o;9847:118::-;9934:24;9952:5;9934:24;:::i;:::-;9929:3;9922:37;9847:118;;:::o;9971:112::-;10054:22;10070:5;10054:22;:::i;:::-;10049:3;10042:35;9971:112;;:::o;10089:222::-;10182:4;10220:2;10209:9;10205:18;10197:26;;10233:71;10301:1;10290:9;10286:17;10277:6;10233:71;:::i;:::-;10089:222;;;;:::o;10317:442::-;10466:4;10504:2;10493:9;10489:18;10481:26;;10517:71;10585:1;10574:9;10570:17;10561:6;10517:71;:::i;:::-;10598:72;10666:2;10655:9;10651:18;10642:6;10598:72;:::i;:::-;10680;10748:2;10737:9;10733:18;10724:6;10680:72;:::i;:::-;10317:442;;;;;;:::o;10765:210::-;10852:4;10890:2;10879:9;10875:18;10867:26;;10903:65;10965:1;10954:9;10950:17;10941:6;10903:65;:::i;:::-;10765:210;;;;:::o;10981:252::-;11089:4;11127:2;11116:9;11112:18;11104:26;;11140:86;11223:1;11212:9;11208:17;11199:6;11140:86;:::i;:::-;10981:252;;;;:::o;11239:313::-;11352:4;11390:2;11379:9;11375:18;11367:26;;11439:9;11433:4;11429:20;11425:1;11414:9;11410:17;11403:47;11467:78;11540:4;11531:6;11467:78;:::i;:::-;11459:86;;11239:313;;;;:::o;11558:419::-;11724:4;11762:2;11751:9;11747:18;11739:26;;11811:9;11805:4;11801:20;11797:1;11786:9;11782:17;11775:47;11839:131;11965:4;11839:131;:::i;:::-;11831:139;;11558:419;;;:::o;11983:::-;12149:4;12187:2;12176:9;12172:18;12164:26;;12236:9;12230:4;12226:20;12222:1;12211:9;12207:17;12200:47;12264:131;12390:4;12264:131;:::i;:::-;12256:139;;11983:419;;;:::o;12408:::-;12574:4;12612:2;12601:9;12597:18;12589:26;;12661:9;12655:4;12651:20;12647:1;12636:9;12632:17;12625:47;12689:131;12815:4;12689:131;:::i;:::-;12681:139;;12408:419;;;:::o;12833:::-;12999:4;13037:2;13026:9;13022:18;13014:26;;13086:9;13080:4;13076:20;13072:1;13061:9;13057:17;13050:47;13114:131;13240:4;13114:131;:::i;:::-;13106:139;;12833:419;;;:::o;13258:::-;13424:4;13462:2;13451:9;13447:18;13439:26;;13511:9;13505:4;13501:20;13497:1;13486:9;13482:17;13475:47;13539:131;13665:4;13539:131;:::i;:::-;13531:139;;13258:419;;;:::o;13683:::-;13849:4;13887:2;13876:9;13872:18;13864:26;;13936:9;13930:4;13926:20;13922:1;13911:9;13907:17;13900:47;13964:131;14090:4;13964:131;:::i;:::-;13956:139;;13683:419;;;:::o;14108:::-;14274:4;14312:2;14301:9;14297:18;14289:26;;14361:9;14355:4;14351:20;14347:1;14336:9;14332:17;14325:47;14389:131;14515:4;14389:131;:::i;:::-;14381:139;;14108:419;;;:::o;14533:::-;14699:4;14737:2;14726:9;14722:18;14714:26;;14786:9;14780:4;14776:20;14772:1;14761:9;14757:17;14750:47;14814:131;14940:4;14814:131;:::i;:::-;14806:139;;14533:419;;;:::o;14958:::-;15124:4;15162:2;15151:9;15147:18;15139:26;;15211:9;15205:4;15201:20;15197:1;15186:9;15182:17;15175:47;15239:131;15365:4;15239:131;:::i;:::-;15231:139;;14958:419;;;:::o;15383:::-;15549:4;15587:2;15576:9;15572:18;15564:26;;15636:9;15630:4;15626:20;15622:1;15611:9;15607:17;15600:47;15664:131;15790:4;15664:131;:::i;:::-;15656:139;;15383:419;;;:::o;15808:::-;15974:4;16012:2;16001:9;15997:18;15989:26;;16061:9;16055:4;16051:20;16047:1;16036:9;16032:17;16025:47;16089:131;16215:4;16089:131;:::i;:::-;16081:139;;15808:419;;;:::o;16233:::-;16399:4;16437:2;16426:9;16422:18;16414:26;;16486:9;16480:4;16476:20;16472:1;16461:9;16457:17;16450:47;16514:131;16640:4;16514:131;:::i;:::-;16506:139;;16233:419;;;:::o;16658:::-;16824:4;16862:2;16851:9;16847:18;16839:26;;16911:9;16905:4;16901:20;16897:1;16886:9;16882:17;16875:47;16939:131;17065:4;16939:131;:::i;:::-;16931:139;;16658:419;;;:::o;17083:222::-;17176:4;17214:2;17203:9;17199:18;17191:26;;17227:71;17295:1;17284:9;17280:17;17271:6;17227:71;:::i;:::-;17083:222;;;;:::o;17311:214::-;17400:4;17438:2;17427:9;17423:18;17415:26;;17451:67;17515:1;17504:9;17500:17;17491:6;17451:67;:::i;:::-;17311:214;;;;:::o;17531:129::-;17565:6;17592:20;;:::i;:::-;17582:30;;17621:33;17649:4;17641:6;17621:33;:::i;:::-;17531:129;;;:::o;17666:75::-;17699:6;17732:2;17726:9;17716:19;;17666:75;:::o;17747:311::-;17824:4;17914:18;17906:6;17903:30;17900:56;;;17936:18;;:::i;:::-;17900:56;17986:4;17978:6;17974:17;17966:25;;18046:4;18040;18036:15;18028:23;;17747:311;;;:::o;18064:99::-;18116:6;18150:5;18144:12;18134:22;;18064:99;;;:::o;18169:169::-;18253:11;18287:6;18282:3;18275:19;18327:4;18322:3;18318:14;18303:29;;18169:169;;;;:::o;18344:305::-;18384:3;18403:20;18421:1;18403:20;:::i;:::-;18398:25;;18437:20;18455:1;18437:20;:::i;:::-;18432:25;;18591:1;18523:66;18519:74;18516:1;18513:81;18510:107;;;18597:18;;:::i;:::-;18510:107;18641:1;18638;18634:9;18627:16;;18344:305;;;;:::o;18655:848::-;18716:5;18723:4;18747:6;18738:15;;18771:5;18762:14;;18785:712;18806:1;18796:8;18793:15;18785:712;;;18901:4;18896:3;18892:14;18886:4;18883:24;18880:50;;;18910:18;;:::i;:::-;18880:50;18960:1;18950:8;18946:16;18943:451;;;19375:4;19368:5;19364:16;19355:25;;18943:451;19425:4;19419;19415:15;19407:23;;19455:32;19478:8;19455:32;:::i;:::-;19443:44;;18785:712;;;18655:848;;;;;;;:::o;19509:281::-;19567:5;19591:23;19609:4;19591:23;:::i;:::-;19583:31;;19635:25;19651:8;19635:25;:::i;:::-;19623:37;;19679:104;19716:66;19706:8;19700:4;19679:104;:::i;:::-;19670:113;;19509:281;;;;:::o;19796:1073::-;19850:5;20041:8;20031:40;;20062:1;20053:10;;20064:5;;20031:40;20090:4;20080:36;;20107:1;20098:10;;20109:5;;20080:36;20176:4;20224:1;20219:27;;;;20260:1;20255:191;;;;20169:277;;20219:27;20237:1;20228:10;;20239:5;;;20255:191;20300:3;20290:8;20287:17;20284:43;;;20307:18;;:::i;:::-;20284:43;20356:8;20353:1;20349:16;20340:25;;20391:3;20384:5;20381:14;20378:40;;;20398:18;;:::i;:::-;20378:40;20431:5;;;20169:277;;20555:2;20545:8;20542:16;20536:3;20530:4;20527:13;20523:36;20505:2;20495:8;20492:16;20487:2;20481:4;20478:12;20474:35;20458:111;20455:246;;;20611:8;20605:4;20601:19;20592:28;;20646:3;20639:5;20636:14;20633:40;;;20653:18;;:::i;:::-;20633:40;20686:5;;20455:246;20726:42;20764:3;20754:8;20748:4;20745:1;20726:42;:::i;:::-;20711:57;;;;20800:4;20795:3;20791:14;20784:5;20781:25;20778:51;;;20809:18;;:::i;:::-;20778:51;20858:4;20851:5;20847:16;20838:25;;19796:1073;;;;;;:::o;20875:348::-;20915:7;20938:20;20956:1;20938:20;:::i;:::-;20933:25;;20972:20;20990:1;20972:20;:::i;:::-;20967:25;;21160:1;21092:66;21088:74;21085:1;21082:81;21077:1;21070:9;21063:17;21059:105;21056:131;;;21167:18;;:::i;:::-;21056:131;21215:1;21212;21208:9;21197:20;;20875:348;;;;:::o;21229:191::-;21269:4;21289:20;21307:1;21289:20;:::i;:::-;21284:25;;21323:20;21341:1;21323:20;:::i;:::-;21318:25;;21362:1;21359;21356:8;21353:34;;;21367:18;;:::i;:::-;21353:34;21412:1;21409;21405:9;21397:17;;21229:191;;;;:::o;21426:96::-;21463:7;21492:24;21510:5;21492:24;:::i;:::-;21481:35;;21426:96;;;:::o;21528:90::-;21562:7;21605:5;21598:13;21591:21;21580:32;;21528:90;;;:::o;21624:126::-;21661:7;21701:42;21694:5;21690:54;21679:65;;21624:126;;;:::o;21756:77::-;21793:7;21822:5;21811:16;;21756:77;;;:::o;21839:86::-;21874:7;21914:4;21907:5;21903:16;21892:27;;21839:86;;;:::o;21931:141::-;21996:9;22029:37;22060:5;22029:37;:::i;:::-;22016:50;;21931:141;;;:::o;22078:126::-;22128:9;22161:37;22192:5;22161:37;:::i;:::-;22148:50;;22078:126;;;:::o;22210:113::-;22260:9;22293:24;22311:5;22293:24;:::i;:::-;22280:37;;22210:113;;;:::o;22329:307::-;22397:1;22407:113;22421:6;22418:1;22415:13;22407:113;;;22506:1;22501:3;22497:11;22491:18;22487:1;22482:3;22478:11;22471:39;22443:2;22440:1;22436:10;22431:15;;22407:113;;;22538:6;22535:1;22532:13;22529:101;;;22618:1;22609:6;22604:3;22600:16;22593:27;22529:101;22378:258;22329:307;;;:::o;22642:320::-;22686:6;22723:1;22717:4;22713:12;22703:22;;22770:1;22764:4;22760:12;22791:18;22781:81;;22847:4;22839:6;22835:17;22825:27;;22781:81;22909:2;22901:6;22898:14;22878:18;22875:38;22872:84;;;22928:18;;:::i;:::-;22872:84;22693:269;22642:320;;;:::o;22968:281::-;23051:27;23073:4;23051:27;:::i;:::-;23043:6;23039:40;23181:6;23169:10;23166:22;23145:18;23133:10;23130:34;23127:62;23124:88;;;23192:18;;:::i;:::-;23124:88;23232:10;23228:2;23221:22;23011:238;22968:281;;:::o;23255:180::-;23303:77;23300:1;23293:88;23400:4;23397:1;23390:15;23424:4;23421:1;23414:15;23441:180;23489:77;23486:1;23479:88;23586:4;23583:1;23576:15;23610:4;23607:1;23600:15;23627:180;23675:77;23672:1;23665:88;23772:4;23769:1;23762:15;23796:4;23793:1;23786:15;23813:180;23861:77;23858:1;23851:88;23958:4;23955:1;23948:15;23982:4;23979:1;23972:15;23999:117;24108:1;24105;24098:12;24122:117;24231:1;24228;24221:12;24245:117;24354:1;24351;24344:12;24368:117;24477:1;24474;24467:12;24491:102;24532:6;24583:2;24579:7;24574:2;24567:5;24563:14;24559:28;24549:38;;24491:102;;;:::o;24599:::-;24641:8;24688:5;24685:1;24681:13;24660:34;;24599:102;;;:::o;24707:222::-;24847:34;24843:1;24835:6;24831:14;24824:58;24916:5;24911:2;24903:6;24899:15;24892:30;24707:222;:::o;24935:221::-;25075:34;25071:1;25063:6;25059:14;25052:58;25144:4;25139:2;25131:6;25127:15;25120:29;24935:221;:::o;25162:225::-;25302:34;25298:1;25290:6;25286:14;25279:58;25371:8;25366:2;25358:6;25354:15;25347:33;25162:225;:::o;25393:221::-;25533:34;25529:1;25521:6;25517:14;25510:58;25602:4;25597:2;25589:6;25585:15;25578:29;25393:221;:::o;25620:179::-;25760:31;25756:1;25748:6;25744:14;25737:55;25620:179;:::o;25805:225::-;25945:34;25941:1;25933:6;25929:14;25922:58;26014:8;26009:2;26001:6;25997:15;25990:33;25805:225;:::o;26036:182::-;26176:34;26172:1;26164:6;26160:14;26153:58;26036:182;:::o;26224:220::-;26364:34;26360:1;26352:6;26348:14;26341:58;26433:3;26428:2;26420:6;26416:15;26409:28;26224:220;:::o;26450:224::-;26590:34;26586:1;26578:6;26574:14;26567:58;26659:7;26654:2;26646:6;26642:15;26635:32;26450:224;:::o;26680:175::-;26820:27;26816:1;26808:6;26804:14;26797:51;26680:175;:::o;26861:223::-;27001:34;26997:1;26989:6;26985:14;26978:58;27070:6;27065:2;27057:6;27053:15;27046:31;26861:223;:::o;27090:224::-;27230:34;27226:1;27218:6;27214:14;27207:58;27299:7;27294:2;27286:6;27282:15;27275:32;27090:224;:::o;27320:181::-;27460:33;27456:1;27448:6;27444:14;27437:57;27320:181;:::o;27507:122::-;27580:24;27598:5;27580:24;:::i;:::-;27573:5;27570:35;27560:63;;27619:1;27616;27609:12;27560:63;27507:122;:::o;27635:::-;27708:24;27726:5;27708:24;:::i;:::-;27701:5;27698:35;27688:63;;27747:1;27744;27737:12;27688:63;27635:122;:::o

Swarm Source

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