ETH Price: $3,265.02 (-0.31%)
Gas: 2 Gwei

Token

EllaDOA (EDAO)
 

Overview

Max Total Supply

0 EDAO

Holders

11

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 EDAO
0xc192f37780e08e3d559ffed929a3d377640f58da
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:
EllaDAO

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 2022-01-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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;
    }
}

/**
 * @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/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (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);
}

/**
 * @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 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(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(msg.sender, 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(msg.sender, 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(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(msg.sender, 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 {}
}

contract EllaDAO is ERC721 {

    uint16 public counter = 1;
    uint16 public maxSupply = 1000;
    uint8 public maxMintsPerWallet;
    uint public price;


    mapping(address => uint8) public _tokensMinted;

    address private owner;

    constructor() ERC721("EllaDOA", "EDAO") {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner, "You are not the owner!");
        _;
    }

    function setPrice(uint _price) external onlyOwner {
        price = _price;
    }

    function setMaxMintsPerWallet(uint8 _maxMintsPerWallet) external onlyOwner {
        maxMintsPerWallet = _maxMintsPerWallet;
    }

    function _baseURI() internal pure override returns (string memory) {
        return "ipfs://QmXTHAWHBtraXwbQkFGzhj7brNPaZUiHv49yvDS8inFmVW/";
    }

    function claim() external payable {
        require(counter <= maxSupply, "Sale finished!");
        require(_tokensMinted[msg.sender] <= maxMintsPerWallet, "Can't mint more!");
        require(msg.value == price, "Incorrect amount!");
        _safeMint(msg.sender, counter++);
        _tokensMinted[msg.sender]++;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"address","name":"","type":"address"}],"name":"_tokensMinted","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"counter","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","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":"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":"uint8","name":"_maxMintsPerWallet","type":"uint8"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600660006101000a81548161ffff021916908361ffff1602179055506103e8600660026101000a81548161ffff021916908361ffff1602179055503480156200004e57600080fd5b506040518060400160405280600781526020017f456c6c61444f41000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4544414f000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d392919062000136565b508060019080519060200190620000ec92919062000136565b50505033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200024b565b8280546200014490620001e6565b90600052602060002090601f016020900481019282620001685760008555620001b4565b82601f106200018357805160ff1916838001178555620001b4565b82800160010185558215620001b4579182015b82811115620001b357825182559160200191906001019062000196565b5b509050620001c39190620001c7565b5090565b5b80821115620001e2576000816000905550600101620001c8565b5090565b60006002820490506001821680620001ff57607f821691505b602082108114156200021657620002156200021c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612f9c806200025b6000396000f3fe6080604052600436106101355760003560e01c806370a08231116100ab578063b88d4fde1161006f578063b88d4fde146103f1578063c87b56dd1461041a578063d5abeb0114610457578063e985e9c514610482578063ece6e244146104bf578063f516a2e6146104fc57610135565b806370a082311461030c57806391b7f5ed1461034957806395d89b4114610372578063a035b1fe1461039d578063a22cb465146103c857610135565b80633ccfd60b116100fd5780633ccfd60b1461023157806342842e0e146102485780634e71d92d1461027157806356fc87e01461027b57806361bc221a146102a45780636352211e146102cf57610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df57806323b872dd14610208575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190611fb2565b610527565b60405161016e91906127f1565b60405180910390f35b34801561018357600080fd5b5061018c610609565b604051610199919061280c565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612004565b61069b565b6040516101d6919061278a565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190611f76565b610720565b005b34801561021457600080fd5b5061022f600480360381019061022a9190611e70565b61082a565b005b34801561023d57600080fd5b50610246610883565b005b34801561025457600080fd5b5061026f600480360381019061026a9190611e70565b61095c565b005b61027961097c565b005b34801561028757600080fd5b506102a2600480360381019061029d919061202d565b610b8d565b005b3480156102b057600080fd5b506102b9610c3b565b6040516102c69190612a6e565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612004565b610c4f565b604051610303919061278a565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190611e0b565b610d01565b6040516103409190612a89565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190612004565b610db9565b005b34801561037e57600080fd5b50610387610e53565b604051610394919061280c565b60405180910390f35b3480156103a957600080fd5b506103b2610ee5565b6040516103bf9190612a89565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190611f3a565b610eeb565b005b3480156103fd57600080fd5b5061041860048036038101906104139190611ebf565b610efa565b005b34801561042657600080fd5b50610441600480360381019061043c9190612004565b610f55565b60405161044e919061280c565b60405180910390f35b34801561046357600080fd5b5061046c610ffc565b6040516104799190612a6e565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190611e34565b611010565b6040516104b691906127f1565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190611e0b565b6110a4565b6040516104f39190612aa4565b60405180910390f35b34801561050857600080fd5b506105116110c4565b60405161051e9190612aa4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106025750610601826110d7565b5b9050919050565b60606000805461061890612cef565b80601f016020809104026020016040519081016040528092919081815260200182805461064490612cef565b80156106915780601f1061066657610100808354040283529160200191610691565b820191906000526020600020905b81548152906001019060200180831161067457829003601f168201915b5050505050905090565b60006106a682611141565b6106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc906129ce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072b82610c4f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390612a2e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107dc57506107db8133611010565b5b61081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108129061294e565b60405180910390fd5b61082583836111ad565b505050565b6108343382611266565b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90612a4e565b60405180910390fd5b61087e838383611344565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a9061282e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610959573d6000803e3d6000fd5b50565b61097783838360405180602001604052806000815250610efa565b505050565b600660029054906101000a900461ffff1661ffff16600660009054906101000a900461ffff1661ffff1611156109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de9061292e565b60405180910390fd5b600660049054906101000a900460ff1660ff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161115610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906128ee565b60405180910390fd5b6007543414610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906128ce565b60405180910390fd5b610b16336006600081819054906101000a900461ffff1680929190610af390612d21565b91906101000a81548161ffff021916908361ffff16021790555061ffff166115a0565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190610b7290612d95565b91906101000a81548160ff021916908360ff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c149061282e565b60405180910390fd5b80600660046101000a81548160ff021916908360ff16021790555050565b600660009054906101000a900461ffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef9061298e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d699061296e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061282e565b60405180910390fd5b8060078190555050565b606060018054610e6290612cef565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8e90612cef565b8015610edb5780601f10610eb057610100808354040283529160200191610edb565b820191906000526020600020905b815481529060010190602001808311610ebe57829003601f168201915b5050505050905090565b60075481565b610ef63383836115be565b5050565b610f043383611266565b610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90612a4e565b60405180910390fd5b610f4f8484848461172b565b50505050565b6060610f6082611141565b610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690612a0e565b60405180910390fd5b6000610fa9611787565b90506000815111610fc95760405180602001604052806000815250610ff4565b80610fd3846117a7565b604051602001610fe4929190612766565b6040516020818303038152906040525b915050919050565b600660029054906101000a900461ffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b600660049054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661122083610c4f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061127182611141565b6112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061290e565b60405180910390fd5b60006112bb83610c4f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061132a57508373ffffffffffffffffffffffffffffffffffffffff166113128461069b565b73ffffffffffffffffffffffffffffffffffffffff16145b8061133b575061133a8185611010565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661136482610c4f565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906129ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114219061288e565b60405180910390fd5b611435838383611954565b6114406000826111ad565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114909190612bea565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e79190612b63565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6115ba828260405180602001604052806000815250611959565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561162d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611624906128ae565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161171e91906127f1565b60405180910390a3505050565b611736848484611344565b611742848484846119b4565b611781576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117789061284e565b60405180910390fd5b50505050565b6060604051806060016040528060368152602001612f3160369139905090565b606060008214156117ef576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061194f565b600082905060005b6000821461182157808061180a90612d4c565b915050600a8261181a9190612bb9565b91506117f7565b60008167ffffffffffffffff811115611863577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156118955781602001600182028036833780820191505090505b5090505b60008514611948576001826118ae9190612bea565b9150600a856118bd9190612dbf565b60306118c99190612b63565b60f81b818381518110611905577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856119419190612bb9565b9450611899565b8093505050505b919050565b505050565b6119638383611b44565b61197060008484846119b4565b6119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a69061284e565b60405180910390fd5b505050565b60006119d58473ffffffffffffffffffffffffffffffffffffffff16611d12565b15611b37578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611a1994939291906127a5565b602060405180830381600087803b158015611a3357600080fd5b505af1925050508015611a6457506040513d601f19601f82011682018060405250810190611a619190611fdb565b60015b611ae7573d8060008114611a94576040519150601f19603f3d011682016040523d82523d6000602084013e611a99565b606091505b50600081511415611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad69061284e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b3c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab906129ae565b60405180910390fd5b611bbd81611141565b15611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061286e565b60405180910390fd5b611c0960008383611954565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c599190612b63565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000611d38611d3384612af0565b612abf565b905082815260208101848484011115611d5057600080fd5b611d5b848285612cad565b509392505050565b600081359050611d7281612ebd565b92915050565b600081359050611d8781612ed4565b92915050565b600081359050611d9c81612eeb565b92915050565b600081519050611db181612eeb565b92915050565b600082601f830112611dc857600080fd5b8135611dd8848260208601611d25565b91505092915050565b600081359050611df081612f02565b92915050565b600081359050611e0581612f19565b92915050565b600060208284031215611e1d57600080fd5b6000611e2b84828501611d63565b91505092915050565b60008060408385031215611e4757600080fd5b6000611e5585828601611d63565b9250506020611e6685828601611d63565b9150509250929050565b600080600060608486031215611e8557600080fd5b6000611e9386828701611d63565b9350506020611ea486828701611d63565b9250506040611eb586828701611de1565b9150509250925092565b60008060008060808587031215611ed557600080fd5b6000611ee387828801611d63565b9450506020611ef487828801611d63565b9350506040611f0587828801611de1565b925050606085013567ffffffffffffffff811115611f2257600080fd5b611f2e87828801611db7565b91505092959194509250565b60008060408385031215611f4d57600080fd5b6000611f5b85828601611d63565b9250506020611f6c85828601611d78565b9150509250929050565b60008060408385031215611f8957600080fd5b6000611f9785828601611d63565b9250506020611fa885828601611de1565b9150509250929050565b600060208284031215611fc457600080fd5b6000611fd284828501611d8d565b91505092915050565b600060208284031215611fed57600080fd5b6000611ffb84828501611da2565b91505092915050565b60006020828403121561201657600080fd5b600061202484828501611de1565b91505092915050565b60006020828403121561203f57600080fd5b600061204d84828501611df6565b91505092915050565b61205f81612c1e565b82525050565b61206e81612c30565b82525050565b600061207f82612b20565b6120898185612b36565b9350612099818560208601612cbc565b6120a281612eac565b840191505092915050565b60006120b882612b2b565b6120c28185612b47565b93506120d2818560208601612cbc565b6120db81612eac565b840191505092915050565b60006120f182612b2b565b6120fb8185612b58565b935061210b818560208601612cbc565b80840191505092915050565b6000612124601683612b47565b91507f596f7520617265206e6f7420746865206f776e657221000000000000000000006000830152602082019050919050565b6000612164603283612b47565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006121ca601c83612b47565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061220a602483612b47565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612270601983612b47565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006122b0601183612b47565b91507f496e636f727265637420616d6f756e74210000000000000000000000000000006000830152602082019050919050565b60006122f0601083612b47565b91507f43616e2774206d696e74206d6f726521000000000000000000000000000000006000830152602082019050919050565b6000612330602c83612b47565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612396600e83612b47565b91507f53616c652066696e6973686564210000000000000000000000000000000000006000830152602082019050919050565b60006123d6603883612b47565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061243c602a83612b47565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006124a2602983612b47565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612508602083612b47565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612548602c83612b47565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006125ae602983612b47565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612614602f83612b47565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061267a602183612b47565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126e0603183612b47565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b61274281612c68565b82525050565b61275181612c96565b82525050565b61276081612ca0565b82525050565b600061277282856120e6565b915061277e82846120e6565b91508190509392505050565b600060208201905061279f6000830184612056565b92915050565b60006080820190506127ba6000830187612056565b6127c76020830186612056565b6127d46040830185612748565b81810360608301526127e68184612074565b905095945050505050565b60006020820190506128066000830184612065565b92915050565b6000602082019050818103600083015261282681846120ad565b905092915050565b6000602082019050818103600083015261284781612117565b9050919050565b6000602082019050818103600083015261286781612157565b9050919050565b60006020820190508181036000830152612887816121bd565b9050919050565b600060208201905081810360008301526128a7816121fd565b9050919050565b600060208201905081810360008301526128c781612263565b9050919050565b600060208201905081810360008301526128e7816122a3565b9050919050565b60006020820190508181036000830152612907816122e3565b9050919050565b6000602082019050818103600083015261292781612323565b9050919050565b6000602082019050818103600083015261294781612389565b9050919050565b60006020820190508181036000830152612967816123c9565b9050919050565b600060208201905081810360008301526129878161242f565b9050919050565b600060208201905081810360008301526129a781612495565b9050919050565b600060208201905081810360008301526129c7816124fb565b9050919050565b600060208201905081810360008301526129e78161253b565b9050919050565b60006020820190508181036000830152612a07816125a1565b9050919050565b60006020820190508181036000830152612a2781612607565b9050919050565b60006020820190508181036000830152612a478161266d565b9050919050565b60006020820190508181036000830152612a67816126d3565b9050919050565b6000602082019050612a836000830184612739565b92915050565b6000602082019050612a9e6000830184612748565b92915050565b6000602082019050612ab96000830184612757565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612ae657612ae5612e7d565b5b8060405250919050565b600067ffffffffffffffff821115612b0b57612b0a612e7d565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612b6e82612c96565b9150612b7983612c96565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bae57612bad612df0565b5b828201905092915050565b6000612bc482612c96565b9150612bcf83612c96565b925082612bdf57612bde612e1f565b5b828204905092915050565b6000612bf582612c96565b9150612c0083612c96565b925082821015612c1357612c12612df0565b5b828203905092915050565b6000612c2982612c76565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612cda578082015181840152602081019050612cbf565b83811115612ce9576000848401525b50505050565b60006002820490506001821680612d0757607f821691505b60208210811415612d1b57612d1a612e4e565b5b50919050565b6000612d2c82612c68565b915061ffff821415612d4157612d40612df0565b5b600182019050919050565b6000612d5782612c96565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d8a57612d89612df0565b5b600182019050919050565b6000612da082612ca0565b915060ff821415612db457612db3612df0565b5b600182019050919050565b6000612dca82612c96565b9150612dd583612c96565b925082612de557612de4612e1f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612ec681612c1e565b8114612ed157600080fd5b50565b612edd81612c30565b8114612ee857600080fd5b50565b612ef481612c3c565b8114612eff57600080fd5b50565b612f0b81612c96565b8114612f1657600080fd5b50565b612f2281612ca0565b8114612f2d57600080fd5b5056fe697066733a2f2f516d58544841574842747261587762516b46477a686a3762724e50615a5569487634397976445338696e466d56572fa26469706673582212204fdf43ae110253a5d4f93159cf503af9d10e46fb0cc8a4b846d30e04b85d567664736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101355760003560e01c806370a08231116100ab578063b88d4fde1161006f578063b88d4fde146103f1578063c87b56dd1461041a578063d5abeb0114610457578063e985e9c514610482578063ece6e244146104bf578063f516a2e6146104fc57610135565b806370a082311461030c57806391b7f5ed1461034957806395d89b4114610372578063a035b1fe1461039d578063a22cb465146103c857610135565b80633ccfd60b116100fd5780633ccfd60b1461023157806342842e0e146102485780634e71d92d1461027157806356fc87e01461027b57806361bc221a146102a45780636352211e146102cf57610135565b806301ffc9a71461013a57806306fdde0314610177578063081812fc146101a2578063095ea7b3146101df57806323b872dd14610208575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190611fb2565b610527565b60405161016e91906127f1565b60405180910390f35b34801561018357600080fd5b5061018c610609565b604051610199919061280c565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c49190612004565b61069b565b6040516101d6919061278a565b60405180910390f35b3480156101eb57600080fd5b5061020660048036038101906102019190611f76565b610720565b005b34801561021457600080fd5b5061022f600480360381019061022a9190611e70565b61082a565b005b34801561023d57600080fd5b50610246610883565b005b34801561025457600080fd5b5061026f600480360381019061026a9190611e70565b61095c565b005b61027961097c565b005b34801561028757600080fd5b506102a2600480360381019061029d919061202d565b610b8d565b005b3480156102b057600080fd5b506102b9610c3b565b6040516102c69190612a6e565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612004565b610c4f565b604051610303919061278a565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e9190611e0b565b610d01565b6040516103409190612a89565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190612004565b610db9565b005b34801561037e57600080fd5b50610387610e53565b604051610394919061280c565b60405180910390f35b3480156103a957600080fd5b506103b2610ee5565b6040516103bf9190612a89565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190611f3a565b610eeb565b005b3480156103fd57600080fd5b5061041860048036038101906104139190611ebf565b610efa565b005b34801561042657600080fd5b50610441600480360381019061043c9190612004565b610f55565b60405161044e919061280c565b60405180910390f35b34801561046357600080fd5b5061046c610ffc565b6040516104799190612a6e565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190611e34565b611010565b6040516104b691906127f1565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190611e0b565b6110a4565b6040516104f39190612aa4565b60405180910390f35b34801561050857600080fd5b506105116110c4565b60405161051e9190612aa4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106025750610601826110d7565b5b9050919050565b60606000805461061890612cef565b80601f016020809104026020016040519081016040528092919081815260200182805461064490612cef565b80156106915780601f1061066657610100808354040283529160200191610691565b820191906000526020600020905b81548152906001019060200180831161067457829003601f168201915b5050505050905090565b60006106a682611141565b6106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc906129ce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061072b82610c4f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079390612a2e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107dc57506107db8133611010565b5b61081b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108129061294e565b60405180910390fd5b61082583836111ad565b505050565b6108343382611266565b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90612a4e565b60405180910390fd5b61087e838383611344565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a9061282e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610959573d6000803e3d6000fd5b50565b61097783838360405180602001604052806000815250610efa565b505050565b600660029054906101000a900461ffff1661ffff16600660009054906101000a900461ffff1661ffff1611156109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de9061292e565b60405180910390fd5b600660049054906101000a900460ff1660ff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161115610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906128ee565b60405180910390fd5b6007543414610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906128ce565b60405180910390fd5b610b16336006600081819054906101000a900461ffff1680929190610af390612d21565b91906101000a81548161ffff021916908361ffff16021790555061ffff166115a0565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900460ff1680929190610b7290612d95565b91906101000a81548160ff021916908360ff16021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c149061282e565b60405180910390fd5b80600660046101000a81548160ff021916908360ff16021790555050565b600660009054906101000a900461ffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cef9061298e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d699061296e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061282e565b60405180910390fd5b8060078190555050565b606060018054610e6290612cef565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8e90612cef565b8015610edb5780601f10610eb057610100808354040283529160200191610edb565b820191906000526020600020905b815481529060010190602001808311610ebe57829003601f168201915b5050505050905090565b60075481565b610ef63383836115be565b5050565b610f043383611266565b610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90612a4e565b60405180910390fd5b610f4f8484848461172b565b50505050565b6060610f6082611141565b610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690612a0e565b60405180910390fd5b6000610fa9611787565b90506000815111610fc95760405180602001604052806000815250610ff4565b80610fd3846117a7565b604051602001610fe4929190612766565b6040516020818303038152906040525b915050919050565b600660029054906101000a900461ffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b600660049054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661122083610c4f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061127182611141565b6112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061290e565b60405180910390fd5b60006112bb83610c4f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061132a57508373ffffffffffffffffffffffffffffffffffffffff166113128461069b565b73ffffffffffffffffffffffffffffffffffffffff16145b8061133b575061133a8185611010565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661136482610c4f565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906129ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114219061288e565b60405180910390fd5b611435838383611954565b6114406000826111ad565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114909190612bea565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e79190612b63565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6115ba828260405180602001604052806000815250611959565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561162d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611624906128ae565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161171e91906127f1565b60405180910390a3505050565b611736848484611344565b611742848484846119b4565b611781576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117789061284e565b60405180910390fd5b50505050565b6060604051806060016040528060368152602001612f3160369139905090565b606060008214156117ef576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061194f565b600082905060005b6000821461182157808061180a90612d4c565b915050600a8261181a9190612bb9565b91506117f7565b60008167ffffffffffffffff811115611863577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156118955781602001600182028036833780820191505090505b5090505b60008514611948576001826118ae9190612bea565b9150600a856118bd9190612dbf565b60306118c99190612b63565b60f81b818381518110611905577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856119419190612bb9565b9450611899565b8093505050505b919050565b505050565b6119638383611b44565b61197060008484846119b4565b6119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a69061284e565b60405180910390fd5b505050565b60006119d58473ffffffffffffffffffffffffffffffffffffffff16611d12565b15611b37578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401611a1994939291906127a5565b602060405180830381600087803b158015611a3357600080fd5b505af1925050508015611a6457506040513d601f19601f82011682018060405250810190611a619190611fdb565b60015b611ae7573d8060008114611a94576040519150601f19603f3d011682016040523d82523d6000602084013e611a99565b606091505b50600081511415611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad69061284e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b3c565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab906129ae565b60405180910390fd5b611bbd81611141565b15611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061286e565b60405180910390fd5b611c0960008383611954565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c599190612b63565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000611d38611d3384612af0565b612abf565b905082815260208101848484011115611d5057600080fd5b611d5b848285612cad565b509392505050565b600081359050611d7281612ebd565b92915050565b600081359050611d8781612ed4565b92915050565b600081359050611d9c81612eeb565b92915050565b600081519050611db181612eeb565b92915050565b600082601f830112611dc857600080fd5b8135611dd8848260208601611d25565b91505092915050565b600081359050611df081612f02565b92915050565b600081359050611e0581612f19565b92915050565b600060208284031215611e1d57600080fd5b6000611e2b84828501611d63565b91505092915050565b60008060408385031215611e4757600080fd5b6000611e5585828601611d63565b9250506020611e6685828601611d63565b9150509250929050565b600080600060608486031215611e8557600080fd5b6000611e9386828701611d63565b9350506020611ea486828701611d63565b9250506040611eb586828701611de1565b9150509250925092565b60008060008060808587031215611ed557600080fd5b6000611ee387828801611d63565b9450506020611ef487828801611d63565b9350506040611f0587828801611de1565b925050606085013567ffffffffffffffff811115611f2257600080fd5b611f2e87828801611db7565b91505092959194509250565b60008060408385031215611f4d57600080fd5b6000611f5b85828601611d63565b9250506020611f6c85828601611d78565b9150509250929050565b60008060408385031215611f8957600080fd5b6000611f9785828601611d63565b9250506020611fa885828601611de1565b9150509250929050565b600060208284031215611fc457600080fd5b6000611fd284828501611d8d565b91505092915050565b600060208284031215611fed57600080fd5b6000611ffb84828501611da2565b91505092915050565b60006020828403121561201657600080fd5b600061202484828501611de1565b91505092915050565b60006020828403121561203f57600080fd5b600061204d84828501611df6565b91505092915050565b61205f81612c1e565b82525050565b61206e81612c30565b82525050565b600061207f82612b20565b6120898185612b36565b9350612099818560208601612cbc565b6120a281612eac565b840191505092915050565b60006120b882612b2b565b6120c28185612b47565b93506120d2818560208601612cbc565b6120db81612eac565b840191505092915050565b60006120f182612b2b565b6120fb8185612b58565b935061210b818560208601612cbc565b80840191505092915050565b6000612124601683612b47565b91507f596f7520617265206e6f7420746865206f776e657221000000000000000000006000830152602082019050919050565b6000612164603283612b47565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006121ca601c83612b47565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061220a602483612b47565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612270601983612b47565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006122b0601183612b47565b91507f496e636f727265637420616d6f756e74210000000000000000000000000000006000830152602082019050919050565b60006122f0601083612b47565b91507f43616e2774206d696e74206d6f726521000000000000000000000000000000006000830152602082019050919050565b6000612330602c83612b47565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612396600e83612b47565b91507f53616c652066696e6973686564210000000000000000000000000000000000006000830152602082019050919050565b60006123d6603883612b47565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061243c602a83612b47565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006124a2602983612b47565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612508602083612b47565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612548602c83612b47565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006125ae602983612b47565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612614602f83612b47565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061267a602183612b47565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006126e0603183612b47565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b61274281612c68565b82525050565b61275181612c96565b82525050565b61276081612ca0565b82525050565b600061277282856120e6565b915061277e82846120e6565b91508190509392505050565b600060208201905061279f6000830184612056565b92915050565b60006080820190506127ba6000830187612056565b6127c76020830186612056565b6127d46040830185612748565b81810360608301526127e68184612074565b905095945050505050565b60006020820190506128066000830184612065565b92915050565b6000602082019050818103600083015261282681846120ad565b905092915050565b6000602082019050818103600083015261284781612117565b9050919050565b6000602082019050818103600083015261286781612157565b9050919050565b60006020820190508181036000830152612887816121bd565b9050919050565b600060208201905081810360008301526128a7816121fd565b9050919050565b600060208201905081810360008301526128c781612263565b9050919050565b600060208201905081810360008301526128e7816122a3565b9050919050565b60006020820190508181036000830152612907816122e3565b9050919050565b6000602082019050818103600083015261292781612323565b9050919050565b6000602082019050818103600083015261294781612389565b9050919050565b60006020820190508181036000830152612967816123c9565b9050919050565b600060208201905081810360008301526129878161242f565b9050919050565b600060208201905081810360008301526129a781612495565b9050919050565b600060208201905081810360008301526129c7816124fb565b9050919050565b600060208201905081810360008301526129e78161253b565b9050919050565b60006020820190508181036000830152612a07816125a1565b9050919050565b60006020820190508181036000830152612a2781612607565b9050919050565b60006020820190508181036000830152612a478161266d565b9050919050565b60006020820190508181036000830152612a67816126d3565b9050919050565b6000602082019050612a836000830184612739565b92915050565b6000602082019050612a9e6000830184612748565b92915050565b6000602082019050612ab96000830184612757565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612ae657612ae5612e7d565b5b8060405250919050565b600067ffffffffffffffff821115612b0b57612b0a612e7d565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612b6e82612c96565b9150612b7983612c96565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bae57612bad612df0565b5b828201905092915050565b6000612bc482612c96565b9150612bcf83612c96565b925082612bdf57612bde612e1f565b5b828204905092915050565b6000612bf582612c96565b9150612c0083612c96565b925082821015612c1357612c12612df0565b5b828203905092915050565b6000612c2982612c76565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612cda578082015181840152602081019050612cbf565b83811115612ce9576000848401525b50505050565b60006002820490506001821680612d0757607f821691505b60208210811415612d1b57612d1a612e4e565b5b50919050565b6000612d2c82612c68565b915061ffff821415612d4157612d40612df0565b5b600182019050919050565b6000612d5782612c96565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d8a57612d89612df0565b5b600182019050919050565b6000612da082612ca0565b915060ff821415612db457612db3612df0565b5b600182019050919050565b6000612dca82612c96565b9150612dd583612c96565b925082612de557612de4612e1f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612ec681612c1e565b8114612ed157600080fd5b50565b612edd81612c30565b8114612ee857600080fd5b50565b612ef481612c3c565b8114612eff57600080fd5b50565b612f0b81612c96565b8114612f1657600080fd5b50565b612f2281612ca0565b8114612f2d57600080fd5b5056fe697066733a2f2f516d58544841574842747261587762516b46477a686a3762724e50615a5569487634397976445338696e466d56572fa26469706673582212204fdf43ae110253a5d4f93159cf503af9d10e46fb0cc8a4b846d30e04b85d567664736f6c63430008000033

Deployed Bytecode Sourcemap

31866:1286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19438:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20383:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21938:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21465:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22686:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33040:109;;;;;;;;;;;;;:::i;:::-;;23094:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32706:326;;;:::i;:::-;;32409:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31902:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20077:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19807:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32318:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20552:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32008:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22231:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23350:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20727:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31934:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22455:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32036:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31971:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19438:305;19540:4;19592:25;19577:40;;;:11;:40;;;;:105;;;;19649:33;19634:48;;;:11;:48;;;;19577:105;:158;;;;19699:36;19723:11;19699:23;:36::i;:::-;19577:158;19557:178;;19438:305;;;:::o;20383:100::-;20437:13;20470:5;20463:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20383:100;:::o;21938:221::-;22014:7;22042:16;22050:7;22042;:16::i;:::-;22034:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22127:15;:24;22143:7;22127:24;;;;;;;;;;;;;;;;;;;;;22120:31;;21938:221;;;:::o;21465:407::-;21546:13;21562:23;21577:7;21562:14;:23::i;:::-;21546:39;;21610:5;21604:11;;:2;:11;;;;21596:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21702:5;21688:19;;:10;:19;;;:58;;;;21711:35;21728:5;21735:10;21711:16;:35::i;:::-;21688:58;21666:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;21843:21;21852:2;21856:7;21843:8;:21::i;:::-;21465:407;;;:::o;22686:337::-;22881:39;22900:10;22912:7;22881:18;:39::i;:::-;22873:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;22987:28;22997:4;23003:2;23007:7;22987:9;:28::i;:::-;22686:337;;;:::o;33040:109::-;32258:5;;;;;;;;;;;32244:19;;:10;:19;;;32236:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;33098:10:::1;33090:28;;:51;33119:21;33090:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33040:109::o:0;23094:185::-;23232:39;23249:4;23255:2;23259:7;23232:39;;;;;;;;;;;;:16;:39::i;:::-;23094:185;;;:::o;32706:326::-;32770:9;;;;;;;;;;;32759:20;;:7;;;;;;;;;;;:20;;;;32751:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;32846:17;;;;;;;;;;;32817:46;;:13;:25;32831:10;32817:25;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;32809:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;32916:5;;32903:9;:18;32895:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32954:32;32964:10;32976:7;;:9;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32954:32;;:9;:32::i;:::-;32997:13;:25;33011:10;32997:25;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;32706:326::o;32409:132::-;32258:5;;;;;;;;;;;32244:19;;:10;:19;;;32236:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32515:18:::1;32495:17;;:38;;;;;;;;;;;;;;;;;;32409:132:::0;:::o;31902:25::-;;;;;;;;;;;;;:::o;20077:239::-;20149:7;20169:13;20185:7;:16;20193:7;20185:16;;;;;;;;;;;;;;;;;;;;;20169:32;;20237:1;20220:19;;:5;:19;;;;20212:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20303:5;20296:12;;;20077:239;;;:::o;19807:208::-;19879:7;19924:1;19907:19;;:5;:19;;;;19899:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19991:9;:16;20001:5;19991:16;;;;;;;;;;;;;;;;19984:23;;19807:208;;;:::o;32318:83::-;32258:5;;;;;;;;;;;32244:19;;:10;:19;;;32236:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32387:6:::1;32379:5;:14;;;;32318:83:::0;:::o;20552:104::-;20608:13;20641:7;20634:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20552:104;:::o;32008:17::-;;;;:::o;22231:153::-;22326:50;22345:10;22357:8;22367;22326:18;:50::i;:::-;22231:153;;:::o;23350:326::-;23525:39;23544:10;23556:7;23525:18;:39::i;:::-;23517:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23629:39;23643:4;23649:2;23653:7;23662:5;23629:13;:39::i;:::-;23350:326;;;;:::o;20727:334::-;20800:13;20834:16;20842:7;20834;:16::i;:::-;20826:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20915:21;20939:10;:8;:10::i;:::-;20915:34;;20991:1;20973:7;20967:21;:25;:86;;;;;;;;;;;;;;;;;21019:7;21028:18;:7;:16;:18::i;:::-;21002:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20967:86;20960:93;;;20727:334;;;:::o;31934:30::-;;;;;;;;;;;;;:::o;22455:164::-;22552:4;22576:18;:25;22595:5;22576:25;;;;;;;;;;;;;;;:35;22602:8;22576:35;;;;;;;;;;;;;;;;;;;;;;;;;22569:42;;22455:164;;;;:::o;32036:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;31971:30::-;;;;;;;;;;;;;:::o;12536:157::-;12621:4;12660:25;12645:40;;;:11;:40;;;;12638:47;;12536:157;;;:::o;25186:127::-;25251:4;25303:1;25275:30;;:7;:16;25283:7;25275:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25268:37;;25186:127;;;:::o;29168:174::-;29270:2;29243:15;:24;29259:7;29243:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29326:7;29322:2;29288:46;;29297:23;29312:7;29297:14;:23::i;:::-;29288:46;;;;;;;;;;;;29168:174;;:::o;25480:348::-;25573:4;25598:16;25606:7;25598;:16::i;:::-;25590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25674:13;25690:23;25705:7;25690:14;:23::i;:::-;25674:39;;25743:5;25732:16;;:7;:16;;;:51;;;;25776:7;25752:31;;:20;25764:7;25752:11;:20::i;:::-;:31;;;25732:51;:87;;;;25787:32;25804:5;25811:7;25787:16;:32::i;:::-;25732:87;25724:96;;;25480:348;;;;:::o;28472:578::-;28631:4;28604:31;;:23;28619:7;28604:14;:23::i;:::-;:31;;;28596:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28714:1;28700:16;;:2;:16;;;;28692:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28770:39;28791:4;28797:2;28801:7;28770:20;:39::i;:::-;28874:29;28891:1;28895:7;28874:8;:29::i;:::-;28935:1;28916:9;:15;28926:4;28916:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;28964:1;28947:9;:13;28957:2;28947:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28995:2;28976:7;:16;28984:7;28976:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29034:7;29030:2;29015:27;;29024:4;29015:27;;;;;;;;;;;;28472:578;;;:::o;26170:110::-;26246:26;26256:2;26260:7;26246:26;;;;;;;;;;;;:9;:26::i;:::-;26170:110;;:::o;29484:315::-;29639:8;29630:17;;:5;:17;;;;29622:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29726:8;29688:18;:25;29707:5;29688:25;;;;;;;;;;;;;;;:35;29714:8;29688:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29772:8;29750:41;;29765:5;29750:41;;;29782:8;29750:41;;;;;;:::i;:::-;;;;;;;;29484:315;;;:::o;24558:::-;24715:28;24725:4;24731:2;24735:7;24715:9;:28::i;:::-;24762:48;24785:4;24791:2;24795:7;24804:5;24762:22;:48::i;:::-;24754:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24558:315;;;;:::o;32549:149::-;32601:13;32627:63;;;;;;;;;;;;;;;;;;;32549:149;:::o;288:723::-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;31733:126::-;;;;:::o;26507:321::-;26637:18;26643:2;26647:7;26637:5;:18::i;:::-;26688:54;26719:1;26723:2;26727:7;26736:5;26688:22;:54::i;:::-;26666:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26507:321;;;:::o;30364:797::-;30519:4;30540:15;:2;:13;;;:15::i;:::-;30536:618;;;30592:2;30576:36;;;30613:10;30625:4;30631:7;30640:5;30576:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30572:527;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30833:1;30816:6;:13;:18;30812:272;;;30859:60;;;;;;;;;;:::i;:::-;;;;;;;;30812:272;31034:6;31028:13;31019:6;31015:2;31011:15;31004:38;30572:527;30707:41;;;30697:51;;;:6;:51;;;;30690:58;;;;;30536:618;31138:4;31131:11;;30364:797;;;;;;;:::o;27164:382::-;27258:1;27244:16;;:2;:16;;;;27236:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27317:16;27325:7;27317;:16::i;:::-;27316:17;27308:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27379:45;27408:1;27412:2;27416:7;27379:20;:45::i;:::-;27454:1;27437:9;:13;27447:2;27437:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27485:2;27466:7;:16;27474:7;27466:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27530:7;27526:2;27505:33;;27522:1;27505:33;;;;;;;;;;;;27164:382;;:::o;2728:387::-;2788:4;2996:12;3063:7;3051:20;3043:28;;3106:1;3099:4;:8;3092:15;;;2728:387;;;:::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:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1219:139::-;;1303:6;1290:20;1281:29;;1319:33;1346:5;1319:33;:::i;:::-;1271:87;;;;:::o;1364:135::-;;1446:6;1433:20;1424:29;;1462:31;1487:5;1462:31;:::i;:::-;1414:85;;;;:::o;1505:262::-;;1613:2;1601:9;1592:7;1588:23;1584:32;1581:2;;;1629:1;1626;1619:12;1581:2;1672:1;1697:53;1742:7;1733:6;1722:9;1718:22;1697:53;:::i;:::-;1687:63;;1643:117;1571:196;;;;:::o;1773:407::-;;;1898:2;1886:9;1877:7;1873:23;1869:32;1866:2;;;1914:1;1911;1904:12;1866:2;1957:1;1982:53;2027:7;2018:6;2007:9;2003:22;1982:53;:::i;:::-;1972:63;;1928:117;2084:2;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2055:118;1856:324;;;;;:::o;2186:552::-;;;;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;2344:1;2341;2334:12;2296:2;2387:1;2412:53;2457:7;2448:6;2437:9;2433:22;2412:53;:::i;:::-;2402:63;;2358:117;2514:2;2540:53;2585:7;2576:6;2565:9;2561:22;2540:53;:::i;:::-;2530:63;;2485:118;2642:2;2668:53;2713:7;2704:6;2693:9;2689:22;2668:53;:::i;:::-;2658:63;;2613:118;2286:452;;;;;:::o;2744:809::-;;;;;2912:3;2900:9;2891:7;2887:23;2883:33;2880:2;;;2929:1;2926;2919:12;2880:2;2972:1;2997:53;3042:7;3033:6;3022:9;3018:22;2997:53;:::i;:::-;2987:63;;2943:117;3099:2;3125:53;3170:7;3161:6;3150:9;3146:22;3125:53;:::i;:::-;3115:63;;3070:118;3227:2;3253:53;3298:7;3289:6;3278:9;3274:22;3253:53;:::i;:::-;3243:63;;3198:118;3383:2;3372:9;3368:18;3355:32;3414:18;3406:6;3403:30;3400:2;;;3446:1;3443;3436:12;3400:2;3474:62;3528:7;3519:6;3508:9;3504:22;3474:62;:::i;:::-;3464:72;;3326:220;2870:683;;;;;;;:::o;3559:401::-;;;3681:2;3669:9;3660:7;3656:23;3652:32;3649:2;;;3697:1;3694;3687:12;3649:2;3740:1;3765:53;3810:7;3801:6;3790:9;3786:22;3765:53;:::i;:::-;3755:63;;3711:117;3867:2;3893:50;3935:7;3926:6;3915:9;3911:22;3893:50;:::i;:::-;3883:60;;3838:115;3639:321;;;;;:::o;3966:407::-;;;4091:2;4079:9;4070:7;4066:23;4062:32;4059:2;;;4107:1;4104;4097:12;4059:2;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;4049:324;;;;;:::o;4379:260::-;;4486:2;4474:9;4465:7;4461:23;4457:32;4454:2;;;4502:1;4499;4492:12;4454:2;4545:1;4570:52;4614:7;4605:6;4594:9;4590:22;4570:52;:::i;:::-;4560:62;;4516:116;4444:195;;;;:::o;4645:282::-;;4763:2;4751:9;4742:7;4738:23;4734:32;4731:2;;;4779:1;4776;4769:12;4731:2;4822:1;4847:63;4902:7;4893:6;4882:9;4878:22;4847:63;:::i;:::-;4837:73;;4793:127;4721:206;;;;:::o;4933:262::-;;5041:2;5029:9;5020:7;5016:23;5012:32;5009:2;;;5057:1;5054;5047:12;5009:2;5100:1;5125:53;5170:7;5161:6;5150:9;5146:22;5125:53;:::i;:::-;5115:63;;5071:117;4999:196;;;;:::o;5201:258::-;;5307:2;5295:9;5286:7;5282:23;5278:32;5275:2;;;5323:1;5320;5313:12;5275:2;5366:1;5391:51;5434:7;5425:6;5414:9;5410:22;5391:51;:::i;:::-;5381:61;;5337:115;5265:194;;;;:::o;5465:118::-;5552:24;5570:5;5552:24;:::i;:::-;5547:3;5540:37;5530:53;;:::o;5589:109::-;5670:21;5685:5;5670:21;:::i;:::-;5665:3;5658:34;5648:50;;:::o;5704:360::-;;5818:38;5850:5;5818:38;:::i;:::-;5872:70;5935:6;5930:3;5872:70;:::i;:::-;5865:77;;5951:52;5996:6;5991:3;5984:4;5977:5;5973:16;5951:52;:::i;:::-;6028:29;6050:6;6028:29;:::i;:::-;6023:3;6019:39;6012:46;;5794:270;;;;;:::o;6070:364::-;;6186:39;6219:5;6186:39;:::i;:::-;6241:71;6305:6;6300:3;6241:71;:::i;:::-;6234:78;;6321:52;6366:6;6361:3;6354:4;6347:5;6343:16;6321:52;:::i;:::-;6398:29;6420:6;6398:29;:::i;:::-;6393:3;6389:39;6382:46;;6162:272;;;;;:::o;6440:377::-;;6574:39;6607:5;6574:39;:::i;:::-;6629:89;6711:6;6706:3;6629:89;:::i;:::-;6622:96;;6727:52;6772:6;6767:3;6760:4;6753:5;6749:16;6727:52;:::i;:::-;6804:6;6799:3;6795:16;6788:23;;6550:267;;;;;:::o;6823:320::-;;6986:67;7050:2;7045:3;6986:67;:::i;:::-;6979:74;;7083:24;7079:1;7074:3;7070:11;7063:45;7134:2;7129:3;7125:12;7118:19;;6969:174;;;:::o;7149:382::-;;7312:67;7376:2;7371:3;7312:67;:::i;:::-;7305:74;;7409:34;7405:1;7400:3;7396:11;7389:55;7475:20;7470:2;7465:3;7461:12;7454:42;7522:2;7517:3;7513:12;7506:19;;7295:236;;;:::o;7537:326::-;;7700:67;7764:2;7759:3;7700:67;:::i;:::-;7693:74;;7797:30;7793:1;7788:3;7784:11;7777:51;7854:2;7849:3;7845:12;7838:19;;7683:180;;;:::o;7869:368::-;;8032:67;8096:2;8091:3;8032:67;:::i;:::-;8025:74;;8129:34;8125:1;8120:3;8116:11;8109:55;8195:6;8190:2;8185:3;8181:12;8174:28;8228:2;8223:3;8219:12;8212:19;;8015:222;;;:::o;8243:323::-;;8406:67;8470:2;8465:3;8406:67;:::i;:::-;8399:74;;8503:27;8499:1;8494:3;8490:11;8483:48;8557:2;8552:3;8548:12;8541:19;;8389:177;;;:::o;8572:315::-;;8735:67;8799:2;8794:3;8735:67;:::i;:::-;8728:74;;8832:19;8828:1;8823:3;8819:11;8812:40;8878:2;8873:3;8869:12;8862:19;;8718:169;;;:::o;8893:314::-;;9056:67;9120:2;9115:3;9056:67;:::i;:::-;9049:74;;9153:18;9149:1;9144:3;9140:11;9133:39;9198:2;9193:3;9189:12;9182:19;;9039:168;;;:::o;9213:376::-;;9376:67;9440:2;9435:3;9376:67;:::i;:::-;9369:74;;9473:34;9469:1;9464:3;9460:11;9453:55;9539:14;9534:2;9529:3;9525:12;9518:36;9580:2;9575:3;9571:12;9564:19;;9359:230;;;:::o;9595:312::-;;9758:67;9822:2;9817:3;9758:67;:::i;:::-;9751:74;;9855:16;9851:1;9846:3;9842:11;9835:37;9898:2;9893:3;9889:12;9882:19;;9741:166;;;:::o;9913:388::-;;10076:67;10140:2;10135:3;10076:67;:::i;:::-;10069:74;;10173:34;10169:1;10164:3;10160:11;10153:55;10239:26;10234:2;10229:3;10225:12;10218:48;10292:2;10287:3;10283:12;10276:19;;10059:242;;;:::o;10307:374::-;;10470:67;10534:2;10529:3;10470:67;:::i;:::-;10463:74;;10567:34;10563:1;10558:3;10554:11;10547:55;10633:12;10628:2;10623:3;10619:12;10612:34;10672:2;10667:3;10663:12;10656:19;;10453:228;;;:::o;10687:373::-;;10850:67;10914:2;10909:3;10850:67;:::i;:::-;10843:74;;10947:34;10943:1;10938:3;10934:11;10927:55;11013:11;11008:2;11003:3;10999:12;10992:33;11051:2;11046:3;11042:12;11035:19;;10833:227;;;:::o;11066:330::-;;11229:67;11293:2;11288:3;11229:67;:::i;:::-;11222:74;;11326:34;11322:1;11317:3;11313:11;11306:55;11387:2;11382:3;11378:12;11371:19;;11212:184;;;:::o;11402:376::-;;11565:67;11629:2;11624:3;11565:67;:::i;:::-;11558:74;;11662:34;11658:1;11653:3;11649:11;11642:55;11728:14;11723:2;11718:3;11714:12;11707:36;11769:2;11764:3;11760:12;11753:19;;11548:230;;;:::o;11784:373::-;;11947:67;12011:2;12006:3;11947:67;:::i;:::-;11940:74;;12044:34;12040:1;12035:3;12031:11;12024:55;12110:11;12105:2;12100:3;12096:12;12089:33;12148:2;12143:3;12139:12;12132:19;;11930:227;;;:::o;12163:379::-;;12326:67;12390:2;12385:3;12326:67;:::i;:::-;12319:74;;12423:34;12419:1;12414:3;12410:11;12403:55;12489:17;12484:2;12479:3;12475:12;12468:39;12533:2;12528:3;12524:12;12517:19;;12309:233;;;:::o;12548:365::-;;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12808:34;12804:1;12799:3;12795:11;12788:55;12874:3;12869:2;12864:3;12860:12;12853:25;12904:2;12899:3;12895:12;12888:19;;12694:219;;;:::o;12919:381::-;;13082:67;13146:2;13141:3;13082:67;:::i;:::-;13075:74;;13179:34;13175:1;13170:3;13166:11;13159:55;13245:19;13240:2;13235:3;13231:12;13224:41;13291:2;13286:3;13282:12;13275:19;;13065:235;;;:::o;13306:115::-;13391:23;13408:5;13391:23;:::i;:::-;13386:3;13379:36;13369:52;;:::o;13427:118::-;13514:24;13532:5;13514:24;:::i;:::-;13509:3;13502:37;13492:53;;:::o;13551:112::-;13634:22;13650:5;13634:22;:::i;:::-;13629:3;13622:35;13612:51;;:::o;13669:435::-;;13871:95;13962:3;13953:6;13871:95;:::i;:::-;13864:102;;13983:95;14074:3;14065:6;13983:95;:::i;:::-;13976:102;;14095:3;14088:10;;13853:251;;;;;:::o;14110:222::-;;14241:2;14230:9;14226:18;14218:26;;14254:71;14322:1;14311:9;14307:17;14298:6;14254:71;:::i;:::-;14208:124;;;;:::o;14338:640::-;;14571:3;14560:9;14556:19;14548:27;;14585:71;14653:1;14642:9;14638:17;14629:6;14585:71;:::i;:::-;14666:72;14734:2;14723:9;14719:18;14710:6;14666:72;:::i;:::-;14748;14816:2;14805:9;14801:18;14792:6;14748:72;:::i;:::-;14867:9;14861:4;14857:20;14852:2;14841:9;14837:18;14830:48;14895:76;14966:4;14957:6;14895:76;:::i;:::-;14887:84;;14538:440;;;;;;;:::o;14984:210::-;;15109:2;15098:9;15094:18;15086:26;;15122:65;15184:1;15173:9;15169:17;15160:6;15122:65;:::i;:::-;15076:118;;;;:::o;15200:313::-;;15351:2;15340:9;15336:18;15328:26;;15400:9;15394:4;15390:20;15386:1;15375:9;15371:17;15364:47;15428:78;15501:4;15492:6;15428:78;:::i;:::-;15420:86;;15318:195;;;;:::o;15519:419::-;;15723:2;15712:9;15708:18;15700:26;;15772:9;15766:4;15762:20;15758:1;15747:9;15743:17;15736:47;15800:131;15926:4;15800:131;:::i;:::-;15792:139;;15690:248;;;:::o;15944:419::-;;16148:2;16137:9;16133:18;16125:26;;16197:9;16191:4;16187:20;16183:1;16172:9;16168:17;16161:47;16225:131;16351:4;16225:131;:::i;:::-;16217:139;;16115:248;;;:::o;16369:419::-;;16573:2;16562:9;16558:18;16550:26;;16622:9;16616:4;16612:20;16608:1;16597:9;16593:17;16586:47;16650:131;16776:4;16650:131;:::i;:::-;16642:139;;16540:248;;;:::o;16794:419::-;;16998:2;16987:9;16983:18;16975:26;;17047:9;17041:4;17037:20;17033:1;17022:9;17018:17;17011:47;17075:131;17201:4;17075:131;:::i;:::-;17067:139;;16965:248;;;:::o;17219:419::-;;17423:2;17412:9;17408:18;17400:26;;17472:9;17466:4;17462:20;17458:1;17447:9;17443:17;17436:47;17500:131;17626:4;17500:131;:::i;:::-;17492:139;;17390:248;;;:::o;17644:419::-;;17848:2;17837:9;17833:18;17825:26;;17897:9;17891:4;17887:20;17883:1;17872:9;17868:17;17861:47;17925:131;18051:4;17925:131;:::i;:::-;17917:139;;17815:248;;;:::o;18069:419::-;;18273:2;18262:9;18258:18;18250:26;;18322:9;18316:4;18312:20;18308:1;18297:9;18293:17;18286:47;18350:131;18476:4;18350:131;:::i;:::-;18342:139;;18240:248;;;:::o;18494:419::-;;18698:2;18687:9;18683:18;18675:26;;18747:9;18741:4;18737:20;18733:1;18722:9;18718:17;18711:47;18775:131;18901:4;18775:131;:::i;:::-;18767:139;;18665:248;;;:::o;18919:419::-;;19123:2;19112:9;19108:18;19100:26;;19172:9;19166:4;19162:20;19158:1;19147:9;19143:17;19136:47;19200:131;19326:4;19200:131;:::i;:::-;19192:139;;19090:248;;;:::o;19344:419::-;;19548:2;19537:9;19533:18;19525:26;;19597:9;19591:4;19587:20;19583:1;19572:9;19568:17;19561:47;19625:131;19751:4;19625:131;:::i;:::-;19617:139;;19515:248;;;:::o;19769:419::-;;19973:2;19962:9;19958:18;19950:26;;20022:9;20016:4;20012:20;20008:1;19997:9;19993:17;19986:47;20050:131;20176:4;20050:131;:::i;:::-;20042:139;;19940:248;;;:::o;20194:419::-;;20398:2;20387:9;20383:18;20375:26;;20447:9;20441:4;20437:20;20433:1;20422:9;20418:17;20411:47;20475:131;20601:4;20475:131;:::i;:::-;20467:139;;20365:248;;;:::o;20619:419::-;;20823:2;20812:9;20808:18;20800:26;;20872:9;20866:4;20862:20;20858:1;20847:9;20843:17;20836:47;20900:131;21026:4;20900:131;:::i;:::-;20892:139;;20790:248;;;:::o;21044:419::-;;21248:2;21237:9;21233:18;21225:26;;21297:9;21291:4;21287:20;21283:1;21272:9;21268:17;21261:47;21325:131;21451:4;21325:131;:::i;:::-;21317:139;;21215:248;;;:::o;21469:419::-;;21673:2;21662:9;21658:18;21650:26;;21722:9;21716:4;21712:20;21708:1;21697:9;21693:17;21686:47;21750:131;21876:4;21750:131;:::i;:::-;21742:139;;21640:248;;;:::o;21894:419::-;;22098:2;22087:9;22083:18;22075:26;;22147:9;22141:4;22137:20;22133:1;22122:9;22118:17;22111:47;22175:131;22301:4;22175:131;:::i;:::-;22167:139;;22065:248;;;:::o;22319:419::-;;22523:2;22512:9;22508:18;22500:26;;22572:9;22566:4;22562:20;22558:1;22547:9;22543:17;22536:47;22600:131;22726:4;22600:131;:::i;:::-;22592:139;;22490:248;;;:::o;22744:419::-;;22948:2;22937:9;22933:18;22925:26;;22997:9;22991:4;22987:20;22983:1;22972:9;22968:17;22961:47;23025:131;23151:4;23025:131;:::i;:::-;23017:139;;22915:248;;;:::o;23169:218::-;;23298:2;23287:9;23283:18;23275:26;;23311:69;23377:1;23366:9;23362:17;23353:6;23311:69;:::i;:::-;23265:122;;;;:::o;23393:222::-;;23524:2;23513:9;23509:18;23501:26;;23537:71;23605:1;23594:9;23590:17;23581:6;23537:71;:::i;:::-;23491:124;;;;:::o;23621:214::-;;23748:2;23737:9;23733:18;23725:26;;23761:67;23825:1;23814:9;23810:17;23801:6;23761:67;:::i;:::-;23715:120;;;;:::o;23841:283::-;;23907:2;23901:9;23891:19;;23949:4;23941:6;23937:17;24056:6;24044:10;24041:22;24020:18;24008:10;24005:34;24002:62;23999:2;;;24067:18;;:::i;:::-;23999:2;24107:10;24103:2;24096:22;23881:243;;;;:::o;24130:331::-;;24281:18;24273:6;24270:30;24267:2;;;24303:18;;:::i;:::-;24267:2;24388:4;24384:9;24377:4;24369:6;24365:17;24361:33;24353:41;;24449:4;24443;24439:15;24431:23;;24196:265;;;:::o;24467:98::-;;24552:5;24546:12;24536:22;;24525:40;;;:::o;24571:99::-;;24657:5;24651:12;24641:22;;24630:40;;;:::o;24676:168::-;;24793:6;24788:3;24781:19;24833:4;24828:3;24824:14;24809:29;;24771:73;;;;:::o;24850:169::-;;24968:6;24963:3;24956:19;25008:4;25003:3;24999:14;24984:29;;24946:73;;;;:::o;25025:148::-;;25164:3;25149:18;;25139:34;;;;:::o;25179:305::-;;25238:20;25256:1;25238:20;:::i;:::-;25233:25;;25272:20;25290:1;25272:20;:::i;:::-;25267:25;;25426:1;25358:66;25354:74;25351:1;25348:81;25345:2;;;25432:18;;:::i;:::-;25345:2;25476:1;25473;25469:9;25462:16;;25223:261;;;;:::o;25490:185::-;;25547:20;25565:1;25547:20;:::i;:::-;25542:25;;25581:20;25599:1;25581:20;:::i;:::-;25576:25;;25620:1;25610:2;;25625:18;;:::i;:::-;25610:2;25667:1;25664;25660:9;25655:14;;25532:143;;;;:::o;25681:191::-;;25741:20;25759:1;25741:20;:::i;:::-;25736:25;;25775:20;25793:1;25775:20;:::i;:::-;25770:25;;25814:1;25811;25808:8;25805:2;;;25819:18;;:::i;:::-;25805:2;25864:1;25861;25857:9;25849:17;;25726:146;;;;:::o;25878:96::-;;25944:24;25962:5;25944:24;:::i;:::-;25933:35;;25923:51;;;:::o;25980:90::-;;26057:5;26050:13;26043:21;26032:32;;26022:48;;;:::o;26076:149::-;;26152:66;26145:5;26141:78;26130:89;;26120:105;;;:::o;26231:89::-;;26307:6;26300:5;26296:18;26285:29;;26275:45;;;:::o;26326:126::-;;26403:42;26396:5;26392:54;26381:65;;26371:81;;;:::o;26458:77::-;;26524:5;26513:16;;26503:32;;;:::o;26541:86::-;;26616:4;26609:5;26605:16;26594:27;;26584:43;;;:::o;26633:154::-;26717:6;26712:3;26707;26694:30;26779:1;26770:6;26765:3;26761:16;26754:27;26684:103;;;:::o;26793:307::-;26861:1;26871:113;26885:6;26882:1;26879:13;26871:113;;;26970:1;26965:3;26961:11;26955:18;26951:1;26946:3;26942:11;26935:39;26907:2;26904:1;26900:10;26895:15;;26871:113;;;27002:6;26999:1;26996:13;26993:2;;;27082:1;27073:6;27068:3;27064:16;27057:27;26993:2;26842:258;;;;:::o;27106:320::-;;27187:1;27181:4;27177:12;27167:22;;27234:1;27228:4;27224:12;27255:18;27245:2;;27311:4;27303:6;27299:17;27289:27;;27245:2;27373;27365:6;27362:14;27342:18;27339:38;27336:2;;;27392:18;;:::i;:::-;27336:2;27157:269;;;;:::o;27432:171::-;;27493:23;27510:5;27493:23;:::i;:::-;27484:32;;27538:6;27531:5;27528:17;27525:2;;;27548:18;;:::i;:::-;27525:2;27595:1;27588:5;27584:13;27577:20;;27474:129;;;:::o;27609:233::-;;27671:24;27689:5;27671:24;:::i;:::-;27662:33;;27717:66;27710:5;27707:77;27704:2;;;27787:18;;:::i;:::-;27704:2;27834:1;27827:5;27823:13;27816:20;;27652:190;;;:::o;27848:167::-;;27908:22;27924:5;27908:22;:::i;:::-;27899:31;;27952:4;27945:5;27942:15;27939:2;;;27960:18;;:::i;:::-;27939:2;28007:1;28000:5;27996:13;27989:20;;27889:126;;;:::o;28021:176::-;;28070:20;28088:1;28070:20;:::i;:::-;28065:25;;28104:20;28122:1;28104:20;:::i;:::-;28099:25;;28143:1;28133:2;;28148:18;;:::i;:::-;28133:2;28189:1;28186;28182:9;28177:14;;28055:142;;;;:::o;28203:180::-;28251:77;28248:1;28241:88;28348:4;28345:1;28338:15;28372:4;28369:1;28362:15;28389:180;28437:77;28434:1;28427:88;28534:4;28531:1;28524:15;28558:4;28555:1;28548:15;28575:180;28623:77;28620:1;28613:88;28720:4;28717:1;28710:15;28744:4;28741:1;28734:15;28761:180;28809:77;28806:1;28799:88;28906:4;28903:1;28896:15;28930:4;28927:1;28920:15;28947:102;;29039:2;29035:7;29030:2;29023:5;29019:14;29015:28;29005:38;;28995:54;;;:::o;29055:122::-;29128:24;29146:5;29128:24;:::i;:::-;29121:5;29118:35;29108:2;;29167:1;29164;29157:12;29108:2;29098:79;:::o;29183:116::-;29253:21;29268:5;29253:21;:::i;:::-;29246:5;29243:32;29233:2;;29289:1;29286;29279:12;29233:2;29223:76;:::o;29305:120::-;29377:23;29394:5;29377:23;:::i;:::-;29370:5;29367:34;29357:2;;29415:1;29412;29405:12;29357:2;29347:78;:::o;29431:122::-;29504:24;29522:5;29504:24;:::i;:::-;29497:5;29494:35;29484:2;;29543:1;29540;29533:12;29484:2;29474:79;:::o;29559:118::-;29630:22;29646:5;29630:22;:::i;:::-;29623:5;29620:33;29610:2;;29667:1;29664;29657:12;29610:2;29600:77;:::o

Swarm Source

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