ETH Price: $2,956.59 (-5.26%)
Gas: 8 Gwei

Token

Oilys (OILYS)
 

Overview

Max Total Supply

308 OILYS

Holders

209

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
lateniteninja.eth
Balance
2 OILYS
0xf116569b3f888d639372a5485685a6d8ee28a593
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

- Oilys is a 1/1 hand-drawn collection by Logan Larkin. - [Oilys Skulls Collection](https://opensea.io/collection/oilys)

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Oily

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 11 of 13: Oily.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.0;

import "./ERC721Enumerable.sol";
import "./Ownable.sol";

contract Oily is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    
    mapping (address => bool) public presaleWhitelist;
    uint256 public _price = 0.1 ether;
    uint256 private _remaining_airdrops = 200;
    // uint256 private _extra = 100;
    phases public phase;

    enum phases {
        INIT,
        PRESALE,
        OPEN
    }

    
    address constant LOGAN = 0x8b5B9497e096ee6FfD6041D1Db37a2ac2b41AB0d;
    address constant DD0SXX = 0xd491e93c6b05e3cdA3073482a5651BCFe3DC1cc7;

    constructor(string memory baseURI) ERC721("Oilys", "OILYS") {
        setBaseURI(baseURI);
        phase = phases.INIT;
        // team gets the first 2 Oilys
        _safeMint( LOGAN, 1);
        _safeMint( DD0SXX, 2);
        _remaining_airdrops -= 2;
    }

    
    function initPresaleWhitelist (address[200] memory whitelist) external onlyOwner {
        require (whitelist.length == 200, 'whitelist must have a length of 200');
        for (uint i; i < whitelist.length; i++) {
            presaleWhitelist[whitelist[i]] = true;
        }
    }

    
    function mintPresale() external payable {
        uint256 supply = totalSupply();
        require( phase == phases.PRESALE,                    "Phase is not presale" );
        require( presaleWhitelist[msg.sender] == true,      
            "You are not on the presale whitelist or have already claimed your oily");
        require( supply <= 300,                       "Exceeds maximum Oilys supply" );
        require( msg.value >= _price,                   "Ether sent is not correct" );

        presaleWhitelist[msg.sender] = false;
        _safeMint( msg.sender, supply + 1 );
    }

    
    function mint(uint256 num) external payable {
        uint256 supply = totalSupply();
        require( phase == phases.OPEN,                          "Phase is not open" );
        require( num <= 3,                      "You can mint a maximum of 3 Oilys" );
        require( supply + num <= 300,                 "Exceeds maximum Oilys supply" );
        require( msg.value >= _price * num,             "Ether sent is not correct" );

        for(uint256 i = 1; i <= num; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    
    function airdrop(address _to, uint256 _amount) external onlyOwner {
        require( _amount <= _remaining_airdrops, "Exceeds reserved Oily supply" );
        require(_to != address(0), 'cannot giveaway to address(0)');

        uint256 supply = totalSupply();

        _remaining_airdrops -= _amount;

        for(uint256 i = 1; i <= _amount; i++) {
            _safeMint( _to, supply + i );
        }
    }

    
    function walletOfOwner(address _walletOwner) external view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_walletOwner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_walletOwner, i);
        }
        return tokensId;
    }

    
    function setPrice(uint256 _newPrice) external onlyOwner() {
        _price = _newPrice;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    
    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory json = ".json";
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), json)) : "";
    }

    
    function changePhaseToPresale() external onlyOwner {
        phase = phases.PRESALE;
    }

    
    function changePhaseToOpen() external onlyOwner {
        require(phase == phases.PRESALE, 'phase must be in presale first');
        phase = phases.OPEN;
    }
    
    function withdrawAll() external onlyOwner {
        require(address(this).balance > 0);
        uint256 _each = address(this).balance / 2;
        (bool status1, ) = payable(LOGAN).call{value: _each}("");
        (bool status2, ) = payable(DD0SXX).call{value: _each}("");
        require(status1 == true && status2 == true, 'withdraw failed');
    }
    
    fallback() external payable {
        revert('You sent ether to this contract without specifying a function');
    }
    receive() external payable {
        revert('You sent ether to this contract without specifying a function');
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

File 2 of 13: Context.sol
// 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;
    }
}

File 3 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 4 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 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(to).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 {}
}

File 5 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 6 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 7 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 9 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

File 10 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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 Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"changePhaseToOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changePhaseToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[200]","name":"whitelist","type":"address[200]"}],"name":"initPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"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":"phase","outputs":[{"internalType":"enum Oily.phases","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"_walletOwner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405267016345785d8a0000600d5560c8600e553480156200002257600080fd5b506040516200656f3803806200656f833981810160405281019062000048919062000f38565b6040518060400160405280600581526020017f4f696c79730000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4f494c59530000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cc92919062000dd3565b508060019080519060200190620000e592919062000dd3565b50505062000108620000fc620001dc60201b60201c565b620001e460201b60201c565b6200011981620002aa60201b60201c565b6000600f60006101000a81548160ff0219169083600281111562000166577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555062000192738b5b9497e096ee6ffd6041d1db37a2ac2b41ab0d60016200035560201b60201c565b620001b973d491e93c6b05e3cda3073482a5651bcfe3dc1cc760026200035560201b60201c565b6002600e6000828254620001ce91906200128a565b9250508190555050620015a2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ba620001dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e06200037b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000330906200117f565b60405180910390fd5b80600b90805190602001906200035192919062000dd3565b5050565b62000377828260405180602001604052806000815250620003a560201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003b783836200041360201b60201c565b620003cc6000848484620005f960201b60201c565b6200040e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040590620010f7565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047d906200115d565b60405180910390fd5b6200049781620007b360201b60201c565b15620004da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d19062001119565b60405180910390fd5b620004ee600083836200081f60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054091906200122d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006278473ffffffffffffffffffffffffffffffffffffffff166200096660201b6200214b1760201c565b15620007a6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000659620001dc60201b60201c565b8786866040518563ffffffff1660e01b81526004016200067d9493929190620010a3565b602060405180830381600087803b1580156200069857600080fd5b505af1925050508015620006cc57506040513d601f19601f82011682018060405250810190620006c9919062000f0c565b60015b62000755573d8060008114620006ff576040519150601f19603f3d011682016040523d82523d6000602084013e62000704565b606091505b506000815114156200074d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074490620010f7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007ab565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008378383836200097960201b6200215e1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000884576200087e816200097e60201b60201c565b620008cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008cb57620008ca8382620009c760201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200091957620009138162000b4460201b60201c565b62000961565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000960576200095f828262000c8c60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009e18462000d1860201b620012731760201c565b620009ed91906200128a565b905060006007600084815260200190815260200160002054905081811462000ad3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b5a91906200128a565b905060006009600084815260200190815260200160002054905060006008838154811062000bb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000bfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c70577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000ca48362000d1860201b620012731760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d83906200113b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000de19062001365565b90600052602060002090601f01602090048101928262000e05576000855562000e51565b82601f1062000e2057805160ff191683800117855562000e51565b8280016001018555821562000e51579182015b8281111562000e5057825182559160200191906001019062000e33565b5b50905062000e60919062000e64565b5090565b5b8082111562000e7f57600081600090555060010162000e65565b5090565b600062000e9a62000e9484620011ca565b620011a1565b90508281526020810184848401111562000eb357600080fd5b62000ec08482856200132f565b509392505050565b60008151905062000ed98162001588565b92915050565b600082601f83011262000ef157600080fd5b815162000f0384826020860162000e83565b91505092915050565b60006020828403121562000f1f57600080fd5b600062000f2f8482850162000ec8565b91505092915050565b60006020828403121562000f4b57600080fd5b600082015167ffffffffffffffff81111562000f6657600080fd5b62000f748482850162000edf565b91505092915050565b62000f8881620012c5565b82525050565b600062000f9b8262001200565b62000fa781856200120b565b935062000fb98185602086016200132f565b62000fc4816200145e565b840191505092915050565b600062000fde6032836200121c565b915062000feb826200146f565b604082019050919050565b600062001005601c836200121c565b91506200101282620014be565b602082019050919050565b60006200102c602a836200121c565b91506200103982620014e7565b604082019050919050565b6000620010536020836200121c565b9150620010608262001536565b602082019050919050565b60006200107a6020836200121c565b915062001087826200155f565b602082019050919050565b6200109d8162001325565b82525050565b6000608082019050620010ba600083018762000f7d565b620010c9602083018662000f7d565b620010d8604083018562001092565b8181036060830152620010ec818462000f8e565b905095945050505050565b60006020820190508181036000830152620011128162000fcf565b9050919050565b60006020820190508181036000830152620011348162000ff6565b9050919050565b6000602082019050818103600083015262001156816200101d565b9050919050565b60006020820190508181036000830152620011788162001044565b9050919050565b600060208201905081810360008301526200119a816200106b565b9050919050565b6000620011ad620011c0565b9050620011bb82826200139b565b919050565b6000604051905090565b600067ffffffffffffffff821115620011e857620011e76200142f565b5b620011f3826200145e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200123a8262001325565b9150620012478362001325565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200127f576200127e620013d1565b5b828201905092915050565b6000620012978262001325565b9150620012a48362001325565b925082821015620012ba57620012b9620013d1565b5b828203905092915050565b6000620012d28262001305565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200134f57808201518184015260208101905062001332565b838111156200135f576000848401525b50505050565b600060028204905060018216806200137e57607f821691505b6020821081141562001395576200139462001400565b5b50919050565b620013a6826200145e565b810181811067ffffffffffffffff82111715620013c857620013c76200142f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200159381620012d9565b81146200159f57600080fd5b50565b614fbd80620015b26000396000f3fe6080604052600436106101e75760003560e01c806370a0823111610102578063a22cb46511610095578063db59969811610064578063db59969814610735578063e985e9c51461073f578063eb8835ab1461077c578063f2fde38b146107b957610227565b8063a22cb4651461067b578063b1c9fe6e146106a4578063b88d4fde146106cf578063c87b56dd146106f857610227565b80638da5cb5b116100d15780638da5cb5b146105e057806391b7f5ed1461060b57806395d89b4114610634578063a0712d681461065f57610227565b806370a082311461054c578063715018a614610589578063853828b6146105a05780638ba4cc3c146105b757610227565b80632f745c591161017a578063452299331161014957806345229933146104805780634f6ccce7146104a957806355f804b3146104e65780636352211e1461050f57610227565b80632f745c59146103c657806337e118971461040357806342842e0e1461041a578063438b63001461044357610227565b806318160ddd116101b657806318160ddd146103305780632077bae11461035b578063235b6ea11461037257806323b872dd1461039d57610227565b806301ffc9a71461026257806306fdde031461029f578063081812fc146102ca578063095ea7b31461030757610227565b36610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021e906141bc565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610259906141bc565b60405180910390fd5b34801561026e57600080fd5b5061028960048036038101906102849190613718565b6107e2565b6040516102969190613e44565b60405180910390f35b3480156102ab57600080fd5b506102b461085c565b6040516102c19190613e7a565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906137ab565b6108ee565b6040516102fe9190613dbb565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906136b2565b610973565b005b34801561033c57600080fd5b50610345610a8b565b604051610352919061425c565b60405180910390f35b34801561036757600080fd5b50610370610a98565b005b34801561037e57600080fd5b50610387610b67565b604051610394919061425c565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906135ac565b610b6d565b005b3480156103d257600080fd5b506103ed60048036038101906103e891906136b2565b610bcd565b6040516103fa919061425c565b60405180910390f35b34801561040f57600080fd5b50610418610c72565b005b34801561042657600080fd5b50610441600480360381019061043c91906135ac565b610e03565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613547565b610e23565b6040516104779190613e22565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906136ee565b610f1d565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906137ab565b611094565b6040516104dd919061425c565b60405180910390f35b3480156104f257600080fd5b5061050d6004803603810190610508919061376a565b61112b565b005b34801561051b57600080fd5b50610536600480360381019061053191906137ab565b6111c1565b6040516105439190613dbb565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613547565b611273565b604051610580919061425c565b60405180910390f35b34801561059557600080fd5b5061059e61132b565b005b3480156105ac57600080fd5b506105b56113b3565b005b3480156105c357600080fd5b506105de60048036038101906105d991906136b2565b6115a9565b005b3480156105ec57600080fd5b506105f561173b565b6040516106029190613dbb565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906137ab565b611765565b005b34801561064057600080fd5b506106496117eb565b6040516106569190613e7a565b60405180910390f35b610679600480360381019061067491906137ab565b61187d565b005b34801561068757600080fd5b506106a2600480360381019061069d9190613676565b611a69565b005b3480156106b057600080fd5b506106b9611bea565b6040516106c69190613e5f565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f191906135fb565b611bfd565b005b34801561070457600080fd5b5061071f600480360381019061071a91906137ab565b611c5f565b60405161072c9190613e7a565b60405180910390f35b61073d611d43565b005b34801561074b57600080fd5b5061076660048036038101906107619190613570565b611f9f565b6040516107739190613e44565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613547565b612033565b6040516107b09190613e44565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db9190613547565b612053565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610855575061085482612163565b5b9050919050565b60606000805461086b9061459b565b80601f01602080910402602001604051908101604052809291908181526020018280546108979061459b565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f982612245565b610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906140dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097e826111c1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e69061417c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0e6122b1565b73ffffffffffffffffffffffffffffffffffffffff161480610a3d5750610a3c81610a376122b1565b611f9f565b5b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061405c565b60405180910390fd5b610a8683836122b9565b505050565b6000600880549050905090565b610aa06122b1565b73ffffffffffffffffffffffffffffffffffffffff16610abe61173b565b73ffffffffffffffffffffffffffffffffffffffff1614610b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0b906140fc565b60405180910390fd5b6001600f60006101000a81548160ff02191690836002811115610b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b600d5481565b610b7e610b786122b1565b82612372565b610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906141dc565b60405180910390fd5b610bc8838383612450565b505050565b6000610bd883611273565b8210610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090613edc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c7a6122b1565b73ffffffffffffffffffffffffffffffffffffffff16610c9861173b565b73ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906140fc565b60405180910390fd5b60016002811115610d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600f60009054906101000a900460ff166002811115610d70577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613ffc565b60405180910390fd5b6002600f60006101000a81548160ff02191690836002811115610dfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b610e1e83838360405180602001604052806000815250611bfd565b505050565b60606000610e3083611273565b905060008167ffffffffffffffff811115610e74577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610ea25781602001602082028036833780820191505090505b50905060005b82811015610f1257610eba8582610bcd565b828281518110610ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610f0a906145fe565b915050610ea8565b508092505050919050565b610f256122b1565b73ffffffffffffffffffffffffffffffffffffffff16610f4361173b565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906140fc565b60405180910390fd5b60c88014610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390613e9c565b60405180910390fd5b60005b60c8811015611090576001600c6000848460c88110611027577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611088906145fe565b915050610fdf565b5050565b600061109e610a8b565b82106110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906141fc565b60405180910390fd5b60088281548110611119577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6111336122b1565b73ffffffffffffffffffffffffffffffffffffffff1661115161173b565b73ffffffffffffffffffffffffffffffffffffffff16146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906140fc565b60405180910390fd5b80600b90805190602001906111bd9291906132e1565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112619061409c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db9061407c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113336122b1565b73ffffffffffffffffffffffffffffffffffffffff1661135161173b565b73ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e906140fc565b60405180910390fd5b6113b160006126ac565b565b6113bb6122b1565b73ffffffffffffffffffffffffffffffffffffffff166113d961173b565b73ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906140fc565b60405180910390fd5b6000471161143c57600080fd5b600060024761144b9190614401565b90506000738b5b9497e096ee6ffd6041d1db37a2ac2b41ab0d73ffffffffffffffffffffffffffffffffffffffff168260405161148790613da6565b60006040518083038185875af1925050503d80600081146114c4576040519150601f19603f3d011682016040523d82523d6000602084013e6114c9565b606091505b50509050600073d491e93c6b05e3cda3073482a5651bcfe3dc1cc773ffffffffffffffffffffffffffffffffffffffff168360405161150790613da6565b60006040518083038185875af1925050503d8060008114611544576040519150601f19603f3d011682016040523d82523d6000602084013e611549565b606091505b5050905060011515821515148015611565575060011515811515145b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b9061423c565b60405180910390fd5b505050565b6115b16122b1565b73ffffffffffffffffffffffffffffffffffffffff166115cf61173b565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c906140fc565b60405180910390fd5b600e5481111561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190613f9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613ebc565b60405180910390fd5b60006116e4610a8b565b905081600e60008282546116f8919061448c565b925050819055506000600190505b8281116117355761172284828461171d91906143ab565b612772565b808061172d906145fe565b915050611706565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61176d6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661178b61173b565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906140fc565b60405180910390fd5b80600d8190555050565b6060600180546117fa9061459b565b80601f01602080910402602001604051908101604052809291908181526020018280546118269061459b565b80156118735780601f1061184857610100808354040283529160200191611873565b820191906000526020600020905b81548152906001019060200180831161185657829003601f168201915b5050505050905090565b6000611887610a8b565b90506002808111156118c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600f60009054906101000a900460ff16600281111561190a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461194a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119419061421c565b60405180910390fd5b600382111561198e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119859061403c565b60405180910390fd5b61012c828261199d91906143ab565b11156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d59061413c565b60405180910390fd5b81600d546119ec9190614432565b341015611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a259061419c565b60405180910390fd5b6000600190505b828111611a6457611a51338284611a4c91906143ab565b612772565b8080611a5c906145fe565b915050611a35565b505050565b611a716122b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613f7c565b60405180910390fd5b8060056000611aec6122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b996122b1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bde9190613e44565b60405180910390a35050565b600f60009054906101000a900460ff1681565b611c0e611c086122b1565b83612372565b611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c44906141dc565b60405180910390fd5b611c5984848484612790565b50505050565b6060611c6a82612245565b611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061415c565b60405180910390fd5b60006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000611ced6127ec565b90506000815111611d0d5760405180602001604052806000815250611d3a565b80611d178561287e565b83604051602001611d2a93929190613d75565b6040516020818303038152906040525b92505050919050565b6000611d4d610a8b565b905060016002811115611d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600f60009054906101000a900460ff166002811115611dd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890613fdc565b60405180910390fd5b60011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b9061401c565b60405180910390fd5b61012c811115611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061413c565b60405180910390fd5b600d54341015611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f259061419c565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f9c33600183611f9791906143ab565b612772565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b61205b6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661207961173b565b73ffffffffffffffffffffffffffffffffffffffff16146120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906140fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613f1c565b60405180910390fd5b612148816126ac565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061222e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061223e575061223d82612a2b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661232c836111c1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061237d82612245565b6123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b390613fbc565b60405180910390fd5b60006123c7836111c1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061243657508373ffffffffffffffffffffffffffffffffffffffff1661241e846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b8061244757506124468185611f9f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612470826111c1565b73ffffffffffffffffffffffffffffffffffffffff16146124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd9061411c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d90613f5c565b60405180910390fd5b612541838383612a95565b61254c6000826122b9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259c919061448c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f391906143ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61278c828260405180602001604052806000815250612ba9565b5050565b61279b848484612450565b6127a784848484612c04565b6127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90613efc565b60405180910390fd5b50505050565b6060600b80546127fb9061459b565b80601f01602080910402602001604051908101604052809291908181526020018280546128279061459b565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b5050505050905090565b606060008214156128c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a26565b600082905060005b600082146128f85780806128e1906145fe565b915050600a826128f19190614401565b91506128ce565b60008167ffffffffffffffff81111561293a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561296c5781602001600182028036833780820191505090505b5090505b60008514612a1f57600182612985919061448c565b9150600a856129949190614647565b60306129a091906143ab565b60f81b8183815181106129dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a189190614401565b9450612970565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612aa083838361215e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ae357612ade81612d9b565b612b22565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b2157612b208382612de4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b6557612b6081612f51565b612ba4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ba357612ba28282613094565b5b5b505050565b612bb38383613113565b612bc06000848484612c04565b612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690613efc565b60405180910390fd5b505050565b6000612c258473ffffffffffffffffffffffffffffffffffffffff1661214b565b15612d8e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c4e6122b1565b8786866040518563ffffffff1660e01b8152600401612c709493929190613dd6565b602060405180830381600087803b158015612c8a57600080fd5b505af1925050508015612cbb57506040513d601f19601f82011682018060405250810190612cb89190613741565b60015b612d3e573d8060008114612ceb576040519150601f19603f3d011682016040523d82523d6000602084013e612cf0565b606091505b50600081511415612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d90613efc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d93565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612df184611273565b612dfb919061448c565b9050600060076000848152602001908152602001600020549050818114612ee0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f65919061448c565b9050600060096000848152602001908152602001600020549050600060088381548110612fbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613003577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613078577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061309f83611273565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a906140bc565b60405180910390fd5b61318c81612245565b156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390613f3c565b60405180910390fd5b6131d860008383612a95565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461322891906143ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132ed9061459b565b90600052602060002090601f01602090048101928261330f5760008555613356565b82601f1061332857805160ff1916838001178555613356565b82800160010185558215613356579182015b8281111561335557825182559160200191906001019061333a565b5b5090506133639190613367565b5090565b5b80821115613380576000816000905550600101613368565b5090565b60006133976133928461429c565b614277565b905080828560208602820111156133ad57600080fd5b60005b858110156133dd57816133c38882613463565b8452602084019350602083019250506001810190506133b0565b5050509392505050565b60006133fa6133f5846142c2565b614277565b90508281526020810184848401111561341257600080fd5b61341d848285614559565b509392505050565b6000613438613433846142f3565b614277565b90508281526020810184848401111561345057600080fd5b61345b848285614559565b509392505050565b60008135905061347281614f2b565b92915050565b600082601f83011261348957600080fd5b60c8613496848285613384565b91505092915050565b6000813590506134ae81614f42565b92915050565b6000813590506134c381614f59565b92915050565b6000815190506134d881614f59565b92915050565b600082601f8301126134ef57600080fd5b81356134ff8482602086016133e7565b91505092915050565b600082601f83011261351957600080fd5b8135613529848260208601613425565b91505092915050565b60008135905061354181614f70565b92915050565b60006020828403121561355957600080fd5b600061356784828501613463565b91505092915050565b6000806040838503121561358357600080fd5b600061359185828601613463565b92505060206135a285828601613463565b9150509250929050565b6000806000606084860312156135c157600080fd5b60006135cf86828701613463565b93505060206135e086828701613463565b92505060406135f186828701613532565b9150509250925092565b6000806000806080858703121561361157600080fd5b600061361f87828801613463565b945050602061363087828801613463565b935050604061364187828801613532565b925050606085013567ffffffffffffffff81111561365e57600080fd5b61366a878288016134de565b91505092959194509250565b6000806040838503121561368957600080fd5b600061369785828601613463565b92505060206136a88582860161349f565b9150509250929050565b600080604083850312156136c557600080fd5b60006136d385828601613463565b92505060206136e485828601613532565b9150509250929050565b6000611900828403121561370157600080fd5b600061370f84828501613478565b91505092915050565b60006020828403121561372a57600080fd5b6000613738848285016134b4565b91505092915050565b60006020828403121561375357600080fd5b6000613761848285016134c9565b91505092915050565b60006020828403121561377c57600080fd5b600082013567ffffffffffffffff81111561379657600080fd5b6137a284828501613508565b91505092915050565b6000602082840312156137bd57600080fd5b60006137cb84828501613532565b91505092915050565b60006137e08383613d57565b60208301905092915050565b6137f5816144c0565b82525050565b600061380682614334565b6138108185614362565b935061381b83614324565b8060005b8381101561384c57815161383388826137d4565b975061383e83614355565b92505060018101905061381f565b5085935050505092915050565b613862816144d2565b82525050565b60006138738261433f565b61387d8185614373565b935061388d818560208601614568565b61389681614763565b840191505092915050565b6138aa81614547565b82525050565b60006138bb8261434a565b6138c5818561438f565b93506138d5818560208601614568565b6138de81614763565b840191505092915050565b60006138f48261434a565b6138fe81856143a0565b935061390e818560208601614568565b80840191505092915050565b600061392760238361438f565b915061393282614774565b604082019050919050565b600061394a601d8361438f565b9150613955826147c3565b602082019050919050565b600061396d602b8361438f565b9150613978826147ec565b604082019050919050565b600061399060328361438f565b915061399b8261483b565b604082019050919050565b60006139b360268361438f565b91506139be8261488a565b604082019050919050565b60006139d6601c8361438f565b91506139e1826148d9565b602082019050919050565b60006139f960248361438f565b9150613a0482614902565b604082019050919050565b6000613a1c60198361438f565b9150613a2782614951565b602082019050919050565b6000613a3f601c8361438f565b9150613a4a8261497a565b602082019050919050565b6000613a62602c8361438f565b9150613a6d826149a3565b604082019050919050565b6000613a8560148361438f565b9150613a90826149f2565b602082019050919050565b6000613aa8601e8361438f565b9150613ab382614a1b565b602082019050919050565b6000613acb60468361438f565b9150613ad682614a44565b606082019050919050565b6000613aee60218361438f565b9150613af982614ab9565b604082019050919050565b6000613b1160388361438f565b9150613b1c82614b08565b604082019050919050565b6000613b34602a8361438f565b9150613b3f82614b57565b604082019050919050565b6000613b5760298361438f565b9150613b6282614ba6565b604082019050919050565b6000613b7a60208361438f565b9150613b8582614bf5565b602082019050919050565b6000613b9d602c8361438f565b9150613ba882614c1e565b604082019050919050565b6000613bc060208361438f565b9150613bcb82614c6d565b602082019050919050565b6000613be360298361438f565b9150613bee82614c96565b604082019050919050565b6000613c06601c8361438f565b9150613c1182614ce5565b602082019050919050565b6000613c29602f8361438f565b9150613c3482614d0e565b604082019050919050565b6000613c4c60218361438f565b9150613c5782614d5d565b604082019050919050565b6000613c6f60198361438f565b9150613c7a82614dac565b602082019050919050565b6000613c92603d8361438f565b9150613c9d82614dd5565b604082019050919050565b6000613cb5600083614384565b9150613cc082614e24565b600082019050919050565b6000613cd860318361438f565b9150613ce382614e27565b604082019050919050565b6000613cfb602c8361438f565b9150613d0682614e76565b604082019050919050565b6000613d1e60118361438f565b9150613d2982614ec5565b602082019050919050565b6000613d41600f8361438f565b9150613d4c82614eee565b602082019050919050565b613d608161453d565b82525050565b613d6f8161453d565b82525050565b6000613d8182866138e9565b9150613d8d82856138e9565b9150613d9982846138e9565b9150819050949350505050565b6000613db182613ca8565b9150819050919050565b6000602082019050613dd060008301846137ec565b92915050565b6000608082019050613deb60008301876137ec565b613df860208301866137ec565b613e056040830185613d66565b8181036060830152613e178184613868565b905095945050505050565b60006020820190508181036000830152613e3c81846137fb565b905092915050565b6000602082019050613e596000830184613859565b92915050565b6000602082019050613e7460008301846138a1565b92915050565b60006020820190508181036000830152613e9481846138b0565b905092915050565b60006020820190508181036000830152613eb58161391a565b9050919050565b60006020820190508181036000830152613ed58161393d565b9050919050565b60006020820190508181036000830152613ef581613960565b9050919050565b60006020820190508181036000830152613f1581613983565b9050919050565b60006020820190508181036000830152613f35816139a6565b9050919050565b60006020820190508181036000830152613f55816139c9565b9050919050565b60006020820190508181036000830152613f75816139ec565b9050919050565b60006020820190508181036000830152613f9581613a0f565b9050919050565b60006020820190508181036000830152613fb581613a32565b9050919050565b60006020820190508181036000830152613fd581613a55565b9050919050565b60006020820190508181036000830152613ff581613a78565b9050919050565b6000602082019050818103600083015261401581613a9b565b9050919050565b6000602082019050818103600083015261403581613abe565b9050919050565b6000602082019050818103600083015261405581613ae1565b9050919050565b6000602082019050818103600083015261407581613b04565b9050919050565b6000602082019050818103600083015261409581613b27565b9050919050565b600060208201905081810360008301526140b581613b4a565b9050919050565b600060208201905081810360008301526140d581613b6d565b9050919050565b600060208201905081810360008301526140f581613b90565b9050919050565b6000602082019050818103600083015261411581613bb3565b9050919050565b6000602082019050818103600083015261413581613bd6565b9050919050565b6000602082019050818103600083015261415581613bf9565b9050919050565b6000602082019050818103600083015261417581613c1c565b9050919050565b6000602082019050818103600083015261419581613c3f565b9050919050565b600060208201905081810360008301526141b581613c62565b9050919050565b600060208201905081810360008301526141d581613c85565b9050919050565b600060208201905081810360008301526141f581613ccb565b9050919050565b6000602082019050818103600083015261421581613cee565b9050919050565b6000602082019050818103600083015261423581613d11565b9050919050565b6000602082019050818103600083015261425581613d34565b9050919050565b60006020820190506142716000830184613d66565b92915050565b6000614281614292565b905061428d82826145cd565b919050565b6000604051905090565b600067ffffffffffffffff8211156142b7576142b6614734565b5b602082029050919050565b600067ffffffffffffffff8211156142dd576142dc614734565b5b6142e682614763565b9050602081019050919050565b600067ffffffffffffffff82111561430e5761430d614734565b5b61431782614763565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143b68261453d565b91506143c18361453d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143f6576143f5614678565b5b828201905092915050565b600061440c8261453d565b91506144178361453d565b925082614427576144266146a7565b5b828204905092915050565b600061443d8261453d565b91506144488361453d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448157614480614678565b5b828202905092915050565b60006144978261453d565b91506144a28361453d565b9250828210156144b5576144b4614678565b5b828203905092915050565b60006144cb8261451d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061451882614f17565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145528261450a565b9050919050565b82818337600083830152505050565b60005b8381101561458657808201518184015260208101905061456b565b83811115614595576000848401525b50505050565b600060028204905060018216806145b357607f821691505b602082108114156145c7576145c6614705565b5b50919050565b6145d682614763565b810181811067ffffffffffffffff821117156145f5576145f4614734565b5b80604052505050565b60006146098261453d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561463c5761463b614678565b5b600182019050919050565b60006146528261453d565b915061465d8361453d565b92508261466d5761466c6146a7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f77686974656c697374206d75737420686176652061206c656e677468206f662060008201527f3230300000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420676976656177617920746f2061646472657373283029000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45786365656473207265736572766564204f696c7920737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5068617365206973206e6f742070726573616c65000000000000000000000000600082015250565b7f7068617365206d75737420626520696e2070726573616c652066697273740000600082015250565b7f596f7520617265206e6f74206f6e207468652070726573616c6520776869746560008201527f6c697374206f72206861766520616c726561647920636c61696d656420796f7560208201527f72206f696c790000000000000000000000000000000000000000000000000000604082015250565b7f596f752063616e206d696e742061206d6178696d756d206f662033204f696c7960008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d204f696c797320737570706c7900000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f596f752073656e7420657468657220746f207468697320636f6e74726163742060008201527f776974686f75742073706563696679696e6720612066756e6374696f6e000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5068617365206973206e6f74206f70656e000000000000000000000000000000600082015250565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b60038110614f2857614f276146d6565b5b50565b614f34816144c0565b8114614f3f57600080fd5b50565b614f4b816144d2565b8114614f5657600080fd5b50565b614f62816144de565b8114614f6d57600080fd5b50565b614f798161453d565b8114614f8457600080fd5b5056fea26469706673582212206033b61b411293310ebb186481b123e59a88f1eb83f5a1a23fe7e1f6afbddb8b64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5579384353654672753464765531636b61434a36666b62565861797845766a517a696657367a7155624278542f00000000000000000000

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806370a0823111610102578063a22cb46511610095578063db59969811610064578063db59969814610735578063e985e9c51461073f578063eb8835ab1461077c578063f2fde38b146107b957610227565b8063a22cb4651461067b578063b1c9fe6e146106a4578063b88d4fde146106cf578063c87b56dd146106f857610227565b80638da5cb5b116100d15780638da5cb5b146105e057806391b7f5ed1461060b57806395d89b4114610634578063a0712d681461065f57610227565b806370a082311461054c578063715018a614610589578063853828b6146105a05780638ba4cc3c146105b757610227565b80632f745c591161017a578063452299331161014957806345229933146104805780634f6ccce7146104a957806355f804b3146104e65780636352211e1461050f57610227565b80632f745c59146103c657806337e118971461040357806342842e0e1461041a578063438b63001461044357610227565b806318160ddd116101b657806318160ddd146103305780632077bae11461035b578063235b6ea11461037257806323b872dd1461039d57610227565b806301ffc9a71461026257806306fdde031461029f578063081812fc146102ca578063095ea7b31461030757610227565b36610227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021e906141bc565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610259906141bc565b60405180910390fd5b34801561026e57600080fd5b5061028960048036038101906102849190613718565b6107e2565b6040516102969190613e44565b60405180910390f35b3480156102ab57600080fd5b506102b461085c565b6040516102c19190613e7a565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec91906137ab565b6108ee565b6040516102fe9190613dbb565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906136b2565b610973565b005b34801561033c57600080fd5b50610345610a8b565b604051610352919061425c565b60405180910390f35b34801561036757600080fd5b50610370610a98565b005b34801561037e57600080fd5b50610387610b67565b604051610394919061425c565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf91906135ac565b610b6d565b005b3480156103d257600080fd5b506103ed60048036038101906103e891906136b2565b610bcd565b6040516103fa919061425c565b60405180910390f35b34801561040f57600080fd5b50610418610c72565b005b34801561042657600080fd5b50610441600480360381019061043c91906135ac565b610e03565b005b34801561044f57600080fd5b5061046a60048036038101906104659190613547565b610e23565b6040516104779190613e22565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a291906136ee565b610f1d565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906137ab565b611094565b6040516104dd919061425c565b60405180910390f35b3480156104f257600080fd5b5061050d6004803603810190610508919061376a565b61112b565b005b34801561051b57600080fd5b50610536600480360381019061053191906137ab565b6111c1565b6040516105439190613dbb565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613547565b611273565b604051610580919061425c565b60405180910390f35b34801561059557600080fd5b5061059e61132b565b005b3480156105ac57600080fd5b506105b56113b3565b005b3480156105c357600080fd5b506105de60048036038101906105d991906136b2565b6115a9565b005b3480156105ec57600080fd5b506105f561173b565b6040516106029190613dbb565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d91906137ab565b611765565b005b34801561064057600080fd5b506106496117eb565b6040516106569190613e7a565b60405180910390f35b610679600480360381019061067491906137ab565b61187d565b005b34801561068757600080fd5b506106a2600480360381019061069d9190613676565b611a69565b005b3480156106b057600080fd5b506106b9611bea565b6040516106c69190613e5f565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f191906135fb565b611bfd565b005b34801561070457600080fd5b5061071f600480360381019061071a91906137ab565b611c5f565b60405161072c9190613e7a565b60405180910390f35b61073d611d43565b005b34801561074b57600080fd5b5061076660048036038101906107619190613570565b611f9f565b6040516107739190613e44565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e9190613547565b612033565b6040516107b09190613e44565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db9190613547565b612053565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610855575061085482612163565b5b9050919050565b60606000805461086b9061459b565b80601f01602080910402602001604051908101604052809291908181526020018280546108979061459b565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f982612245565b610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906140dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097e826111c1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e69061417c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0e6122b1565b73ffffffffffffffffffffffffffffffffffffffff161480610a3d5750610a3c81610a376122b1565b611f9f565b5b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061405c565b60405180910390fd5b610a8683836122b9565b505050565b6000600880549050905090565b610aa06122b1565b73ffffffffffffffffffffffffffffffffffffffff16610abe61173b565b73ffffffffffffffffffffffffffffffffffffffff1614610b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0b906140fc565b60405180910390fd5b6001600f60006101000a81548160ff02191690836002811115610b60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b600d5481565b610b7e610b786122b1565b82612372565b610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb4906141dc565b60405180910390fd5b610bc8838383612450565b505050565b6000610bd883611273565b8210610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090613edc565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c7a6122b1565b73ffffffffffffffffffffffffffffffffffffffff16610c9861173b565b73ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce5906140fc565b60405180910390fd5b60016002811115610d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600f60009054906101000a900460ff166002811115610d70577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da790613ffc565b60405180910390fd5b6002600f60006101000a81548160ff02191690836002811115610dfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b0217905550565b610e1e83838360405180602001604052806000815250611bfd565b505050565b60606000610e3083611273565b905060008167ffffffffffffffff811115610e74577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610ea25781602001602082028036833780820191505090505b50905060005b82811015610f1257610eba8582610bcd565b828281518110610ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610f0a906145fe565b915050610ea8565b508092505050919050565b610f256122b1565b73ffffffffffffffffffffffffffffffffffffffff16610f4361173b565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f90906140fc565b60405180910390fd5b60c88014610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390613e9c565b60405180910390fd5b60005b60c8811015611090576001600c6000848460c88110611027577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611088906145fe565b915050610fdf565b5050565b600061109e610a8b565b82106110df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d6906141fc565b60405180910390fd5b60088281548110611119577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6111336122b1565b73ffffffffffffffffffffffffffffffffffffffff1661115161173b565b73ffffffffffffffffffffffffffffffffffffffff16146111a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119e906140fc565b60405180910390fd5b80600b90805190602001906111bd9291906132e1565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112619061409c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db9061407c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113336122b1565b73ffffffffffffffffffffffffffffffffffffffff1661135161173b565b73ffffffffffffffffffffffffffffffffffffffff16146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e906140fc565b60405180910390fd5b6113b160006126ac565b565b6113bb6122b1565b73ffffffffffffffffffffffffffffffffffffffff166113d961173b565b73ffffffffffffffffffffffffffffffffffffffff161461142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906140fc565b60405180910390fd5b6000471161143c57600080fd5b600060024761144b9190614401565b90506000738b5b9497e096ee6ffd6041d1db37a2ac2b41ab0d73ffffffffffffffffffffffffffffffffffffffff168260405161148790613da6565b60006040518083038185875af1925050503d80600081146114c4576040519150601f19603f3d011682016040523d82523d6000602084013e6114c9565b606091505b50509050600073d491e93c6b05e3cda3073482a5651bcfe3dc1cc773ffffffffffffffffffffffffffffffffffffffff168360405161150790613da6565b60006040518083038185875af1925050503d8060008114611544576040519150601f19603f3d011682016040523d82523d6000602084013e611549565b606091505b5050905060011515821515148015611565575060011515811515145b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b9061423c565b60405180910390fd5b505050565b6115b16122b1565b73ffffffffffffffffffffffffffffffffffffffff166115cf61173b565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c906140fc565b60405180910390fd5b600e5481111561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190613f9c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d190613ebc565b60405180910390fd5b60006116e4610a8b565b905081600e60008282546116f8919061448c565b925050819055506000600190505b8281116117355761172284828461171d91906143ab565b612772565b808061172d906145fe565b915050611706565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61176d6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661178b61173b565b73ffffffffffffffffffffffffffffffffffffffff16146117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d8906140fc565b60405180910390fd5b80600d8190555050565b6060600180546117fa9061459b565b80601f01602080910402602001604051908101604052809291908181526020018280546118269061459b565b80156118735780601f1061184857610100808354040283529160200191611873565b820191906000526020600020905b81548152906001019060200180831161185657829003601f168201915b5050505050905090565b6000611887610a8b565b90506002808111156118c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600f60009054906101000a900460ff16600281111561190a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1461194a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119419061421c565b60405180910390fd5b600382111561198e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119859061403c565b60405180910390fd5b61012c828261199d91906143ab565b11156119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d59061413c565b60405180910390fd5b81600d546119ec9190614432565b341015611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a259061419c565b60405180910390fd5b6000600190505b828111611a6457611a51338284611a4c91906143ab565b612772565b8080611a5c906145fe565b915050611a35565b505050565b611a716122b1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613f7c565b60405180910390fd5b8060056000611aec6122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b996122b1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bde9190613e44565b60405180910390a35050565b600f60009054906101000a900460ff1681565b611c0e611c086122b1565b83612372565b611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c44906141dc565b60405180910390fd5b611c5984848484612790565b50505050565b6060611c6a82612245565b611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca09061415c565b60405180910390fd5b60006040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525090506000611ced6127ec565b90506000815111611d0d5760405180602001604052806000815250611d3a565b80611d178561287e565b83604051602001611d2a93929190613d75565b6040516020818303038152906040525b92505050919050565b6000611d4d610a8b565b905060016002811115611d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600f60009054906101000a900460ff166002811115611dd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890613fdc565b60405180910390fd5b60011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9b9061401c565b60405180910390fd5b61012c811115611ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee09061413c565b60405180910390fd5b600d54341015611f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f259061419c565b60405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f9c33600183611f9791906143ab565b612772565b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c6020528060005260406000206000915054906101000a900460ff1681565b61205b6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661207961173b565b73ffffffffffffffffffffffffffffffffffffffff16146120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906140fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690613f1c565b60405180910390fd5b612148816126ac565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061222e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061223e575061223d82612a2b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661232c836111c1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061237d82612245565b6123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b390613fbc565b60405180910390fd5b60006123c7836111c1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061243657508373ffffffffffffffffffffffffffffffffffffffff1661241e846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b8061244757506124468185611f9f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612470826111c1565b73ffffffffffffffffffffffffffffffffffffffff16146124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd9061411c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252d90613f5c565b60405180910390fd5b612541838383612a95565b61254c6000826122b9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259c919061448c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f391906143ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61278c828260405180602001604052806000815250612ba9565b5050565b61279b848484612450565b6127a784848484612c04565b6127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd90613efc565b60405180910390fd5b50505050565b6060600b80546127fb9061459b565b80601f01602080910402602001604051908101604052809291908181526020018280546128279061459b565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b5050505050905090565b606060008214156128c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a26565b600082905060005b600082146128f85780806128e1906145fe565b915050600a826128f19190614401565b91506128ce565b60008167ffffffffffffffff81111561293a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561296c5781602001600182028036833780820191505090505b5090505b60008514612a1f57600182612985919061448c565b9150600a856129949190614647565b60306129a091906143ab565b60f81b8183815181106129dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a189190614401565b9450612970565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612aa083838361215e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ae357612ade81612d9b565b612b22565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b2157612b208382612de4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b6557612b6081612f51565b612ba4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ba357612ba28282613094565b5b5b505050565b612bb38383613113565b612bc06000848484612c04565b612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690613efc565b60405180910390fd5b505050565b6000612c258473ffffffffffffffffffffffffffffffffffffffff1661214b565b15612d8e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c4e6122b1565b8786866040518563ffffffff1660e01b8152600401612c709493929190613dd6565b602060405180830381600087803b158015612c8a57600080fd5b505af1925050508015612cbb57506040513d601f19601f82011682018060405250810190612cb89190613741565b60015b612d3e573d8060008114612ceb576040519150601f19603f3d011682016040523d82523d6000602084013e612cf0565b606091505b50600081511415612d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2d90613efc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d93565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612df184611273565b612dfb919061448c565b9050600060076000848152602001908152602001600020549050818114612ee0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f65919061448c565b9050600060096000848152602001908152602001600020549050600060088381548110612fbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613003577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613078577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061309f83611273565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a906140bc565b60405180910390fd5b61318c81612245565b156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390613f3c565b60405180910390fd5b6131d860008383612a95565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461322891906143ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132ed9061459b565b90600052602060002090601f01602090048101928261330f5760008555613356565b82601f1061332857805160ff1916838001178555613356565b82800160010185558215613356579182015b8281111561335557825182559160200191906001019061333a565b5b5090506133639190613367565b5090565b5b80821115613380576000816000905550600101613368565b5090565b60006133976133928461429c565b614277565b905080828560208602820111156133ad57600080fd5b60005b858110156133dd57816133c38882613463565b8452602084019350602083019250506001810190506133b0565b5050509392505050565b60006133fa6133f5846142c2565b614277565b90508281526020810184848401111561341257600080fd5b61341d848285614559565b509392505050565b6000613438613433846142f3565b614277565b90508281526020810184848401111561345057600080fd5b61345b848285614559565b509392505050565b60008135905061347281614f2b565b92915050565b600082601f83011261348957600080fd5b60c8613496848285613384565b91505092915050565b6000813590506134ae81614f42565b92915050565b6000813590506134c381614f59565b92915050565b6000815190506134d881614f59565b92915050565b600082601f8301126134ef57600080fd5b81356134ff8482602086016133e7565b91505092915050565b600082601f83011261351957600080fd5b8135613529848260208601613425565b91505092915050565b60008135905061354181614f70565b92915050565b60006020828403121561355957600080fd5b600061356784828501613463565b91505092915050565b6000806040838503121561358357600080fd5b600061359185828601613463565b92505060206135a285828601613463565b9150509250929050565b6000806000606084860312156135c157600080fd5b60006135cf86828701613463565b93505060206135e086828701613463565b92505060406135f186828701613532565b9150509250925092565b6000806000806080858703121561361157600080fd5b600061361f87828801613463565b945050602061363087828801613463565b935050604061364187828801613532565b925050606085013567ffffffffffffffff81111561365e57600080fd5b61366a878288016134de565b91505092959194509250565b6000806040838503121561368957600080fd5b600061369785828601613463565b92505060206136a88582860161349f565b9150509250929050565b600080604083850312156136c557600080fd5b60006136d385828601613463565b92505060206136e485828601613532565b9150509250929050565b6000611900828403121561370157600080fd5b600061370f84828501613478565b91505092915050565b60006020828403121561372a57600080fd5b6000613738848285016134b4565b91505092915050565b60006020828403121561375357600080fd5b6000613761848285016134c9565b91505092915050565b60006020828403121561377c57600080fd5b600082013567ffffffffffffffff81111561379657600080fd5b6137a284828501613508565b91505092915050565b6000602082840312156137bd57600080fd5b60006137cb84828501613532565b91505092915050565b60006137e08383613d57565b60208301905092915050565b6137f5816144c0565b82525050565b600061380682614334565b6138108185614362565b935061381b83614324565b8060005b8381101561384c57815161383388826137d4565b975061383e83614355565b92505060018101905061381f565b5085935050505092915050565b613862816144d2565b82525050565b60006138738261433f565b61387d8185614373565b935061388d818560208601614568565b61389681614763565b840191505092915050565b6138aa81614547565b82525050565b60006138bb8261434a565b6138c5818561438f565b93506138d5818560208601614568565b6138de81614763565b840191505092915050565b60006138f48261434a565b6138fe81856143a0565b935061390e818560208601614568565b80840191505092915050565b600061392760238361438f565b915061393282614774565b604082019050919050565b600061394a601d8361438f565b9150613955826147c3565b602082019050919050565b600061396d602b8361438f565b9150613978826147ec565b604082019050919050565b600061399060328361438f565b915061399b8261483b565b604082019050919050565b60006139b360268361438f565b91506139be8261488a565b604082019050919050565b60006139d6601c8361438f565b91506139e1826148d9565b602082019050919050565b60006139f960248361438f565b9150613a0482614902565b604082019050919050565b6000613a1c60198361438f565b9150613a2782614951565b602082019050919050565b6000613a3f601c8361438f565b9150613a4a8261497a565b602082019050919050565b6000613a62602c8361438f565b9150613a6d826149a3565b604082019050919050565b6000613a8560148361438f565b9150613a90826149f2565b602082019050919050565b6000613aa8601e8361438f565b9150613ab382614a1b565b602082019050919050565b6000613acb60468361438f565b9150613ad682614a44565b606082019050919050565b6000613aee60218361438f565b9150613af982614ab9565b604082019050919050565b6000613b1160388361438f565b9150613b1c82614b08565b604082019050919050565b6000613b34602a8361438f565b9150613b3f82614b57565b604082019050919050565b6000613b5760298361438f565b9150613b6282614ba6565b604082019050919050565b6000613b7a60208361438f565b9150613b8582614bf5565b602082019050919050565b6000613b9d602c8361438f565b9150613ba882614c1e565b604082019050919050565b6000613bc060208361438f565b9150613bcb82614c6d565b602082019050919050565b6000613be360298361438f565b9150613bee82614c96565b604082019050919050565b6000613c06601c8361438f565b9150613c1182614ce5565b602082019050919050565b6000613c29602f8361438f565b9150613c3482614d0e565b604082019050919050565b6000613c4c60218361438f565b9150613c5782614d5d565b604082019050919050565b6000613c6f60198361438f565b9150613c7a82614dac565b602082019050919050565b6000613c92603d8361438f565b9150613c9d82614dd5565b604082019050919050565b6000613cb5600083614384565b9150613cc082614e24565b600082019050919050565b6000613cd860318361438f565b9150613ce382614e27565b604082019050919050565b6000613cfb602c8361438f565b9150613d0682614e76565b604082019050919050565b6000613d1e60118361438f565b9150613d2982614ec5565b602082019050919050565b6000613d41600f8361438f565b9150613d4c82614eee565b602082019050919050565b613d608161453d565b82525050565b613d6f8161453d565b82525050565b6000613d8182866138e9565b9150613d8d82856138e9565b9150613d9982846138e9565b9150819050949350505050565b6000613db182613ca8565b9150819050919050565b6000602082019050613dd060008301846137ec565b92915050565b6000608082019050613deb60008301876137ec565b613df860208301866137ec565b613e056040830185613d66565b8181036060830152613e178184613868565b905095945050505050565b60006020820190508181036000830152613e3c81846137fb565b905092915050565b6000602082019050613e596000830184613859565b92915050565b6000602082019050613e7460008301846138a1565b92915050565b60006020820190508181036000830152613e9481846138b0565b905092915050565b60006020820190508181036000830152613eb58161391a565b9050919050565b60006020820190508181036000830152613ed58161393d565b9050919050565b60006020820190508181036000830152613ef581613960565b9050919050565b60006020820190508181036000830152613f1581613983565b9050919050565b60006020820190508181036000830152613f35816139a6565b9050919050565b60006020820190508181036000830152613f55816139c9565b9050919050565b60006020820190508181036000830152613f75816139ec565b9050919050565b60006020820190508181036000830152613f9581613a0f565b9050919050565b60006020820190508181036000830152613fb581613a32565b9050919050565b60006020820190508181036000830152613fd581613a55565b9050919050565b60006020820190508181036000830152613ff581613a78565b9050919050565b6000602082019050818103600083015261401581613a9b565b9050919050565b6000602082019050818103600083015261403581613abe565b9050919050565b6000602082019050818103600083015261405581613ae1565b9050919050565b6000602082019050818103600083015261407581613b04565b9050919050565b6000602082019050818103600083015261409581613b27565b9050919050565b600060208201905081810360008301526140b581613b4a565b9050919050565b600060208201905081810360008301526140d581613b6d565b9050919050565b600060208201905081810360008301526140f581613b90565b9050919050565b6000602082019050818103600083015261411581613bb3565b9050919050565b6000602082019050818103600083015261413581613bd6565b9050919050565b6000602082019050818103600083015261415581613bf9565b9050919050565b6000602082019050818103600083015261417581613c1c565b9050919050565b6000602082019050818103600083015261419581613c3f565b9050919050565b600060208201905081810360008301526141b581613c62565b9050919050565b600060208201905081810360008301526141d581613c85565b9050919050565b600060208201905081810360008301526141f581613ccb565b9050919050565b6000602082019050818103600083015261421581613cee565b9050919050565b6000602082019050818103600083015261423581613d11565b9050919050565b6000602082019050818103600083015261425581613d34565b9050919050565b60006020820190506142716000830184613d66565b92915050565b6000614281614292565b905061428d82826145cd565b919050565b6000604051905090565b600067ffffffffffffffff8211156142b7576142b6614734565b5b602082029050919050565b600067ffffffffffffffff8211156142dd576142dc614734565b5b6142e682614763565b9050602081019050919050565b600067ffffffffffffffff82111561430e5761430d614734565b5b61431782614763565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006143b68261453d565b91506143c18361453d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143f6576143f5614678565b5b828201905092915050565b600061440c8261453d565b91506144178361453d565b925082614427576144266146a7565b5b828204905092915050565b600061443d8261453d565b91506144488361453d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561448157614480614678565b5b828202905092915050565b60006144978261453d565b91506144a28361453d565b9250828210156144b5576144b4614678565b5b828203905092915050565b60006144cb8261451d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061451882614f17565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145528261450a565b9050919050565b82818337600083830152505050565b60005b8381101561458657808201518184015260208101905061456b565b83811115614595576000848401525b50505050565b600060028204905060018216806145b357607f821691505b602082108114156145c7576145c6614705565b5b50919050565b6145d682614763565b810181811067ffffffffffffffff821117156145f5576145f4614734565b5b80604052505050565b60006146098261453d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561463c5761463b614678565b5b600182019050919050565b60006146528261453d565b915061465d8361453d565b92508261466d5761466c6146a7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f77686974656c697374206d75737420686176652061206c656e677468206f662060008201527f3230300000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420676976656177617920746f2061646472657373283029000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45786365656473207265736572766564204f696c7920737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5068617365206973206e6f742070726573616c65000000000000000000000000600082015250565b7f7068617365206d75737420626520696e2070726573616c652066697273740000600082015250565b7f596f7520617265206e6f74206f6e207468652070726573616c6520776869746560008201527f6c697374206f72206861766520616c726561647920636c61696d656420796f7560208201527f72206f696c790000000000000000000000000000000000000000000000000000604082015250565b7f596f752063616e206d696e742061206d6178696d756d206f662033204f696c7960008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d204f696c797320737570706c7900000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f596f752073656e7420657468657220746f207468697320636f6e74726163742060008201527f776974686f75742073706563696679696e6720612066756e6374696f6e000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5068617365206973206e6f74206f70656e000000000000000000000000000000600082015250565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b60038110614f2857614f276146d6565b5b50565b614f34816144c0565b8114614f3f57600080fd5b50565b614f4b816144d2565b8114614f5657600080fd5b50565b614f62816144de565b8114614f6d57600080fd5b50565b614f798161453d565b8114614f8457600080fd5b5056fea26469706673582212206033b61b411293310ebb186481b123e59a88f1eb83f5a1a23fe7e1f6afbddb8b64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5579384353654672753464765531636b61434a36666b62565861797845766a517a696657367a7155624278542f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmUy8CSeFru4dvU1ckaCJ6fkbVXayxEvjQzifW6zqUbBxT/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5579384353654672753464765531636b61434a36666b62
Arg [3] : 565861797845766a517a696657367a7155624278542f00000000000000000000


Deployed Bytecode Sourcemap

123:4615:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4658:71;;;;;;;;;;:::i;:::-;;;;;;;;123:4615;4538:71;;;;;;;;;;:::i;:::-;;;;;;;;909:222:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1534:111:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3870:90:10;;;;;;;;;;;;;:::i;:::-;;291:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1210:253:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3971:160:10;;;;;;;;;;;;;:::i;:::-;;5120:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2797:354:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;932:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:230:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3384:100:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2052:235:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:11;;;;;;;;;;;;;:::i;:::-;;4141:349:10;;;;;;;;;;;;;:::i;:::-;;2378:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;966:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3162:93:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2511:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1824:543:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4144:290:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;414:19:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5365:320:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3495:364:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1224:589;;;:::i;:::-;;4500:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;236:49:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;909:222:4;1011:4;1049:35;1034:50;;;:11;:50;;;;:90;;;;1088:36;1112:11;1088:23;:36::i;:::-;1034:90;1027:97;;909:222;;;:::o;2349:98:3:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3398:401;;;:::o;1534:111:4:-;1595:7;1621:10;:17;;;;1614:24;;1534:111;:::o;3870:90:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3939:14:10::1;3931:5;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3870:90::o:0;291:33::-;;;;:::o;4724:330:3:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1210:253:4:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:12;:19;1443:5;1430:19;;;;;;;;;;;;;;;:26;1450:5;1430:26;;;;;;;;;;;;1423:33;;1210:253;;;;:::o;3971:160:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:14:10::1;4037:23;;;;;;;;;;;;;;;;:5;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;4029:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4113:11;4105:5;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3971:160::o:0;5120:179:3:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;2797:354:10:-;2864:16;2892:18;2913:23;2923:12;2913:9;:23::i;:::-;2892:44;;2947:25;2989:10;2975:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:53;;3014:9;3010:110;3029:10;3025:1;:14;3010:110;;;3073:36;3093:12;3107:1;3073:19;:36::i;:::-;3059:8;3068:1;3059:11;;;;;;;;;;;;;;;;;;;;;:50;;;;;3041:3;;;;;:::i;:::-;;;;3010:110;;;;3136:8;3129:15;;;;2797:354;;;:::o;932:281::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1052:3:10::1;1032:16:::0;:23:::1;1023:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;1110:6;1105:102;1122:16;1118:1;:20;1105:102;;;1192:4;1159:16;:30;1176:9;1186:1;1176:12;;;;;;;;;;;;;;;;;;;1159:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;1140:3;;;;;:::i;:::-;;;;1105:102;;;;932:281:::0;:::o;1717:230:4:-;1792:7;1827:30;:28;:30::i;:::-;1819:5;:38;1811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:10;1934:5;1923:17;;;;;;;;;;;;;;;;;;;;;;;;1916:24;;1717:230;;;:::o;3384:100:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3470:7:10::1;3454:13;:23;;;;;;;;;;;;:::i;:::-;;3384:100:::0;:::o;2052:235:3:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1790:205::-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;4141:349:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4225:1:10::1;4201:21;:25;4193:34;;;::::0;::::1;;4237:13;4277:1;4253:21;:25;;;;:::i;:::-;4237:41;;4289:12;539:42;4307:19;;4334:5;4307:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:56;;;4355:12;613:42;4373:20;;4401:5;4373:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4354:57;;;4440:4;4429:15;;:7;:15;;;:34;;;;;4459:4;4448:15;;:7;:15;;;4429:34;4421:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;1248:1:11;;;4141:349:10:o:0;2378:408::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2474:19:10::1;;2463:7;:30;;2454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2560:1;2545:17;;:3;:17;;;;2537:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;2607:14;2624:13;:11;:13::i;:::-;2607:30;;2671:7;2648:19;;:30;;;;;;;:::i;:::-;;;;;;;;2693:9;2705:1;2693:13;;2689:91;2713:7;2708:1;:12;2689:91;;2741:28;2752:3;2766:1;2757:6;:10;;;;:::i;:::-;2741:9;:28::i;:::-;2722:3;;;;;:::i;:::-;;;;2689:91;;;;1248:1:11;2378:408:10::0;;:::o;966:85:11:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;3162:93:10:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3239:9:10::1;3230:6;:18;;;;3162:93:::0;:::o;2511:102:3:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;1824:543:10:-;1878:14;1895:13;:11;:13::i;:::-;1878:30;;1936:11;1927:20;;;;;;;;;;;;;;;;:5;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;1918:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2021:1;2014:3;:8;;2005:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2117:3;2110;2101:6;:12;;;;:::i;:::-;:19;;2092:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2211:3;2202:6;;:12;;;;:::i;:::-;2189:9;:25;;2180:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2272:9;2284:1;2272:13;;2268:93;2292:3;2287:1;:8;2268:93;;2315:35;2326:10;2347:1;2338:6;:10;;;;:::i;:::-;2315:9;:35::i;:::-;2297:3;;;;;:::i;:::-;;;;2268:93;;;;1824:543;;:::o;4144:290:3:-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;414:19:10:-;;;;;;;;;;;;;:::o;5365:320:3:-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;3495:364:10:-;3560:13;3593:16;3601:7;3593;:16::i;:::-;3585:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3671:18;:28;;;;;;;;;;;;;;;;;;;3709:21;3733:10;:8;:10::i;:::-;3709:34;;3784:1;3766:7;3760:21;:25;:92;;;;;;;;;;;;;;;;;3812:7;3821:18;:7;:16;:18::i;:::-;3841:4;3795:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3760:92;3753:99;;;;3495:364;;;:::o;1224:589::-;1274:14;1291:13;:11;:13::i;:::-;1274:30;;1332:14;1323:23;;;;;;;;;;;;;;;;:5;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;1314:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;1442:4;1410:36;;:16;:28;1427:10;1410:28;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;1401:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;1568:3;1558:6;:13;;1549:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1659:6;;1646:9;:19;;1637:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;1756:5;1725:16;:28;1742:10;1725:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;1771:35;1782:10;1803:1;1794:6;:10;;;;:::i;:::-;1771:9;:35::i;:::-;1224:589;:::o;4500:162:3:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;236:49:10:-;;;;;;;;;;;;;;;;;;;;;;:::o;1839:189:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;13070:122:3:-;;;;:::o;1431:300::-;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;7157:125::-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;11008:171:3:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;2034:169:11:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2034:169;;:::o;8114:108:3:-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;6547:307::-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;3261:112:10:-;3321:13;3353;3346:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3261:112;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;2543:572:4:-;2682:45;2709:4;2715:2;2719:7;2682:26;:45::i;:::-;2758:1;2742:18;;:4;:18;;;2738:183;;;2776:40;2808:7;2776:31;:40::i;:::-;2738:183;;;2845:2;2837:10;;:4;:10;;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;2833:88;2738:183;2948:1;2934:16;;:2;:16;;;2930:179;;;2966:45;3003:7;2966:36;:45::i;:::-;2930:179;;;3038:4;3032:10;;:2;:10;;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;:::-;3028:81;2930:179;2543:572;;;:::o;8443:311:3:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;11732:782::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:610;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12197:1;12180:6;:13;:18;12176:266;;;12222:60;;;;;;;;;;:::i;:::-;;;;;;;;12176:266;12394:6;12388:13;12379:6;12375:2;12371:15;12364:38;11933:523;12069:45;;;12059:55;;;:6;:55;;;;12052:62;;;;;11898:610;12493:4;12486:11;;11732:782;;;;;;;:::o;3821:161:4:-;3924:10;:17;;;;3897:15;:24;3913:7;3897:24;;;;;;;;;;;:44;;;;3951:10;3967:7;3951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:161;:::o;4599:970::-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4861:51;;4922:18;4943:17;:26;4961:7;4943:26;;;;;;;;;;;;4922:47;;5087:14;5073:10;:28;5069:323;;5117:19;5139:12;:18;5152:4;5139:18;;;;;;;;;;;;;;;:34;5158:14;5139:34;;;;;;;;;;;;5117:56;;5221:11;5188:12;:18;5201:4;5188:18;;;;;;;;;;;;;;;:30;5207:10;5188:30;;;;;;;;;;;:44;;;;5337:10;5304:17;:30;5322:11;5304:30;;;;;;;;;;;:43;;;;5069:323;;5485:17;:26;5503:7;5485:26;;;;;;;;;;;5478:33;;;5528:12;:18;5541:4;5528:18;;;;;;;;;;;;;;;:34;5547:14;5528:34;;;;;;;;;;;5521:41;;;4599:970;;;;:::o;5857:1061::-;6106:22;6151:1;6131:10;:17;;;;:21;;;;:::i;:::-;6106:46;;6162:18;6183:15;:24;6199:7;6183:24;;;;;;;;;;;;6162:45;;6529:19;6551:10;6562:14;6551:26;;;;;;;;;;;;;;;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6723:10;6692:15;:28;6708:11;6692:28;;;;;;;;;;;:41;;;;6861:15;:24;6877:7;6861:24;;;;;;;;;;;6854:31;;;6895:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5857:1061;;;;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;3493:37;;3567:7;3540:12;:16;3553:2;3540:16;;;;;;;;;;;;;;;:24;3557:6;3540:24;;;;;;;;;;;:34;;;;3613:6;3584:17;:26;3602:7;3584:26;;;;;;;;;;;:35;;;;3409:217;;;:::o;9076:372:3:-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;27:592:13:-;123:5;148:81;164:64;221:6;164:64;:::i;:::-;148:81;:::i;:::-;139:90;;249:5;275:6;325:3;317:4;309:6;305:17;300:3;296:27;293:36;290:2;;;354:1;351;344:12;290:2;390:1;375:238;400:6;397:1;394:13;375:238;;;468:3;497:37;530:3;518:10;497:37;:::i;:::-;492:3;485:50;564:4;559:3;555:14;548:21;;598:4;593:3;589:14;582:21;;435:178;422:1;419;415:9;410:14;;375:238;;;379:14;129:490;;;;;;;:::o;625:343::-;702:5;727:65;743:48;784:6;743:48;:::i;:::-;727:65;:::i;:::-;718:74;;815:6;808:5;801:21;853:4;846:5;842:16;891:3;882:6;877:3;873:16;870:25;867:2;;;908:1;905;898:12;867:2;921:41;955:6;950:3;945;921:41;:::i;:::-;708:260;;;;;;:::o;974:345::-;1052:5;1077:66;1093:49;1135:6;1093:49;:::i;:::-;1077:66;:::i;:::-;1068:75;;1166:6;1159:5;1152:21;1204:4;1197:5;1193:16;1242:3;1233:6;1228:3;1224:16;1221:25;1218:2;;;1259:1;1256;1249:12;1218:2;1272:41;1306:6;1301:3;1296;1272:41;:::i;:::-;1058:261;;;;;;:::o;1325:139::-;1371:5;1409:6;1396:20;1387:29;;1425:33;1452:5;1425:33;:::i;:::-;1377:87;;;;:::o;1490:276::-;1561:5;1610:3;1603:4;1595:6;1591:17;1587:27;1577:2;;1628:1;1625;1618:12;1577:2;1655:4;1677:83;1756:3;1748:6;1740;1677:83;:::i;:::-;1668:92;;1567:199;;;;;:::o;1772:133::-;1815:5;1853:6;1840:20;1831:29;;1869:30;1893:5;1869:30;:::i;:::-;1821:84;;;;:::o;1911:137::-;1956:5;1994:6;1981:20;1972:29;;2010:32;2036:5;2010:32;:::i;:::-;1962:86;;;;:::o;2054:141::-;2110:5;2141:6;2135:13;2126:22;;2157:32;2183:5;2157:32;:::i;:::-;2116:79;;;;:::o;2214:271::-;2269:5;2318:3;2311:4;2303:6;2299:17;2295:27;2285:2;;2336:1;2333;2326:12;2285:2;2376:6;2363:20;2401:78;2475:3;2467:6;2460:4;2452:6;2448:17;2401:78;:::i;:::-;2392:87;;2275:210;;;;;:::o;2505:273::-;2561:5;2610:3;2603:4;2595:6;2591:17;2587:27;2577:2;;2628:1;2625;2618:12;2577:2;2668:6;2655:20;2693:79;2768:3;2760:6;2753:4;2745:6;2741:17;2693:79;:::i;:::-;2684:88;;2567:211;;;;;:::o;2784:139::-;2830:5;2868:6;2855:20;2846:29;;2884:33;2911:5;2884:33;:::i;:::-;2836:87;;;;:::o;2929:262::-;2988:6;3037:2;3025:9;3016:7;3012:23;3008:32;3005:2;;;3053:1;3050;3043:12;3005:2;3096:1;3121:53;3166:7;3157:6;3146:9;3142:22;3121:53;:::i;:::-;3111:63;;3067:117;2995:196;;;;:::o;3197:407::-;3265:6;3273;3322:2;3310:9;3301:7;3297:23;3293:32;3290:2;;;3338:1;3335;3328:12;3290:2;3381:1;3406:53;3451:7;3442:6;3431:9;3427:22;3406:53;:::i;:::-;3396:63;;3352:117;3508:2;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3479:118;3280:324;;;;;:::o;3610:552::-;3687:6;3695;3703;3752:2;3740:9;3731:7;3727:23;3723:32;3720:2;;;3768:1;3765;3758:12;3720:2;3811:1;3836:53;3881:7;3872:6;3861:9;3857:22;3836:53;:::i;:::-;3826:63;;3782:117;3938:2;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3909:118;4066:2;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;:::i;:::-;4082:63;;4037:118;3710:452;;;;;:::o;4168:809::-;4263:6;4271;4279;4287;4336:3;4324:9;4315:7;4311:23;4307:33;4304:2;;;4353:1;4350;4343:12;4304:2;4396:1;4421:53;4466:7;4457:6;4446:9;4442:22;4421:53;:::i;:::-;4411:63;;4367:117;4523:2;4549:53;4594:7;4585:6;4574:9;4570:22;4549:53;:::i;:::-;4539:63;;4494:118;4651:2;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4622:118;4807:2;4796:9;4792:18;4779:32;4838:18;4830:6;4827:30;4824:2;;;4870:1;4867;4860:12;4824:2;4898:62;4952:7;4943:6;4932:9;4928:22;4898:62;:::i;:::-;4888:72;;4750:220;4294:683;;;;;;;:::o;4983:401::-;5048:6;5056;5105:2;5093:9;5084:7;5080:23;5076:32;5073:2;;;5121:1;5118;5111:12;5073:2;5164:1;5189:53;5234:7;5225:6;5214:9;5210:22;5189:53;:::i;:::-;5179:63;;5135:117;5291:2;5317:50;5359:7;5350:6;5339:9;5335:22;5317:50;:::i;:::-;5307:60;;5262:115;5063:321;;;;;:::o;5390:407::-;5458:6;5466;5515:2;5503:9;5494:7;5490:23;5486:32;5483:2;;;5531:1;5528;5521:12;5483:2;5574:1;5599:53;5644:7;5635:6;5624:9;5620:22;5599:53;:::i;:::-;5589:63;;5545:117;5701:2;5727:53;5772:7;5763:6;5752:9;5748:22;5727:53;:::i;:::-;5717:63;;5672:118;5473:324;;;;;:::o;5803:314::-;5887:6;5936:4;5924:9;5915:7;5911:23;5907:34;5904:2;;;5954:1;5951;5944:12;5904:2;5997:1;6022:78;6092:7;6083:6;6072:9;6068:22;6022:78;:::i;:::-;6012:88;;5968:142;5894:223;;;;:::o;6123:260::-;6181:6;6230:2;6218:9;6209:7;6205:23;6201:32;6198:2;;;6246:1;6243;6236:12;6198:2;6289:1;6314:52;6358:7;6349:6;6338:9;6334:22;6314:52;:::i;:::-;6304:62;;6260:116;6188:195;;;;:::o;6389:282::-;6458:6;6507:2;6495:9;6486:7;6482:23;6478:32;6475:2;;;6523:1;6520;6513:12;6475:2;6566:1;6591:63;6646:7;6637:6;6626:9;6622:22;6591:63;:::i;:::-;6581:73;;6537:127;6465:206;;;;:::o;6677:375::-;6746:6;6795:2;6783:9;6774:7;6770:23;6766:32;6763:2;;;6811:1;6808;6801:12;6763:2;6882:1;6871:9;6867:17;6854:31;6912:18;6904:6;6901:30;6898:2;;;6944:1;6941;6934:12;6898:2;6972:63;7027:7;7018:6;7007:9;7003:22;6972:63;:::i;:::-;6962:73;;6825:220;6753:299;;;;:::o;7058:262::-;7117:6;7166:2;7154:9;7145:7;7141:23;7137:32;7134:2;;;7182:1;7179;7172:12;7134:2;7225:1;7250:53;7295:7;7286:6;7275:9;7271:22;7250:53;:::i;:::-;7240:63;;7196:117;7124:196;;;;:::o;7326:179::-;7395:10;7416:46;7458:3;7450:6;7416:46;:::i;:::-;7494:4;7489:3;7485:14;7471:28;;7406:99;;;;:::o;7511:118::-;7598:24;7616:5;7598:24;:::i;:::-;7593:3;7586:37;7576:53;;:::o;7665:732::-;7784:3;7813:54;7861:5;7813:54;:::i;:::-;7883:86;7962:6;7957:3;7883:86;:::i;:::-;7876:93;;7993:56;8043:5;7993:56;:::i;:::-;8072:7;8103:1;8088:284;8113:6;8110:1;8107:13;8088:284;;;8189:6;8183:13;8216:63;8275:3;8260:13;8216:63;:::i;:::-;8209:70;;8302:60;8355:6;8302:60;:::i;:::-;8292:70;;8148:224;8135:1;8132;8128:9;8123:14;;8088:284;;;8092:14;8388:3;8381:10;;7789:608;;;;;;;:::o;8403:109::-;8484:21;8499:5;8484:21;:::i;:::-;8479:3;8472:34;8462:50;;:::o;8518:360::-;8604:3;8632:38;8664:5;8632:38;:::i;:::-;8686:70;8749:6;8744:3;8686:70;:::i;:::-;8679:77;;8765:52;8810:6;8805:3;8798:4;8791:5;8787:16;8765:52;:::i;:::-;8842:29;8864:6;8842:29;:::i;:::-;8837:3;8833:39;8826:46;;8608:270;;;;;:::o;8884:149::-;8980:46;9020:5;8980:46;:::i;:::-;8975:3;8968:59;8958:75;;:::o;9039:364::-;9127:3;9155:39;9188:5;9155:39;:::i;:::-;9210:71;9274:6;9269:3;9210:71;:::i;:::-;9203:78;;9290:52;9335:6;9330:3;9323:4;9316:5;9312:16;9290:52;:::i;:::-;9367:29;9389:6;9367:29;:::i;:::-;9362:3;9358:39;9351:46;;9131:272;;;;;:::o;9409:377::-;9515:3;9543:39;9576:5;9543:39;:::i;:::-;9598:89;9680:6;9675:3;9598:89;:::i;:::-;9591:96;;9696:52;9741:6;9736:3;9729:4;9722:5;9718:16;9696:52;:::i;:::-;9773:6;9768:3;9764:16;9757:23;;9519:267;;;;;:::o;9792:366::-;9934:3;9955:67;10019:2;10014:3;9955:67;:::i;:::-;9948:74;;10031:93;10120:3;10031:93;:::i;:::-;10149:2;10144:3;10140:12;10133:19;;9938:220;;;:::o;10164:366::-;10306:3;10327:67;10391:2;10386:3;10327:67;:::i;:::-;10320:74;;10403:93;10492:3;10403:93;:::i;:::-;10521:2;10516:3;10512:12;10505:19;;10310:220;;;:::o;10536:366::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10682:220;;;:::o;10908:366::-;11050:3;11071:67;11135:2;11130:3;11071:67;:::i;:::-;11064:74;;11147:93;11236:3;11147:93;:::i;:::-;11265:2;11260:3;11256:12;11249:19;;11054:220;;;:::o;11280:366::-;11422:3;11443:67;11507:2;11502:3;11443:67;:::i;:::-;11436:74;;11519:93;11608:3;11519:93;:::i;:::-;11637:2;11632:3;11628:12;11621:19;;11426:220;;;:::o;11652:366::-;11794:3;11815:67;11879:2;11874:3;11815:67;:::i;:::-;11808:74;;11891:93;11980:3;11891:93;:::i;:::-;12009:2;12004:3;12000:12;11993:19;;11798:220;;;:::o;12024:366::-;12166:3;12187:67;12251:2;12246:3;12187:67;:::i;:::-;12180:74;;12263:93;12352:3;12263:93;:::i;:::-;12381:2;12376:3;12372:12;12365:19;;12170:220;;;:::o;12396:366::-;12538:3;12559:67;12623:2;12618:3;12559:67;:::i;:::-;12552:74;;12635:93;12724:3;12635:93;:::i;:::-;12753:2;12748:3;12744:12;12737:19;;12542:220;;;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12914:220;;;:::o;13140:366::-;13282:3;13303:67;13367:2;13362:3;13303:67;:::i;:::-;13296:74;;13379:93;13468:3;13379:93;:::i;:::-;13497:2;13492:3;13488:12;13481:19;;13286:220;;;:::o;13512:366::-;13654:3;13675:67;13739:2;13734:3;13675:67;:::i;:::-;13668:74;;13751:93;13840:3;13751:93;:::i;:::-;13869:2;13864:3;13860:12;13853:19;;13658:220;;;:::o;13884:366::-;14026:3;14047:67;14111:2;14106:3;14047:67;:::i;:::-;14040:74;;14123:93;14212:3;14123:93;:::i;:::-;14241:2;14236:3;14232:12;14225:19;;14030:220;;;:::o;14256:366::-;14398:3;14419:67;14483:2;14478:3;14419:67;:::i;:::-;14412:74;;14495:93;14584:3;14495:93;:::i;:::-;14613:2;14608:3;14604:12;14597:19;;14402:220;;;:::o;14628:366::-;14770:3;14791:67;14855:2;14850:3;14791:67;:::i;:::-;14784:74;;14867:93;14956:3;14867:93;:::i;:::-;14985:2;14980:3;14976:12;14969:19;;14774:220;;;:::o;15000:366::-;15142:3;15163:67;15227:2;15222:3;15163:67;:::i;:::-;15156:74;;15239:93;15328:3;15239:93;:::i;:::-;15357:2;15352:3;15348:12;15341:19;;15146:220;;;:::o;15372:366::-;15514:3;15535:67;15599:2;15594:3;15535:67;:::i;:::-;15528:74;;15611:93;15700:3;15611:93;:::i;:::-;15729:2;15724:3;15720:12;15713:19;;15518:220;;;:::o;15744:366::-;15886:3;15907:67;15971:2;15966:3;15907:67;:::i;:::-;15900:74;;15983:93;16072:3;15983:93;:::i;:::-;16101:2;16096:3;16092:12;16085:19;;15890:220;;;:::o;16116:366::-;16258:3;16279:67;16343:2;16338:3;16279:67;:::i;:::-;16272:74;;16355:93;16444:3;16355:93;:::i;:::-;16473:2;16468:3;16464:12;16457:19;;16262:220;;;:::o;16488:366::-;16630:3;16651:67;16715:2;16710:3;16651:67;:::i;:::-;16644:74;;16727:93;16816:3;16727:93;:::i;:::-;16845:2;16840:3;16836:12;16829:19;;16634:220;;;:::o;16860:366::-;17002:3;17023:67;17087:2;17082:3;17023:67;:::i;:::-;17016:74;;17099:93;17188:3;17099:93;:::i;:::-;17217:2;17212:3;17208:12;17201:19;;17006:220;;;:::o;17232:366::-;17374:3;17395:67;17459:2;17454:3;17395:67;:::i;:::-;17388:74;;17471:93;17560:3;17471:93;:::i;:::-;17589:2;17584:3;17580:12;17573:19;;17378:220;;;:::o;17604:366::-;17746:3;17767:67;17831:2;17826:3;17767:67;:::i;:::-;17760:74;;17843:93;17932:3;17843:93;:::i;:::-;17961:2;17956:3;17952:12;17945:19;;17750:220;;;:::o;17976:366::-;18118:3;18139:67;18203:2;18198:3;18139:67;:::i;:::-;18132:74;;18215:93;18304:3;18215:93;:::i;:::-;18333:2;18328:3;18324:12;18317:19;;18122:220;;;:::o;18348:366::-;18490:3;18511:67;18575:2;18570:3;18511:67;:::i;:::-;18504:74;;18587:93;18676:3;18587:93;:::i;:::-;18705:2;18700:3;18696:12;18689:19;;18494:220;;;:::o;18720:366::-;18862:3;18883:67;18947:2;18942:3;18883:67;:::i;:::-;18876:74;;18959:93;19048:3;18959:93;:::i;:::-;19077:2;19072:3;19068:12;19061:19;;18866:220;;;:::o;19092:366::-;19234:3;19255:67;19319:2;19314:3;19255:67;:::i;:::-;19248:74;;19331:93;19420:3;19331:93;:::i;:::-;19449:2;19444:3;19440:12;19433:19;;19238:220;;;:::o;19464:398::-;19623:3;19644:83;19725:1;19720:3;19644:83;:::i;:::-;19637:90;;19736:93;19825:3;19736:93;:::i;:::-;19854:1;19849:3;19845:11;19838:18;;19627:235;;;:::o;19868:366::-;20010:3;20031:67;20095:2;20090:3;20031:67;:::i;:::-;20024:74;;20107:93;20196:3;20107:93;:::i;:::-;20225:2;20220:3;20216:12;20209:19;;20014:220;;;:::o;20240:366::-;20382:3;20403:67;20467:2;20462:3;20403:67;:::i;:::-;20396:74;;20479:93;20568:3;20479:93;:::i;:::-;20597:2;20592:3;20588:12;20581:19;;20386:220;;;:::o;20612:366::-;20754:3;20775:67;20839:2;20834:3;20775:67;:::i;:::-;20768:74;;20851:93;20940:3;20851:93;:::i;:::-;20969:2;20964:3;20960:12;20953:19;;20758:220;;;:::o;20984:366::-;21126:3;21147:67;21211:2;21206:3;21147:67;:::i;:::-;21140:74;;21223:93;21312:3;21223:93;:::i;:::-;21341:2;21336:3;21332:12;21325:19;;21130:220;;;:::o;21356:108::-;21433:24;21451:5;21433:24;:::i;:::-;21428:3;21421:37;21411:53;;:::o;21470:118::-;21557:24;21575:5;21557:24;:::i;:::-;21552:3;21545:37;21535:53;;:::o;21594:595::-;21822:3;21844:95;21935:3;21926:6;21844:95;:::i;:::-;21837:102;;21956:95;22047:3;22038:6;21956:95;:::i;:::-;21949:102;;22068:95;22159:3;22150:6;22068:95;:::i;:::-;22061:102;;22180:3;22173:10;;21826:363;;;;;;:::o;22195:379::-;22379:3;22401:147;22544:3;22401:147;:::i;:::-;22394:154;;22565:3;22558:10;;22383:191;;;:::o;22580:222::-;22673:4;22711:2;22700:9;22696:18;22688:26;;22724:71;22792:1;22781:9;22777:17;22768:6;22724:71;:::i;:::-;22678:124;;;;:::o;22808:640::-;23003:4;23041:3;23030:9;23026:19;23018:27;;23055:71;23123:1;23112:9;23108:17;23099:6;23055:71;:::i;:::-;23136:72;23204:2;23193:9;23189:18;23180:6;23136:72;:::i;:::-;23218;23286:2;23275:9;23271:18;23262:6;23218:72;:::i;:::-;23337:9;23331:4;23327:20;23322:2;23311:9;23307:18;23300:48;23365:76;23436:4;23427:6;23365:76;:::i;:::-;23357:84;;23008:440;;;;;;;:::o;23454:373::-;23597:4;23635:2;23624:9;23620:18;23612:26;;23684:9;23678:4;23674:20;23670:1;23659:9;23655:17;23648:47;23712:108;23815:4;23806:6;23712:108;:::i;:::-;23704:116;;23602:225;;;;:::o;23833:210::-;23920:4;23958:2;23947:9;23943:18;23935:26;;23971:65;24033:1;24022:9;24018:17;24009:6;23971:65;:::i;:::-;23925:118;;;;:::o;24049:240::-;24151:4;24189:2;24178:9;24174:18;24166:26;;24202:80;24279:1;24268:9;24264:17;24255:6;24202:80;:::i;:::-;24156:133;;;;:::o;24295:313::-;24408:4;24446:2;24435:9;24431:18;24423:26;;24495:9;24489:4;24485:20;24481:1;24470:9;24466:17;24459:47;24523:78;24596:4;24587:6;24523:78;:::i;:::-;24515:86;;24413:195;;;;:::o;24614:419::-;24780:4;24818:2;24807:9;24803:18;24795:26;;24867:9;24861:4;24857:20;24853:1;24842:9;24838:17;24831:47;24895:131;25021:4;24895:131;:::i;:::-;24887:139;;24785:248;;;:::o;25039:419::-;25205:4;25243:2;25232:9;25228:18;25220:26;;25292:9;25286:4;25282:20;25278:1;25267:9;25263:17;25256:47;25320:131;25446:4;25320:131;:::i;:::-;25312:139;;25210:248;;;:::o;25464:419::-;25630:4;25668:2;25657:9;25653:18;25645:26;;25717:9;25711:4;25707:20;25703:1;25692:9;25688:17;25681:47;25745:131;25871:4;25745:131;:::i;:::-;25737:139;;25635:248;;;:::o;25889:419::-;26055:4;26093:2;26082:9;26078:18;26070:26;;26142:9;26136:4;26132:20;26128:1;26117:9;26113:17;26106:47;26170:131;26296:4;26170:131;:::i;:::-;26162:139;;26060:248;;;:::o;26314:419::-;26480:4;26518:2;26507:9;26503:18;26495:26;;26567:9;26561:4;26557:20;26553:1;26542:9;26538:17;26531:47;26595:131;26721:4;26595:131;:::i;:::-;26587:139;;26485:248;;;:::o;26739:419::-;26905:4;26943:2;26932:9;26928:18;26920:26;;26992:9;26986:4;26982:20;26978:1;26967:9;26963:17;26956:47;27020:131;27146:4;27020:131;:::i;:::-;27012:139;;26910:248;;;:::o;27164:419::-;27330:4;27368:2;27357:9;27353:18;27345:26;;27417:9;27411:4;27407:20;27403:1;27392:9;27388:17;27381:47;27445:131;27571:4;27445:131;:::i;:::-;27437:139;;27335:248;;;:::o;27589:419::-;27755:4;27793:2;27782:9;27778:18;27770:26;;27842:9;27836:4;27832:20;27828:1;27817:9;27813:17;27806:47;27870:131;27996:4;27870:131;:::i;:::-;27862:139;;27760:248;;;:::o;28014:419::-;28180:4;28218:2;28207:9;28203:18;28195:26;;28267:9;28261:4;28257:20;28253:1;28242:9;28238:17;28231:47;28295:131;28421:4;28295:131;:::i;:::-;28287:139;;28185:248;;;:::o;28439:419::-;28605:4;28643:2;28632:9;28628:18;28620:26;;28692:9;28686:4;28682:20;28678:1;28667:9;28663:17;28656:47;28720:131;28846:4;28720:131;:::i;:::-;28712:139;;28610:248;;;:::o;28864:419::-;29030:4;29068:2;29057:9;29053:18;29045:26;;29117:9;29111:4;29107:20;29103:1;29092:9;29088:17;29081:47;29145:131;29271:4;29145:131;:::i;:::-;29137:139;;29035:248;;;:::o;29289:419::-;29455:4;29493:2;29482:9;29478:18;29470:26;;29542:9;29536:4;29532:20;29528:1;29517:9;29513:17;29506:47;29570:131;29696:4;29570:131;:::i;:::-;29562:139;;29460:248;;;:::o;29714:419::-;29880:4;29918:2;29907:9;29903:18;29895:26;;29967:9;29961:4;29957:20;29953:1;29942:9;29938:17;29931:47;29995:131;30121:4;29995:131;:::i;:::-;29987:139;;29885:248;;;:::o;30139:419::-;30305:4;30343:2;30332:9;30328:18;30320:26;;30392:9;30386:4;30382:20;30378:1;30367:9;30363:17;30356:47;30420:131;30546:4;30420:131;:::i;:::-;30412:139;;30310:248;;;:::o;30564:419::-;30730:4;30768:2;30757:9;30753:18;30745:26;;30817:9;30811:4;30807:20;30803:1;30792:9;30788:17;30781:47;30845:131;30971:4;30845:131;:::i;:::-;30837:139;;30735:248;;;:::o;30989:419::-;31155:4;31193:2;31182:9;31178:18;31170:26;;31242:9;31236:4;31232:20;31228:1;31217:9;31213:17;31206:47;31270:131;31396:4;31270:131;:::i;:::-;31262:139;;31160:248;;;:::o;31414:419::-;31580:4;31618:2;31607:9;31603:18;31595:26;;31667:9;31661:4;31657:20;31653:1;31642:9;31638:17;31631:47;31695:131;31821:4;31695:131;:::i;:::-;31687:139;;31585:248;;;:::o;31839:419::-;32005:4;32043:2;32032:9;32028:18;32020:26;;32092:9;32086:4;32082:20;32078:1;32067:9;32063:17;32056:47;32120:131;32246:4;32120:131;:::i;:::-;32112:139;;32010:248;;;:::o;32264:419::-;32430:4;32468:2;32457:9;32453:18;32445:26;;32517:9;32511:4;32507:20;32503:1;32492:9;32488:17;32481:47;32545:131;32671:4;32545:131;:::i;:::-;32537:139;;32435:248;;;:::o;32689:419::-;32855:4;32893:2;32882:9;32878:18;32870:26;;32942:9;32936:4;32932:20;32928:1;32917:9;32913:17;32906:47;32970:131;33096:4;32970:131;:::i;:::-;32962:139;;32860:248;;;:::o;33114:419::-;33280:4;33318:2;33307:9;33303:18;33295:26;;33367:9;33361:4;33357:20;33353:1;33342:9;33338:17;33331:47;33395:131;33521:4;33395:131;:::i;:::-;33387:139;;33285:248;;;:::o;33539:419::-;33705:4;33743:2;33732:9;33728:18;33720:26;;33792:9;33786:4;33782:20;33778:1;33767:9;33763:17;33756:47;33820:131;33946:4;33820:131;:::i;:::-;33812:139;;33710:248;;;:::o;33964:419::-;34130:4;34168:2;34157:9;34153:18;34145:26;;34217:9;34211:4;34207:20;34203:1;34192:9;34188:17;34181:47;34245:131;34371:4;34245:131;:::i;:::-;34237:139;;34135:248;;;:::o;34389:419::-;34555:4;34593:2;34582:9;34578:18;34570:26;;34642:9;34636:4;34632:20;34628:1;34617:9;34613:17;34606:47;34670:131;34796:4;34670:131;:::i;:::-;34662:139;;34560:248;;;:::o;34814:419::-;34980:4;35018:2;35007:9;35003:18;34995:26;;35067:9;35061:4;35057:20;35053:1;35042:9;35038:17;35031:47;35095:131;35221:4;35095:131;:::i;:::-;35087:139;;34985:248;;;:::o;35239:419::-;35405:4;35443:2;35432:9;35428:18;35420:26;;35492:9;35486:4;35482:20;35478:1;35467:9;35463:17;35456:47;35520:131;35646:4;35520:131;:::i;:::-;35512:139;;35410:248;;;:::o;35664:419::-;35830:4;35868:2;35857:9;35853:18;35845:26;;35917:9;35911:4;35907:20;35903:1;35892:9;35888:17;35881:47;35945:131;36071:4;35945:131;:::i;:::-;35937:139;;35835:248;;;:::o;36089:419::-;36255:4;36293:2;36282:9;36278:18;36270:26;;36342:9;36336:4;36332:20;36328:1;36317:9;36313:17;36306:47;36370:131;36496:4;36370:131;:::i;:::-;36362:139;;36260:248;;;:::o;36514:419::-;36680:4;36718:2;36707:9;36703:18;36695:26;;36767:9;36761:4;36757:20;36753:1;36742:9;36738:17;36731:47;36795:131;36921:4;36795:131;:::i;:::-;36787:139;;36685:248;;;:::o;36939:419::-;37105:4;37143:2;37132:9;37128:18;37120:26;;37192:9;37186:4;37182:20;37178:1;37167:9;37163:17;37156:47;37220:131;37346:4;37220:131;:::i;:::-;37212:139;;37110:248;;;:::o;37364:222::-;37457:4;37495:2;37484:9;37480:18;37472:26;;37508:71;37576:1;37565:9;37561:17;37552:6;37508:71;:::i;:::-;37462:124;;;;:::o;37592:129::-;37626:6;37653:20;;:::i;:::-;37643:30;;37682:33;37710:4;37702:6;37682:33;:::i;:::-;37633:88;;;:::o;37727:75::-;37760:6;37793:2;37787:9;37777:19;;37767:35;:::o;37808:251::-;37885:4;37975:18;37967:6;37964:30;37961:2;;;37997:18;;:::i;:::-;37961:2;38047:4;38039:6;38035:17;38027:25;;37890:169;;;:::o;38065:307::-;38126:4;38216:18;38208:6;38205:30;38202:2;;;38238:18;;:::i;:::-;38202:2;38276:29;38298:6;38276:29;:::i;:::-;38268:37;;38360:4;38354;38350:15;38342:23;;38131:241;;;:::o;38378:308::-;38440:4;38530:18;38522:6;38519:30;38516:2;;;38552:18;;:::i;:::-;38516:2;38590:29;38612:6;38590:29;:::i;:::-;38582:37;;38674:4;38668;38664:15;38656:23;;38445:241;;;:::o;38692:132::-;38759:4;38782:3;38774:11;;38812:4;38807:3;38803:14;38795:22;;38764:60;;;:::o;38830:114::-;38897:6;38931:5;38925:12;38915:22;;38904:40;;;:::o;38950:98::-;39001:6;39035:5;39029:12;39019:22;;39008:40;;;:::o;39054:99::-;39106:6;39140:5;39134:12;39124:22;;39113:40;;;:::o;39159:113::-;39229:4;39261;39256:3;39252:14;39244:22;;39234:38;;;:::o;39278:184::-;39377:11;39411:6;39406:3;39399:19;39451:4;39446:3;39442:14;39427:29;;39389:73;;;;:::o;39468:168::-;39551:11;39585:6;39580:3;39573:19;39625:4;39620:3;39616:14;39601:29;;39563:73;;;;:::o;39642:147::-;39743:11;39780:3;39765:18;;39755:34;;;;:::o;39795:169::-;39879:11;39913:6;39908:3;39901:19;39953:4;39948:3;39944:14;39929:29;;39891:73;;;;:::o;39970:148::-;40072:11;40109:3;40094:18;;40084:34;;;;:::o;40124:305::-;40164:3;40183:20;40201:1;40183:20;:::i;:::-;40178:25;;40217:20;40235:1;40217:20;:::i;:::-;40212:25;;40371:1;40303:66;40299:74;40296:1;40293:81;40290:2;;;40377:18;;:::i;:::-;40290:2;40421:1;40418;40414:9;40407:16;;40168:261;;;;:::o;40435:185::-;40475:1;40492:20;40510:1;40492:20;:::i;:::-;40487:25;;40526:20;40544:1;40526:20;:::i;:::-;40521:25;;40565:1;40555:2;;40570:18;;:::i;:::-;40555:2;40612:1;40609;40605:9;40600:14;;40477:143;;;;:::o;40626:348::-;40666:7;40689:20;40707:1;40689:20;:::i;:::-;40684:25;;40723:20;40741:1;40723:20;:::i;:::-;40718:25;;40911:1;40843:66;40839:74;40836:1;40833:81;40828:1;40821:9;40814:17;40810:105;40807:2;;;40918:18;;:::i;:::-;40807:2;40966:1;40963;40959:9;40948:20;;40674:300;;;;:::o;40980:191::-;41020:4;41040:20;41058:1;41040:20;:::i;:::-;41035:25;;41074:20;41092:1;41074:20;:::i;:::-;41069:25;;41113:1;41110;41107:8;41104:2;;;41118:18;;:::i;:::-;41104:2;41163:1;41160;41156:9;41148:17;;41025:146;;;;:::o;41177:96::-;41214:7;41243:24;41261:5;41243:24;:::i;:::-;41232:35;;41222:51;;;:::o;41279:90::-;41313:7;41356:5;41349:13;41342:21;41331:32;;41321:48;;;:::o;41375:149::-;41411:7;41451:66;41444:5;41440:78;41429:89;;41419:105;;;:::o;41530:133::-;41578:7;41607:5;41596:16;;41613:44;41651:5;41613:44;:::i;:::-;41586:77;;;:::o;41669:126::-;41706:7;41746:42;41739:5;41735:54;41724:65;;41714:81;;;:::o;41801:77::-;41838:7;41867:5;41856:16;;41846:32;;;:::o;41884:133::-;41943:9;41976:35;42005:5;41976:35;:::i;:::-;41963:48;;41953:64;;;:::o;42023:154::-;42107:6;42102:3;42097;42084:30;42169:1;42160:6;42155:3;42151:16;42144:27;42074:103;;;:::o;42183:307::-;42251:1;42261:113;42275:6;42272:1;42269:13;42261:113;;;42360:1;42355:3;42351:11;42345:18;42341:1;42336:3;42332:11;42325:39;42297:2;42294:1;42290:10;42285:15;;42261:113;;;42392:6;42389:1;42386:13;42383:2;;;42472:1;42463:6;42458:3;42454:16;42447:27;42383:2;42232:258;;;;:::o;42496:320::-;42540:6;42577:1;42571:4;42567:12;42557:22;;42624:1;42618:4;42614:12;42645:18;42635:2;;42701:4;42693:6;42689:17;42679:27;;42635:2;42763;42755:6;42752:14;42732:18;42729:38;42726:2;;;42782:18;;:::i;:::-;42726:2;42547:269;;;;:::o;42822:281::-;42905:27;42927:4;42905:27;:::i;:::-;42897:6;42893:40;43035:6;43023:10;43020:22;42999:18;42987:10;42984:34;42981:62;42978:2;;;43046:18;;:::i;:::-;42978:2;43086:10;43082:2;43075:22;42865:238;;;:::o;43109:233::-;43148:3;43171:24;43189:5;43171:24;:::i;:::-;43162:33;;43217:66;43210:5;43207:77;43204:2;;;43287:18;;:::i;:::-;43204:2;43334:1;43327:5;43323:13;43316:20;;43152:190;;;:::o;43348:176::-;43380:1;43397:20;43415:1;43397:20;:::i;:::-;43392:25;;43431:20;43449:1;43431:20;:::i;:::-;43426:25;;43470:1;43460:2;;43475:18;;:::i;:::-;43460:2;43516:1;43513;43509:9;43504:14;;43382:142;;;;:::o;43530:180::-;43578:77;43575:1;43568:88;43675:4;43672:1;43665:15;43699:4;43696:1;43689:15;43716:180;43764:77;43761:1;43754:88;43861:4;43858:1;43851:15;43885:4;43882:1;43875:15;43902:180;43950:77;43947:1;43940:88;44047:4;44044:1;44037:15;44071:4;44068:1;44061:15;44088:180;44136:77;44133:1;44126:88;44233:4;44230:1;44223:15;44257:4;44254:1;44247:15;44274:180;44322:77;44319:1;44312:88;44419:4;44416:1;44409:15;44443:4;44440:1;44433:15;44460:102;44501:6;44552:2;44548:7;44543:2;44536:5;44532:14;44528:28;44518:38;;44508:54;;;:::o;44568:222::-;44708:34;44704:1;44696:6;44692:14;44685:58;44777:5;44772:2;44764:6;44760:15;44753:30;44674:116;:::o;44796:179::-;44936:31;44932:1;44924:6;44920:14;44913:55;44902:73;:::o;44981:230::-;45121:34;45117:1;45109:6;45105:14;45098:58;45190:13;45185:2;45177:6;45173:15;45166:38;45087:124;:::o;45217:237::-;45357:34;45353:1;45345:6;45341:14;45334:58;45426:20;45421:2;45413:6;45409:15;45402:45;45323:131;:::o;45460:225::-;45600:34;45596:1;45588:6;45584:14;45577:58;45669:8;45664:2;45656:6;45652:15;45645:33;45566:119;:::o;45691:178::-;45831:30;45827:1;45819:6;45815:14;45808:54;45797:72;:::o;45875:223::-;46015:34;46011:1;46003:6;45999:14;45992:58;46084:6;46079:2;46071:6;46067:15;46060:31;45981:117;:::o;46104:175::-;46244:27;46240:1;46232:6;46228:14;46221:51;46210:69;:::o;46285:178::-;46425:30;46421:1;46413:6;46409:14;46402:54;46391:72;:::o;46469:231::-;46609:34;46605:1;46597:6;46593:14;46586:58;46678:14;46673:2;46665:6;46661:15;46654:39;46575:125;:::o;46706:170::-;46846:22;46842:1;46834:6;46830:14;46823:46;46812:64;:::o;46882:180::-;47022:32;47018:1;47010:6;47006:14;46999:56;46988:74;:::o;47068:294::-;47208:34;47204:1;47196:6;47192:14;47185:58;47277:34;47272:2;47264:6;47260:15;47253:59;47346:8;47341:2;47333:6;47329:15;47322:33;47174:188;:::o;47368:220::-;47508:34;47504:1;47496:6;47492:14;47485:58;47577:3;47572:2;47564:6;47560:15;47553:28;47474:114;:::o;47594:243::-;47734:34;47730:1;47722:6;47718:14;47711:58;47803:26;47798:2;47790:6;47786:15;47779:51;47700:137;:::o;47843:229::-;47983:34;47979:1;47971:6;47967:14;47960:58;48052:12;48047:2;48039:6;48035:15;48028:37;47949:123;:::o;48078:228::-;48218:34;48214:1;48206:6;48202:14;48195:58;48287:11;48282:2;48274:6;48270:15;48263:36;48184:122;:::o;48312:182::-;48452:34;48448:1;48440:6;48436:14;48429:58;48418:76;:::o;48500:231::-;48640:34;48636:1;48628:6;48624:14;48617:58;48709:14;48704:2;48696:6;48692:15;48685:39;48606:125;:::o;48737:182::-;48877:34;48873:1;48865:6;48861:14;48854:58;48843:76;:::o;48925:228::-;49065:34;49061:1;49053:6;49049:14;49042:58;49134:11;49129:2;49121:6;49117:15;49110:36;49031:122;:::o;49159:178::-;49299:30;49295:1;49287:6;49283:14;49276:54;49265:72;:::o;49343:234::-;49483:34;49479:1;49471:6;49467:14;49460:58;49552:17;49547:2;49539:6;49535:15;49528:42;49449:128;:::o;49583:220::-;49723:34;49719:1;49711:6;49707:14;49700:58;49792:3;49787:2;49779:6;49775:15;49768:28;49689:114;:::o;49809:175::-;49949:27;49945:1;49937:6;49933:14;49926:51;49915:69;:::o;49990:248::-;50130:34;50126:1;50118:6;50114:14;50107:58;50199:31;50194:2;50186:6;50182:15;50175:56;50096:142;:::o;50244:114::-;50350:8;:::o;50364:236::-;50504:34;50500:1;50492:6;50488:14;50481:58;50573:19;50568:2;50560:6;50556:15;50549:44;50470:130;:::o;50606:231::-;50746:34;50742:1;50734:6;50730:14;50723:58;50815:14;50810:2;50802:6;50798:15;50791:39;50712:125;:::o;50843:167::-;50983:19;50979:1;50971:6;50967:14;50960:43;50949:61;:::o;51016:165::-;51156:17;51152:1;51144:6;51140:14;51133:41;51122:59;:::o;51187:116::-;51271:1;51264:5;51261:12;51251:2;;51277:18;;:::i;:::-;51251:2;51241:62;:::o;51309:122::-;51382:24;51400:5;51382:24;:::i;:::-;51375:5;51372:35;51362:2;;51421:1;51418;51411:12;51362:2;51352:79;:::o;51437:116::-;51507:21;51522:5;51507:21;:::i;:::-;51500:5;51497:32;51487:2;;51543:1;51540;51533:12;51487:2;51477:76;:::o;51559:120::-;51631:23;51648:5;51631:23;:::i;:::-;51624:5;51621:34;51611:2;;51669:1;51666;51659:12;51611:2;51601:78;:::o;51685:122::-;51758:24;51776:5;51758:24;:::i;:::-;51751:5;51748:35;51738:2;;51797:1;51794;51787:12;51738:2;51728:79;:::o

Swarm Source

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