ETH Price: $3,659.35 (-1.85%)

Token

ERC-20: EthereumScape (SCAPE)
 

Overview

Max Total Supply

1,753 SCAPE

Holders

502

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SCAPE
0xbe35f60e1d6256165a88c6e78be9d197372edebe
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
EthereumScape

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-16
*/

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



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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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: @openzeppelin/contracts/utils/Address.sol



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

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

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

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



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: @openzeppelin/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC721/IERC721.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC721/ERC721.sol



pragma solidity ^0.8.0;








/**
 * @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.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: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



/**
 * @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: contract-f5c0edde6e.sol


pragma solidity ^0.8.0;



contract EthereumScape is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 private _reserved = 200;
    uint256 private _price = 0.02 ether;
    bool public _paused = false;
    bool public mintIsActive = true;

    address t1 = 0xcE22eA7E78286E6364899d53cFb7a252F6aEc989;


    constructor(string memory baseURI) ERC721("EthereumScape", "SCAPE")  {
        setBaseURI(baseURI);

    }

    function Mint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                              "Sale paused" );
        require( num < 21,                              "You can mint a maximum of 20 EtheureumScape" );
        require( supply + num < 8888 - _reserved,      "Exceeds maximum EtheureumScape supply" );
        require( msg.value >= _price * num,             "Ether sent is not correct" );

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

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

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

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

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

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

    function getPrice() public view returns (uint256){
        return _price;
    }

    function giveAway(address _to, uint256 _amount) external onlyOwner() {
        require( _amount <= _reserved, "Exceeds reserved EthereumScape" );

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

        _reserved -= _amount;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }
    

    function withdrawAll() public payable onlyOwner {
        uint256 _each = address(this).balance;
        require(payable(t1).send(_each));
    }
}

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"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","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":[],"name":"mintIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","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":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260c8600c5566470de4df820000600d556000600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff02191690831515021790555073ce22ea7e78286e6364899d53cfb7a252f6aec989600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000ac57600080fd5b5060405162004730380380620047308339818101604052810190620000d291906200046f565b6040518060400160405280600d81526020017f457468657265756d5363617065000000000000000000000000000000000000008152506040518060400160405280600581526020017f53434150450000000000000000000000000000000000000000000000000000008152508160009080519060200190620001569291906200034d565b5080600190805190602001906200016f9291906200034d565b5050506200019262000186620001aa60201b60201c565b620001b260201b60201c565b620001a3816200027860201b60201c565b506200065a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000288620001aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ae6200032360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000307576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fe90620004f6565b60405180910390fd5b80600b90805190602001906200031f9291906200034d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200035b90620005c6565b90600052602060002090601f0160209004810192826200037f5760008555620003cb565b82601f106200039a57805160ff1916838001178555620003cb565b82800160010185558215620003cb579182015b82811115620003ca578251825591602001919060010190620003ad565b5b509050620003da9190620003de565b5090565b5b80821115620003f9576000816000905550600101620003df565b5090565b6000620004146200040e846200054c565b62000518565b9050828152602081018484840111156200042d57600080fd5b6200043a84828562000590565b509392505050565b600082601f8301126200045457600080fd5b815162000466848260208601620003fd565b91505092915050565b6000602082840312156200048257600080fd5b600082015167ffffffffffffffff8111156200049d57600080fd5b620004ab8482850162000442565b91505092915050565b6000620004c36020836200057f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200051181620004b4565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200054257620005416200062b565b5b8060405250919050565b600067ffffffffffffffff8211156200056a57620005696200062b565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620005b057808201518184015260208101905062000593565b83811115620005c0576000848401525b50505050565b60006002820490506001821680620005df57607f821691505b60208210811415620005f657620005f5620005fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140c6806200066a6000396000f3fe6080604052600436106101c25760003560e01c806355f804b3116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610624578063ca80014414610661578063e985e9c51461068a578063f2fde38b146106c7576101c2565b806395d89b411461057c57806398d5fdca146105a7578063a22cb465146105d2578063b88d4fde146105fb576101c2565b8063715018a6116100d1578063715018a614610507578063853828b61461051e5780638da5cb5b1461052857806391b7f5ed14610553576101c2565b806355f804b3146104645780636352211e1461048d57806370a08231146104ca576101c2565b806318160ddd1161016457806342842e0e1161013e57806342842e0e14610396578063438b6300146103bf578063471a4294146103fc5780634f6ccce714610427576101c2565b806318160ddd1461030557806323b872dd146103305780632f745c5914610359576101c2565b806307883703116101a05780630788370314610258578063081812fc14610274578063095ea7b3146102b157806316c61ccc146102da576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612dcd565b6106f0565b6040516101fb91906138ab565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612da4565b61076a565b005b34801561023957600080fd5b50610242610803565b60405161024f91906138c6565b60405180910390f35b610272600480360381019061026d9190612e60565b610895565b005b34801561028057600080fd5b5061029b60048036038101906102969190612e60565b610a18565b6040516102a89190613822565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190612d68565b610a9d565b005b3480156102e657600080fd5b506102ef610bb5565b6040516102fc91906138ab565b60405180910390f35b34801561031157600080fd5b5061031a610bc8565b6040516103279190613bc8565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612c62565b610bd5565b005b34801561036557600080fd5b50610380600480360381019061037b9190612d68565b610c35565b60405161038d9190613bc8565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190612c62565b610cda565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612bfd565b610cfa565b6040516103f39190613889565b60405180910390f35b34801561040857600080fd5b50610411610df4565b60405161041e91906138ab565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612e60565b610e07565b60405161045b9190613bc8565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612e1f565b610e9e565b005b34801561049957600080fd5b506104b460048036038101906104af9190612e60565b610f34565b6040516104c19190613822565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612bfd565b610fe6565b6040516104fe9190613bc8565b60405180910390f35b34801561051357600080fd5b5061051c61109e565b005b610526611126565b005b34801561053457600080fd5b5061053d61120a565b60405161054a9190613822565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190612e60565b611234565b005b34801561058857600080fd5b506105916112ba565b60405161059e91906138c6565b60405180910390f35b3480156105b357600080fd5b506105bc61134c565b6040516105c99190613bc8565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190612d2c565b611356565b005b34801561060757600080fd5b50610622600480360381019061061d9190612cb1565b6114d7565b005b34801561063057600080fd5b5061064b60048036038101906106469190612e60565b611539565b60405161065891906138c6565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190612d68565b6115e0565b005b34801561069657600080fd5b506106b160048036038101906106ac9190612c26565b6116ff565b6040516106be91906138ab565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190612bfd565b611793565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076357506107628261188b565b5b9050919050565b61077261196d565b73ffffffffffffffffffffffffffffffffffffffff1661079061120a565b73ffffffffffffffffffffffffffffffffffffffff16146107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd90613aa8565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461081290613ebb565b80601f016020809104026020016040519081016040528092919081815260200182805461083e90613ebb565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b600061089f610bc8565b9050600e60009054906101000a900460ff16156108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e8906138e8565b60405180910390fd5b60158210610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b90613a48565b60405180910390fd5b600c546122b86109449190613dd1565b82826109509190613cf0565b10610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790613ba8565b60405180910390fd5b81600d5461099e9190613d77565b3410156109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790613b28565b60405180910390fd5b60005b82811015610a1357610a003382846109fb9190613cf0565b611975565b8080610a0b90613eed565b9150506109e3565b505050565b6000610a2382611993565b610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613a88565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa882610f34565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613b08565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3861196d565b73ffffffffffffffffffffffffffffffffffffffff161480610b675750610b6681610b6161196d565b6116ff565b5b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906139e8565b60405180910390fd5b610bb083836119ff565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610be6610be061196d565b82611ab8565b610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90613b48565b60405180910390fd5b610c30838383611b96565b505050565b6000610c4083610fe6565b8210610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613908565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cf5838383604051806020016040528060008152506114d7565b505050565b60606000610d0783610fe6565b905060008167ffffffffffffffff811115610d4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d795781602001602082028036833780820191505090505b50905060005b82811015610de957610d918582610c35565b828281518110610dca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610de190613eed565b915050610d7f565b508092505050919050565b600e60019054906101000a900460ff1681565b6000610e11610bc8565b8210610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613b68565b60405180910390fd5b60088281548110610e8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ea661196d565b73ffffffffffffffffffffffffffffffffffffffff16610ec461120a565b73ffffffffffffffffffffffffffffffffffffffff1614610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613aa8565b60405180910390fd5b80600b9080519060200190610f30929190612a21565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613a28565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90613a08565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110a661196d565b73ffffffffffffffffffffffffffffffffffffffff166110c461120a565b73ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613aa8565b60405180910390fd5b6111246000611df2565b565b61112e61196d565b73ffffffffffffffffffffffffffffffffffffffff1661114c61120a565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613aa8565b60405180910390fd5b6000479050600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061120757600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61123c61196d565b73ffffffffffffffffffffffffffffffffffffffff1661125a61120a565b73ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613aa8565b60405180910390fd5b80600d8190555050565b6060600180546112c990613ebb565b80601f01602080910402602001604051908101604052809291908181526020018280546112f590613ebb565b80156113425780601f1061131757610100808354040283529160200191611342565b820191906000526020600020905b81548152906001019060200180831161132557829003601f168201915b5050505050905090565b6000600d54905090565b61135e61196d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c3906139a8565b60405180910390fd5b80600560006113d961196d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661148661196d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114cb91906138ab565b60405180910390a35050565b6114e86114e261196d565b83611ab8565b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613b48565b60405180910390fd5b61153384848484611eb8565b50505050565b606061154482611993565b611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613ae8565b60405180910390fd5b600061158d611f14565b905060008151116115ad57604051806020016040528060008152506115d8565b806115b784611fa6565b6040516020016115c89291906137fe565b6040516020818303038152906040525b915050919050565b6115e861196d565b73ffffffffffffffffffffffffffffffffffffffff1661160661120a565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613aa8565b60405180910390fd5b600c548111156116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613b88565b60405180910390fd5b60006116ab610bc8565b905060005b828110156116e0576116cd8482846116c89190613cf0565b611975565b80806116d890613eed565b9150506116b0565b5081600c60008282546116f39190613dd1565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61179b61196d565b73ffffffffffffffffffffffffffffffffffffffff166117b961120a565b73ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690613948565b60405180910390fd5b61188881611df2565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611966575061196582612153565b5b9050919050565b600033905090565b61198f8282604051806020016040528060008152506121bd565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a7283610f34565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ac382611993565b611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af9906139c8565b60405180910390fd5b6000611b0d83610f34565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b7c57508373ffffffffffffffffffffffffffffffffffffffff16611b6484610a18565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b8d5750611b8c81856116ff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bb682610f34565b73ffffffffffffffffffffffffffffffffffffffff1614611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390613ac8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613988565b60405180910390fd5b611c87838383612218565b611c926000826119ff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce29190613dd1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d399190613cf0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ec3848484611b96565b611ecf8484848461232c565b611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0590613928565b60405180910390fd5b50505050565b6060600b8054611f2390613ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4f90613ebb565b8015611f9c5780601f10611f7157610100808354040283529160200191611f9c565b820191906000526020600020905b815481529060010190602001808311611f7f57829003601f168201915b5050505050905090565b60606000821415611fee576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061214e565b600082905060005b6000821461202057808061200990613eed565b915050600a826120199190613d46565b9150611ff6565b60008167ffffffffffffffff811115612062577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120945781602001600182028036833780820191505090505b5090505b60008514612147576001826120ad9190613dd1565b9150600a856120bc9190613f36565b60306120c89190613cf0565b60f81b818381518110612104577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121409190613d46565b9450612098565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121c783836124c3565b6121d4600084848461232c565b612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90613928565b60405180910390fd5b505050565b612223838383612691565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122665761226181612696565b6122a5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122a4576122a383826126df565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e8576122e38161284c565b612327565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461232657612325828261298f565b5b5b505050565b600061234d8473ffffffffffffffffffffffffffffffffffffffff16612a0e565b156124b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261237661196d565b8786866040518563ffffffff1660e01b8152600401612398949392919061383d565b602060405180830381600087803b1580156123b257600080fd5b505af19250505080156123e357506040513d601f19601f820116820180604052508101906123e09190612df6565b60015b612466573d8060008114612413576040519150601f19603f3d011682016040523d82523d6000602084013e612418565b606091505b5060008151141561245e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245590613928565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124bb565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90613a68565b60405180910390fd5b61253c81611993565b1561257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390613968565b60405180910390fd5b61258860008383612218565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125d89190613cf0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126ec84610fe6565b6126f69190613dd1565b90506000600760008481526020019081526020016000205490508181146127db576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128609190613dd1565b90506000600960008481526020019081526020016000205490506000600883815481106128b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106128fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612973577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061299a83610fe6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612a2d90613ebb565b90600052602060002090601f016020900481019282612a4f5760008555612a96565b82601f10612a6857805160ff1916838001178555612a96565b82800160010185558215612a96579182015b82811115612a95578251825591602001919060010190612a7a565b5b509050612aa39190612aa7565b5090565b5b80821115612ac0576000816000905550600101612aa8565b5090565b6000612ad7612ad284613c14565b613be3565b905082815260208101848484011115612aef57600080fd5b612afa848285613e79565b509392505050565b6000612b15612b1084613c44565b613be3565b905082815260208101848484011115612b2d57600080fd5b612b38848285613e79565b509392505050565b600081359050612b4f81614034565b92915050565b600081359050612b648161404b565b92915050565b600081359050612b7981614062565b92915050565b600081519050612b8e81614062565b92915050565b600082601f830112612ba557600080fd5b8135612bb5848260208601612ac4565b91505092915050565b600082601f830112612bcf57600080fd5b8135612bdf848260208601612b02565b91505092915050565b600081359050612bf781614079565b92915050565b600060208284031215612c0f57600080fd5b6000612c1d84828501612b40565b91505092915050565b60008060408385031215612c3957600080fd5b6000612c4785828601612b40565b9250506020612c5885828601612b40565b9150509250929050565b600080600060608486031215612c7757600080fd5b6000612c8586828701612b40565b9350506020612c9686828701612b40565b9250506040612ca786828701612be8565b9150509250925092565b60008060008060808587031215612cc757600080fd5b6000612cd587828801612b40565b9450506020612ce687828801612b40565b9350506040612cf787828801612be8565b925050606085013567ffffffffffffffff811115612d1457600080fd5b612d2087828801612b94565b91505092959194509250565b60008060408385031215612d3f57600080fd5b6000612d4d85828601612b40565b9250506020612d5e85828601612b55565b9150509250929050565b60008060408385031215612d7b57600080fd5b6000612d8985828601612b40565b9250506020612d9a85828601612be8565b9150509250929050565b600060208284031215612db657600080fd5b6000612dc484828501612b55565b91505092915050565b600060208284031215612ddf57600080fd5b6000612ded84828501612b6a565b91505092915050565b600060208284031215612e0857600080fd5b6000612e1684828501612b7f565b91505092915050565b600060208284031215612e3157600080fd5b600082013567ffffffffffffffff811115612e4b57600080fd5b612e5784828501612bbe565b91505092915050565b600060208284031215612e7257600080fd5b6000612e8084828501612be8565b91505092915050565b6000612e9583836137e0565b60208301905092915050565b612eaa81613e05565b82525050565b6000612ebb82613c84565b612ec58185613cb2565b9350612ed083613c74565b8060005b83811015612f01578151612ee88882612e89565b9750612ef383613ca5565b925050600181019050612ed4565b5085935050505092915050565b612f1781613e17565b82525050565b6000612f2882613c8f565b612f328185613cc3565b9350612f42818560208601613e88565b612f4b81614023565b840191505092915050565b6000612f6182613c9a565b612f6b8185613cd4565b9350612f7b818560208601613e88565b612f8481614023565b840191505092915050565b6000612f9a82613c9a565b612fa48185613ce5565b9350612fb4818560208601613e88565b80840191505092915050565b6000612fcd600b83613cd4565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061300d602b83613cd4565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613073603283613cd4565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006130d9602683613cd4565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061313f601c83613cd4565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061317f602483613cd4565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131e5601983613cd4565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613225602c83613cd4565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061328b603883613cd4565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006132f1602a83613cd4565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613357602983613cd4565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006133bd602b83613cd4565b91507f596f752063616e206d696e742061206d6178696d756d206f662032302045746860008301527f65757265756d53636170650000000000000000000000000000000000000000006020830152604082019050919050565b6000613423602083613cd4565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613463602c83613cd4565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006134c9602083613cd4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613509602983613cd4565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061356f602f83613cd4565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006135d5602183613cd4565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061363b601983613cd4565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b600061367b603183613cd4565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006136e1602c83613cd4565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613747601e83613cd4565b91507f4578636565647320726573657276656420457468657265756d536361706500006000830152602082019050919050565b6000613787602583613cd4565b91507f45786365656473206d6178696d756d2045746865757265756d5363617065207360008301527f7570706c790000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6137e981613e6f565b82525050565b6137f881613e6f565b82525050565b600061380a8285612f8f565b91506138168284612f8f565b91508190509392505050565b60006020820190506138376000830184612ea1565b92915050565b60006080820190506138526000830187612ea1565b61385f6020830186612ea1565b61386c60408301856137ef565b818103606083015261387e8184612f1d565b905095945050505050565b600060208201905081810360008301526138a38184612eb0565b905092915050565b60006020820190506138c06000830184612f0e565b92915050565b600060208201905081810360008301526138e08184612f56565b905092915050565b6000602082019050818103600083015261390181612fc0565b9050919050565b6000602082019050818103600083015261392181613000565b9050919050565b6000602082019050818103600083015261394181613066565b9050919050565b60006020820190508181036000830152613961816130cc565b9050919050565b6000602082019050818103600083015261398181613132565b9050919050565b600060208201905081810360008301526139a181613172565b9050919050565b600060208201905081810360008301526139c1816131d8565b9050919050565b600060208201905081810360008301526139e181613218565b9050919050565b60006020820190508181036000830152613a018161327e565b9050919050565b60006020820190508181036000830152613a21816132e4565b9050919050565b60006020820190508181036000830152613a418161334a565b9050919050565b60006020820190508181036000830152613a61816133b0565b9050919050565b60006020820190508181036000830152613a8181613416565b9050919050565b60006020820190508181036000830152613aa181613456565b9050919050565b60006020820190508181036000830152613ac1816134bc565b9050919050565b60006020820190508181036000830152613ae1816134fc565b9050919050565b60006020820190508181036000830152613b0181613562565b9050919050565b60006020820190508181036000830152613b21816135c8565b9050919050565b60006020820190508181036000830152613b418161362e565b9050919050565b60006020820190508181036000830152613b618161366e565b9050919050565b60006020820190508181036000830152613b81816136d4565b9050919050565b60006020820190508181036000830152613ba18161373a565b9050919050565b60006020820190508181036000830152613bc18161377a565b9050919050565b6000602082019050613bdd60008301846137ef565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613c0a57613c09613ff4565b5b8060405250919050565b600067ffffffffffffffff821115613c2f57613c2e613ff4565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613c5f57613c5e613ff4565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cfb82613e6f565b9150613d0683613e6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d3b57613d3a613f67565b5b828201905092915050565b6000613d5182613e6f565b9150613d5c83613e6f565b925082613d6c57613d6b613f96565b5b828204905092915050565b6000613d8282613e6f565b9150613d8d83613e6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dc657613dc5613f67565b5b828202905092915050565b6000613ddc82613e6f565b9150613de783613e6f565b925082821015613dfa57613df9613f67565b5b828203905092915050565b6000613e1082613e4f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ea6578082015181840152602081019050613e8b565b83811115613eb5576000848401525b50505050565b60006002820490506001821680613ed357607f821691505b60208210811415613ee757613ee6613fc5565b5b50919050565b6000613ef882613e6f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2b57613f2a613f67565b5b600182019050919050565b6000613f4182613e6f565b9150613f4c83613e6f565b925082613f5c57613f5b613f96565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61403d81613e05565b811461404857600080fd5b50565b61405481613e17565b811461405f57600080fd5b50565b61406b81613e23565b811461407657600080fd5b50565b61408281613e6f565b811461408d57600080fd5b5056fea2646970667358221220718824d1d647f373db775cfffb23d48423ca2cdc448dd282439f172422ed7b5464736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000021687474703a2f2f6170692e657468657265756d73636170652e636f6d2f6e66742f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101c25760003560e01c806355f804b3116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610624578063ca80014414610661578063e985e9c51461068a578063f2fde38b146106c7576101c2565b806395d89b411461057c57806398d5fdca146105a7578063a22cb465146105d2578063b88d4fde146105fb576101c2565b8063715018a6116100d1578063715018a614610507578063853828b61461051e5780638da5cb5b1461052857806391b7f5ed14610553576101c2565b806355f804b3146104645780636352211e1461048d57806370a08231146104ca576101c2565b806318160ddd1161016457806342842e0e1161013e57806342842e0e14610396578063438b6300146103bf578063471a4294146103fc5780634f6ccce714610427576101c2565b806318160ddd1461030557806323b872dd146103305780632f745c5914610359576101c2565b806307883703116101a05780630788370314610258578063081812fc14610274578063095ea7b3146102b157806316c61ccc146102da576101c2565b806301ffc9a7146101c757806302329a291461020457806306fdde031461022d575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612dcd565b6106f0565b6040516101fb91906138ab565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190612da4565b61076a565b005b34801561023957600080fd5b50610242610803565b60405161024f91906138c6565b60405180910390f35b610272600480360381019061026d9190612e60565b610895565b005b34801561028057600080fd5b5061029b60048036038101906102969190612e60565b610a18565b6040516102a89190613822565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190612d68565b610a9d565b005b3480156102e657600080fd5b506102ef610bb5565b6040516102fc91906138ab565b60405180910390f35b34801561031157600080fd5b5061031a610bc8565b6040516103279190613bc8565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612c62565b610bd5565b005b34801561036557600080fd5b50610380600480360381019061037b9190612d68565b610c35565b60405161038d9190613bc8565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190612c62565b610cda565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612bfd565b610cfa565b6040516103f39190613889565b60405180910390f35b34801561040857600080fd5b50610411610df4565b60405161041e91906138ab565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612e60565b610e07565b60405161045b9190613bc8565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612e1f565b610e9e565b005b34801561049957600080fd5b506104b460048036038101906104af9190612e60565b610f34565b6040516104c19190613822565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190612bfd565b610fe6565b6040516104fe9190613bc8565b60405180910390f35b34801561051357600080fd5b5061051c61109e565b005b610526611126565b005b34801561053457600080fd5b5061053d61120a565b60405161054a9190613822565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190612e60565b611234565b005b34801561058857600080fd5b506105916112ba565b60405161059e91906138c6565b60405180910390f35b3480156105b357600080fd5b506105bc61134c565b6040516105c99190613bc8565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f49190612d2c565b611356565b005b34801561060757600080fd5b50610622600480360381019061061d9190612cb1565b6114d7565b005b34801561063057600080fd5b5061064b60048036038101906106469190612e60565b611539565b60405161065891906138c6565b60405180910390f35b34801561066d57600080fd5b5061068860048036038101906106839190612d68565b6115e0565b005b34801561069657600080fd5b506106b160048036038101906106ac9190612c26565b6116ff565b6040516106be91906138ab565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190612bfd565b611793565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076357506107628261188b565b5b9050919050565b61077261196d565b73ffffffffffffffffffffffffffffffffffffffff1661079061120a565b73ffffffffffffffffffffffffffffffffffffffff16146107e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dd90613aa8565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60606000805461081290613ebb565b80601f016020809104026020016040519081016040528092919081815260200182805461083e90613ebb565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b600061089f610bc8565b9050600e60009054906101000a900460ff16156108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e8906138e8565b60405180910390fd5b60158210610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092b90613a48565b60405180910390fd5b600c546122b86109449190613dd1565b82826109509190613cf0565b10610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790613ba8565b60405180910390fd5b81600d5461099e9190613d77565b3410156109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790613b28565b60405180910390fd5b60005b82811015610a1357610a003382846109fb9190613cf0565b611975565b8080610a0b90613eed565b9150506109e3565b505050565b6000610a2382611993565b610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613a88565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa882610f34565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613b08565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3861196d565b73ffffffffffffffffffffffffffffffffffffffff161480610b675750610b6681610b6161196d565b6116ff565b5b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906139e8565b60405180910390fd5b610bb083836119ff565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610be6610be061196d565b82611ab8565b610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90613b48565b60405180910390fd5b610c30838383611b96565b505050565b6000610c4083610fe6565b8210610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613908565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cf5838383604051806020016040528060008152506114d7565b505050565b60606000610d0783610fe6565b905060008167ffffffffffffffff811115610d4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610d795781602001602082028036833780820191505090505b50905060005b82811015610de957610d918582610c35565b828281518110610dca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610de190613eed565b915050610d7f565b508092505050919050565b600e60019054906101000a900460ff1681565b6000610e11610bc8565b8210610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613b68565b60405180910390fd5b60088281548110610e8c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ea661196d565b73ffffffffffffffffffffffffffffffffffffffff16610ec461120a565b73ffffffffffffffffffffffffffffffffffffffff1614610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613aa8565b60405180910390fd5b80600b9080519060200190610f30929190612a21565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613a28565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90613a08565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110a661196d565b73ffffffffffffffffffffffffffffffffffffffff166110c461120a565b73ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613aa8565b60405180910390fd5b6111246000611df2565b565b61112e61196d565b73ffffffffffffffffffffffffffffffffffffffff1661114c61120a565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613aa8565b60405180910390fd5b6000479050600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061120757600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61123c61196d565b73ffffffffffffffffffffffffffffffffffffffff1661125a61120a565b73ffffffffffffffffffffffffffffffffffffffff16146112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613aa8565b60405180910390fd5b80600d8190555050565b6060600180546112c990613ebb565b80601f01602080910402602001604051908101604052809291908181526020018280546112f590613ebb565b80156113425780601f1061131757610100808354040283529160200191611342565b820191906000526020600020905b81548152906001019060200180831161132557829003601f168201915b5050505050905090565b6000600d54905090565b61135e61196d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c3906139a8565b60405180910390fd5b80600560006113d961196d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661148661196d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114cb91906138ab565b60405180910390a35050565b6114e86114e261196d565b83611ab8565b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613b48565b60405180910390fd5b61153384848484611eb8565b50505050565b606061154482611993565b611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613ae8565b60405180910390fd5b600061158d611f14565b905060008151116115ad57604051806020016040528060008152506115d8565b806115b784611fa6565b6040516020016115c89291906137fe565b6040516020818303038152906040525b915050919050565b6115e861196d565b73ffffffffffffffffffffffffffffffffffffffff1661160661120a565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613aa8565b60405180910390fd5b600c548111156116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613b88565b60405180910390fd5b60006116ab610bc8565b905060005b828110156116e0576116cd8482846116c89190613cf0565b611975565b80806116d890613eed565b9150506116b0565b5081600c60008282546116f39190613dd1565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61179b61196d565b73ffffffffffffffffffffffffffffffffffffffff166117b961120a565b73ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613aa8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187690613948565b60405180910390fd5b61188881611df2565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611966575061196582612153565b5b9050919050565b600033905090565b61198f8282604051806020016040528060008152506121bd565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a7283610f34565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ac382611993565b611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af9906139c8565b60405180910390fd5b6000611b0d83610f34565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b7c57508373ffffffffffffffffffffffffffffffffffffffff16611b6484610a18565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b8d5750611b8c81856116ff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bb682610f34565b73ffffffffffffffffffffffffffffffffffffffff1614611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390613ac8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613988565b60405180910390fd5b611c87838383612218565b611c926000826119ff565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ce29190613dd1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d399190613cf0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ec3848484611b96565b611ecf8484848461232c565b611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0590613928565b60405180910390fd5b50505050565b6060600b8054611f2390613ebb565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4f90613ebb565b8015611f9c5780601f10611f7157610100808354040283529160200191611f9c565b820191906000526020600020905b815481529060010190602001808311611f7f57829003601f168201915b5050505050905090565b60606000821415611fee576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061214e565b600082905060005b6000821461202057808061200990613eed565b915050600a826120199190613d46565b9150611ff6565b60008167ffffffffffffffff811115612062577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120945781602001600182028036833780820191505090505b5090505b60008514612147576001826120ad9190613dd1565b9150600a856120bc9190613f36565b60306120c89190613cf0565b60f81b818381518110612104577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121409190613d46565b9450612098565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121c783836124c3565b6121d4600084848461232c565b612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90613928565b60405180910390fd5b505050565b612223838383612691565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122665761226181612696565b6122a5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122a4576122a383826126df565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122e8576122e38161284c565b612327565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461232657612325828261298f565b5b5b505050565b600061234d8473ffffffffffffffffffffffffffffffffffffffff16612a0e565b156124b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261237661196d565b8786866040518563ffffffff1660e01b8152600401612398949392919061383d565b602060405180830381600087803b1580156123b257600080fd5b505af19250505080156123e357506040513d601f19601f820116820180604052508101906123e09190612df6565b60015b612466573d8060008114612413576040519150601f19603f3d011682016040523d82523d6000602084013e612418565b606091505b5060008151141561245e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245590613928565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124bb565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90613a68565b60405180910390fd5b61253c81611993565b1561257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390613968565b60405180910390fd5b61258860008383612218565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125d89190613cf0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126ec84610fe6565b6126f69190613dd1565b90506000600760008481526020019081526020016000205490508181146127db576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128609190613dd1565b90506000600960008481526020019081526020016000205490506000600883815481106128b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106128fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612973577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061299a83610fe6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612a2d90613ebb565b90600052602060002090601f016020900481019282612a4f5760008555612a96565b82601f10612a6857805160ff1916838001178555612a96565b82800160010185558215612a96579182015b82811115612a95578251825591602001919060010190612a7a565b5b509050612aa39190612aa7565b5090565b5b80821115612ac0576000816000905550600101612aa8565b5090565b6000612ad7612ad284613c14565b613be3565b905082815260208101848484011115612aef57600080fd5b612afa848285613e79565b509392505050565b6000612b15612b1084613c44565b613be3565b905082815260208101848484011115612b2d57600080fd5b612b38848285613e79565b509392505050565b600081359050612b4f81614034565b92915050565b600081359050612b648161404b565b92915050565b600081359050612b7981614062565b92915050565b600081519050612b8e81614062565b92915050565b600082601f830112612ba557600080fd5b8135612bb5848260208601612ac4565b91505092915050565b600082601f830112612bcf57600080fd5b8135612bdf848260208601612b02565b91505092915050565b600081359050612bf781614079565b92915050565b600060208284031215612c0f57600080fd5b6000612c1d84828501612b40565b91505092915050565b60008060408385031215612c3957600080fd5b6000612c4785828601612b40565b9250506020612c5885828601612b40565b9150509250929050565b600080600060608486031215612c7757600080fd5b6000612c8586828701612b40565b9350506020612c9686828701612b40565b9250506040612ca786828701612be8565b9150509250925092565b60008060008060808587031215612cc757600080fd5b6000612cd587828801612b40565b9450506020612ce687828801612b40565b9350506040612cf787828801612be8565b925050606085013567ffffffffffffffff811115612d1457600080fd5b612d2087828801612b94565b91505092959194509250565b60008060408385031215612d3f57600080fd5b6000612d4d85828601612b40565b9250506020612d5e85828601612b55565b9150509250929050565b60008060408385031215612d7b57600080fd5b6000612d8985828601612b40565b9250506020612d9a85828601612be8565b9150509250929050565b600060208284031215612db657600080fd5b6000612dc484828501612b55565b91505092915050565b600060208284031215612ddf57600080fd5b6000612ded84828501612b6a565b91505092915050565b600060208284031215612e0857600080fd5b6000612e1684828501612b7f565b91505092915050565b600060208284031215612e3157600080fd5b600082013567ffffffffffffffff811115612e4b57600080fd5b612e5784828501612bbe565b91505092915050565b600060208284031215612e7257600080fd5b6000612e8084828501612be8565b91505092915050565b6000612e9583836137e0565b60208301905092915050565b612eaa81613e05565b82525050565b6000612ebb82613c84565b612ec58185613cb2565b9350612ed083613c74565b8060005b83811015612f01578151612ee88882612e89565b9750612ef383613ca5565b925050600181019050612ed4565b5085935050505092915050565b612f1781613e17565b82525050565b6000612f2882613c8f565b612f328185613cc3565b9350612f42818560208601613e88565b612f4b81614023565b840191505092915050565b6000612f6182613c9a565b612f6b8185613cd4565b9350612f7b818560208601613e88565b612f8481614023565b840191505092915050565b6000612f9a82613c9a565b612fa48185613ce5565b9350612fb4818560208601613e88565b80840191505092915050565b6000612fcd600b83613cd4565b91507f53616c65207061757365640000000000000000000000000000000000000000006000830152602082019050919050565b600061300d602b83613cd4565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613073603283613cd4565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006130d9602683613cd4565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061313f601c83613cd4565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061317f602483613cd4565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131e5601983613cd4565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613225602c83613cd4565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061328b603883613cd4565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006132f1602a83613cd4565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613357602983613cd4565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006133bd602b83613cd4565b91507f596f752063616e206d696e742061206d6178696d756d206f662032302045746860008301527f65757265756d53636170650000000000000000000000000000000000000000006020830152604082019050919050565b6000613423602083613cd4565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613463602c83613cd4565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006134c9602083613cd4565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613509602983613cd4565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061356f602f83613cd4565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006135d5602183613cd4565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061363b601983613cd4565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b600061367b603183613cd4565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006136e1602c83613cd4565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613747601e83613cd4565b91507f4578636565647320726573657276656420457468657265756d536361706500006000830152602082019050919050565b6000613787602583613cd4565b91507f45786365656473206d6178696d756d2045746865757265756d5363617065207360008301527f7570706c790000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6137e981613e6f565b82525050565b6137f881613e6f565b82525050565b600061380a8285612f8f565b91506138168284612f8f565b91508190509392505050565b60006020820190506138376000830184612ea1565b92915050565b60006080820190506138526000830187612ea1565b61385f6020830186612ea1565b61386c60408301856137ef565b818103606083015261387e8184612f1d565b905095945050505050565b600060208201905081810360008301526138a38184612eb0565b905092915050565b60006020820190506138c06000830184612f0e565b92915050565b600060208201905081810360008301526138e08184612f56565b905092915050565b6000602082019050818103600083015261390181612fc0565b9050919050565b6000602082019050818103600083015261392181613000565b9050919050565b6000602082019050818103600083015261394181613066565b9050919050565b60006020820190508181036000830152613961816130cc565b9050919050565b6000602082019050818103600083015261398181613132565b9050919050565b600060208201905081810360008301526139a181613172565b9050919050565b600060208201905081810360008301526139c1816131d8565b9050919050565b600060208201905081810360008301526139e181613218565b9050919050565b60006020820190508181036000830152613a018161327e565b9050919050565b60006020820190508181036000830152613a21816132e4565b9050919050565b60006020820190508181036000830152613a418161334a565b9050919050565b60006020820190508181036000830152613a61816133b0565b9050919050565b60006020820190508181036000830152613a8181613416565b9050919050565b60006020820190508181036000830152613aa181613456565b9050919050565b60006020820190508181036000830152613ac1816134bc565b9050919050565b60006020820190508181036000830152613ae1816134fc565b9050919050565b60006020820190508181036000830152613b0181613562565b9050919050565b60006020820190508181036000830152613b21816135c8565b9050919050565b60006020820190508181036000830152613b418161362e565b9050919050565b60006020820190508181036000830152613b618161366e565b9050919050565b60006020820190508181036000830152613b81816136d4565b9050919050565b60006020820190508181036000830152613ba18161373a565b9050919050565b60006020820190508181036000830152613bc18161377a565b9050919050565b6000602082019050613bdd60008301846137ef565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613c0a57613c09613ff4565b5b8060405250919050565b600067ffffffffffffffff821115613c2f57613c2e613ff4565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613c5f57613c5e613ff4565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cfb82613e6f565b9150613d0683613e6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d3b57613d3a613f67565b5b828201905092915050565b6000613d5182613e6f565b9150613d5c83613e6f565b925082613d6c57613d6b613f96565b5b828204905092915050565b6000613d8282613e6f565b9150613d8d83613e6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613dc657613dc5613f67565b5b828202905092915050565b6000613ddc82613e6f565b9150613de783613e6f565b925082821015613dfa57613df9613f67565b5b828203905092915050565b6000613e1082613e4f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613ea6578082015181840152602081019050613e8b565b83811115613eb5576000848401525b50505050565b60006002820490506001821680613ed357607f821691505b60208210811415613ee757613ee6613fc5565b5b50919050565b6000613ef882613e6f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2b57613f2a613f67565b5b600182019050919050565b6000613f4182613e6f565b9150613f4c83613e6f565b925082613f5c57613f5b613f96565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61403d81613e05565b811461404857600080fd5b50565b61405481613e17565b811461405f57600080fd5b50565b61406b81613e23565b811461407657600080fd5b50565b61408281613e6f565b811461408d57600080fd5b5056fea2646970667358221220718824d1d647f373db775cfffb23d48423ca2cdc448dd282439f172422ed7b5464736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000021687474703a2f2f6170692e657468657265756d73636170652e636f6d2f6e66742f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): http://api.ethereumscape.com/nft/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [2] : 687474703a2f2f6170692e657468657265756d73636170652e636f6d2f6e6674
Arg [3] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43184:2371:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36967:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45317:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24859:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43643:560;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26418:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43386:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37607:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27308:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37275:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27718:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44211:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43420:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37797:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44784:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24553:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24283:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;;;;;;;;;;;:::i;:::-;;45405:147;;;:::i;:::-;;3907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44561:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25028:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44894:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26711:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27974:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25203:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44983:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27077:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4807:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36967:224;37069:4;37108:35;37093:50;;;:11;:50;;;;:90;;;;37147:36;37171:11;37147:23;:36::i;:::-;37093:90;37086:97;;36967:224;;;:::o;45317:74::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45380:3:::1;45370:7;;:13;;;;;;;;;;;;;;;;;;45317:74:::0;:::o;24859:100::-;24913:13;24946:5;24939:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:100;:::o;43643:560::-;43696:14;43713:13;:11;:13::i;:::-;43696:30;;43747:7;;;;;;;;;;;43746:8;43737:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43826:2;43820:3;:8;43811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43948:9;;43941:4;:16;;;;:::i;:::-;43935:3;43926:6;:12;;;;:::i;:::-;:31;43917:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;44047:3;44038:6;;:12;;;;:::i;:::-;44025:9;:25;;44016:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;44110:9;44106:90;44125:3;44121:1;:7;44106:90;;;44149:35;44160:10;44181:1;44172:6;:10;;;;:::i;:::-;44149:9;:35::i;:::-;44130:3;;;;;:::i;:::-;;;;44106:90;;;;43643:560;;:::o;26418:221::-;26494:7;26522:16;26530:7;26522;:16::i;:::-;26514:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26607:15;:24;26623:7;26607:24;;;;;;;;;;;;;;;;;;;;;26600:31;;26418:221;;;:::o;25941:411::-;26022:13;26038:23;26053:7;26038:14;:23::i;:::-;26022:39;;26086:5;26080:11;;:2;:11;;;;26072:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26180:5;26164:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26189:37;26206:5;26213:12;:10;:12::i;:::-;26189:16;:37::i;:::-;26164:62;26142:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26323:21;26332:2;26336:7;26323:8;:21::i;:::-;25941:411;;;:::o;43386:27::-;;;;;;;;;;;;;:::o;37607:113::-;37668:7;37695:10;:17;;;;37688:24;;37607:113;:::o;27308:339::-;27503:41;27522:12;:10;:12::i;:::-;27536:7;27503:18;:41::i;:::-;27495:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27611:28;27621:4;27627:2;27631:7;27611:9;:28::i;:::-;27308:339;;;:::o;37275:256::-;37372:7;37408:23;37425:5;37408:16;:23::i;:::-;37400:5;:31;37392:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37497:12;:19;37510:5;37497:19;;;;;;;;;;;;;;;:26;37517:5;37497:26;;;;;;;;;;;;37490:33;;37275:256;;;;:::o;27718:185::-;27856:39;27873:4;27879:2;27883:7;27856:39;;;;;;;;;;;;:16;:39::i;:::-;27718:185;;;:::o;44211:342::-;44270:16;44299:18;44320:17;44330:6;44320:9;:17::i;:::-;44299:38;;44350:25;44392:10;44378:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44350:53;;44418:9;44414:106;44433:10;44429:1;:14;44414:106;;;44478:30;44498:6;44506:1;44478:19;:30::i;:::-;44464:8;44473:1;44464:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;44445:3;;;;;:::i;:::-;;;;44414:106;;;;44537:8;44530:15;;;;44211:342;;;:::o;43420:31::-;;;;;;;;;;;;;:::o;37797:233::-;37872:7;37908:30;:28;:30::i;:::-;37900:5;:38;37892:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38005:10;38016:5;38005:17;;;;;;;;;;;;;;;;;;;;;;;;37998:24;;37797:233;;;:::o;44784:102::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44871:7:::1;44855:13;:23;;;;;;;;;;;;:::i;:::-;;44784:102:::0;:::o;24553:239::-;24625:7;24645:13;24661:7;:16;24669:7;24661:16;;;;;;;;;;;;;;;;;;;;;24645:32;;24713:1;24696:19;;:5;:19;;;;24688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24779:5;24772:12;;;24553:239;;;:::o;24283:208::-;24355:7;24400:1;24383:19;;:5;:19;;;;24375:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24467:9;:16;24477:5;24467:16;;;;;;;;;;;;;;;;24460:23;;24283:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;45405:147::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45464:13:::1;45480:21;45464:37;;45528:2;;;;;;;;;;;45520:16;;:23;45537:5;45520:23;;;;;;;;;;;;;;;;;;;;;;;45512:32;;;::::0;::::1;;4198:1;45405:147::o:0;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;44561:93::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44637:9:::1;44628:6;:18;;;;44561:93:::0;:::o;25028:104::-;25084:13;25117:7;25110:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25028:104;:::o;44894:81::-;44935:7;44961:6;;44954:13;;44894:81;:::o;26711:295::-;26826:12;:10;:12::i;:::-;26814:24;;:8;:24;;;;26806:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26926:8;26881:18;:32;26900:12;:10;:12::i;:::-;26881:32;;;;;;;;;;;;;;;:42;26914:8;26881:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26979:8;26950:48;;26965:12;:10;:12::i;:::-;26950:48;;;26989:8;26950:48;;;;;;:::i;:::-;;;;;;;;26711:295;;:::o;27974:328::-;28149:41;28168:12;:10;:12::i;:::-;28182:7;28149:18;:41::i;:::-;28141:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28255:39;28269:4;28275:2;28279:7;28288:5;28255:13;:39::i;:::-;27974:328;;;;:::o;25203:334::-;25276:13;25310:16;25318:7;25310;:16::i;:::-;25302:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25391:21;25415:10;:8;:10::i;:::-;25391:34;;25467:1;25449:7;25443:21;:25;:86;;;;;;;;;;;;;;;;;25495:7;25504:18;:7;:16;:18::i;:::-;25478:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25443:86;25436:93;;;25203:334;;;:::o;44983:326::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45083:9:::1;;45072:7;:20;;45063:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45141:14;45158:13;:11;:13::i;:::-;45141:30;;45186:9;45182:87;45201:7;45197:1;:11;45182:87;;;45229:28;45240:3;45254:1;45245:6;:10;;;;:::i;:::-;45229:9;:28::i;:::-;45210:3;;;;;:::i;:::-;;;;45182:87;;;;45294:7;45281:9;;:20;;;;;;;:::i;:::-;;;;;;;;4198:1;44983:326:::0;;:::o;27077:164::-;27174:4;27198:18;:25;27217:5;27198:25;;;;;;;;;;;;;;;:35;27224:8;27198:35;;;;;;;;;;;;;;;;;;;;;;;;;27191:42;;27077:164;;;;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;;;4888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;23914:305::-;24016:4;24068:25;24053:40;;;:11;:40;;;;:105;;;;24125:33;24110:48;;;:11;:48;;;;24053:105;:158;;;;24175:36;24199:11;24175:23;:36::i;:::-;24053:158;24033:178;;23914:305;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;30796:110::-;30872:26;30882:2;30886:7;30872:26;;;;;;;;;;;;:9;:26::i;:::-;30796:110;;:::o;29812:127::-;29877:4;29929:1;29901:30;;:7;:16;29909:7;29901:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29894:37;;29812:127;;;:::o;33794:174::-;33896:2;33869:15;:24;33885:7;33869:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33952:7;33948:2;33914:46;;33923:23;33938:7;33923:14;:23::i;:::-;33914:46;;;;;;;;;;;;33794:174;;:::o;30106:348::-;30199:4;30224:16;30232:7;30224;:16::i;:::-;30216:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30300:13;30316:23;30331:7;30316:14;:23::i;:::-;30300:39;;30369:5;30358:16;;:7;:16;;;:51;;;;30402:7;30378:31;;:20;30390:7;30378:11;:20::i;:::-;:31;;;30358:51;:87;;;;30413:32;30430:5;30437:7;30413:16;:32::i;:::-;30358:87;30350:96;;;30106:348;;;;:::o;33098:578::-;33257:4;33230:31;;:23;33245:7;33230:14;:23::i;:::-;:31;;;33222:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:1;33326:16;;:2;:16;;;;33318:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:39;33417:4;33423:2;33427:7;33396:20;:39::i;:::-;33500:29;33517:1;33521:7;33500:8;:29::i;:::-;33561:1;33542:9;:15;33552:4;33542:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33590:1;33573:9;:13;33583:2;33573:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33621:2;33602:7;:16;33610:7;33602:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33660:7;33656:2;33641:27;;33650:4;33641:27;;;;;;;;;;;;33098:578;;;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5007:173;;:::o;29184:315::-;29341:28;29351:4;29357:2;29361:7;29341:9;:28::i;:::-;29388:48;29411:4;29417:2;29421:7;29430:5;29388:22;:48::i;:::-;29380:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:315;;;;:::o;44662:114::-;44722:13;44755;44748:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44662:114;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;15893:157::-;15978:4;16017:25;16002:40;;;:11;:40;;;;15995:47;;15893:157;;;:::o;31133:321::-;31263:18;31269:2;31273:7;31263:5;:18::i;:::-;31314:54;31345:1;31349:2;31353:7;31362:5;31314:22;:54::i;:::-;31292:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31133:321;;;:::o;38643:589::-;38787:45;38814:4;38820:2;38824:7;38787:26;:45::i;:::-;38865:1;38849:18;;:4;:18;;;38845:187;;;38884:40;38916:7;38884:31;:40::i;:::-;38845:187;;;38954:2;38946:10;;:4;:10;;;38942:90;;38973:47;39006:4;39012:7;38973:32;:47::i;:::-;38942:90;38845:187;39060:1;39046:16;;:2;:16;;;39042:183;;;39079:45;39116:7;39079:36;:45::i;:::-;39042:183;;;39152:4;39146:10;;:2;:10;;;39142:83;;39173:40;39201:2;39205:7;39173:27;:40::i;:::-;39142:83;39042:183;38643:589;;;:::o;34533:799::-;34688:4;34709:15;:2;:13;;;:15::i;:::-;34705:620;;;34761:2;34745:36;;;34782:12;:10;:12::i;:::-;34796:4;34802:7;34811:5;34745:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34741:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35004:1;34987:6;:13;:18;34983:272;;;35030:60;;;;;;;;;;:::i;:::-;;;;;;;;34983:272;35205:6;35199:13;35190:6;35186:2;35182:15;35175:38;34741:529;34878:41;;;34868:51;;;:6;:51;;;;34861:58;;;;;34705:620;35309:4;35302:11;;34533:799;;;;;;;:::o;31790:382::-;31884:1;31870:16;;:2;:16;;;;31862:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31943:16;31951:7;31943;:16::i;:::-;31942:17;31934:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32005:45;32034:1;32038:2;32042:7;32005:20;:45::i;:::-;32080:1;32063:9;:13;32073:2;32063:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32111:2;32092:7;:16;32100:7;32092:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32156:7;32152:2;32131:33;;32148:1;32131:33;;;;;;;;;;;;31790:382;;:::o;35904:126::-;;;;:::o;39955:164::-;40059:10;:17;;;;40032:15;:24;40048:7;40032:24;;;;;;;;;;;:44;;;;40087:10;40103:7;40087:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39955:164;:::o;40746:988::-;41012:22;41062:1;41037:22;41054:4;41037:16;:22::i;:::-;:26;;;;:::i;:::-;41012:51;;41074:18;41095:17;:26;41113:7;41095:26;;;;;;;;;;;;41074:47;;41242:14;41228:10;:28;41224:328;;41273:19;41295:12;:18;41308:4;41295:18;;;;;;;;;;;;;;;:34;41314:14;41295:34;;;;;;;;;;;;41273:56;;41379:11;41346:12;:18;41359:4;41346:18;;;;;;;;;;;;;;;:30;41365:10;41346:30;;;;;;;;;;;:44;;;;41496:10;41463:17;:30;41481:11;41463:30;;;;;;;;;;;:43;;;;41224:328;;41648:17;:26;41666:7;41648:26;;;;;;;;;;;41641:33;;;41692:12;:18;41705:4;41692:18;;;;;;;;;;;;;;;:34;41711:14;41692:34;;;;;;;;;;;41685:41;;;40746:988;;;;:::o;42029:1079::-;42282:22;42327:1;42307:10;:17;;;;:21;;;;:::i;:::-;42282:46;;42339:18;42360:15;:24;42376:7;42360:24;;;;;;;;;;;;42339:45;;42711:19;42733:10;42744:14;42733:26;;;;;;;;;;;;;;;;;;;;;;;;42711:48;;42797:11;42772:10;42783;42772:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42908:10;42877:15;:28;42893:11;42877:28;;;;;;;;;;;:41;;;;43049:15;:24;43065:7;43049:24;;;;;;;;;;;43042:31;;;43084:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42029:1079;;;;:::o;39533:221::-;39618:14;39635:20;39652:2;39635:16;:20::i;:::-;39618:37;;39693:7;39666:12;:16;39679:2;39666:16;;;;;;;;;;;;;;;:24;39683:6;39666:24;;;;;;;;;;;:34;;;;39740:6;39711:17;:26;39729:7;39711:26;;;;;;;;;;;:35;;;;39533:221;;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8657:309::-;;8820:67;8884:2;8879:3;8820:67;:::i;:::-;8813:74;;8917:13;8913:1;8908:3;8904:11;8897:34;8957:2;8952:3;8948:12;8941:19;;8803:163;;;:::o;8972:375::-;;9135:67;9199:2;9194:3;9135:67;:::i;:::-;9128:74;;9232:34;9228:1;9223:3;9219:11;9212:55;9298:13;9293:2;9288:3;9284:12;9277:35;9338:2;9333:3;9329:12;9322:19;;9118:229;;;:::o;9353:382::-;;9516:67;9580:2;9575:3;9516:67;:::i;:::-;9509:74;;9613:34;9609:1;9604:3;9600:11;9593:55;9679:20;9674:2;9669:3;9665:12;9658:42;9726:2;9721:3;9717:12;9710:19;;9499:236;;;:::o;9741:370::-;;9904:67;9968:2;9963:3;9904:67;:::i;:::-;9897:74;;10001:34;9997:1;9992:3;9988:11;9981:55;10067:8;10062:2;10057:3;10053:12;10046:30;10102:2;10097:3;10093:12;10086:19;;9887:224;;;:::o;10117:326::-;;10280:67;10344:2;10339:3;10280:67;:::i;:::-;10273:74;;10377:30;10373:1;10368:3;10364:11;10357:51;10434:2;10429:3;10425:12;10418:19;;10263:180;;;:::o;10449:368::-;;10612:67;10676:2;10671:3;10612:67;:::i;:::-;10605:74;;10709:34;10705:1;10700:3;10696:11;10689:55;10775:6;10770:2;10765:3;10761:12;10754:28;10808:2;10803:3;10799:12;10792:19;;10595:222;;;:::o;10823:323::-;;10986:67;11050:2;11045:3;10986:67;:::i;:::-;10979:74;;11083:27;11079:1;11074:3;11070:11;11063:48;11137:2;11132:3;11128:12;11121:19;;10969:177;;;:::o;11152:376::-;;11315:67;11379:2;11374:3;11315:67;:::i;:::-;11308:74;;11412:34;11408:1;11403:3;11399:11;11392:55;11478:14;11473:2;11468:3;11464:12;11457:36;11519:2;11514:3;11510:12;11503:19;;11298:230;;;:::o;11534:388::-;;11697:67;11761:2;11756:3;11697:67;:::i;:::-;11690:74;;11794:34;11790:1;11785:3;11781:11;11774:55;11860:26;11855:2;11850:3;11846:12;11839:48;11913:2;11908:3;11904:12;11897:19;;11680:242;;;:::o;11928:374::-;;12091:67;12155:2;12150:3;12091:67;:::i;:::-;12084:74;;12188:34;12184:1;12179:3;12175:11;12168:55;12254:12;12249:2;12244:3;12240:12;12233:34;12293:2;12288:3;12284:12;12277:19;;12074:228;;;:::o;12308:373::-;;12471:67;12535:2;12530:3;12471:67;:::i;:::-;12464:74;;12568:34;12564:1;12559:3;12555:11;12548:55;12634:11;12629:2;12624:3;12620:12;12613:33;12672:2;12667:3;12663:12;12656:19;;12454:227;;;:::o;12687:375::-;;12850:67;12914:2;12909:3;12850:67;:::i;:::-;12843:74;;12947:34;12943:1;12938:3;12934:11;12927:55;13013:13;13008:2;13003:3;12999:12;12992:35;13053:2;13048:3;13044:12;13037:19;;12833:229;;;:::o;13068:330::-;;13231:67;13295:2;13290:3;13231:67;:::i;:::-;13224:74;;13328:34;13324:1;13319:3;13315:11;13308:55;13389:2;13384:3;13380:12;13373:19;;13214:184;;;:::o;13404:376::-;;13567:67;13631:2;13626:3;13567:67;:::i;:::-;13560:74;;13664:34;13660:1;13655:3;13651:11;13644:55;13730:14;13725:2;13720:3;13716:12;13709:36;13771:2;13766:3;13762:12;13755:19;;13550:230;;;:::o;13786:330::-;;13949:67;14013:2;14008:3;13949:67;:::i;:::-;13942:74;;14046:34;14042:1;14037:3;14033:11;14026:55;14107:2;14102:3;14098:12;14091:19;;13932:184;;;:::o;14122:373::-;;14285:67;14349:2;14344:3;14285:67;:::i;:::-;14278:74;;14382:34;14378:1;14373:3;14369:11;14362:55;14448:11;14443:2;14438:3;14434:12;14427:33;14486:2;14481:3;14477:12;14470:19;;14268:227;;;:::o;14501:379::-;;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14761:34;14757:1;14752:3;14748:11;14741:55;14827:17;14822:2;14817:3;14813:12;14806:39;14871:2;14866:3;14862:12;14855:19;;14647:233;;;:::o;14886:365::-;;15049:67;15113:2;15108:3;15049:67;:::i;:::-;15042:74;;15146:34;15142:1;15137:3;15133:11;15126:55;15212:3;15207:2;15202:3;15198:12;15191:25;15242:2;15237:3;15233:12;15226:19;;15032:219;;;:::o;15257:323::-;;15420:67;15484:2;15479:3;15420:67;:::i;:::-;15413:74;;15517:27;15513:1;15508:3;15504:11;15497:48;15571:2;15566:3;15562:12;15555:19;;15403:177;;;:::o;15586:381::-;;15749:67;15813:2;15808:3;15749:67;:::i;:::-;15742:74;;15846:34;15842:1;15837:3;15833:11;15826:55;15912:19;15907:2;15902:3;15898:12;15891:41;15958:2;15953:3;15949:12;15942:19;;15732:235;;;:::o;15973:376::-;;16136:67;16200:2;16195:3;16136:67;:::i;:::-;16129:74;;16233:34;16229:1;16224:3;16220:11;16213:55;16299:14;16294:2;16289:3;16285:12;16278:36;16340:2;16335:3;16331:12;16324:19;;16119:230;;;:::o;16355:328::-;;16518:67;16582:2;16577:3;16518:67;:::i;:::-;16511:74;;16615:32;16611:1;16606:3;16602:11;16595:53;16674:2;16669:3;16665:12;16658:19;;16501:182;;;:::o;16689:369::-;;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16949:34;16945:1;16940:3;16936:11;16929:55;17015:7;17010:2;17005:3;17001:12;16994:29;17049:2;17044:3;17040:12;17033:19;;16835:223;;;:::o;17064:108::-;17141:24;17159:5;17141:24;:::i;:::-;17136:3;17129:37;17119:53;;:::o;17178:118::-;17265:24;17283:5;17265:24;:::i;:::-;17260:3;17253:37;17243:53;;:::o;17302:435::-;;17504:95;17595:3;17586:6;17504:95;:::i;:::-;17497:102;;17616:95;17707:3;17698:6;17616:95;:::i;:::-;17609:102;;17728:3;17721:10;;17486:251;;;;;:::o;17743:222::-;;17874:2;17863:9;17859:18;17851:26;;17887:71;17955:1;17944:9;17940:17;17931:6;17887:71;:::i;:::-;17841:124;;;;:::o;17971:640::-;;18204:3;18193:9;18189:19;18181:27;;18218:71;18286:1;18275:9;18271:17;18262:6;18218:71;:::i;:::-;18299:72;18367:2;18356:9;18352:18;18343:6;18299:72;:::i;:::-;18381;18449:2;18438:9;18434:18;18425:6;18381:72;:::i;:::-;18500:9;18494:4;18490:20;18485:2;18474:9;18470:18;18463:48;18528:76;18599:4;18590:6;18528:76;:::i;:::-;18520:84;;18171:440;;;;;;;:::o;18617:373::-;;18798:2;18787:9;18783:18;18775:26;;18847:9;18841:4;18837:20;18833:1;18822:9;18818:17;18811:47;18875:108;18978:4;18969:6;18875:108;:::i;:::-;18867:116;;18765:225;;;;:::o;18996:210::-;;19121:2;19110:9;19106:18;19098:26;;19134:65;19196:1;19185:9;19181:17;19172:6;19134:65;:::i;:::-;19088:118;;;;:::o;19212:313::-;;19363:2;19352:9;19348:18;19340:26;;19412:9;19406:4;19402:20;19398:1;19387:9;19383:17;19376:47;19440:78;19513:4;19504:6;19440:78;:::i;:::-;19432:86;;19330:195;;;;:::o;19531:419::-;;19735:2;19724:9;19720:18;19712:26;;19784:9;19778:4;19774:20;19770:1;19759:9;19755:17;19748:47;19812:131;19938:4;19812:131;:::i;:::-;19804:139;;19702:248;;;:::o;19956:419::-;;20160:2;20149:9;20145:18;20137:26;;20209:9;20203:4;20199:20;20195:1;20184:9;20180:17;20173:47;20237:131;20363:4;20237:131;:::i;:::-;20229:139;;20127:248;;;:::o;20381:419::-;;20585:2;20574:9;20570:18;20562:26;;20634:9;20628:4;20624:20;20620:1;20609:9;20605:17;20598:47;20662:131;20788:4;20662:131;:::i;:::-;20654:139;;20552:248;;;:::o;20806:419::-;;21010:2;20999:9;20995:18;20987:26;;21059:9;21053:4;21049:20;21045:1;21034:9;21030:17;21023:47;21087:131;21213:4;21087:131;:::i;:::-;21079:139;;20977:248;;;:::o;21231:419::-;;21435:2;21424:9;21420:18;21412:26;;21484:9;21478:4;21474:20;21470:1;21459:9;21455:17;21448:47;21512:131;21638:4;21512:131;:::i;:::-;21504:139;;21402:248;;;:::o;21656:419::-;;21860:2;21849:9;21845:18;21837:26;;21909:9;21903:4;21899:20;21895:1;21884:9;21880:17;21873:47;21937:131;22063:4;21937:131;:::i;:::-;21929:139;;21827:248;;;:::o;22081:419::-;;22285:2;22274:9;22270:18;22262:26;;22334:9;22328:4;22324:20;22320:1;22309:9;22305:17;22298:47;22362:131;22488:4;22362:131;:::i;:::-;22354:139;;22252:248;;;:::o;22506:419::-;;22710:2;22699:9;22695:18;22687:26;;22759:9;22753:4;22749:20;22745:1;22734:9;22730:17;22723:47;22787:131;22913:4;22787:131;:::i;:::-;22779:139;;22677:248;;;:::o;22931:419::-;;23135:2;23124:9;23120:18;23112:26;;23184:9;23178:4;23174:20;23170:1;23159:9;23155:17;23148:47;23212:131;23338:4;23212:131;:::i;:::-;23204:139;;23102:248;;;:::o;23356:419::-;;23560:2;23549:9;23545:18;23537:26;;23609:9;23603:4;23599:20;23595:1;23584:9;23580:17;23573:47;23637:131;23763:4;23637:131;:::i;:::-;23629:139;;23527:248;;;:::o;23781:419::-;;23985:2;23974:9;23970:18;23962:26;;24034:9;24028:4;24024:20;24020:1;24009:9;24005:17;23998:47;24062:131;24188:4;24062:131;:::i;:::-;24054:139;;23952:248;;;:::o;24206:419::-;;24410:2;24399:9;24395:18;24387:26;;24459:9;24453:4;24449:20;24445:1;24434:9;24430:17;24423:47;24487:131;24613:4;24487:131;:::i;:::-;24479:139;;24377:248;;;:::o;24631:419::-;;24835:2;24824:9;24820:18;24812:26;;24884:9;24878:4;24874:20;24870:1;24859:9;24855:17;24848:47;24912:131;25038:4;24912:131;:::i;:::-;24904:139;;24802:248;;;:::o;25056:419::-;;25260:2;25249:9;25245:18;25237:26;;25309:9;25303:4;25299:20;25295:1;25284:9;25280:17;25273:47;25337:131;25463:4;25337:131;:::i;:::-;25329:139;;25227:248;;;:::o;25481:419::-;;25685:2;25674:9;25670:18;25662:26;;25734:9;25728:4;25724:20;25720:1;25709:9;25705:17;25698:47;25762:131;25888:4;25762:131;:::i;:::-;25754:139;;25652:248;;;:::o;25906:419::-;;26110:2;26099:9;26095:18;26087:26;;26159:9;26153:4;26149:20;26145:1;26134:9;26130:17;26123:47;26187:131;26313:4;26187:131;:::i;:::-;26179:139;;26077:248;;;:::o;26331:419::-;;26535:2;26524:9;26520:18;26512:26;;26584:9;26578:4;26574:20;26570:1;26559:9;26555:17;26548:47;26612:131;26738:4;26612:131;:::i;:::-;26604:139;;26502:248;;;:::o;26756:419::-;;26960:2;26949:9;26945:18;26937:26;;27009:9;27003:4;26999:20;26995:1;26984:9;26980:17;26973:47;27037:131;27163:4;27037:131;:::i;:::-;27029:139;;26927:248;;;:::o;27181:419::-;;27385:2;27374:9;27370:18;27362:26;;27434:9;27428:4;27424:20;27420:1;27409:9;27405:17;27398:47;27462:131;27588:4;27462:131;:::i;:::-;27454:139;;27352:248;;;:::o;27606:419::-;;27810:2;27799:9;27795:18;27787:26;;27859:9;27853:4;27849:20;27845:1;27834:9;27830:17;27823:47;27887:131;28013:4;27887:131;:::i;:::-;27879:139;;27777:248;;;:::o;28031:419::-;;28235:2;28224:9;28220:18;28212:26;;28284:9;28278:4;28274:20;28270:1;28259:9;28255:17;28248:47;28312:131;28438:4;28312:131;:::i;:::-;28304:139;;28202:248;;;:::o;28456:419::-;;28660:2;28649:9;28645:18;28637:26;;28709:9;28703:4;28699:20;28695:1;28684:9;28680:17;28673:47;28737:131;28863:4;28737:131;:::i;:::-;28729:139;;28627:248;;;:::o;28881:419::-;;29085:2;29074:9;29070:18;29062:26;;29134:9;29128:4;29124:20;29120:1;29109:9;29105:17;29098:47;29162:131;29288:4;29162:131;:::i;:::-;29154:139;;29052:248;;;:::o;29306:222::-;;29437:2;29426:9;29422:18;29414:26;;29450:71;29518:1;29507:9;29503:17;29494:6;29450:71;:::i;:::-;29404:124;;;;:::o;29534:283::-;;29600:2;29594:9;29584:19;;29642:4;29634:6;29630:17;29749:6;29737:10;29734:22;29713:18;29701:10;29698:34;29695:62;29692:2;;;29760:18;;:::i;:::-;29692:2;29800:10;29796:2;29789:22;29574:243;;;;:::o;29823:331::-;;29974:18;29966:6;29963:30;29960:2;;;29996:18;;:::i;:::-;29960:2;30081:4;30077:9;30070:4;30062:6;30058:17;30054:33;30046:41;;30142:4;30136;30132:15;30124:23;;29889:265;;;:::o;30160:332::-;;30312:18;30304:6;30301:30;30298:2;;;30334:18;;:::i;:::-;30298:2;30419:4;30415:9;30408:4;30400:6;30396:17;30392:33;30384:41;;30480:4;30474;30470:15;30462:23;;30227:265;;;:::o;30498:132::-;;30588:3;30580:11;;30618:4;30613:3;30609:14;30601:22;;30570:60;;;:::o;30636:114::-;;30737:5;30731:12;30721:22;;30710:40;;;:::o;30756:98::-;;30841:5;30835:12;30825:22;;30814:40;;;:::o;30860:99::-;;30946:5;30940:12;30930:22;;30919:40;;;:::o;30965:113::-;;31067:4;31062:3;31058:14;31050:22;;31040:38;;;:::o;31084:184::-;;31217:6;31212:3;31205:19;31257:4;31252:3;31248:14;31233:29;;31195:73;;;;:::o;31274:168::-;;31391:6;31386:3;31379:19;31431:4;31426:3;31422:14;31407:29;;31369:73;;;;:::o;31448:169::-;;31566:6;31561:3;31554:19;31606:4;31601:3;31597:14;31582:29;;31544:73;;;;:::o;31623:148::-;;31762:3;31747:18;;31737:34;;;;:::o;31777:305::-;;31836:20;31854:1;31836:20;:::i;:::-;31831:25;;31870:20;31888:1;31870:20;:::i;:::-;31865:25;;32024:1;31956:66;31952:74;31949:1;31946:81;31943:2;;;32030:18;;:::i;:::-;31943:2;32074:1;32071;32067:9;32060:16;;31821:261;;;;:::o;32088:185::-;;32145:20;32163:1;32145:20;:::i;:::-;32140:25;;32179:20;32197:1;32179:20;:::i;:::-;32174:25;;32218:1;32208:2;;32223:18;;:::i;:::-;32208:2;32265:1;32262;32258:9;32253:14;;32130:143;;;;:::o;32279:348::-;;32342:20;32360:1;32342:20;:::i;:::-;32337:25;;32376:20;32394:1;32376:20;:::i;:::-;32371:25;;32564:1;32496:66;32492:74;32489:1;32486:81;32481:1;32474:9;32467:17;32463:105;32460:2;;;32571:18;;:::i;:::-;32460:2;32619:1;32616;32612:9;32601:20;;32327:300;;;;:::o;32633:191::-;;32693:20;32711:1;32693:20;:::i;:::-;32688:25;;32727:20;32745:1;32727:20;:::i;:::-;32722:25;;32766:1;32763;32760:8;32757:2;;;32771:18;;:::i;:::-;32757:2;32816:1;32813;32809:9;32801:17;;32678:146;;;;:::o;32830:96::-;;32896:24;32914:5;32896:24;:::i;:::-;32885:35;;32875:51;;;:::o;32932:90::-;;33009:5;33002:13;32995:21;32984:32;;32974:48;;;:::o;33028:149::-;;33104:66;33097:5;33093:78;33082:89;;33072:105;;;:::o;33183:126::-;;33260:42;33253:5;33249:54;33238:65;;33228:81;;;:::o;33315:77::-;;33381:5;33370:16;;33360:32;;;:::o;33398:154::-;33482:6;33477:3;33472;33459:30;33544:1;33535:6;33530:3;33526:16;33519:27;33449:103;;;:::o;33558:307::-;33626:1;33636:113;33650:6;33647:1;33644:13;33636:113;;;33735:1;33730:3;33726:11;33720:18;33716:1;33711:3;33707:11;33700:39;33672:2;33669:1;33665:10;33660:15;;33636:113;;;33767:6;33764:1;33761:13;33758:2;;;33847:1;33838:6;33833:3;33829:16;33822:27;33758:2;33607:258;;;;:::o;33871:320::-;;33952:1;33946:4;33942:12;33932:22;;33999:1;33993:4;33989:12;34020:18;34010:2;;34076:4;34068:6;34064:17;34054:27;;34010:2;34138;34130:6;34127:14;34107:18;34104:38;34101:2;;;34157:18;;:::i;:::-;34101:2;33922:269;;;;:::o;34197:233::-;;34259:24;34277:5;34259:24;:::i;:::-;34250:33;;34305:66;34298:5;34295:77;34292:2;;;34375:18;;:::i;:::-;34292:2;34422:1;34415:5;34411:13;34404:20;;34240:190;;;:::o;34436:176::-;;34485:20;34503:1;34485:20;:::i;:::-;34480:25;;34519:20;34537:1;34519:20;:::i;:::-;34514:25;;34558:1;34548:2;;34563:18;;:::i;:::-;34548:2;34604:1;34601;34597:9;34592:14;;34470:142;;;;:::o;34618:180::-;34666:77;34663:1;34656:88;34763:4;34760:1;34753:15;34787:4;34784:1;34777:15;34804:180;34852:77;34849:1;34842:88;34949:4;34946:1;34939:15;34973:4;34970:1;34963:15;34990:180;35038:77;35035:1;35028:88;35135:4;35132:1;35125:15;35159:4;35156:1;35149:15;35176:180;35224:77;35221:1;35214:88;35321:4;35318:1;35311:15;35345:4;35342:1;35335:15;35362:102;;35454:2;35450:7;35445:2;35438:5;35434:14;35430:28;35420:38;;35410:54;;;:::o;35470:122::-;35543:24;35561:5;35543:24;:::i;:::-;35536:5;35533:35;35523:2;;35582:1;35579;35572:12;35523:2;35513:79;:::o;35598:116::-;35668:21;35683:5;35668:21;:::i;:::-;35661:5;35658:32;35648:2;;35704:1;35701;35694:12;35648:2;35638:76;:::o;35720:120::-;35792:23;35809:5;35792:23;:::i;:::-;35785:5;35782:34;35772:2;;35830:1;35827;35820:12;35772:2;35762:78;:::o;35846:122::-;35919:24;35937:5;35919:24;:::i;:::-;35912:5;35909:35;35899:2;;35958:1;35955;35948:12;35899:2;35889:79;:::o

Swarm Source

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