ETH Price: $2,359.70 (+0.83%)

Token

Valhalla Vacation Club (VVC)
 

Overview

Max Total Supply

1,001 VVC

Holders

245

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
tjcrypto.eth
Balance
3 VVC
0xb40b4e1a8cb36fed4063119da5c49d46e33e38af
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

An NFT collection of 9.999 born-again Vikings, ready to take on the modern world. Owning a Viking will unlock a number of monthly benefits and grant you lifetime access to the club, including a stake in our DAO (Odin’s Vault).

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ValhallaVacationClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-08
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

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

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

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) internal virtual {}
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

contract ValhallaVacationClub is ERC721, Ownable {
    using Address for address;

    // some call it 'provenance'
    string public PROOF_OF_ANCESTRY;

    // eth://valhallavacayclub.com/look-at-me
    string public baseURI;

    // 9s EVERYWHERE
    uint256 public constant MAX_VIKINGS = 9999;
    uint256 public constant MAX_PRESALE = 750;
    uint256 public constant MAX_LUCKY_VIKINGS = 69;
    uint256 public constant FOR_THE_VAULT = 149;

    uint256 public constant PRICE = 0.065 ether;
    uint256 public constant PRESALE_PRICE = 0.04 ether;

    uint256 public luckySupply;
    uint256 public presaleSupply;
    uint256 public totalSupply;

    // Stay on your toes.
    bool public luckyActive = false;
    bool public presaleActive = false;
    bool public saleActive = false;

    // We need
    bool public vikingsBroughtHome = false;

    // Vault address
    address vaultAddress = 0xc7C15A3DC9A053D852de73651913532B0Ab5FD0B;

    // Store all the lucky mints to prevent duplicates
    mapping (address => bool) public claimedLuckers;

    // there is a lot to unpack here
    constructor() ERC721("Valhalla Vacation Club", "VVC") {}

    // Reserve some Vikings for the Team!
    function reserveVikings() public onlyOwner {
        require(bytes(PROOF_OF_ANCESTRY).length > 0,                "No distributing Vikings until provenance is established.");
        require(!vikingsBroughtHome,                                "Only once, even for you Odin");
        require(totalSupply + FOR_THE_VAULT <= MAX_VIKINGS,         "You have missed your chance, Fishlord.");

        for (uint256 i = 0; i < FOR_THE_VAULT; i++) {
            _safeMint(vaultAddress, totalSupply + i);
        }

        totalSupply += FOR_THE_VAULT;
        presaleSupply += FOR_THE_VAULT;

        vikingsBroughtHome = true;
    }

    // A freebie for you - Lucky you!
    function luckyViking() public {
        require(luckyActive,                                            "A sale period must be active to claim");
        require(!claimedLuckers[msg.sender],                            "You have already claimed your Lucky Viking.");
        require(totalSupply + 1 <= MAX_VIKINGS,                         "Sorry, you're too late! All vikings have been claimed.");
        require(luckySupply + 1 <= MAX_LUCKY_VIKINGS,                   "Sorry, you're too late! All Lucky Vikings have been claimed.");

        _safeMint( msg.sender, totalSupply);
        totalSupply += 1;
        luckySupply += 1;
        presaleSupply += 1;

        claimedLuckers[msg.sender] = true;
    }

    // Lets raid together, earlier than the others!!!!!!!!! LFG
    function mintPresale(uint256 numberOfMints) public payable {
        require(presaleActive,                                      "Presale must be active to mint");
        require(totalSupply + numberOfMints <= MAX_VIKINGS,         "Purchase would exceed max supply of tokens");
        require(presaleSupply + numberOfMints <= MAX_PRESALE,       "We have to save some Vikings for the public sale - Presale: SOLD OUT!");
        require(PRESALE_PRICE * numberOfMints == msg.value,         "Ether value sent is not correct");

        for(uint256 i; i < numberOfMints; i++){
            _safeMint( msg.sender, totalSupply + i );
        }

        totalSupply += numberOfMints;
        presaleSupply += numberOfMints;
    }

    // ..and now for the rest of you
    function mint(uint256 numberOfMints) public payable {
        require(saleActive,                                         "Sale must be active to mint");
        require(numberOfMints > 0 && numberOfMints < 6,             "Invalid purchase amount");
        require(totalSupply + numberOfMints <= MAX_VIKINGS,         "Purchase would exceed max supply of tokens");
        require(PRICE * numberOfMints == msg.value,                 "Ether value sent is not correct");

        for(uint256 i; i < numberOfMints; i++) {
            _safeMint(msg.sender, totalSupply + i);
        }

        totalSupply += numberOfMints;
    }

    // The Lizards made us do it!
    function setAncestry(string memory provenance) public onlyOwner {
        require(bytes(PROOF_OF_ANCESTRY).length == 0, "Now now, Loki, do not go and try to play god...twice.");

        PROOF_OF_ANCESTRY = provenance;
    }

    function toggleLuckers() public onlyOwner {
        require(bytes(PROOF_OF_ANCESTRY).length > 0, "No distributing Vikings until provenance is established.");

        luckyActive = !luckyActive;
        presaleActive = false;
    }

    //and a flip of the (small) switch
    function togglePresale() public onlyOwner {
        require(bytes(PROOF_OF_ANCESTRY).length > 0, "No distributing Vikings until provenance is established.");

        luckyActive = false;
        presaleActive = !presaleActive;
    }

    // LETS GO RAIDING!!! #VVCGANG
    function toggleSale() public onlyOwner {
        require(bytes(PROOF_OF_ANCESTRY).length > 0, "No distributing Vikings until provenance is established.");

        luckyActive = false;
        presaleActive = false;
        saleActive = !saleActive;
    }

    // For the grand reveal and where things are now.. where things will forever be.. gods willing
    function setBaseURI(string memory uri) public onlyOwner {
        baseURI = uri;
    }

    // Look at those god damn :horny: Vikings
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    // We don't want to have all the money stuck in the contract, right?
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FOR_THE_VAULT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LUCKY_VIKINGS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_VIKINGS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROOF_OF_ANCESTRY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedLuckers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"luckyActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"luckySupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"luckyViking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveVikings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setAncestry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleLuckers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vikingsBroughtHome","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600c80546001600160c01b03191677c7c15a3dc9a053d852de73651913532b0ab5fd0b000000001790553480156200003b57600080fd5b50604080518082018252601681527f56616c68616c6c61205661636174696f6e20436c75620000000000000000000060208083019182528351808501909452600384526256564360e81b9084015281519192916200009c916000916200012b565b508051620000b29060019060208401906200012b565b505050620000cf620000c9620000d560201b60201c565b620000d9565b6200020e565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013990620001d1565b90600052602060002090601f0160209004810192826200015d5760008555620001a8565b82601f106200017857805160ff1916838001178555620001a8565b82800160010185558215620001a8579182015b82811115620001a85782518255916020019190600101906200018b565b50620001b6929150620001ba565b5090565b5b80821115620001b65760008155600101620001bb565b600181811c90821680620001e657607f821691505b602082108114156200020857634e487b7160e01b600052602260045260246000fd5b50919050565b6126b2806200021e6000396000f3fe6080604052600436106102515760003560e01c80636c0360eb1161013957806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd1461064b578063e67b81b01461066b578063e985e9c51461069b578063ec4704de146106e4578063f2fde38b146106f9578063f759867a1461071957600080fd5b806395d89b41146105cd578063a0712d68146105e2578063a22cb465146105f5578063b3a196e914610615578063b88d4fde1461062b57600080fd5b806383492f0c116100fd57806383492f0c146105485780638d859f3e146105695780638da5cb5b146105845780638f35de13146105a25780639355c85d146105b757600080fd5b80636c0360eb146104d357806370a08231146104e8578063715018a614610508578063740f76ab1461051d5780637d8966e41461053357600080fd5b80633ccfd60b116101d257806353135ca01161019657806353135ca01461042457806355f804b3146104435780635e75bd321461046357806362dc6e21146104785780636352211e1461049357806368428a1b146104b357600080fd5b80633ccfd60b1461039f57806342842e0e146103b45780634569af32146103d45780634d4c4e99146103f4578063506e2cd51461040a57600080fd5b806318160ddd1161021957806318160ddd1461032a57806323b872dd1461034057806334393743146103605780633765be6d1461037557806339ea933e1461038a57600080fd5b806301ffc9a714610256578063061c66c51461028b57806306fdde03146102ae578063081812fc146102d0578063095ea7b314610308575b600080fd5b34801561026257600080fd5b50610276610271366004612250565b61072c565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0609581565b604051908152602001610282565b3480156102ba57600080fd5b506102c361077e565b6040516102829190612384565b3480156102dc57600080fd5b506102f06102eb3660046122d3565b610810565b6040516001600160a01b039091168152602001610282565b34801561031457600080fd5b50610328610323366004612226565b6108aa565b005b34801561033657600080fd5b506102a0600b5481565b34801561034c57600080fd5b5061032861035b366004612132565b6109c0565b34801561036c57600080fd5b506103286109f1565b34801561038157600080fd5b50610328610a69565b34801561039657600080fd5b50610328610adb565b3480156103ab57600080fd5b50610328610c8e565b3480156103c057600080fd5b506103286103cf366004612132565b610ceb565b3480156103e057600080fd5b506103286103ef36600461228a565b610d06565b34801561040057600080fd5b506102a06102ee81565b34801561041657600080fd5b50600c546102769060ff1681565b34801561043057600080fd5b50600c5461027690610100900460ff1681565b34801561044f57600080fd5b5061032861045e36600461228a565b610dbd565b34801561046f57600080fd5b506102a0604581565b34801561048457600080fd5b506102a0668e1bc9bf04000081565b34801561049f57600080fd5b506102f06104ae3660046122d3565b610dfa565b3480156104bf57600080fd5b50600c546102769062010000900460ff1681565b3480156104df57600080fd5b506102c3610e71565b3480156104f457600080fd5b506102a06105033660046120e4565b610eff565b34801561051457600080fd5b50610328610f86565b34801561052957600080fd5b506102a060095481565b34801561053f57600080fd5b50610328610fbc565b34801561055457600080fd5b50600c54610276906301000000900460ff1681565b34801561057557600080fd5b506102a066e6ed27d666800081565b34801561059057600080fd5b506006546001600160a01b03166102f0565b3480156105ae57600080fd5b506102c3611037565b3480156105c357600080fd5b506102a061270f81565b3480156105d957600080fd5b506102c3611044565b6103286105f03660046122d3565b611053565b34801561060157600080fd5b506103286106103660046121ea565b6111df565b34801561062157600080fd5b506102a0600a5481565b34801561063757600080fd5b5061032861064636600461216e565b6111ea565b34801561065757600080fd5b506102c36106663660046122d3565b611222565b34801561067757600080fd5b506102766106863660046120e4565b600d6020526000908152604090205460ff1681565b3480156106a757600080fd5b506102766106b63660046120ff565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f057600080fd5b506103286112fd565b34801561070557600080fd5b506103286107143660046120e4565b611549565b6103286107273660046122d3565b6115e4565b60006001600160e01b031982166380ac58cd60e01b148061075d57506001600160e01b03198216635b5e139f60e01b145b8061077857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461078d906125a4565b80601f01602080910402602001604051908101604052809291908181526020018280546107b9906125a4565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661088e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108b582610dfa565b9050806001600160a01b0316836001600160a01b031614156109235760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610885565b336001600160a01b038216148061093f575061093f81336106b6565b6109b15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610885565b6109bb83836117b7565b505050565b6109ca3382611825565b6109e65760405162461bcd60e51b8152600401610885906124c5565b6109bb83838361191c565b6006546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161088590612490565b600060078054610a2a906125a4565b905011610a495760405162461bcd60e51b8152600401610885906123e9565b600c805461010060ff19821681900460ff16150261ffff19909116179055565b6006546001600160a01b03163314610a935760405162461bcd60e51b815260040161088590612490565b600060078054610aa2906125a4565b905011610ac15760405162461bcd60e51b8152600401610885906123e9565b600c805461ff001960ff8216151661ffff19909116179055565b6006546001600160a01b03163314610b055760405162461bcd60e51b815260040161088590612490565b600060078054610b14906125a4565b905011610b335760405162461bcd60e51b8152600401610885906123e9565b600c546301000000900460ff1615610b8d5760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79206f6e63652c206576656e20666f7220796f75204f64696e000000006044820152606401610885565b61270f6095600b54610b9f9190612516565b1115610bfc5760405162461bcd60e51b815260206004820152602660248201527f596f752068617665206d697373656420796f7572206368616e63652c20466973604482015265343637b9321760d11b6064820152608401610885565b60005b6095811015610c4657600c54600b54610c349164010000000090046001600160a01b031690610c2f908490612516565b611abc565b80610c3e816125df565b915050610bff565b506095600b6000828254610c5a9190612516565b925050819055506095600a6000828254610c749190612516565b9091555050600c805463ff00000019166301000000179055565b6006546001600160a01b03163314610cb85760405162461bcd60e51b815260040161088590612490565b6040514790339082156108fc029083906000818181858888f19350505050158015610ce7573d6000803e3d6000fd5b5050565b6109bb838383604051806020016040528060008152506111ea565b6006546001600160a01b03163314610d305760405162461bcd60e51b815260040161088590612490565b60078054610d3d906125a4565b159050610daa5760405162461bcd60e51b815260206004820152603560248201527f4e6f77206e6f772c204c6f6b692c20646f206e6f7420676f20616e6420747279604482015274103a3790383630bc9033b7b21717173a3bb4b1b29760591b6064820152608401610885565b8051610ce7906007906020840190611fb9565b6006546001600160a01b03163314610de75760405162461bcd60e51b815260040161088590612490565b8051610ce7906008906020840190611fb9565b6000818152600260205260408120546001600160a01b0316806107785760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610885565b60088054610e7e906125a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa906125a4565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b505050505081565b60006001600160a01b038216610f6a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610885565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610fb05760405162461bcd60e51b815260040161088590612490565b610fba6000611ad6565b565b6006546001600160a01b03163314610fe65760405162461bcd60e51b815260040161088590612490565b600060078054610ff5906125a4565b9050116110145760405162461bcd60e51b8152600401610885906123e9565b600c80546201000061ffff19821681900460ff16150262ffffff19909116179055565b60078054610e7e906125a4565b60606001805461078d906125a4565b600c5462010000900460ff166110ab5760405162461bcd60e51b815260206004820152601b60248201527f53616c65206d7573742062652061637469766520746f206d696e7400000000006044820152606401610885565b6000811180156110bb5750600681105b6111075760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420707572636861736520616d6f756e740000000000000000006044820152606401610885565b61270f81600b546111189190612516565b11156111365760405162461bcd60e51b815260040161088590612446565b346111488266e6ed27d6668000612542565b146111955760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610885565b60005b818110156111c4576111b23382600b54610c2f9190612516565b806111bc816125df565b915050611198565b5080600b60008282546111d79190612516565b909155505050565b610ce7338383611b28565b6111f43383611825565b6112105760405162461bcd60e51b8152600401610885906124c5565b61121c84848484611bf7565b50505050565b6000818152600260205260409020546060906001600160a01b03166112a15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610885565b60006112ab611c2a565b905060008151116112cb57604051806020016040528060008152506112f6565b806112d584611c39565b6040516020016112e6929190612318565b6040516020818303038152906040525b9392505050565b600c5460ff1661135d5760405162461bcd60e51b815260206004820152602560248201527f412073616c6520706572696f64206d7573742062652061637469766520746f20604482015264636c61696d60d81b6064820152608401610885565b336000908152600d602052604090205460ff16156113d15760405162461bcd60e51b815260206004820152602b60248201527f596f75206861766520616c726561647920636c61696d656420796f7572204c7560448201526a31b5bc902b34b5b4b7339760a91b6064820152608401610885565b61270f600b5460016113e39190612516565b11156114505760405162461bcd60e51b815260206004820152603660248201527f536f7272792c20796f7527726520746f6f206c6174652120416c6c2076696b696044820152753733b9903430bb32903132b2b71031b630b4b6b2b21760511b6064820152608401610885565b604560095460016114619190612516565b11156114d55760405162461bcd60e51b815260206004820152603c60248201527f536f7272792c20796f7527726520746f6f206c6174652120416c6c204c75636b60448201527f792056696b696e67732068617665206265656e20636c61696d65642e000000006064820152608401610885565b6114e133600b54611abc565b6001600b60008282546114f49190612516565b9250508190555060016009600082825461150e9190612516565b925050819055506001600a60008282546115289190612516565b9091555050336000908152600d60205260409020805460ff19166001179055565b6006546001600160a01b031633146115735760405162461bcd60e51b815260040161088590612490565b6001600160a01b0381166115d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610885565b6115e181611ad6565b50565b600c54610100900460ff1661163b5760405162461bcd60e51b815260206004820152601e60248201527f50726573616c65206d7573742062652061637469766520746f206d696e7400006044820152606401610885565b61270f81600b5461164c9190612516565b111561166a5760405162461bcd60e51b815260040161088590612446565b6102ee81600a5461167b9190612516565b11156116fd5760405162461bcd60e51b815260206004820152604560248201527f5765206861766520746f207361766520736f6d652056696b696e677320666f7260448201527f20746865207075626c69632073616c65202d2050726573616c653a20534f4c44606482015264204f55542160d81b608482015260a401610885565b3461170f82668e1bc9bf040000612542565b1461175c5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610885565b60005b8181101561178b576117793382600b54610c2f9190612516565b80611783816125df565b91505061175f565b5080600b600082825461179e9190612516565b9250508190555080600a60008282546111d79190612516565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117ec82610dfa565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661189e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610885565b60006118a983610dfa565b9050806001600160a01b0316846001600160a01b031614806118e45750836001600160a01b03166118d984610810565b6001600160a01b0316145b8061191457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661192f82610dfa565b6001600160a01b0316146119975760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610885565b6001600160a01b0382166119f95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610885565b611a046000826117b7565b6001600160a01b0383166000908152600360205260408120805460019290611a2d908490612561565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a5b908490612516565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ce7828260405180602001604052806000815250611d37565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611b8a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610885565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c0284848461191c565b611c0e84848484611d6a565b61121c5760405162461bcd60e51b815260040161088590612397565b60606008805461078d906125a4565b606081611c5d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c875780611c71816125df565b9150611c809050600a8361252e565b9150611c61565b60008167ffffffffffffffff811115611ca257611ca2612650565b6040519080825280601f01601f191660200182016040528015611ccc576020820181803683370190505b5090505b841561191457611ce1600183612561565b9150611cee600a866125fa565b611cf9906030612516565b60f81b818381518110611d0e57611d0e61263a565b60200101906001600160f81b031916908160001a905350611d30600a8661252e565b9450611cd0565b611d418383611e77565b611d4e6000848484611d6a565b6109bb5760405162461bcd60e51b815260040161088590612397565b60006001600160a01b0384163b15611e6c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611dae903390899088908890600401612347565b602060405180830381600087803b158015611dc857600080fd5b505af1925050508015611df8575060408051601f3d908101601f19168201909252611df59181019061226d565b60015b611e52573d808015611e26576040519150601f19603f3d011682016040523d82523d6000602084013e611e2b565b606091505b508051611e4a5760405162461bcd60e51b815260040161088590612397565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611914565b506001949350505050565b6001600160a01b038216611ecd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610885565b6000818152600260205260409020546001600160a01b031615611f325760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610885565b6001600160a01b0382166000908152600360205260408120805460019290611f5b908490612516565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611fc5906125a4565b90600052602060002090601f016020900481019282611fe7576000855561202d565b82601f1061200057805160ff191683800117855561202d565b8280016001018555821561202d579182015b8281111561202d578251825591602001919060010190612012565b5061203992915061203d565b5090565b5b80821115612039576000815560010161203e565b600067ffffffffffffffff8084111561206d5761206d612650565b604051601f8501601f19908116603f0116810190828211818310171561209557612095612650565b816040528093508581528686860111156120ae57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146120df57600080fd5b919050565b6000602082840312156120f657600080fd5b6112f6826120c8565b6000806040838503121561211257600080fd5b61211b836120c8565b9150612129602084016120c8565b90509250929050565b60008060006060848603121561214757600080fd5b612150846120c8565b925061215e602085016120c8565b9150604084013590509250925092565b6000806000806080858703121561218457600080fd5b61218d856120c8565b935061219b602086016120c8565b925060408501359150606085013567ffffffffffffffff8111156121be57600080fd5b8501601f810187136121cf57600080fd5b6121de87823560208401612052565b91505092959194509250565b600080604083850312156121fd57600080fd5b612206836120c8565b91506020830135801515811461221b57600080fd5b809150509250929050565b6000806040838503121561223957600080fd5b612242836120c8565b946020939093013593505050565b60006020828403121561226257600080fd5b81356112f681612666565b60006020828403121561227f57600080fd5b81516112f681612666565b60006020828403121561229c57600080fd5b813567ffffffffffffffff8111156122b357600080fd5b8201601f810184136122c457600080fd5b61191484823560208401612052565b6000602082840312156122e557600080fd5b5035919050565b60008151808452612304816020860160208601612578565b601f01601f19169290920160200192915050565b6000835161232a818460208801612578565b83519083019061233e818360208801612578565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237a908301846122ec565b9695505050505050565b6020815260006112f660208301846122ec565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526038908201527f4e6f20646973747269627574696e672056696b696e677320756e74696c20707260408201527f6f76656e616e63652069732065737461626c69736865642e0000000000000000606082015260800190565b6020808252602a908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015269206f6620746f6b656e7360b01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125295761252961260e565b500190565b60008261253d5761253d612624565b500490565b600081600019048311821515161561255c5761255c61260e565b500290565b6000828210156125735761257361260e565b500390565b60005b8381101561259357818101518382015260200161257b565b8381111561121c5750506000910152565b600181811c908216806125b857607f821691505b602082108114156125d957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125f3576125f361260e565b5060010190565b60008261260957612609612624565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146115e157600080fdfea2646970667358221220f18f3c6c735d0e488bbae0064dc5f06304b417782b2cafba9fbdc68ee47fb90564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102515760003560e01c80636c0360eb1161013957806395d89b41116100b6578063c87b56dd1161007a578063c87b56dd1461064b578063e67b81b01461066b578063e985e9c51461069b578063ec4704de146106e4578063f2fde38b146106f9578063f759867a1461071957600080fd5b806395d89b41146105cd578063a0712d68146105e2578063a22cb465146105f5578063b3a196e914610615578063b88d4fde1461062b57600080fd5b806383492f0c116100fd57806383492f0c146105485780638d859f3e146105695780638da5cb5b146105845780638f35de13146105a25780639355c85d146105b757600080fd5b80636c0360eb146104d357806370a08231146104e8578063715018a614610508578063740f76ab1461051d5780637d8966e41461053357600080fd5b80633ccfd60b116101d257806353135ca01161019657806353135ca01461042457806355f804b3146104435780635e75bd321461046357806362dc6e21146104785780636352211e1461049357806368428a1b146104b357600080fd5b80633ccfd60b1461039f57806342842e0e146103b45780634569af32146103d45780634d4c4e99146103f4578063506e2cd51461040a57600080fd5b806318160ddd1161021957806318160ddd1461032a57806323b872dd1461034057806334393743146103605780633765be6d1461037557806339ea933e1461038a57600080fd5b806301ffc9a714610256578063061c66c51461028b57806306fdde03146102ae578063081812fc146102d0578063095ea7b314610308575b600080fd5b34801561026257600080fd5b50610276610271366004612250565b61072c565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0609581565b604051908152602001610282565b3480156102ba57600080fd5b506102c361077e565b6040516102829190612384565b3480156102dc57600080fd5b506102f06102eb3660046122d3565b610810565b6040516001600160a01b039091168152602001610282565b34801561031457600080fd5b50610328610323366004612226565b6108aa565b005b34801561033657600080fd5b506102a0600b5481565b34801561034c57600080fd5b5061032861035b366004612132565b6109c0565b34801561036c57600080fd5b506103286109f1565b34801561038157600080fd5b50610328610a69565b34801561039657600080fd5b50610328610adb565b3480156103ab57600080fd5b50610328610c8e565b3480156103c057600080fd5b506103286103cf366004612132565b610ceb565b3480156103e057600080fd5b506103286103ef36600461228a565b610d06565b34801561040057600080fd5b506102a06102ee81565b34801561041657600080fd5b50600c546102769060ff1681565b34801561043057600080fd5b50600c5461027690610100900460ff1681565b34801561044f57600080fd5b5061032861045e36600461228a565b610dbd565b34801561046f57600080fd5b506102a0604581565b34801561048457600080fd5b506102a0668e1bc9bf04000081565b34801561049f57600080fd5b506102f06104ae3660046122d3565b610dfa565b3480156104bf57600080fd5b50600c546102769062010000900460ff1681565b3480156104df57600080fd5b506102c3610e71565b3480156104f457600080fd5b506102a06105033660046120e4565b610eff565b34801561051457600080fd5b50610328610f86565b34801561052957600080fd5b506102a060095481565b34801561053f57600080fd5b50610328610fbc565b34801561055457600080fd5b50600c54610276906301000000900460ff1681565b34801561057557600080fd5b506102a066e6ed27d666800081565b34801561059057600080fd5b506006546001600160a01b03166102f0565b3480156105ae57600080fd5b506102c3611037565b3480156105c357600080fd5b506102a061270f81565b3480156105d957600080fd5b506102c3611044565b6103286105f03660046122d3565b611053565b34801561060157600080fd5b506103286106103660046121ea565b6111df565b34801561062157600080fd5b506102a0600a5481565b34801561063757600080fd5b5061032861064636600461216e565b6111ea565b34801561065757600080fd5b506102c36106663660046122d3565b611222565b34801561067757600080fd5b506102766106863660046120e4565b600d6020526000908152604090205460ff1681565b3480156106a757600080fd5b506102766106b63660046120ff565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106f057600080fd5b506103286112fd565b34801561070557600080fd5b506103286107143660046120e4565b611549565b6103286107273660046122d3565b6115e4565b60006001600160e01b031982166380ac58cd60e01b148061075d57506001600160e01b03198216635b5e139f60e01b145b8061077857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461078d906125a4565b80601f01602080910402602001604051908101604052809291908181526020018280546107b9906125a4565b80156108065780601f106107db57610100808354040283529160200191610806565b820191906000526020600020905b8154815290600101906020018083116107e957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661088e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108b582610dfa565b9050806001600160a01b0316836001600160a01b031614156109235760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610885565b336001600160a01b038216148061093f575061093f81336106b6565b6109b15760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610885565b6109bb83836117b7565b505050565b6109ca3382611825565b6109e65760405162461bcd60e51b8152600401610885906124c5565b6109bb83838361191c565b6006546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161088590612490565b600060078054610a2a906125a4565b905011610a495760405162461bcd60e51b8152600401610885906123e9565b600c805461010060ff19821681900460ff16150261ffff19909116179055565b6006546001600160a01b03163314610a935760405162461bcd60e51b815260040161088590612490565b600060078054610aa2906125a4565b905011610ac15760405162461bcd60e51b8152600401610885906123e9565b600c805461ff001960ff8216151661ffff19909116179055565b6006546001600160a01b03163314610b055760405162461bcd60e51b815260040161088590612490565b600060078054610b14906125a4565b905011610b335760405162461bcd60e51b8152600401610885906123e9565b600c546301000000900460ff1615610b8d5760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79206f6e63652c206576656e20666f7220796f75204f64696e000000006044820152606401610885565b61270f6095600b54610b9f9190612516565b1115610bfc5760405162461bcd60e51b815260206004820152602660248201527f596f752068617665206d697373656420796f7572206368616e63652c20466973604482015265343637b9321760d11b6064820152608401610885565b60005b6095811015610c4657600c54600b54610c349164010000000090046001600160a01b031690610c2f908490612516565b611abc565b80610c3e816125df565b915050610bff565b506095600b6000828254610c5a9190612516565b925050819055506095600a6000828254610c749190612516565b9091555050600c805463ff00000019166301000000179055565b6006546001600160a01b03163314610cb85760405162461bcd60e51b815260040161088590612490565b6040514790339082156108fc029083906000818181858888f19350505050158015610ce7573d6000803e3d6000fd5b5050565b6109bb838383604051806020016040528060008152506111ea565b6006546001600160a01b03163314610d305760405162461bcd60e51b815260040161088590612490565b60078054610d3d906125a4565b159050610daa5760405162461bcd60e51b815260206004820152603560248201527f4e6f77206e6f772c204c6f6b692c20646f206e6f7420676f20616e6420747279604482015274103a3790383630bc9033b7b21717173a3bb4b1b29760591b6064820152608401610885565b8051610ce7906007906020840190611fb9565b6006546001600160a01b03163314610de75760405162461bcd60e51b815260040161088590612490565b8051610ce7906008906020840190611fb9565b6000818152600260205260408120546001600160a01b0316806107785760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610885565b60088054610e7e906125a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa906125a4565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b505050505081565b60006001600160a01b038216610f6a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610885565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610fb05760405162461bcd60e51b815260040161088590612490565b610fba6000611ad6565b565b6006546001600160a01b03163314610fe65760405162461bcd60e51b815260040161088590612490565b600060078054610ff5906125a4565b9050116110145760405162461bcd60e51b8152600401610885906123e9565b600c80546201000061ffff19821681900460ff16150262ffffff19909116179055565b60078054610e7e906125a4565b60606001805461078d906125a4565b600c5462010000900460ff166110ab5760405162461bcd60e51b815260206004820152601b60248201527f53616c65206d7573742062652061637469766520746f206d696e7400000000006044820152606401610885565b6000811180156110bb5750600681105b6111075760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420707572636861736520616d6f756e740000000000000000006044820152606401610885565b61270f81600b546111189190612516565b11156111365760405162461bcd60e51b815260040161088590612446565b346111488266e6ed27d6668000612542565b146111955760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610885565b60005b818110156111c4576111b23382600b54610c2f9190612516565b806111bc816125df565b915050611198565b5080600b60008282546111d79190612516565b909155505050565b610ce7338383611b28565b6111f43383611825565b6112105760405162461bcd60e51b8152600401610885906124c5565b61121c84848484611bf7565b50505050565b6000818152600260205260409020546060906001600160a01b03166112a15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610885565b60006112ab611c2a565b905060008151116112cb57604051806020016040528060008152506112f6565b806112d584611c39565b6040516020016112e6929190612318565b6040516020818303038152906040525b9392505050565b600c5460ff1661135d5760405162461bcd60e51b815260206004820152602560248201527f412073616c6520706572696f64206d7573742062652061637469766520746f20604482015264636c61696d60d81b6064820152608401610885565b336000908152600d602052604090205460ff16156113d15760405162461bcd60e51b815260206004820152602b60248201527f596f75206861766520616c726561647920636c61696d656420796f7572204c7560448201526a31b5bc902b34b5b4b7339760a91b6064820152608401610885565b61270f600b5460016113e39190612516565b11156114505760405162461bcd60e51b815260206004820152603660248201527f536f7272792c20796f7527726520746f6f206c6174652120416c6c2076696b696044820152753733b9903430bb32903132b2b71031b630b4b6b2b21760511b6064820152608401610885565b604560095460016114619190612516565b11156114d55760405162461bcd60e51b815260206004820152603c60248201527f536f7272792c20796f7527726520746f6f206c6174652120416c6c204c75636b60448201527f792056696b696e67732068617665206265656e20636c61696d65642e000000006064820152608401610885565b6114e133600b54611abc565b6001600b60008282546114f49190612516565b9250508190555060016009600082825461150e9190612516565b925050819055506001600a60008282546115289190612516565b9091555050336000908152600d60205260409020805460ff19166001179055565b6006546001600160a01b031633146115735760405162461bcd60e51b815260040161088590612490565b6001600160a01b0381166115d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610885565b6115e181611ad6565b50565b600c54610100900460ff1661163b5760405162461bcd60e51b815260206004820152601e60248201527f50726573616c65206d7573742062652061637469766520746f206d696e7400006044820152606401610885565b61270f81600b5461164c9190612516565b111561166a5760405162461bcd60e51b815260040161088590612446565b6102ee81600a5461167b9190612516565b11156116fd5760405162461bcd60e51b815260206004820152604560248201527f5765206861766520746f207361766520736f6d652056696b696e677320666f7260448201527f20746865207075626c69632073616c65202d2050726573616c653a20534f4c44606482015264204f55542160d81b608482015260a401610885565b3461170f82668e1bc9bf040000612542565b1461175c5760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f7272656374006044820152606401610885565b60005b8181101561178b576117793382600b54610c2f9190612516565b80611783816125df565b91505061175f565b5080600b600082825461179e9190612516565b9250508190555080600a60008282546111d79190612516565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906117ec82610dfa565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661189e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610885565b60006118a983610dfa565b9050806001600160a01b0316846001600160a01b031614806118e45750836001600160a01b03166118d984610810565b6001600160a01b0316145b8061191457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661192f82610dfa565b6001600160a01b0316146119975760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610885565b6001600160a01b0382166119f95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610885565b611a046000826117b7565b6001600160a01b0383166000908152600360205260408120805460019290611a2d908490612561565b90915550506001600160a01b0382166000908152600360205260408120805460019290611a5b908490612516565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ce7828260405180602001604052806000815250611d37565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611b8a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610885565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c0284848461191c565b611c0e84848484611d6a565b61121c5760405162461bcd60e51b815260040161088590612397565b60606008805461078d906125a4565b606081611c5d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c875780611c71816125df565b9150611c809050600a8361252e565b9150611c61565b60008167ffffffffffffffff811115611ca257611ca2612650565b6040519080825280601f01601f191660200182016040528015611ccc576020820181803683370190505b5090505b841561191457611ce1600183612561565b9150611cee600a866125fa565b611cf9906030612516565b60f81b818381518110611d0e57611d0e61263a565b60200101906001600160f81b031916908160001a905350611d30600a8661252e565b9450611cd0565b611d418383611e77565b611d4e6000848484611d6a565b6109bb5760405162461bcd60e51b815260040161088590612397565b60006001600160a01b0384163b15611e6c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611dae903390899088908890600401612347565b602060405180830381600087803b158015611dc857600080fd5b505af1925050508015611df8575060408051601f3d908101601f19168201909252611df59181019061226d565b60015b611e52573d808015611e26576040519150601f19603f3d011682016040523d82523d6000602084013e611e2b565b606091505b508051611e4a5760405162461bcd60e51b815260040161088590612397565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611914565b506001949350505050565b6001600160a01b038216611ecd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610885565b6000818152600260205260409020546001600160a01b031615611f325760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610885565b6001600160a01b0382166000908152600360205260408120805460019290611f5b908490612516565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611fc5906125a4565b90600052602060002090601f016020900481019282611fe7576000855561202d565b82601f1061200057805160ff191683800117855561202d565b8280016001018555821561202d579182015b8281111561202d578251825591602001919060010190612012565b5061203992915061203d565b5090565b5b80821115612039576000815560010161203e565b600067ffffffffffffffff8084111561206d5761206d612650565b604051601f8501601f19908116603f0116810190828211818310171561209557612095612650565b816040528093508581528686860111156120ae57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146120df57600080fd5b919050565b6000602082840312156120f657600080fd5b6112f6826120c8565b6000806040838503121561211257600080fd5b61211b836120c8565b9150612129602084016120c8565b90509250929050565b60008060006060848603121561214757600080fd5b612150846120c8565b925061215e602085016120c8565b9150604084013590509250925092565b6000806000806080858703121561218457600080fd5b61218d856120c8565b935061219b602086016120c8565b925060408501359150606085013567ffffffffffffffff8111156121be57600080fd5b8501601f810187136121cf57600080fd5b6121de87823560208401612052565b91505092959194509250565b600080604083850312156121fd57600080fd5b612206836120c8565b91506020830135801515811461221b57600080fd5b809150509250929050565b6000806040838503121561223957600080fd5b612242836120c8565b946020939093013593505050565b60006020828403121561226257600080fd5b81356112f681612666565b60006020828403121561227f57600080fd5b81516112f681612666565b60006020828403121561229c57600080fd5b813567ffffffffffffffff8111156122b357600080fd5b8201601f810184136122c457600080fd5b61191484823560208401612052565b6000602082840312156122e557600080fd5b5035919050565b60008151808452612304816020860160208601612578565b601f01601f19169290920160200192915050565b6000835161232a818460208801612578565b83519083019061233e818360208801612578565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237a908301846122ec565b9695505050505050565b6020815260006112f660208301846122ec565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526038908201527f4e6f20646973747269627574696e672056696b696e677320756e74696c20707260408201527f6f76656e616e63652069732065737461626c69736865642e0000000000000000606082015260800190565b6020808252602a908201527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015269206f6620746f6b656e7360b01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156125295761252961260e565b500190565b60008261253d5761253d612624565b500490565b600081600019048311821515161561255c5761255c61260e565b500290565b6000828210156125735761257361260e565b500390565b60005b8381101561259357818101518382015260200161257b565b8381111561121c5750506000910152565b600181811c908216806125b857607f821691505b602082108114156125d957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156125f3576125f361260e565b5060010190565b60008261260957612609612624565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146115e157600080fdfea2646970667358221220f18f3c6c735d0e488bbae0064dc5f06304b417782b2cafba9fbdc68ee47fb90564736f6c63430008070033

Deployed Bytecode Sourcemap

34654:5814:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12229:293;;;;;;;;;;-1:-1:-1;12229:293:0;;;;;:::i;:::-;;:::i;:::-;;;5646:14:1;;5639:22;5621:41;;5609:2;5594:18;12229:293:0;;;;;;;;35067:43;;;;;;;;;;;;35107:3;35067:43;;;;;18022:25:1;;;18010:2;17995:18;35067:43:0;17876:177:1;13162:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14721:221::-;;;;;;;;;;-1:-1:-1;14721:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4944:32:1;;;4926:51;;4914:2;4899:18;14721:221:0;4780:203:1;14244:411:0;;;;;;;;;;-1:-1:-1;14244:411:0;;;;;:::i;:::-;;:::i;:::-;;35296:26;;;;;;;;;;;;;;;;15471:339;;;;;;;;;;-1:-1:-1;15471:339:0;;;;;:::i;:::-;;:::i;39349:238::-;;;;;;;;;;;;;:::i;39065:236::-;;;;;;;;;;;;;:::i;35891:638::-;;;;;;;;;;;;;:::i;40325:140::-;;;;;;;;;;;;;:::i;15881:185::-;;;;;;;;;;-1:-1:-1;15881:185:0;;;;;:::i;:::-;;:::i;38829:228::-;;;;;;;;;;-1:-1:-1;38829:228:0;;;;;:::i;:::-;;:::i;34966:41::-;;;;;;;;;;;;35004:3;34966:41;;35358:31;;;;;;;;;;-1:-1:-1;35358:31:0;;;;;;;;35396:33;;;;;;;;;;-1:-1:-1;35396:33:0;;;;;;;;;;;40000:88;;;;;;;;;;-1:-1:-1;40000:88:0;;;;;:::i;:::-;;:::i;35014:46::-;;;;;;;;;;;;35058:2;35014:46;;35169:50;;;;;;;;;;;;35209:10;35169:50;;12856:239;;;;;;;;;;-1:-1:-1;12856:239:0;;;;;:::i;:::-;;:::i;35436:30::-;;;;;;;;;;-1:-1:-1;35436:30:0;;;;;;;;;;;34865:21;;;;;;;;;;;;;:::i;12586:208::-;;;;;;;;;;-1:-1:-1;12586:208:0;;;;;:::i;:::-;;:::i;2384:103::-;;;;;;;;;;;;;:::i;35228:26::-;;;;;;;;;;;;;;;;39631:261;;;;;;;;;;;;;:::i;35491:38::-;;;;;;;;;;-1:-1:-1;35491:38:0;;;;;;;;;;;35119:43;;;;;;;;;;;;35151:11;35119:43;;1733:87;;;;;;;;;;-1:-1:-1;1806:6:0;;-1:-1:-1;;;;;1806:6:0;1733:87;;34778:31;;;;;;;;;;;;;:::i;34917:42::-;;;;;;;;;;;;34955:4;34917:42;;13331:104;;;;;;;;;;;;;:::i;38150:636::-;;;;;;:::i;:::-;;:::i;15014:155::-;;;;;;;;;;-1:-1:-1;15014:155:0;;;;;:::i;:::-;;:::i;35261:28::-;;;;;;;;;;;;;;;;16137:328;;;;;;;;;;-1:-1:-1;16137:328:0;;;;;:::i;:::-;;:::i;13506:334::-;;;;;;;;;;-1:-1:-1;13506:334:0;;;;;:::i;:::-;;:::i;35690:47::-;;;;;;;;;;-1:-1:-1;35690:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15240:164;;;;;;;;;;-1:-1:-1;15240:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;15361:25:0;;;15337:4;15361:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;15240:164;36576:721;;;;;;;;;;;;;:::i;2642:201::-;;;;;;;;;;-1:-1:-1;2642:201:0;;;;;:::i;:::-;;:::i;37370:734::-;;;;;;:::i;:::-;;:::i;12229:293::-;12331:4;-1:-1:-1;;;;;;12364:40:0;;-1:-1:-1;;;12364:40:0;;:101;;-1:-1:-1;;;;;;;12417:48:0;;-1:-1:-1;;;12417:48:0;12364:101;:150;;;-1:-1:-1;;;;;;;;;;4758:40:0;;;12478:36;12348:166;12229:293;-1:-1:-1;;12229:293:0:o;13162:100::-;13216:13;13249:5;13242:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13162:100;:::o;14721:221::-;14797:7;18064:16;;;:7;:16;;;;;;-1:-1:-1;;;;;18064:16:0;14817:73;;;;-1:-1:-1;;;14817:73:0;;14465:2:1;14817:73:0;;;14447:21:1;14504:2;14484:18;;;14477:30;14543:34;14523:18;;;14516:62;-1:-1:-1;;;14594:18:1;;;14587:42;14646:19;;14817:73:0;;;;;;;;;-1:-1:-1;14910:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;14910:24:0;;14721:221::o;14244:411::-;14325:13;14341:23;14356:7;14341:14;:23::i;:::-;14325:39;;14389:5;-1:-1:-1;;;;;14383:11:0;:2;-1:-1:-1;;;;;14383:11:0;;;14375:57;;;;-1:-1:-1;;;14375:57:0;;16906:2:1;14375:57:0;;;16888:21:1;16945:2;16925:18;;;16918:30;16984:34;16964:18;;;16957:62;-1:-1:-1;;;17035:18:1;;;17028:31;17076:19;;14375:57:0;16704:397:1;14375:57:0;680:10;-1:-1:-1;;;;;14467:21:0;;;;:62;;-1:-1:-1;14492:37:0;14509:5;680:10;15240:164;:::i;14492:37::-;14445:168;;;;-1:-1:-1;;;14445:168:0;;11731:2:1;14445:168:0;;;11713:21:1;11770:2;11750:18;;;11743:30;11809:34;11789:18;;;11782:62;11880:26;11860:18;;;11853:54;11924:19;;14445:168:0;11529:420:1;14445:168:0;14626:21;14635:2;14639:7;14626:8;:21::i;:::-;14314:341;14244:411;;:::o;15471:339::-;15666:41;680:10;15699:7;15666:18;:41::i;:::-;15658:103;;;;-1:-1:-1;;;15658:103:0;;;;;;;:::i;:::-;15774:28;15784:4;15790:2;15794:7;15774:9;:28::i;39349:238::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;39444:1:::1;39416:17;39410:31;;;;;:::i;:::-;;;:35;39402:104;;;;-1:-1:-1::0;;;39402:104:0::1;;;;;;;:::i;:::-;39519:11;:19:::0;;::::1;-1:-1:-1::0;;39519:19:0;::::1;39566:13:::0;;::::1;39519:19;39566:13;39565:14;39549:30;-1:-1:-1::0;;39549:30:0;;;::::1;::::0;;39349:238::o;39065:236::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;39160:1:::1;39132:17;39126:31;;;;;:::i;:::-;;;:35;39118:104;;;;-1:-1:-1::0;;;39118:104:0::1;;;;;;;:::i;:::-;39250:11;::::0;;-1:-1:-1;;39250:11:0::1;::::0;::::1;39249:12;39272:21:::0;-1:-1:-1;;39272:21:0;;;;;;39065:236::o;35891:638::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;35987:1:::1;35959:17;35953:31;;;;;:::i;:::-;;;:35;35945:119;;;;-1:-1:-1::0;;;35945:119:0::1;;;;;;;:::i;:::-;36084:18;::::0;;;::::1;;;36083:19;36075:91;;;::::0;-1:-1:-1;;;36075:91:0;;13747:2:1;36075:91:0::1;::::0;::::1;13729:21:1::0;13786:2;13766:18;;;13759:30;13825;13805:18;;;13798:58;13873:18;;36075:91:0::1;13545:352:1::0;36075:91:0::1;34955:4;35107:3;36185:11;;:27;;;;:::i;:::-;:42;;36177:101;;;::::0;-1:-1:-1;;;36177:101:0;;11324:2:1;36177:101:0::1;::::0;::::1;11306:21:1::0;11363:2;11343:18;;;11336:30;11402:34;11382:18;;;11375:62;-1:-1:-1;;;11453:18:1;;;11446:36;11499:19;;36177:101:0::1;11122:402:1::0;36177:101:0::1;36296:9;36291:111;35107:3;36311:1;:17;36291:111;;;36360:12;::::0;36374:11:::1;::::0;36350:40:::1;::::0;36360:12;;::::1;-1:-1:-1::0;;;;;36360:12:0::1;::::0;36374:15:::1;::::0;36388:1;;36374:15:::1;:::i;:::-;36350:9;:40::i;:::-;36330:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36291:111;;;;35107:3;36414:11;;:28;;;;;;;:::i;:::-;;;;;;;;35107:3;36453:13;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;36496:18:0::1;:25:::0;;-1:-1:-1;;36496:25:0::1;::::0;::::1;::::0;;35891:638::o;40325:140::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;40420:37:::1;::::0;40388:21:::1;::::0;40428:10:::1;::::0;40420:37;::::1;;;::::0;40388:21;;40373:12:::1;40420:37:::0;40373:12;40420:37;40388:21;40428:10;40420:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40362:103;40325:140::o:0;15881:185::-;16019:39;16036:4;16042:2;16046:7;16019:39;;;;;;;;;;;;:16;:39::i;38829:228::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;38918:17:::1;38912:31;;;;;:::i;:::-;:36:::0;;-1:-1:-1;38904:102:0::1;;;::::0;-1:-1:-1;;;38904:102:0;;7825:2:1;38904:102:0::1;::::0;::::1;7807:21:1::0;7864:2;7844:18;;;7837:30;7903:34;7883:18;;;7876:62;-1:-1:-1;;;7954:18:1;;;7947:51;8015:19;;38904:102:0::1;7623:417:1::0;38904:102:0::1;39019:30:::0;;::::1;::::0;:17:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;40000:88::-:0;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;40067:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;12856:239::-:0;12928:7;12964:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12964:16:0;12999:19;12991:73;;;;-1:-1:-1;;;12991:73:0;;12926:2:1;12991:73:0;;;12908:21:1;12965:2;12945:18;;;12938:30;13004:34;12984:18;;;12977:62;-1:-1:-1;;;13055:18:1;;;13048:39;13104:19;;12991:73:0;12724:405:1;34865:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12586:208::-;12658:7;-1:-1:-1;;;;;12686:19:0;;12678:74;;;;-1:-1:-1;;;12678:74:0;;12515:2:1;12678:74:0;;;12497:21:1;12554:2;12534:18;;;12527:30;12593:34;12573:18;;;12566:62;-1:-1:-1;;;12644:18:1;;;12637:40;12694:19;;12678:74:0;12313:406:1;12678:74:0;-1:-1:-1;;;;;;12770:16:0;;;;;:9;:16;;;;;;;12586:208::o;2384:103::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;2449:30:::1;2476:1;2449:18;:30::i;:::-;2384:103::o:0;39631:261::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;39723:1:::1;39695:17;39689:31;;;;;:::i;:::-;;;:35;39681:104;;;;-1:-1:-1::0;;;39681:104:0::1;;;;;;;:::i;:::-;39798:11;:19:::0;;39874:10;-1:-1:-1;;39828:21:0;;39874:10;;::::1;39798:19;39874:10;39873:11;39860:24;-1:-1:-1::0;;39860:24:0;;;::::1;::::0;;39631:261::o;34778:31::-;;;;;;;:::i;13331:104::-;13387:13;13420:7;13413:14;;;;;:::i;38150:636::-;38221:10;;;;;;;38213:90;;;;-1:-1:-1;;;38213:90:0;;10130:2:1;38213:90:0;;;10112:21:1;10169:2;10149:18;;;10142:30;10208:29;10188:18;;;10181:57;10255:18;;38213:90:0;9928:351:1;38213:90:0;38338:1;38322:13;:17;:38;;;;;38359:1;38343:13;:17;38322:38;38314:86;;;;-1:-1:-1;;;38314:86:0;;17726:2:1;38314:86:0;;;17708:21:1;17765:2;17745:18;;;17738:30;17804:25;17784:18;;;17777:53;17847:18;;38314:86:0;17524:347:1;38314:86:0;34955:4;38433:13;38419:11;;:27;;;;:::i;:::-;:42;;38411:105;;;;-1:-1:-1;;;38411:105:0;;;;;;;:::i;:::-;38560:9;38535:21;38543:13;35151:11;38535:21;:::i;:::-;:34;38527:94;;;;-1:-1:-1;;;38527:94:0;;9770:2:1;38527:94:0;;;9752:21:1;9809:2;9789:18;;;9782:30;9848:33;9828:18;;;9821:61;9899:18;;38527:94:0;9568:355:1;38527:94:0;38638:9;38634:104;38653:13;38649:1;:17;38634:104;;;38688:38;38698:10;38724:1;38710:11;;:15;;;;:::i;38688:38::-;38668:3;;;;:::i;:::-;;;;38634:104;;;;38765:13;38750:11;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;;38150:636:0:o;15014:155::-;15109:52;680:10;15142:8;15152;15109:18;:52::i;16137:328::-;16312:41;680:10;16345:7;16312:18;:41::i;:::-;16304:103;;;;-1:-1:-1;;;16304:103:0;;;;;;;:::i;:::-;16418:39;16432:4;16438:2;16442:7;16451:5;16418:13;:39::i;:::-;16137:328;;;;:::o;13506:334::-;18040:4;18064:16;;;:7;:16;;;;;;13579:13;;-1:-1:-1;;;;;18064:16:0;13605:76;;;;-1:-1:-1;;;13605:76:0;;15649:2:1;13605:76:0;;;15631:21:1;15688:2;15668:18;;;15661:30;15727:34;15707:18;;;15700:62;-1:-1:-1;;;15778:18:1;;;15771:45;15833:19;;13605:76:0;15447:411:1;13605:76:0;13694:21;13718:10;:8;:10::i;:::-;13694:34;;13770:1;13752:7;13746:21;:25;:86;;;;;;;;;;;;;;;;;13798:7;13807:18;:7;:16;:18::i;:::-;13781:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13746:86;13739:93;13506:334;-1:-1:-1;;;13506:334:0:o;36576:721::-;36625:11;;;;36617:104;;;;-1:-1:-1;;;36617:104:0;;7000:2:1;36617:104:0;;;6982:21:1;7039:2;7019:18;;;7012:30;7078:34;7058:18;;;7051:62;-1:-1:-1;;;7129:18:1;;;7122:35;7174:19;;36617:104:0;6798:401:1;36617:104:0;36756:10;36741:26;;;;:14;:26;;;;;;;;36740:27;36732:110;;;;-1:-1:-1;;;36732:110:0;;16065:2:1;36732:110:0;;;16047:21:1;16104:2;16084:18;;;16077:30;16143:34;16123:18;;;16116:62;-1:-1:-1;;;16194:18:1;;;16187:41;16245:19;;36732:110:0;15863:407:1;36732:110:0;34955:4;36861:11;;36875:1;36861:15;;;;:::i;:::-;:30;;36853:121;;;;-1:-1:-1;;;36853:121:0;;6099:2:1;36853:121:0;;;6081:21:1;6138:2;6118:18;;;6111:30;6177:34;6157:18;;;6150:62;-1:-1:-1;;;6228:18:1;;;6221:52;6290:19;;36853:121:0;5897:418:1;36853:121:0;35058:2;36993:11;;37007:1;36993:15;;;;:::i;:::-;:36;;36985:127;;;;-1:-1:-1;;;36985:127:0;;16477:2:1;36985:127:0;;;16459:21:1;16516:2;16496:18;;;16489:30;16555:34;16535:18;;;16528:62;16626:30;16606:18;;;16599:58;16674:19;;36985:127:0;16275:424:1;36985:127:0;37125:35;37136:10;37148:11;;37125:9;:35::i;:::-;37186:1;37171:11;;:16;;;;;;;:::i;:::-;;;;;;;;37213:1;37198:11;;:16;;;;;;;:::i;:::-;;;;;;;;37242:1;37225:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;37271:10:0;37256:26;;;;:14;:26;;;;;:33;;-1:-1:-1;;37256:33:0;37285:4;37256:33;;;36576:721::o;2642:201::-;1806:6;;-1:-1:-1;;;;;1806:6:0;680:10;1953:23;1945:68;;;;-1:-1:-1;;;1945:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2731:22:0;::::1;2723:73;;;::::0;-1:-1:-1;;;2723:73:0;;8247:2:1;2723:73:0::1;::::0;::::1;8229:21:1::0;8286:2;8266:18;;;8259:30;8325:34;8305:18;;;8298:62;-1:-1:-1;;;8376:18:1;;;8369:36;8422:19;;2723:73:0::1;8045:402:1::0;2723:73:0::1;2807:28;2826:8;2807:18;:28::i;:::-;2642:201:::0;:::o;37370:734::-;37448:13;;;;;;;37440:93;;;;-1:-1:-1;;;37440:93:0;;12156:2:1;37440:93:0;;;12138:21:1;12195:2;12175:18;;;12168:30;12234:32;12214:18;;;12207:60;12284:18;;37440:93:0;11954:354:1;37440:93:0;34955:4;37566:13;37552:11;;:27;;;;:::i;:::-;:42;;37544:105;;;;-1:-1:-1;;;37544:105:0;;;;;;;:::i;:::-;35004:3;37684:13;37668;;:29;;;;:::i;:::-;:44;;37660:132;;;;-1:-1:-1;;;37660:132:0;;6522:2:1;37660:132:0;;;6504:21:1;6561:2;6541:18;;;6534:30;6600:34;6580:18;;;6573:62;6671:34;6651:18;;;6644:62;-1:-1:-1;;;6722:19:1;;;6715:36;6768:19;;37660:132:0;6320:473:1;37660:132:0;37844:9;37811:29;37827:13;35209:10;37811:29;:::i;:::-;:42;37803:94;;;;-1:-1:-1;;;37803:94:0;;9770:2:1;37803:94:0;;;9752:21:1;9809:2;9789:18;;;9782:30;9848:33;9828:18;;;9821:61;9899:18;;37803:94:0;9568:355:1;37803:94:0;37914:9;37910:105;37929:13;37925:1;:17;37910:105;;;37963:40;37974:10;38000:1;37986:11;;:15;;;;:::i;37963:40::-;37944:3;;;;:::i;:::-;;;;37910:105;;;;38042:13;38027:11;;:28;;;;;;;:::i;:::-;;;;;;;;38083:13;38066;;:30;;;;;;;:::i;21957:174::-;22032:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;22032:29:0;-1:-1:-1;;;;;22032:29:0;;;;;;;;:24;;22086:23;22032:24;22086:14;:23::i;:::-;-1:-1:-1;;;;;22077:46:0;;;;;;;;;;;21957:174;;:::o;18269:348::-;18362:4;18064:16;;;:7;:16;;;;;;-1:-1:-1;;;;;18064:16:0;18379:73;;;;-1:-1:-1;;;18379:73:0;;10486:2:1;18379:73:0;;;10468:21:1;10525:2;10505:18;;;10498:30;10564:34;10544:18;;;10537:62;-1:-1:-1;;;10615:18:1;;;10608:42;10667:19;;18379:73:0;10284:408:1;18379:73:0;18463:13;18479:23;18494:7;18479:14;:23::i;:::-;18463:39;;18532:5;-1:-1:-1;;;;;18521:16:0;:7;-1:-1:-1;;;;;18521:16:0;;:51;;;;18565:7;-1:-1:-1;;;;;18541:31:0;:20;18553:7;18541:11;:20::i;:::-;-1:-1:-1;;;;;18541:31:0;;18521:51;:87;;;-1:-1:-1;;;;;;15361:25:0;;;15337:4;15361:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;18576:32;18513:96;18269:348;-1:-1:-1;;;;18269:348:0:o;21261:578::-;21420:4;-1:-1:-1;;;;;21393:31:0;:23;21408:7;21393:14;:23::i;:::-;-1:-1:-1;;;;;21393:31:0;;21385:85;;;;-1:-1:-1;;;21385:85:0;;15239:2:1;21385:85:0;;;15221:21:1;15278:2;15258:18;;;15251:30;15317:34;15297:18;;;15290:62;-1:-1:-1;;;15368:18:1;;;15361:39;15417:19;;21385:85:0;15037:405:1;21385:85:0;-1:-1:-1;;;;;21489:16:0;;21481:65;;;;-1:-1:-1;;;21481:65:0;;9011:2:1;21481:65:0;;;8993:21:1;9050:2;9030:18;;;9023:30;9089:34;9069:18;;;9062:62;-1:-1:-1;;;9140:18:1;;;9133:34;9184:19;;21481:65:0;8809:400:1;21481:65:0;21663:29;21680:1;21684:7;21663:8;:29::i;:::-;-1:-1:-1;;;;;21705:15:0;;;;;;:9;:15;;;;;:20;;21724:1;;21705:15;:20;;21724:1;;21705:20;:::i;:::-;;;;-1:-1:-1;;;;;;;21736:13:0;;;;;;:9;:13;;;;;:18;;21753:1;;21736:13;:18;;21753:1;;21736:18;:::i;:::-;;;;-1:-1:-1;;21765:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;21765:21:0;-1:-1:-1;;;;;21765:21:0;;;;;;;;;21804:27;;21765:16;;21804:27;;;;;;;21261:578;;;:::o;18959:110::-;19035:26;19045:2;19049:7;19035:26;;;;;;;;;;;;:9;:26::i;3003:191::-;3096:6;;;-1:-1:-1;;;;;3113:17:0;;;-1:-1:-1;;;;;;3113:17:0;;;;;;;3146:40;;3096:6;;;3113:17;3096:6;;3146:40;;3077:16;;3146:40;3066:128;3003:191;:::o;22273:315::-;22428:8;-1:-1:-1;;;;;22419:17:0;:5;-1:-1:-1;;;;;22419:17:0;;;22411:55;;;;-1:-1:-1;;;22411:55:0;;9416:2:1;22411:55:0;;;9398:21:1;9455:2;9435:18;;;9428:30;9494:27;9474:18;;;9467:55;9539:18;;22411:55:0;9214:349:1;22411:55:0;-1:-1:-1;;;;;22477:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;22477:46:0;;;;;;;;;;22539:41;;5621::1;;;22539::0;;5594:18:1;22539:41:0;;;;;;;22273:315;;;:::o;17347:::-;17504:28;17514:4;17520:2;17524:7;17504:9;:28::i;:::-;17551:48;17574:4;17580:2;17584:7;17593:5;17551:22;:48::i;:::-;17543:111;;;;-1:-1:-1;;;17543:111:0;;;;;;;:::i;40143:100::-;40195:13;40228:7;40221:14;;;;;:::i;32895:723::-;32951:13;33172:10;33168:53;;-1:-1:-1;;33199:10:0;;;;;;;;;;;;-1:-1:-1;;;33199:10:0;;;;;32895:723::o;33168:53::-;33246:5;33231:12;33287:78;33294:9;;33287:78;;33320:8;;;;:::i;:::-;;-1:-1:-1;33343:10:0;;-1:-1:-1;33351:2:0;33343:10;;:::i;:::-;;;33287:78;;;33375:19;33407:6;33397:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33397:17:0;;33375:39;;33425:154;33432:10;;33425:154;;33459:11;33469:1;33459:11;;:::i;:::-;;-1:-1:-1;33528:10:0;33536:2;33528:5;:10;:::i;:::-;33515:24;;:2;:24;:::i;:::-;33502:39;;33485:6;33492;33485:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;33485:56:0;;;;;;;;-1:-1:-1;33556:11:0;33565:2;33556:11;;:::i;:::-;;;33425:154;;19296:321;19426:18;19432:2;19436:7;19426:5;:18::i;:::-;19477:54;19508:1;19512:2;19516:7;19525:5;19477:22;:54::i;:::-;19455:154;;;;-1:-1:-1;;;19455:154:0;;;;;;;:::i;23153:799::-;23308:4;-1:-1:-1;;;;;23329:13:0;;25661:20;25709:8;23325:620;;23365:72;;-1:-1:-1;;;23365:72:0;;-1:-1:-1;;;;;23365:36:0;;;;;:72;;680:10;;23416:4;;23422:7;;23431:5;;23365:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23365:72:0;;;;;;;;-1:-1:-1;;23365:72:0;;;;;;;;;;;;:::i;:::-;;;23361:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23607:13:0;;23603:272;;23650:60;;-1:-1:-1;;;23650:60:0;;;;;;;:::i;23603:272::-;23825:6;23819:13;23810:6;23806:2;23802:15;23795:38;23361:529;-1:-1:-1;;;;;;23488:51:0;-1:-1:-1;;;23488:51:0;;-1:-1:-1;23481:58:0;;23325:620;-1:-1:-1;23929:4:0;23153:799;;;;;;:::o;19953:382::-;-1:-1:-1;;;;;20033:16:0;;20025:61;;;;-1:-1:-1;;;20025:61:0;;14104:2:1;20025:61:0;;;14086:21:1;;;14123:18;;;14116:30;14182:34;14162:18;;;14155:62;14234:18;;20025:61:0;13902:356:1;20025:61:0;18040:4;18064:16;;;:7;:16;;;;;;-1:-1:-1;;;;;18064:16:0;:30;20097:58;;;;-1:-1:-1;;;20097:58:0;;8654:2:1;20097:58:0;;;8636:21:1;8693:2;8673:18;;;8666:30;8732;8712:18;;;8705:58;8780:18;;20097:58:0;8452:352:1;20097:58:0;-1:-1:-1;;;;;20226:13:0;;;;;;:9;:13;;;;;:18;;20243:1;;20226:13;:18;;20243:1;;20226:18;:::i;:::-;;;;-1:-1:-1;;20255:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;20255:21:0;-1:-1:-1;;;;;20255:21:0;;;;;;;;20294:33;;20255:16;;;20294:33;;20255:16;;20294:33;19953:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;979:29;998:9;979:29;:::i;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:52;;;1164:1;1161;1154:12;1116:52;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1019:260;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1284:328;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:53;;;1806:1;1803;1796:12;1757:53;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:50;;;2076:1;2073;2066:12;2030:50;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:55:1;;2181:1;2178;2171:12;2130:55;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1617:666;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2545:60;2624:5;2614:15;;;2288:347;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2640:254:1:o;2899:245::-;2957:6;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;3065:9;3052:23;3084:30;3108:5;3084:30;:::i;3149:249::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:52;;;3287:1;3284;3277:12;3239:52;3319:9;3313:16;3338:30;3362:5;3338:30;:::i;3403:450::-;3472:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:52;;;3541:1;3538;3531:12;3493:52;3581:9;3568:23;3614:18;3606:6;3603:30;3600:50;;;3646:1;3643;3636:12;3600:50;3669:22;;3722:4;3714:13;;3710:27;-1:-1:-1;3700:55:1;;3751:1;3748;3741:12;3700:55;3774:73;3839:7;3834:2;3821:16;3816:2;3812;3808:11;3774:73;:::i;3858:180::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;-1:-1:-1;4009:23:1;;3858:180;-1:-1:-1;3858:180:1:o;4043:257::-;4084:3;4122:5;4116:12;4149:6;4144:3;4137:19;4165:63;4221:6;4214:4;4209:3;4205:14;4198:4;4191:5;4187:16;4165:63;:::i;:::-;4282:2;4261:15;-1:-1:-1;;4257:29:1;4248:39;;;;4289:4;4244:50;;4043:257;-1:-1:-1;;4043:257:1:o;4305:470::-;4484:3;4522:6;4516:13;4538:53;4584:6;4579:3;4572:4;4564:6;4560:17;4538:53;:::i;:::-;4654:13;;4613:16;;;;4676:57;4654:13;4613:16;4710:4;4698:17;;4676:57;:::i;:::-;4749:20;;4305:470;-1:-1:-1;;;;4305:470:1:o;4988:488::-;-1:-1:-1;;;;;5257:15:1;;;5239:34;;5309:15;;5304:2;5289:18;;5282:43;5356:2;5341:18;;5334:34;;;5404:3;5399:2;5384:18;;5377:31;;;5182:4;;5425:45;;5450:19;;5442:6;5425:45;:::i;:::-;5417:53;4988:488;-1:-1:-1;;;;;;4988:488:1:o;5673:219::-;5822:2;5811:9;5804:21;5785:4;5842:44;5882:2;5871:9;5867:18;5859:6;5842:44;:::i;7204:414::-;7406:2;7388:21;;;7445:2;7425:18;;;7418:30;7484:34;7479:2;7464:18;;7457:62;-1:-1:-1;;;7550:2:1;7535:18;;7528:48;7608:3;7593:19;;7204:414::o;10697:420::-;10899:2;10881:21;;;10938:2;10918:18;;;10911:30;10977:34;10972:2;10957:18;;10950:62;11048:26;11043:2;11028:18;;11021:54;11107:3;11092:19;;10697:420::o;13134:406::-;13336:2;13318:21;;;13375:2;13355:18;;;13348:30;13414:34;13409:2;13394:18;;13387:62;-1:-1:-1;;;13480:2:1;13465:18;;13458:40;13530:3;13515:19;;13134:406::o;14676:356::-;14878:2;14860:21;;;14897:18;;;14890:30;14956:34;14951:2;14936:18;;14929:62;15023:2;15008:18;;14676:356::o;17106:413::-;17308:2;17290:21;;;17347:2;17327:18;;;17320:30;17386:34;17381:2;17366:18;;17359:62;-1:-1:-1;;;17452:2:1;17437:18;;17430:47;17509:3;17494:19;;17106:413::o;18058:128::-;18098:3;18129:1;18125:6;18122:1;18119:13;18116:39;;;18135:18;;:::i;:::-;-1:-1:-1;18171:9:1;;18058:128::o;18191:120::-;18231:1;18257;18247:35;;18262:18;;:::i;:::-;-1:-1:-1;18296:9:1;;18191:120::o;18316:168::-;18356:7;18422:1;18418;18414:6;18410:14;18407:1;18404:21;18399:1;18392:9;18385:17;18381:45;18378:71;;;18429:18;;:::i;:::-;-1:-1:-1;18469:9:1;;18316:168::o;18489:125::-;18529:4;18557:1;18554;18551:8;18548:34;;;18562:18;;:::i;:::-;-1:-1:-1;18599:9:1;;18489:125::o;18619:258::-;18691:1;18701:113;18715:6;18712:1;18709:13;18701:113;;;18791:11;;;18785:18;18772:11;;;18765:39;18737:2;18730:10;18701:113;;;18832:6;18829:1;18826:13;18823:48;;;-1:-1:-1;;18867:1:1;18849:16;;18842:27;18619:258::o;18882:380::-;18961:1;18957:12;;;;19004;;;19025:61;;19079:4;19071:6;19067:17;19057:27;;19025:61;19132:2;19124:6;19121:14;19101:18;19098:38;19095:161;;;19178:10;19173:3;19169:20;19166:1;19159:31;19213:4;19210:1;19203:15;19241:4;19238:1;19231:15;19095:161;;18882:380;;;:::o;19267:135::-;19306:3;-1:-1:-1;;19327:17:1;;19324:43;;;19347:18;;:::i;:::-;-1:-1:-1;19394:1:1;19383:13;;19267:135::o;19407:112::-;19439:1;19465;19455:35;;19470:18;;:::i;:::-;-1:-1:-1;19504:9:1;;19407:112::o;19524:127::-;19585:10;19580:3;19576:20;19573:1;19566:31;19616:4;19613:1;19606:15;19640:4;19637:1;19630:15;19656:127;19717:10;19712:3;19708:20;19705:1;19698:31;19748:4;19745:1;19738:15;19772:4;19769:1;19762:15;19788:127;19849:10;19844:3;19840:20;19837:1;19830:31;19880:4;19877:1;19870:15;19904:4;19901:1;19894:15;19920:127;19981:10;19976:3;19972:20;19969:1;19962:31;20012:4;20009:1;20002:15;20036:4;20033:1;20026:15;20052:131;-1:-1:-1;;;;;;20126:32:1;;20116:43;;20106:71;;20173:1;20170;20163:12

Swarm Source

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