ETH Price: $3,290.36 (+1.32%)
Gas: 2 Gwei

Token

WASTELAND (WSTLND)
 

Overview

Max Total Supply

974,835.221643518518518472 WSTLND

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
noideez.eth
Balance
2,133.312499999999999999 WSTLND

Value
$0.00
0x497222576c0a41575afe6d2c51f04af06f5923b2
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WastelandStaking

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/WastelandStaking.sol

//SPDX-License-Identifier: Unlicense

pragma solidity ^0.8.0;






contract WastelandStaking is ERC20, Ownable, Pausable, ReentrancyGuard {
    IERC721 public WastelandCactusCrew;

    uint256 constant public MAX_SUPPLY = 20_000_000 ether;
    uint256 constant public MAX_PER_TX = 25;
    uint256 constant public BASE_RATE = 10 ether;

    uint256 public totalStaked;
    uint256 public totalClaimed;
    mapping(address => uint256) public stash;
    mapping(address => uint256) public lastUpdate;
    mapping(uint256 => address) public tokenOwners;
    mapping(address => mapping(uint256 => uint256)) public ownedTokens;
    mapping(address => uint256) public stakedTokens;
    mapping(uint256 => uint256) public tokenIndex;
    mapping(address => bool) public allowed;
    bool public mintDisabled;

    constructor(address wastelandCactusCrew)
        ERC20("WASTELAND", "WSTLND")
    {
        WastelandCactusCrew = IERC721(wastelandCactusCrew);
        WastelandCactusCrew.setApprovalForAll(msg.sender, true);
    }

    modifier onlyAllowed() {
        require(allowed[msg.sender], "Caller not allowed");
        _;
    }

    modifier isApprovedForAll() {
        require(
            WastelandCactusCrew.isApprovedForAll(msg.sender, address(this)),
            "Contract not approved"
        );
        _;
    }

    /// @notice Get WLCC token ID by account and index
    /// @param account The address of the token owner
    /// @param index Index of the owned token
    /// @return The token ID of the owned token at that index
    function getOwnedByIndex(address account, uint256 index) public view returns (uint256) {
        require(index < stakedTokens[account], "Nonexistent token");

        return ownedTokens[account][index];
    }

    /// @notice Get amount of claimable WSTLND tokens
    /// @param account The address to return claimable token amount for
    /// @return The amount of claimable tokens
    function getClaimable(address account) public view returns (uint256) {
        return stash[account] + _getPending(account);
    }

    function _getPending(address account) internal view returns (uint256) {
        return stakedTokens[account]
        * BASE_RATE
        * (block.timestamp - lastUpdate[account])
        / 1 days;
    }

    function _update(address account) internal {
        stash[account] += _getPending(account);
        lastUpdate[account] = block.timestamp;
    }

    /// @notice Claim available WSTLND tokens
    /// @param account The address to claim tokens for
    function claim(address account) public nonReentrant {
        _claim(account);
    }

    function _claim(address account) internal whenNotPaused {
        require(msg.sender == account || allowed[msg.sender], "Caller not allowed");
        require(totalClaimed < MAX_SUPPLY,                    "Max supply has been claimed");

        uint256 claimable = getClaimable(account);
        uint256 claimAmount = totalClaimed + claimable > MAX_SUPPLY
            ? MAX_SUPPLY - totalClaimed
            : claimable;

        _mint(account, claimAmount);
        stash[account] = 0;
        lastUpdate[account] = block.timestamp;
        totalClaimed += claimAmount;
    }

    /// @notice Remove WLCC tokens from staking contract and optionally collect WSTLND tokens
    /// @param account The address to change permissions for
    /// @param isAllowed Whether the address is allowed to use privileged functionality
    function setAllowed(address account, bool isAllowed) external onlyOwner {
        allowed[account] = isAllowed;
    }

    /// @notice Stake WLCC tokens
    /// @param tokenIds The tokens IDs to stake
    function stake(uint256[] calldata tokenIds) external isApprovedForAll whenNotPaused {
        require(tokenIds.length <= MAX_PER_TX, "Exceeds max tokens per transaction");

        for (uint256 i = 0; i < tokenIds.length; i++) {
            require(WastelandCactusCrew.ownerOf(tokenIds[i]) == msg.sender, "Caller is not token owner");
        }

        _update(msg.sender);

        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 current = tokenIds[i];

            tokenOwners[current] = msg.sender;
            tokenIndex[current] = stakedTokens[msg.sender];
            ownedTokens[msg.sender][tokenIndex[current]] = current;
            stakedTokens[msg.sender] += 1;

            WastelandCactusCrew.transferFrom(msg.sender, address(this), tokenIds[i]);
        }

        totalStaked += tokenIds.length;
    }

    /// @notice Remove WLCC tokens and optionally collect WSTLND tokens
    /// @param tokenIds The tokens IDs to unstake
    /// @param claimTokens Whether WSTLND tokens should be claimed
    function unstake(uint256[] calldata tokenIds, bool claimTokens) external nonReentrant {
        require(tokenIds.length <= MAX_PER_TX, "Exceeds max tokens per transaction");

        for (uint256 i = 0; i < tokenIds.length; i++) {
            require(tokenOwners[tokenIds[i]] == msg.sender, "Caller is not token owner");
        }

        if (claimTokens) _claim(msg.sender);
        else _update(msg.sender);

        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 last = ownedTokens[msg.sender][stakedTokens[msg.sender] - 1];

            tokenOwners[tokenIds[i]] = address(0);
            tokenIndex[last] = tokenIndex[tokenIds[i]];
            ownedTokens[msg.sender][tokenIndex[tokenIds[i]]] = last;
            stakedTokens[msg.sender] -= 1;

            WastelandCactusCrew.transferFrom(address(this), msg.sender, tokenIds[i]);
        }

        totalStaked -= tokenIds.length;
    }

    /// @notice Burn a specified amount of WSTLND tokens
    /// @dev Used only by contracts for extending token utility
    /// @param from The account to burn tokens from
    /// @param amount The amount of tokens to burn
    function burn(address from, uint256 amount) external onlyAllowed {
        _burn(from, amount);
    }

    /// @notice Mint a specified amount of WSTLND tokens
    /// @dev Used only by owner for creating treasury
    /// @param to The account to mint tokens to
    /// @param amount The amount of tokens to mint
    function mint(address to, uint256 amount) external onlyOwner {
        require(totalClaimed + amount <= MAX_SUPPLY, "Max supply has been claimed");
        require(!mintDisabled,                       "Mint is disabled");

        _mint(to, amount);
        totalClaimed += amount;
    }

    /// @notice Disable mint functionality when it's no longer needed
    function disableMint() external onlyOwner {
        mintDisabled = true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"wastelandCactusCrew","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BASE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WastelandCactusCrew","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getOwnedByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isAllowed","type":"bool"}],"name":"setAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bool","name":"claimTokens","type":"bool"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620021b2380380620021b2833981016040819052620000349162000244565b604080518082018252600981526815d054d5115310539160ba1b60208083019182528351808501909452600684526515d4d513139160d21b90840152815191929162000083916003916200019e565b508051620000999060049060208401906200019e565b505050620000b6620000b06200014860201b60201c565b6200014c565b6005805460ff60a01b1916905560016006819055600780546001600160a01b0319166001600160a01b03841690811790915560405163a22cb46560e01b815233600482015260248101929092529063a22cb46590604401600060405180830381600087803b1580156200012857600080fd5b505af11580156200013d573d6000803e3d6000fd5b5050505050620002b3565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001ac9062000276565b90600052602060002090601f016020900481019282620001d057600085556200021b565b82601f10620001eb57805160ff19168380011785556200021b565b828001600101855582156200021b579182015b828111156200021b578251825591602001919060010190620001fe565b50620002299291506200022d565b5090565b5b808211156200022957600081556001016200022e565b6000602082840312156200025757600080fd5b81516001600160a01b03811681146200026f57600080fd5b9392505050565b600181811c908216806200028b57607f821691505b60208210811415620002ad57634e487b7160e01b600052602260045260246000fd5b50919050565b611eef80620002c36000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e146104ed578063e149f03614610526578063f2fde38b14610551578063f43a22dc14610564578063f8a14f461461056c57600080fd5b8063a9059cbb1461047b578063bb7c6db11461048e578063cb03fb1e146104a1578063d54ad2a1146104c1578063d63a8e11146104ca57600080fd5b806395d89b41116100ff57806395d89b411461041a5780639dc29fac14610422578063a457c2d714610435578063a583024b14610448578063a5b39cfb1461045b57600080fd5b8063715018a6146103d7578063817b1cd2146103df5780638da5cb5b146103e8578063956feccf1461040d57600080fd5b8063313ce567116101be57806340c10f191161018257806340c10f191461036757806341910f901461037a5780634697f05d146103895780635c975abb1461039c57806370a08231146103ae57600080fd5b8063313ce567146103185780633228337a1461032757806332cb6b0c1461033a57806334452f381461034c578063395093511461035457600080fd5b806318160ddd1161020557806318160ddd146102b75780631d0504a8146102bf5780631e83409a146102df57806323b872dd146102f25780632da74ccc1461030557600080fd5b80630583e9f81461023757806306fdde031461026a578063095ea7b31461027f5780630fbf0a93146102a2575b600080fd5b610257610245366004611aa8565b600f6020526000908152604090205481565b6040519081526020015b60405180910390f35b610272610595565b6040516102619190611ac1565b61029261028d366004611b2b565b610627565b6040519015158152602001610261565b6102b56102b0366004611ba3565b61063d565b005b600254610257565b6102576102cd366004611be5565b600a6020526000908152604090205481565b6102b56102ed366004611be5565b6109e9565b610292610300366004611c09565b610a52565b610257610313366004611b2b565b610afc565b60405160128152602001610261565b6102b5610335366004611c58565b610b80565b6102576a108b2a2c2802909400000081565b6102b5610efd565b610292610362366004611b2b565b610f36565b6102b5610375366004611b2b565b610f72565b610257678ac7230489e8000081565b6102b5610397366004611caf565b611066565b600554600160a01b900460ff16610292565b6102576103bc366004611be5565b6001600160a01b031660009081526020819052604090205490565b6102b56110bb565b61025760085481565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610261565b6011546102929060ff1681565b6102726110f1565b6102b5610430366004611b2b565b611100565b610292610443366004611b2b565b611162565b610257610456366004611be5565b6111fb565b610257610469366004611be5565b600e6020526000908152604090205481565b610292610489366004611b2b565b61122f565b6007546103f5906001600160a01b031681565b6102576104af366004611be5565b600b6020526000908152604090205481565b61025760095481565b6102926104d8366004611be5565b60106020526000908152604090205460ff1681565b6102576104fb366004611ce8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610257610534366004611b2b565b600d60209081526000928352604080842090915290825290205481565b6102b561055f366004611be5565b61123c565b610257601981565b6103f561057a366004611aa8565b600c602052600090815260409020546001600160a01b031681565b6060600380546105a490611d16565b80601f01602080910402602001604051908101604052809291908181526020018280546105d090611d16565b801561061d5780601f106105f25761010080835404028352916020019161061d565b820191906000526020600020905b81548152906001019060200180831161060057829003601f168201915b5050505050905090565b60006106343384846112d7565b50600192915050565b60075460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b15801561068657600080fd5b505afa15801561069a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106be9190611d51565b6107075760405162461bcd60e51b815260206004820152601560248201527410dbdb9d1c9858dd081b9bdd08185c1c1c9bdd9959605a1b60448201526064015b60405180910390fd5b600554600160a01b900460ff16156107545760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106fe565b60198111156107755760405162461bcd60e51b81526004016106fe90611d6e565b60005b8181101561087e5760075433906001600160a01b0316636352211e8585858181106107a5576107a5611db0565b905060200201356040518263ffffffff1660e01b81526004016107ca91815260200190565b60206040518083038186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190611dc6565b6001600160a01b03161461086c5760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba103a37b5b2b71037bbb732b960391b60448201526064016106fe565b8061087681611df9565b915050610778565b50610888336113fc565b60005b818110156109ca5760008383838181106108a7576108a7611db0565b602090810292909201356000818152600c8452604080822080546001600160a01b03191633908117909155808352600e8087528284208054868652600f8952848620819055838652600d89528486209086528852928420859055908352909452835491945060019392509061091d908490611e14565b90915550506007546001600160a01b03166323b872dd333087878781811061094757610947611db0565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561099e57600080fd5b505af11580156109b2573d6000803e3d6000fd5b505050505080806109c290611df9565b91505061088b565b5081819050600860008282546109e09190611e14565b90915550505050565b60026006541415610a3c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106fe565b6002600655610a4a8161144e565b506001600655565b6000610a5f8484846115fa565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ae45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016106fe565b610af185338584036112d7565b506001949350505050565b6001600160a01b0382166000908152600e60205260408120548210610b575760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b60448201526064016106fe565b506001600160a01b03919091166000908152600d60209081526040808320938352929052205490565b60026006541415610bd35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106fe565b60026006556019821115610bf95760405162461bcd60e51b81526004016106fe90611d6e565b60005b82811015610c995733600c6000868685818110610c1b57610c1b611db0565b60209081029290920135835250810191909152604001600020546001600160a01b031614610c875760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba103a37b5b2b71037bbb732b960391b60448201526064016106fe565b80610c9181611df9565b915050610bfc565b508015610cae57610ca93361144e565b610cb7565b610cb7336113fc565b60005b82811015610ed857336000908152600d60209081526040808320600e9092528220548290610cea90600190611e2c565b81526020019081526020016000205490506000600c6000878786818110610d1357610d13611db0565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f6000868685818110610d6257610d62611db0565b90506020020135815260200190815260200160002054600f60008381526020019081526020016000208190555080600d6000336001600160a01b03166001600160a01b031681526020019081526020016000206000600f6000898988818110610dcd57610dcd611db0565b905060200201358152602001908152602001600020548152602001908152602001600020819055506001600e6000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e2b9190611e2c565b90915550506007546001600160a01b03166323b872dd3033888887818110610e5557610e55611db0565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b50505050508080610ed090611df9565b915050610cba565b508282905060086000828254610eee9190611e2c565b90915550506001600655505050565b6005546001600160a01b03163314610f275760405162461bcd60e51b81526004016106fe90611e43565b6011805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610634918590610f6d908690611e14565b6112d7565b6005546001600160a01b03163314610f9c5760405162461bcd60e51b81526004016106fe90611e43565b6a108b2a2c2802909400000081600954610fb69190611e14565b11156110045760405162461bcd60e51b815260206004820152601b60248201527f4d617820737570706c7920686173206265656e20636c61696d6564000000000060448201526064016106fe565b60115460ff161561104a5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d081a5cc8191a5cd8589b195960821b60448201526064016106fe565b61105482826117c9565b80600960008282546109e09190611e14565b6005546001600160a01b031633146110905760405162461bcd60e51b81526004016106fe90611e43565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110e55760405162461bcd60e51b81526004016106fe90611e43565b6110ef60006118a8565b565b6060600480546105a490611d16565b3360009081526010602052604090205460ff166111545760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016106fe565b61115e82826118fa565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106fe565b6111f133858584036112d7565b5060019392505050565b600061120682611a40565b6001600160a01b0383166000908152600a60205260409020546112299190611e14565b92915050565b60006106343384846115fa565b6005546001600160a01b031633146112665760405162461bcd60e51b81526004016106fe90611e43565b6001600160a01b0381166112cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fe565b6112d4816118a8565b50565b6001600160a01b0383166113395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106fe565b6001600160a01b03821661139a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106fe565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b61140581611a40565b6001600160a01b0382166000908152600a60205260408120805490919061142d908490611e14565b90915550506001600160a01b03166000908152600b60205260409020429055565b600554600160a01b900460ff161561149b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106fe565b336001600160a01b03821614806114c157503360009081526010602052604090205460ff165b6115025760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016106fe565b6a108b2a2c280290940000006009541061155e5760405162461bcd60e51b815260206004820152601b60248201527f4d617820737570706c7920686173206265656e20636c61696d6564000000000060448201526064016106fe565b6000611569826111fb565b905060006a108b2a2c28029094000000826009546115879190611e14565b1161159257816115aa565b6009546115aa906a108b2a2c28029094000000611e2c565b90506115b683826117c9565b6001600160a01b0383166000908152600a60209081526040808320839055600b9091528120429055600980548392906115f0908490611e14565b9091555050505050565b6001600160a01b03831661165e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106fe565b6001600160a01b0382166116c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106fe565b6001600160a01b038316600090815260208190526040902054818110156117385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106fe565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061176f908490611e14565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117bb91815260200190565b60405180910390a350505050565b6001600160a01b03821661181f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106fe565b80600260008282546118319190611e14565b90915550506001600160a01b0382166000908152602081905260408120805483929061185e908490611e14565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661195a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106fe565b6001600160a01b038216600090815260208190526040902054818110156119ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106fe565b6001600160a01b03831660009081526020819052604081208383039055600280548492906119fd908490611e2c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016113ef565b6001600160a01b0381166000908152600b60205260408120546201518090611a689042611e2c565b6001600160a01b0384166000908152600e6020526040902054611a9490678ac7230489e8000090611e78565b611a9e9190611e78565b6112299190611e97565b600060208284031215611aba57600080fd5b5035919050565b600060208083528351808285015260005b81811015611aee57858101830151858201604001528201611ad2565b81811115611b00576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146112d457600080fd5b60008060408385031215611b3e57600080fd5b8235611b4981611b16565b946020939093013593505050565b60008083601f840112611b6957600080fd5b50813567ffffffffffffffff811115611b8157600080fd5b6020830191508360208260051b8501011115611b9c57600080fd5b9250929050565b60008060208385031215611bb657600080fd5b823567ffffffffffffffff811115611bcd57600080fd5b611bd985828601611b57565b90969095509350505050565b600060208284031215611bf757600080fd5b8135611c0281611b16565b9392505050565b600080600060608486031215611c1e57600080fd5b8335611c2981611b16565b92506020840135611c3981611b16565b929592945050506040919091013590565b80151581146112d457600080fd5b600080600060408486031215611c6d57600080fd5b833567ffffffffffffffff811115611c8457600080fd5b611c9086828701611b57565b9094509250506020840135611ca481611c4a565b809150509250925092565b60008060408385031215611cc257600080fd5b8235611ccd81611b16565b91506020830135611cdd81611c4a565b809150509250929050565b60008060408385031215611cfb57600080fd5b8235611d0681611b16565b91506020830135611cdd81611b16565b600181811c90821680611d2a57607f821691505b60208210811415611d4b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611d6357600080fd5b8151611c0281611c4a565b60208082526022908201527f45786365656473206d617820746f6b656e7320706572207472616e736163746960408201526137b760f11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611dd857600080fd5b8151611c0281611b16565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611e0d57611e0d611de3565b5060010190565b60008219821115611e2757611e27611de3565b500190565b600082821015611e3e57611e3e611de3565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000816000190483118215151615611e9257611e92611de3565b500290565b600082611eb457634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220085e300e192f016cc141935a807d022feec5e3852ab8955f2292d6c49574bb7964736f6c63430008090033000000000000000000000000fe0be00f15ac95f6a2d1b8bea07bfa42e1b81389

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063a9059cbb116100b8578063dd62ed3e1161007c578063dd62ed3e146104ed578063e149f03614610526578063f2fde38b14610551578063f43a22dc14610564578063f8a14f461461056c57600080fd5b8063a9059cbb1461047b578063bb7c6db11461048e578063cb03fb1e146104a1578063d54ad2a1146104c1578063d63a8e11146104ca57600080fd5b806395d89b41116100ff57806395d89b411461041a5780639dc29fac14610422578063a457c2d714610435578063a583024b14610448578063a5b39cfb1461045b57600080fd5b8063715018a6146103d7578063817b1cd2146103df5780638da5cb5b146103e8578063956feccf1461040d57600080fd5b8063313ce567116101be57806340c10f191161018257806340c10f191461036757806341910f901461037a5780634697f05d146103895780635c975abb1461039c57806370a08231146103ae57600080fd5b8063313ce567146103185780633228337a1461032757806332cb6b0c1461033a57806334452f381461034c578063395093511461035457600080fd5b806318160ddd1161020557806318160ddd146102b75780631d0504a8146102bf5780631e83409a146102df57806323b872dd146102f25780632da74ccc1461030557600080fd5b80630583e9f81461023757806306fdde031461026a578063095ea7b31461027f5780630fbf0a93146102a2575b600080fd5b610257610245366004611aa8565b600f6020526000908152604090205481565b6040519081526020015b60405180910390f35b610272610595565b6040516102619190611ac1565b61029261028d366004611b2b565b610627565b6040519015158152602001610261565b6102b56102b0366004611ba3565b61063d565b005b600254610257565b6102576102cd366004611be5565b600a6020526000908152604090205481565b6102b56102ed366004611be5565b6109e9565b610292610300366004611c09565b610a52565b610257610313366004611b2b565b610afc565b60405160128152602001610261565b6102b5610335366004611c58565b610b80565b6102576a108b2a2c2802909400000081565b6102b5610efd565b610292610362366004611b2b565b610f36565b6102b5610375366004611b2b565b610f72565b610257678ac7230489e8000081565b6102b5610397366004611caf565b611066565b600554600160a01b900460ff16610292565b6102576103bc366004611be5565b6001600160a01b031660009081526020819052604090205490565b6102b56110bb565b61025760085481565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610261565b6011546102929060ff1681565b6102726110f1565b6102b5610430366004611b2b565b611100565b610292610443366004611b2b565b611162565b610257610456366004611be5565b6111fb565b610257610469366004611be5565b600e6020526000908152604090205481565b610292610489366004611b2b565b61122f565b6007546103f5906001600160a01b031681565b6102576104af366004611be5565b600b6020526000908152604090205481565b61025760095481565b6102926104d8366004611be5565b60106020526000908152604090205460ff1681565b6102576104fb366004611ce8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610257610534366004611b2b565b600d60209081526000928352604080842090915290825290205481565b6102b561055f366004611be5565b61123c565b610257601981565b6103f561057a366004611aa8565b600c602052600090815260409020546001600160a01b031681565b6060600380546105a490611d16565b80601f01602080910402602001604051908101604052809291908181526020018280546105d090611d16565b801561061d5780601f106105f25761010080835404028352916020019161061d565b820191906000526020600020905b81548152906001019060200180831161060057829003601f168201915b5050505050905090565b60006106343384846112d7565b50600192915050565b60075460405163e985e9c560e01b81523360048201523060248201526001600160a01b039091169063e985e9c59060440160206040518083038186803b15801561068657600080fd5b505afa15801561069a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106be9190611d51565b6107075760405162461bcd60e51b815260206004820152601560248201527410dbdb9d1c9858dd081b9bdd08185c1c1c9bdd9959605a1b60448201526064015b60405180910390fd5b600554600160a01b900460ff16156107545760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106fe565b60198111156107755760405162461bcd60e51b81526004016106fe90611d6e565b60005b8181101561087e5760075433906001600160a01b0316636352211e8585858181106107a5576107a5611db0565b905060200201356040518263ffffffff1660e01b81526004016107ca91815260200190565b60206040518083038186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190611dc6565b6001600160a01b03161461086c5760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba103a37b5b2b71037bbb732b960391b60448201526064016106fe565b8061087681611df9565b915050610778565b50610888336113fc565b60005b818110156109ca5760008383838181106108a7576108a7611db0565b602090810292909201356000818152600c8452604080822080546001600160a01b03191633908117909155808352600e8087528284208054868652600f8952848620819055838652600d89528486209086528852928420859055908352909452835491945060019392509061091d908490611e14565b90915550506007546001600160a01b03166323b872dd333087878781811061094757610947611db0565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561099e57600080fd5b505af11580156109b2573d6000803e3d6000fd5b505050505080806109c290611df9565b91505061088b565b5081819050600860008282546109e09190611e14565b90915550505050565b60026006541415610a3c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106fe565b6002600655610a4a8161144e565b506001600655565b6000610a5f8484846115fa565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ae45760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016106fe565b610af185338584036112d7565b506001949350505050565b6001600160a01b0382166000908152600e60205260408120548210610b575760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b60448201526064016106fe565b506001600160a01b03919091166000908152600d60209081526040808320938352929052205490565b60026006541415610bd35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106fe565b60026006556019821115610bf95760405162461bcd60e51b81526004016106fe90611d6e565b60005b82811015610c995733600c6000868685818110610c1b57610c1b611db0565b60209081029290920135835250810191909152604001600020546001600160a01b031614610c875760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba103a37b5b2b71037bbb732b960391b60448201526064016106fe565b80610c9181611df9565b915050610bfc565b508015610cae57610ca93361144e565b610cb7565b610cb7336113fc565b60005b82811015610ed857336000908152600d60209081526040808320600e9092528220548290610cea90600190611e2c565b81526020019081526020016000205490506000600c6000878786818110610d1357610d13611db0565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f6000868685818110610d6257610d62611db0565b90506020020135815260200190815260200160002054600f60008381526020019081526020016000208190555080600d6000336001600160a01b03166001600160a01b031681526020019081526020016000206000600f6000898988818110610dcd57610dcd611db0565b905060200201358152602001908152602001600020548152602001908152602001600020819055506001600e6000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254610e2b9190611e2c565b90915550506007546001600160a01b03166323b872dd3033888887818110610e5557610e55611db0565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b50505050508080610ed090611df9565b915050610cba565b508282905060086000828254610eee9190611e2c565b90915550506001600655505050565b6005546001600160a01b03163314610f275760405162461bcd60e51b81526004016106fe90611e43565b6011805460ff19166001179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610634918590610f6d908690611e14565b6112d7565b6005546001600160a01b03163314610f9c5760405162461bcd60e51b81526004016106fe90611e43565b6a108b2a2c2802909400000081600954610fb69190611e14565b11156110045760405162461bcd60e51b815260206004820152601b60248201527f4d617820737570706c7920686173206265656e20636c61696d6564000000000060448201526064016106fe565b60115460ff161561104a5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d081a5cc8191a5cd8589b195960821b60448201526064016106fe565b61105482826117c9565b80600960008282546109e09190611e14565b6005546001600160a01b031633146110905760405162461bcd60e51b81526004016106fe90611e43565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110e55760405162461bcd60e51b81526004016106fe90611e43565b6110ef60006118a8565b565b6060600480546105a490611d16565b3360009081526010602052604090205460ff166111545760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016106fe565b61115e82826118fa565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106fe565b6111f133858584036112d7565b5060019392505050565b600061120682611a40565b6001600160a01b0383166000908152600a60205260409020546112299190611e14565b92915050565b60006106343384846115fa565b6005546001600160a01b031633146112665760405162461bcd60e51b81526004016106fe90611e43565b6001600160a01b0381166112cb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106fe565b6112d4816118a8565b50565b6001600160a01b0383166113395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106fe565b6001600160a01b03821661139a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106fe565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b61140581611a40565b6001600160a01b0382166000908152600a60205260408120805490919061142d908490611e14565b90915550506001600160a01b03166000908152600b60205260409020429055565b600554600160a01b900460ff161561149b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106fe565b336001600160a01b03821614806114c157503360009081526010602052604090205460ff165b6115025760405162461bcd60e51b815260206004820152601260248201527110d85b1b195c881b9bdd08185b1b1bddd95960721b60448201526064016106fe565b6a108b2a2c280290940000006009541061155e5760405162461bcd60e51b815260206004820152601b60248201527f4d617820737570706c7920686173206265656e20636c61696d6564000000000060448201526064016106fe565b6000611569826111fb565b905060006a108b2a2c28029094000000826009546115879190611e14565b1161159257816115aa565b6009546115aa906a108b2a2c28029094000000611e2c565b90506115b683826117c9565b6001600160a01b0383166000908152600a60209081526040808320839055600b9091528120429055600980548392906115f0908490611e14565b9091555050505050565b6001600160a01b03831661165e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106fe565b6001600160a01b0382166116c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106fe565b6001600160a01b038316600090815260208190526040902054818110156117385760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106fe565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061176f908490611e14565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117bb91815260200190565b60405180910390a350505050565b6001600160a01b03821661181f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106fe565b80600260008282546118319190611e14565b90915550506001600160a01b0382166000908152602081905260408120805483929061185e908490611e14565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661195a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106fe565b6001600160a01b038216600090815260208190526040902054818110156119ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106fe565b6001600160a01b03831660009081526020819052604081208383039055600280548492906119fd908490611e2c565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016113ef565b6001600160a01b0381166000908152600b60205260408120546201518090611a689042611e2c565b6001600160a01b0384166000908152600e6020526040902054611a9490678ac7230489e8000090611e78565b611a9e9190611e78565b6112299190611e97565b600060208284031215611aba57600080fd5b5035919050565b600060208083528351808285015260005b81811015611aee57858101830151858201604001528201611ad2565b81811115611b00576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146112d457600080fd5b60008060408385031215611b3e57600080fd5b8235611b4981611b16565b946020939093013593505050565b60008083601f840112611b6957600080fd5b50813567ffffffffffffffff811115611b8157600080fd5b6020830191508360208260051b8501011115611b9c57600080fd5b9250929050565b60008060208385031215611bb657600080fd5b823567ffffffffffffffff811115611bcd57600080fd5b611bd985828601611b57565b90969095509350505050565b600060208284031215611bf757600080fd5b8135611c0281611b16565b9392505050565b600080600060608486031215611c1e57600080fd5b8335611c2981611b16565b92506020840135611c3981611b16565b929592945050506040919091013590565b80151581146112d457600080fd5b600080600060408486031215611c6d57600080fd5b833567ffffffffffffffff811115611c8457600080fd5b611c9086828701611b57565b9094509250506020840135611ca481611c4a565b809150509250925092565b60008060408385031215611cc257600080fd5b8235611ccd81611b16565b91506020830135611cdd81611c4a565b809150509250929050565b60008060408385031215611cfb57600080fd5b8235611d0681611b16565b91506020830135611cdd81611b16565b600181811c90821680611d2a57607f821691505b60208210811415611d4b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611d6357600080fd5b8151611c0281611c4a565b60208082526022908201527f45786365656473206d617820746f6b656e7320706572207472616e736163746960408201526137b760f11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611dd857600080fd5b8151611c0281611b16565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611e0d57611e0d611de3565b5060010190565b60008219821115611e2757611e27611de3565b500190565b600082821015611e3e57611e3e611de3565b500390565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000816000190483118215151615611e9257611e92611de3565b500290565b600082611eb457634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220085e300e192f016cc141935a807d022feec5e3852ab8955f2292d6c49574bb7964736f6c63430008090033

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

000000000000000000000000fe0be00f15ac95f6a2d1b8bea07bfa42e1b81389

-----Decoded View---------------
Arg [0] : wastelandCactusCrew (address): 0xFE0be00f15ac95F6a2d1b8beA07bfA42e1b81389

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


Deployed Bytecode Sourcemap

30122:6686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30748:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;345:25:1;;;333:2;318:18;30748:45:0;;;;;;;;17511:100;;;:::i;:::-;;;;;;;:::i;19678:169::-;;;;;;:::i;:::-;;:::i;:::-;;;1604:14:1;;1597:22;1579:41;;1567:2;1552:18;19678:169:0;1439:187:1;33799:858:0;;;;;;:::i;:::-;;:::i;:::-;;18631:108;18719:12;;18631:108;;30469:40;;;;;;:::i;:::-;;;;;;;;;;;;;;32650:86;;;;;;:::i;:::-;;:::i;20329:492::-;;;;;;:::i;:::-;;:::i;31640:212::-;;;;;;:::i;:::-;;:::i;18473:93::-;;;18556:2;3300:36:1;;3288:2;3273:18;18473:93:0;3158:184:1;34857:935:0;;;;;;:::i;:::-;;:::i;30243:53::-;;30280:16;30243:53;;36725:80;;;:::i;21230:215::-;;;;;;:::i;:::-;;:::i;36353:293::-;;;;;;:::i;:::-;;:::i;30349:44::-;;30385:8;30349:44;;33588:119;;;;;;:::i;:::-;;:::i;14194:86::-;14265:7;;-1:-1:-1;;;14265:7:0;;;;14194:86;;18802:127;;;;;;:::i;:::-;-1:-1:-1;;;;;18903:18:0;18876:7;18903:18;;;;;;;;;;;;18802:127;29185:103;;;:::i;30402:26::-;;;;;;28534:87;28607:6;;-1:-1:-1;;;;;28607:6:0;28534:87;;;-1:-1:-1;;;;;4592:32:1;;;4574:51;;4562:2;4547:18;28534:87:0;4428:203:1;30846:24:0;;;;;;;;;17730:104;;;:::i;36028:103::-;;;;;;:::i;:::-;;:::i;21948:413::-;;;;;;:::i;:::-;;:::i;32036:132::-;;;;;;:::i;:::-;;:::i;30694:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;19142:175;;;;;;:::i;:::-;;:::i;30200:34::-;;;;;-1:-1:-1;;;;;30200:34:0;;;30516:45;;;;;;:::i;:::-;;;;;;;;;;;;;;30435:27;;;;;;30800:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19380:151;;;;;;:::i;:::-;-1:-1:-1;;;;;19496:18:0;;;19469:7;19496:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19380:151;30621:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;29443:201;;;;;;:::i;:::-;;:::i;30303:39::-;;30340:2;30303:39;;30568:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;30568:46:0;;;17511:100;17565:13;17598:5;17591:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17511:100;:::o;19678:169::-;19761:4;19778:39;12928:10;19801:7;19810:6;19778:8;:39::i;:::-;-1:-1:-1;19835:4:0;19678:169;;;;:::o;33799:858::-;31279:19;;:63;;-1:-1:-1;;;31279:63:0;;31316:10;31279:63;;;5849:34:1;31336:4:0;5899:18:1;;;5892:43;-1:-1:-1;;;;;31279:19:0;;;;:36;;5784:18:1;;31279:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31257:134;;;;-1:-1:-1;;;31257:134:0;;6398:2:1;31257:134:0;;;6380:21:1;6437:2;6417:18;;;6410:30;-1:-1:-1;;;6456:18:1;;;6449:51;6517:18;;31257:134:0;;;;;;;;;14265:7;;-1:-1:-1;;;14265:7:0;;;;14519:9:::1;14511:38;;;::::0;-1:-1:-1;;;14511:38:0;;6748:2:1;14511:38:0::1;::::0;::::1;6730:21:1::0;6787:2;6767:18;;;6760:30;-1:-1:-1;;;6806:18:1;;;6799:46;6862:18;;14511:38:0::1;6546:340:1::0;14511:38:0::1;30340:2:::2;33902:29:::0;::::2;;33894:76;;;;-1:-1:-1::0;;;33894:76:0::2;;;;;;;:::i;:::-;33988:9;33983:165;34003:19:::0;;::::2;33983:165;;;34052:19;::::0;34096:10:::2;::::0;-1:-1:-1;;;;;34052:19:0::2;:27;34080:8:::0;;34089:1;34080:11;;::::2;;;;;:::i;:::-;;;;;;;34052:40;;;;;;;;;;;;;345:25:1::0;;333:2;318:18;;199:177;34052:40:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34052:54:0::2;;34044:92;;;::::0;-1:-1:-1;;;34044:92:0;;7884:2:1;34044:92:0::2;::::0;::::2;7866:21:1::0;7923:2;7903:18;;;7896:30;-1:-1:-1;;;7942:18:1;;;7935:55;8007:18;;34044:92:0::2;7682:349:1::0;34044:92:0::2;34024:3:::0;::::2;::::0;::::2;:::i;:::-;;;;33983:165;;;;34160:19;34168:10;34160:7;:19::i;:::-;34197:9;34192:415;34212:19:::0;;::::2;34192:415;;;34253:15;34271:8;;34280:1;34271:11;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;::::2;;34299:20;::::0;;;:11:::2;:20:::0;;;;;;:33;;-1:-1:-1;;;;;;34299:33:0::2;34322:10;34299:33:::0;;::::2;::::0;;;34369:24;;;:12:::2;:24:::0;;;;;;;;34347:19;;;:10:::2;:19:::0;;;;;:46;;;34408:23;;;:11:::2;:23:::0;;;;;:44;;;;;;;;:54;;;34477:24;;;;;;:29;;34271:11;;-1:-1:-1;34299:33:0;;34369:24;-1:-1:-1;34299:20:0;34477:29:::2;::::0;34299:33;;34477:29:::2;:::i;:::-;::::0;;;-1:-1:-1;;34523:19:0::2;::::0;-1:-1:-1;;;;;34523:19:0::2;:32;34556:10;34576:4;34583:8:::0;;34592:1;34583:11;;::::2;;;;;:::i;:::-;34523:72;::::0;-1:-1:-1;;;;;;34523:72:0::2;::::0;;;;;;-1:-1:-1;;;;;8699:15:1;;;34523:72:0::2;::::0;::::2;8681:34:1::0;8751:15;;;;8731:18;;;8724:43;-1:-1:-1;34583:11:0::2;::::0;;::::2;;;8783:18:1::0;;;8776:34;8616:18;;34523:72:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34238:369;34233:3;;;;;:::i;:::-;;;;34192:415;;;;34634:8;;:15;;34619:11;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;33799:858:0:o;32650:86::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;9023:2:1;2402:63:0;;;9005:21:1;9062:2;9042:18;;;9035:30;9101:33;9081:18;;;9074:61;9152:18;;2402:63:0;8821:355:1;2402:63:0;1812:1;2543:7;:18;32713:15:::1;32720:7:::0;32713:6:::1;:15::i;:::-;-1:-1:-1::0;1768:1:0;2722:7;:22;32650:86::o;20329:492::-;20469:4;20486:36;20496:6;20504:9;20515:6;20486:9;:36::i;:::-;-1:-1:-1;;;;;20562:19:0;;20535:24;20562:19;;;:11;:19;;;;;;;;12928:10;20562:33;;;;;;;;20614:26;;;;20606:79;;;;-1:-1:-1;;;20606:79:0;;9383:2:1;20606:79:0;;;9365:21:1;9422:2;9402:18;;;9395:30;9461:34;9441:18;;;9434:62;-1:-1:-1;;;9512:18:1;;;9505:38;9560:19;;20606:79:0;9181:404:1;20606:79:0;20721:57;20730:6;12928:10;20771:6;20752:16;:25;20721:8;:57::i;:::-;-1:-1:-1;20809:4:0;;20329:492;-1:-1:-1;;;;20329:492:0:o;31640:212::-;-1:-1:-1;;;;;31754:21:0;;31718:7;31754:21;;;:12;:21;;;;;;31746:29;;31738:59;;;;-1:-1:-1;;;31738:59:0;;9792:2:1;31738:59:0;;;9774:21:1;9831:2;9811:18;;;9804:30;-1:-1:-1;;;9850:18:1;;;9843:47;9907:18;;31738:59:0;9590:341:1;31738:59:0;-1:-1:-1;;;;;;31817:20:0;;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;31640:212::o;34857:935::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;9023:2:1;2402:63:0;;;9005:21:1;9062:2;9042:18;;;9035:30;9101:33;9081:18;;;9074:61;9152:18;;2402:63:0;8821:355:1;2402:63:0;1812:1;2543:7;:18;30340:2:::1;34962:29:::0;::::1;;34954:76;;;;-1:-1:-1::0;;;34954:76:0::1;;;;;;;:::i;:::-;35048:9;35043:149;35063:19:::0;;::::1;35043:149;;;35140:10;35112:11;:24;35124:8:::0;;35133:1;35124:11;;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;35112:24:::0;;-1:-1:-1;35112:24:0;::::1;::::0;;;;;;-1:-1:-1;35112:24:0;;-1:-1:-1;;;;;35112:24:0::1;:38;35104:76;;;::::0;-1:-1:-1;;;35104:76:0;;7884:2:1;35104:76:0::1;::::0;::::1;7866:21:1::0;7923:2;7903:18;;;7896:30;-1:-1:-1;;;7942:18:1;;;7935:55;8007:18;;35104:76:0::1;7682:349:1::0;35104:76:0::1;35084:3:::0;::::1;::::0;::::1;:::i;:::-;;;;35043:149;;;;35208:11;35204:70;;;35221:18;35228:10;35221:6;:18::i;:::-;35204:70;;;35255:19;35263:10;35255:7;:19::i;:::-;35292:9;35287:455;35307:19:::0;;::::1;35287:455;;;35375:10;35348:12;35363:23:::0;;;:11:::1;:23;::::0;;;;;;;35387:12:::1;:24:::0;;;;;;35348:12;;35387:28:::1;::::0;35414:1:::1;::::0;35387:28:::1;:::i;:::-;35363:53;;;;;;;;;;;;35348:68;;35468:1;35433:11;:24;35445:8;;35454:1;35445:11;;;;;;;:::i;:::-;;;;;;;35433:24;;;;;;;;;;;;:37;;;;;-1:-1:-1::0;;;;;35433:37:0::1;;;;;-1:-1:-1::0;;;;;35433:37:0::1;;;;;;35504:10;:23;35515:8;;35524:1;35515:11;;;;;;;:::i;:::-;;;;;;;35504:23;;;;;;;;;;;;35485:10;:16;35496:4;35485:16;;;;;;;;;;;:42;;;;35593:4;35542:11;:23;35554:10;-1:-1:-1::0;;;;;35542:23:0::1;-1:-1:-1::0;;;;;35542:23:0::1;;;;;;;;;;;;:48;35566:10;:23;35577:8;;35586:1;35577:11;;;;;;;:::i;:::-;;;;;;;35566:23;;;;;;;;;;;;35542:48;;;;;;;;;;;:55;;;;35640:1;35612:12;:24;35625:10;-1:-1:-1::0;;;;;35612:24:0::1;-1:-1:-1::0;;;;;35612:24:0::1;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;35658:19:0::1;::::0;-1:-1:-1;;;;;35658:19:0::1;:32;35699:4;35706:10;35718:8:::0;;35727:1;35718:11;;::::1;;;;;:::i;:::-;35658:72;::::0;-1:-1:-1;;;;;;35658:72:0::1;::::0;;;;;;-1:-1:-1;;;;;8699:15:1;;;35658:72:0::1;::::0;::::1;8681:34:1::0;8751:15;;;;8731:18;;;8724:43;-1:-1:-1;35718:11:0::1;::::0;;::::1;;;8783:18:1::0;;;8776:34;8616:18;;35658:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35333:409;35328:3;;;;;:::i;:::-;;;;35287:455;;;;35769:8;;:15;;35754:11;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1768:1:0;2722:7;:22;-1:-1:-1;;;34857:935:0:o;36725:80::-;28607:6;;-1:-1:-1;;;;;28607:6:0;12928:10;28754:23;28746:68;;;;-1:-1:-1;;;28746:68:0;;;;;;;:::i;:::-;36778:12:::1;:19:::0;;-1:-1:-1;;36778:19:0::1;36793:4;36778:19;::::0;;36725:80::o;21230:215::-;12928:10;21318:4;21367:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21367:34:0;;;;;;;;;;21318:4;;21335:80;;21358:7;;21367:47;;21404:10;;21367:47;:::i;:::-;21335:8;:80::i;36353:293::-;28607:6;;-1:-1:-1;;;;;28607:6:0;12928:10;28754:23;28746:68;;;;-1:-1:-1;;;28746:68:0;;;;;;;:::i;:::-;30280:16:::1;36448:6;36433:12;;:21;;;;:::i;:::-;:35;;36425:75;;;::::0;-1:-1:-1;;;36425:75:0;;10629:2:1;36425:75:0::1;::::0;::::1;10611:21:1::0;10668:2;10648:18;;;10641:30;10707:29;10687:18;;;10680:57;10754:18;;36425:75:0::1;10427:351:1::0;36425:75:0::1;36520:12;::::0;::::1;;36519:13;36511:64;;;::::0;-1:-1:-1;;;36511:64:0;;10985:2:1;36511:64:0::1;::::0;::::1;10967:21:1::0;11024:2;11004:18;;;10997:30;-1:-1:-1;;;11043:18:1;;;11036:46;11099:18;;36511:64:0::1;10783:340:1::0;36511:64:0::1;36588:17;36594:2;36598:6;36588:5;:17::i;:::-;36632:6;36616:12;;:22;;;;;;;:::i;33588:119::-:0;28607:6;;-1:-1:-1;;;;;28607:6:0;12928:10;28754:23;28746:68;;;;-1:-1:-1;;;28746:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33671:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:28;;-1:-1:-1;;33671:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33588:119::o;29185:103::-;28607:6;;-1:-1:-1;;;;;28607:6:0;12928:10;28754:23;28746:68;;;;-1:-1:-1;;;28746:68:0;;;;;;;:::i;:::-;29250:30:::1;29277:1;29250:18;:30::i;:::-;29185:103::o:0;17730:104::-;17786:13;17819:7;17812:14;;;;;:::i;36028:103::-;31156:10;31148:19;;;;:7;:19;;;;;;;;31140:50;;;;-1:-1:-1;;;31140:50:0;;11330:2:1;31140:50:0;;;11312:21:1;11369:2;11349:18;;;11342:30;-1:-1:-1;;;11388:18:1;;;11381:48;11446:18;;31140:50:0;11128:342:1;31140:50:0;36104:19:::1;36110:4;36116:6;36104:5;:19::i;:::-;36028:103:::0;;:::o;21948:413::-;12928:10;22041:4;22085:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22085:34:0;;;;;;;;;;22138:35;;;;22130:85;;;;-1:-1:-1;;;22130:85:0;;11677:2:1;22130:85:0;;;11659:21:1;11716:2;11696:18;;;11689:30;11755:34;11735:18;;;11728:62;-1:-1:-1;;;11806:18:1;;;11799:35;11851:19;;22130:85:0;11475:401:1;22130:85:0;22251:67;12928:10;22274:7;22302:15;22283:16;:34;22251:8;:67::i;:::-;-1:-1:-1;22349:4:0;;21948:413;-1:-1:-1;;;21948:413:0:o;32036:132::-;32096:7;32140:20;32152:7;32140:11;:20::i;:::-;-1:-1:-1;;;;;32123:14:0;;;;;;:5;:14;;;;;;:37;;;;:::i;:::-;32116:44;32036:132;-1:-1:-1;;32036:132:0:o;19142:175::-;19228:4;19245:42;12928:10;19269:9;19280:6;19245:9;:42::i;29443:201::-;28607:6;;-1:-1:-1;;;;;28607:6:0;12928:10;28754:23;28746:68;;;;-1:-1:-1;;;28746:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29532:22:0;::::1;29524:73;;;::::0;-1:-1:-1;;;29524:73:0;;12083:2:1;29524:73:0::1;::::0;::::1;12065:21:1::0;12122:2;12102:18;;;12095:30;12161:34;12141:18;;;12134:62;-1:-1:-1;;;12212:18:1;;;12205:36;12258:19;;29524:73:0::1;11881:402:1::0;29524:73:0::1;29608:28;29627:8;29608:18;:28::i;:::-;29443:201:::0;:::o;25632:380::-;-1:-1:-1;;;;;25768:19:0;;25760:68;;;;-1:-1:-1;;;25760:68:0;;12490:2:1;25760:68:0;;;12472:21:1;12529:2;12509:18;;;12502:30;12568:34;12548:18;;;12541:62;-1:-1:-1;;;12619:18:1;;;12612:34;12663:19;;25760:68:0;12288:400:1;25760:68:0;-1:-1:-1;;;;;25847:21:0;;25839:68;;;;-1:-1:-1;;;25839:68:0;;12895:2:1;25839:68:0;;;12877:21:1;12934:2;12914:18;;;12907:30;12973:34;12953:18;;;12946:62;-1:-1:-1;;;13024:18:1;;;13017:32;13066:19;;25839:68:0;12693:398:1;25839:68:0;-1:-1:-1;;;;;25920:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25972:32;;345:25:1;;;25972:32:0;;318:18:1;25972:32:0;;;;;;;;25632:380;;;:::o;32391:148::-;32463:20;32475:7;32463:11;:20::i;:::-;-1:-1:-1;;;;;32445:14:0;;;;;;:5;:14;;;;;:38;;:14;;;:38;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;32494:19:0;;;;;:10;:19;;;;;32516:15;32494:37;;32391:148::o;32744:590::-;14265:7;;-1:-1:-1;;;14265:7:0;;;;14519:9;14511:38;;;;-1:-1:-1;;;14511:38:0;;6748:2:1;14511:38:0;;;6730:21:1;6787:2;6767:18;;;6760:30;-1:-1:-1;;;6806:18:1;;;6799:46;6862:18;;14511:38:0;6546:340:1;14511:38:0;32819:10:::1;-1:-1:-1::0;;;;;32819:21:0;::::1;;::::0;:44:::1;;-1:-1:-1::0;32852:10:0::1;32844:19;::::0;;;:7:::1;:19;::::0;;;;;::::1;;32819:44;32811:75;;;::::0;-1:-1:-1;;;32811:75:0;;11330:2:1;32811:75:0::1;::::0;::::1;11312:21:1::0;11369:2;11349:18;;;11342:30;-1:-1:-1;;;11388:18:1;;;11381:48;11446:18;;32811:75:0::1;11128:342:1::0;32811:75:0::1;30280:16;32905:12;;:25;32897:84;;;::::0;-1:-1:-1;;;32897:84:0;;10629:2:1;32897:84:0::1;::::0;::::1;10611:21:1::0;10668:2;10648:18;;;10641:30;10707:29;10687:18;;;10680:57;10754:18;;32897:84:0::1;10427:351:1::0;32897:84:0::1;32994:17;33014:21;33027:7;33014:12;:21::i;:::-;32994:41;;33046:19;30280:16;33083:9;33068:12;;:24;;;;:::i;:::-;:37;:103;;33162:9;33068:103;;;33134:12;::::0;33121:25:::1;::::0;30280:16:::1;33121:25;:::i;:::-;33046:125;;33184:27;33190:7;33199:11;33184:5;:27::i;:::-;-1:-1:-1::0;;;;;33222:14:0;::::1;33239:1;33222:14:::0;;;:5:::1;:14;::::0;;;;;;;:18;;;33251:10:::1;:19:::0;;;;;33273:15:::1;33251:37:::0;;33299:12:::1;:27:::0;;33315:11;;33239:1;33299:27:::1;::::0;33315:11;;33299:27:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;32744:590:0:o;22851:733::-;-1:-1:-1;;;;;22991:20:0;;22983:70;;;;-1:-1:-1;;;22983:70:0;;13298:2:1;22983:70:0;;;13280:21:1;13337:2;13317:18;;;13310:30;13376:34;13356:18;;;13349:62;-1:-1:-1;;;13427:18:1;;;13420:35;13472:19;;22983:70:0;13096:401:1;22983:70:0;-1:-1:-1;;;;;23072:23:0;;23064:71;;;;-1:-1:-1;;;23064:71:0;;13704:2:1;23064:71:0;;;13686:21:1;13743:2;13723:18;;;13716:30;13782:34;13762:18;;;13755:62;-1:-1:-1;;;13833:18:1;;;13826:33;13876:19;;23064:71:0;13502:399:1;23064:71:0;-1:-1:-1;;;;;23232:17:0;;23208:21;23232:17;;;;;;;;;;;23268:23;;;;23260:74;;;;-1:-1:-1;;;23260:74:0;;14108:2:1;23260:74:0;;;14090:21:1;14147:2;14127:18;;;14120:30;14186:34;14166:18;;;14159:62;-1:-1:-1;;;14237:18:1;;;14230:36;14283:19;;23260:74:0;13906:402:1;23260:74:0;-1:-1:-1;;;;;23370:17:0;;;:9;:17;;;;;;;;;;;23390:22;;;23370:42;;23434:20;;;;;;;;:30;;23406:6;;23370:9;23434:30;;23406:6;;23434:30;:::i;:::-;;;;;;;;23499:9;-1:-1:-1;;;;;23482:35:0;23491:6;-1:-1:-1;;;;;23482:35:0;;23510:6;23482:35;;;;345:25:1;;333:2;318:18;;199:177;23482:35:0;;;;;;;;22972:612;22851:733;;;:::o;23871:399::-;-1:-1:-1;;;;;23955:21:0;;23947:65;;;;-1:-1:-1;;;23947:65:0;;14515:2:1;23947:65:0;;;14497:21:1;14554:2;14534:18;;;14527:30;14593:33;14573:18;;;14566:61;14644:18;;23947:65:0;14313:355:1;23947:65:0;24103:6;24087:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;24120:18:0;;:9;:18;;;;;;;;;;:28;;24142:6;;24120:9;:28;;24142:6;;24120:28;:::i;:::-;;;;-1:-1:-1;;24164:37:0;;345:25:1;;;-1:-1:-1;;;;;24164:37:0;;;24181:1;;24164:37;;333:2:1;318:18;24164:37:0;;;;;;;36028:103;;:::o;29804:191::-;29897:6;;;-1:-1:-1;;;;;29914:17:0;;;-1:-1:-1;;;;;;29914:17:0;;;;;;;29947:40;;29897:6;;;29914:17;29897:6;;29947:40;;29878:16;;29947:40;29867:128;29804:191;:::o;24603:591::-;-1:-1:-1;;;;;24687:21:0;;24679:67;;;;-1:-1:-1;;;24679:67:0;;14875:2:1;24679:67:0;;;14857:21:1;14914:2;14894:18;;;14887:30;14953:34;14933:18;;;14926:62;-1:-1:-1;;;15004:18:1;;;14997:31;15045:19;;24679:67:0;14673:397:1;24679:67:0;-1:-1:-1;;;;;24846:18:0;;24821:22;24846:18;;;;;;;;;;;24883:24;;;;24875:71;;;;-1:-1:-1;;;24875:71:0;;15277:2:1;24875:71:0;;;15259:21:1;15316:2;15296:18;;;15289:30;15355:34;15335:18;;;15328:62;-1:-1:-1;;;15406:18:1;;;15399:32;15448:19;;24875:71:0;15075:398:1;24875:71:0;-1:-1:-1;;;;;24982:18:0;;:9;:18;;;;;;;;;;25003:23;;;24982:44;;25048:12;:22;;25020:6;;24982:9;25048:22;;25020:6;;25048:22;:::i;:::-;;;;-1:-1:-1;;25088:37:0;;345:25:1;;;25114:1:0;;-1:-1:-1;;;;;25088:37:0;;;;;333:2:1;318:18;25088:37:0;199:177:1;32176:207:0;-1:-1:-1;;;;;32337:19:0;;32237:7;32337:19;;;:10;:19;;;;;;32369:6;;32319:37;;:15;:37;:::i;:::-;-1:-1:-1;;;;;32264:21:0;;;;;;:12;:21;;;;;;:42;;30385:8;;32264:42;:::i;:::-;:93;;;;:::i;:::-;:111;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:597::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;819:6;816:1;813:13;810:91;;;889:1;884:2;875:6;864:9;860:22;856:31;849:42;810:91;-1:-1:-1;962:2:1;941:15;-1:-1:-1;;937:29:1;922:45;;;;969:2;918:54;;381:597;-1:-1:-1;;;381:597:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1119:315;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;1424:2;1409:18;;;;1396:32;;-1:-1:-1;;;1119:315:1:o;1631:367::-;1694:8;1704:6;1758:3;1751:4;1743:6;1739:17;1735:27;1725:55;;1776:1;1773;1766:12;1725:55;-1:-1:-1;1799:20:1;;1842:18;1831:30;;1828:50;;;1874:1;1871;1864:12;1828:50;1911:4;1903:6;1899:17;1887:29;;1971:3;1964:4;1954:6;1951:1;1947:14;1939:6;1935:27;1931:38;1928:47;1925:67;;;1988:1;1985;1978:12;1925:67;1631:367;;;;;:::o;2003:437::-;2089:6;2097;2150:2;2138:9;2129:7;2125:23;2121:32;2118:52;;;2166:1;2163;2156:12;2118:52;2206:9;2193:23;2239:18;2231:6;2228:30;2225:50;;;2271:1;2268;2261:12;2225:50;2310:70;2372:7;2363:6;2352:9;2348:22;2310:70;:::i;:::-;2399:8;;2284:96;;-1:-1:-1;2003:437:1;-1:-1:-1;;;;2003:437:1:o;2445:247::-;2504:6;2557:2;2545:9;2536:7;2532:23;2528:32;2525:52;;;2573:1;2570;2563:12;2525:52;2612:9;2599:23;2631:31;2656:5;2631:31;:::i;:::-;2681:5;2445:247;-1:-1:-1;;;2445:247:1:o;2697:456::-;2774:6;2782;2790;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;2898:9;2885:23;2917:31;2942:5;2917:31;:::i;:::-;2967:5;-1:-1:-1;3024:2:1;3009:18;;2996:32;3037:33;2996:32;3037:33;:::i;:::-;2697:456;;3089:7;;-1:-1:-1;;;3143:2:1;3128:18;;;;3115:32;;2697:456::o;3347:118::-;3433:5;3426:13;3419:21;3412:5;3409:32;3399:60;;3455:1;3452;3445:12;3470:566;3562:6;3570;3578;3631:2;3619:9;3610:7;3606:23;3602:32;3599:52;;;3647:1;3644;3637:12;3599:52;3687:9;3674:23;3720:18;3712:6;3709:30;3706:50;;;3752:1;3749;3742:12;3706:50;3791:70;3853:7;3844:6;3833:9;3829:22;3791:70;:::i;:::-;3880:8;;-1:-1:-1;3765:96:1;-1:-1:-1;;3965:2:1;3950:18;;3937:32;3978:28;3937:32;3978:28;:::i;:::-;4025:5;4015:15;;;3470:566;;;;;:::o;4041:382::-;4106:6;4114;4167:2;4155:9;4146:7;4142:23;4138:32;4135:52;;;4183:1;4180;4173:12;4135:52;4222:9;4209:23;4241:31;4266:5;4241:31;:::i;:::-;4291:5;-1:-1:-1;4348:2:1;4333:18;;4320:32;4361:30;4320:32;4361:30;:::i;:::-;4410:7;4400:17;;;4041:382;;;;;:::o;4859:388::-;4927:6;4935;4988:2;4976:9;4967:7;4963:23;4959:32;4956:52;;;5004:1;5001;4994:12;4956:52;5043:9;5030:23;5062:31;5087:5;5062:31;:::i;:::-;5112:5;-1:-1:-1;5169:2:1;5154:18;;5141:32;5182:33;5141:32;5182:33;:::i;5252:380::-;5331:1;5327:12;;;;5374;;;5395:61;;5449:4;5441:6;5437:17;5427:27;;5395:61;5502:2;5494:6;5491:14;5471:18;5468:38;5465:161;;;5548:10;5543:3;5539:20;5536:1;5529:31;5583:4;5580:1;5573:15;5611:4;5608:1;5601:15;5465:161;;5252:380;;;:::o;5946:245::-;6013:6;6066:2;6054:9;6045:7;6041:23;6037:32;6034:52;;;6082:1;6079;6072:12;6034:52;6114:9;6108:16;6133:28;6155:5;6133:28;:::i;6891:398::-;7093:2;7075:21;;;7132:2;7112:18;;;7105:30;7171:34;7166:2;7151:18;;7144:62;-1:-1:-1;;;7237:2:1;7222:18;;7215:32;7279:3;7264:19;;6891:398::o;7294:127::-;7355:10;7350:3;7346:20;7343:1;7336:31;7386:4;7383:1;7376:15;7410:4;7407:1;7400:15;7426:251;7496:6;7549:2;7537:9;7528:7;7524:23;7520:32;7517:52;;;7565:1;7562;7555:12;7517:52;7597:9;7591:16;7616:31;7641:5;7616:31;:::i;8036:127::-;8097:10;8092:3;8088:20;8085:1;8078:31;8128:4;8125:1;8118:15;8152:4;8149:1;8142:15;8168:135;8207:3;-1:-1:-1;;8228:17:1;;8225:43;;;8248:18;;:::i;:::-;-1:-1:-1;8295:1:1;8284:13;;8168:135::o;8308:128::-;8348:3;8379:1;8375:6;8372:1;8369:13;8366:39;;;8385:18;;:::i;:::-;-1:-1:-1;8421:9:1;;8308:128::o;9936:125::-;9976:4;10004:1;10001;9998:8;9995:34;;;10009:18;;:::i;:::-;-1:-1:-1;10046:9:1;;9936:125::o;10066:356::-;10268:2;10250:21;;;10287:18;;;10280:30;10346:34;10341:2;10326:18;;10319:62;10413:2;10398:18;;10066:356::o;15478:168::-;15518:7;15584:1;15580;15576:6;15572:14;15569:1;15566:21;15561:1;15554:9;15547:17;15543:45;15540:71;;;15591:18;;:::i;:::-;-1:-1:-1;15631:9:1;;15478:168::o;15651:217::-;15691:1;15717;15707:132;;15761:10;15756:3;15752:20;15749:1;15742:31;15796:4;15793:1;15786:15;15824:4;15821:1;15814:15;15707:132;-1:-1:-1;15853:9:1;;15651:217::o

Swarm Source

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