Token MascotBoosters

Overview CRC721

Total Supply:
433 MB

Holders:
58 addresses
Balance
2 MB
0xd156f87ea9f25b7820582b460553ee621eddc258
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MascotBoosters

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-07-06
*/

/**
 *Submitted for verification at cronoscan.com on 2022-07-01
*/

// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.4;

/*

$$\      $$\  $$$$$$\   $$$$$$\   $$$$$$\   $$$$$$\ $$$$$$$$\       $$$$$$$\   $$$$$$\   $$$$$$\   $$$$$$\ $$$$$$$$\ $$$$$$$$\ $$$$$$$\   $$$$$$\  
$$$\    $$$ |$$  __$$\ $$  __$$\ $$  __$$\ $$  __$$\\__$$  __|      $$  __$$\ $$  __$$\ $$  __$$\ $$  __$$\\__$$  __|$$  _____|$$  __$$\ $$  __$$\ 
$$$$\  $$$$ |$$ /  $$ |$$ /  \__|$$ /  \__|$$ /  $$ |  $$ |         $$ |  $$ |$$ /  $$ |$$ /  $$ |$$ /  \__|  $$ |   $$ |      $$ |  $$ |$$ /  \__|
$$\$$\$$ $$ |$$$$$$$$ |\$$$$$$\  $$ |      $$ |  $$ |  $$ |         $$$$$$$\ |$$ |  $$ |$$ |  $$ |\$$$$$$\    $$ |   $$$$$\    $$$$$$$  |\$$$$$$\  
$$ \$$$  $$ |$$  __$$ | \____$$\ $$ |      $$ |  $$ |  $$ |         $$  __$$\ $$ |  $$ |$$ |  $$ | \____$$\   $$ |   $$  __|   $$  __$$<  \____$$\ 
$$ |\$  /$$ |$$ |  $$ |$$\   $$ |$$ |  $$\ $$ |  $$ |  $$ |         $$ |  $$ |$$ |  $$ |$$ |  $$ |$$\   $$ |  $$ |   $$ |      $$ |  $$ |$$\   $$ |
$$ | \_/ $$ |$$ |  $$ |\$$$$$$  |\$$$$$$  | $$$$$$  |  $$ |         $$$$$$$  | $$$$$$  | $$$$$$  |\$$$$$$  |  $$ |   $$$$$$$$\ $$ |  $$ |\$$$$$$  |
\__|     \__|\__|  \__| \______/  \______/  \______/   \__|         \_______/  \______/  \______/  \______/   \__|   \________|\__|  \__| \______/ 
                                                                                                                                                   
 */

 abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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



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


 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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }
}



 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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


 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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


contract MascotBoosters is ERC721Enumerable, Ownable  {

    // ============ State Variables ============

    string _baseTokenURI;
    bool public _paused;
    uint256 public maxTokenIds = 576;
    uint256 public tokenIds; // total number of tokenIds minted
    IERC721 betaMascots;
    mapping (uint => bool) public usedTokenIds;
    string private _name;
    string private _symbol;


    // ============ Modifiers ============

    modifier onlyWhenNotPaused() {
        require(!_paused, "Contract currently paused");
        _;
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }


    // ============ Constructor ============

    constructor (string memory __name, string memory __symbol, string memory baseURI, address betaMascotsContract) ERC721(__name, __symbol) {
        _name = __name;
        _symbol = __symbol;
        _baseTokenURI = baseURI;
        betaMascots = IERC721(betaMascotsContract);
    }


    // ============ Core functions ============

    function mint(uint256[] memory arr, uint256 commonTokenId) public payable onlyWhenNotPaused callerIsUser {
        require(tokenIds < maxTokenIds, "Exceed maximum supply");
        require(commonTokenId <= 12 && !usedTokenIds[commonTokenId]);
        if (commonTokenId != 0) {
            require(isAbleToMint(arr));
            usedTokenIds[commonTokenId] = true;
        } else {
            for (uint256 i; i < arr.length;) {
                require(betaMascots.ownerOf(arr[i]) == tx.origin, "Not owner");
                require(!usedTokenIds[arr[i]], "TokenId already used");

                unchecked {
                    i++;
                }
            }

            require(isValidTokenId(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], 7));
        }
        for (uint256 i; i < arr.length;) {
            if (arr[i] != 0) {
                usedTokenIds[arr[i]] = true;
            }

            unchecked {
                i++;
            }
        }
        tokenIds += 1;
        _safeMint(msg.sender, tokenIds);
    }

    function isAbleToMint(uint256[] memory arr) public view returns (bool) {
        uint256 skipIndex;
        uint256 zeroCount;

        for (uint256 i = 0; i < arr.length;) {
            if (arr[i] != 0) {
                require(betaMascots.ownerOf(arr[i]) == tx.origin, "Not owner");
                require(!usedTokenIds[arr[i]], "TokenId already used");
            } else {
                skipIndex = i;
                zeroCount++;
            }

            unchecked {
                i++;
            }
        }

        if (zeroCount > 1) {
            return false;
        } else if (zeroCount == 1) {
            require(isValidTokenId(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], skipIndex + 1));
            return true;
        } else {
            require(isValidTokenId(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], 7));
            return true;
        }
    }

    function isValidTokenId(uint256 token1, uint256 token2, uint256 token3, uint256 token4, uint256 token5, uint256 token6, uint256 skipIndexPlusOne) public pure returns (bool) {
        if (skipIndexPlusOne != 1) {
            require ((token1 >= 28 && token1 <= 30) || (token1 >= 2502 && token1 <= 3072));
        }
        if (skipIndexPlusOne != 2) {
            require((token2 >= 25 && token2 <= 27) || (token2 >= 1931 && token2 <= 2501));
        }
        if (skipIndexPlusOne != 3) {
            require((token3 >= 16 && token3 <= 18) || (token3 >= 218 && token3 <= 788));
        }
        if (skipIndexPlusOne != 4) {
            require((token4 >= 22 && token4 <= 24) || (token4 >= 1360 && token4 <= 1930));
        }
        if (skipIndexPlusOne != 5) {
            require((token5 >= 19 && token5 <= 21) || (token5 >= 789 && token5 <= 1359));
        }
        if (skipIndexPlusOne != 6) {
            require((token6 >= 13 && token6 <= 15) || (token6 >= 31 && token6 <= 217) || (token6 >= 3073 && token6 <= 3456));
        }

        return true;
    }

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

    function checkIfTokenUsed(uint256 tokenId) public view returns (bool) {
        return usedTokenIds[tokenId];
    }

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

    function mintOne(address receiver) external onlyOwner {
        require(tokenIds < maxTokenIds, "Exceed maximum supply");
        tokenIds += 1;
        _safeMint(receiver, tokenIds);
    }

    function mintMany(address[] calldata _to, uint256[] calldata _amount) external payable onlyOwner {
        for (uint256 i; i < _to.length;) {
           for (uint256 j; j < _amount[i];) {
            require(tokenIds < maxTokenIds, "Exceed maximum supply");
            tokenIds += 1;
            _mint(_to[i], tokenIds);

            unchecked {
                j++;
            }
           }

            unchecked {
                i++;
            }
        }
    }

    function withdraw() public onlyOwner  {
        address _owner = owner();
        uint256 amount = address(this).balance;
        (bool sent, ) =  _owner.call{value: amount}("");
        require(sent, "Failed to send Ether");
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


    // ============ Setters (OnlyOwner) ============

    function setNameAndSymbol(string memory __name, string memory __symbol) external onlyOwner {
        _name = __name;
        _symbol = __symbol;
    }

    function setTotalSupply(uint256 supply) external onlyOwner {
        maxTokenIds = supply;
    }

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

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


    // ============ Receieve & Fallback functions ============

    receive() external payable {}

    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"address","name":"betaMascotsContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkIfTokenUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"arr","type":"uint256[]"}],"name":"isAbleToMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"token3","type":"uint256"},{"internalType":"uint256","name":"token4","type":"uint256"},{"internalType":"uint256","name":"token5","type":"uint256"},{"internalType":"uint256","name":"token6","type":"uint256"},{"internalType":"uint256","name":"skipIndexPlusOne","type":"uint256"}],"name":"isValidTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"arr","type":"uint256[]"},{"internalType":"uint256","name":"commonTokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"mintMany","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"mintOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__name","type":"string"},{"internalType":"string","name":"__symbol","type":"string"}],"name":"setNameAndSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedTokenIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610240600d553480156200001757600080fd5b50604051620053d4380380620053d483398181016040528101906200003d91906200033c565b8383816000908051906020019062000057929190620001f7565b50806001908051906020019062000070929190620001f7565b50505062000093620000876200012960201b60201c565b6200013160201b60201c565b8360119080519060200190620000ab929190620001f7565b508260129080519060200190620000c4929190620001f7565b5081600b9080519060200190620000dd929190620001f7565b5080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620005dd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020590620004d4565b90600052602060002090601f01602090048101928262000229576000855562000275565b82601f106200024457805160ff191683800117855562000275565b8280016001018555821562000275579182015b828111156200027457825182559160200191906001019062000257565b5b50905062000284919062000288565b5090565b5b80821115620002a357600081600090555060010162000289565b5090565b6000620002be620002b88462000434565b6200040b565b905082815260208101848484011115620002dd57620002dc620005a3565b5b620002ea8482856200049e565b509392505050565b6000815190506200030381620005c3565b92915050565b600082601f8301126200032157620003206200059e565b5b815162000333848260208601620002a7565b91505092915050565b60008060008060808587031215620003595762000358620005ad565b5b600085015167ffffffffffffffff8111156200037a5762000379620005a8565b5b620003888782880162000309565b945050602085015167ffffffffffffffff811115620003ac57620003ab620005a8565b5b620003ba8782880162000309565b935050604085015167ffffffffffffffff811115620003de57620003dd620005a8565b5b620003ec8782880162000309565b9250506060620003ff87828801620002f2565b91505092959194509250565b6000620004176200042a565b90506200042582826200050a565b919050565b6000604051905090565b600067ffffffffffffffff8211156200045257620004516200056f565b5b6200045d82620005b2565b9050602081019050919050565b600062000477826200047e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620004be578082015181840152602081019050620004a1565b83811115620004ce576000848401525b50505050565b60006002820490506001821680620004ed57607f821691505b6020821081141562000504576200050362000540565b5b50919050565b6200051582620005b2565b810181811067ffffffffffffffff821117156200053757620005366200056f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005ce816200046a565b8114620005da57600080fd5b50565b614de780620005ed6000396000f3fe6080604052600436106101fd5760003560e01c80635a4462151161010d57806395d89b41116100a0578063cfd287641161006f578063cfd2876414610743578063e985e9c514610780578063f2fde38b146107bd578063f7ea7a3d146107e6578063fa695a971461080f57610204565b806395d89b4114610689578063a22cb465146106b4578063b88d4fde146106dd578063c87b56dd1461070657610204565b806370a08231116100dc57806370a08231146105df578063714cff561461061c578063715018a6146106475780638da5cb5b1461065e57610204565b80635a446215146105115780635c59b5821461053a5780635f769621146105775780636352211e146105a257610204565b806323b872dd1161019057806342842e0e1161015f57806342842e0e146104085780634f0b1f96146104315780634f6ccce71461046e57806355f804b3146104ab57806357cb93d9146104d457610204565b806323b872dd1461036f5780632f745c59146103985780633ccfd60b146103d55780634029a3ce146103ec57610204565b80630bd06246116101cc5780630bd06246146102d457806316c38b3c146102f057806316c61ccc1461031957806318160ddd1461034457610204565b806301ffc9a71461020657806306fdde0314610243578063081812fc1461026e578063095ea7b3146102ab57610204565b3661020457005b005b34801561021257600080fd5b5061022d600480360381019061022891906139a2565b610838565b60405161023a9190614012565b60405180910390f35b34801561024f57600080fd5b506102586108b2565b604051610265919061402d565b60405180910390f35b34801561027a57600080fd5b5061029560048036038101906102909190613abd565b610944565b6040516102a29190613fab565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd919061380f565b6109c9565b005b6102ee60048036038101906102e99190613919565b610ae1565b005b3480156102fc57600080fd5b5061031760048036038101906103129190613975565b610f98565b005b34801561032557600080fd5b5061032e611031565b60405161033b9190614012565b60405180910390f35b34801561035057600080fd5b50610359611044565b604051610366919061434f565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906136f9565b611051565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061380f565b6110b1565b6040516103cc919061434f565b60405180910390f35b3480156103e157600080fd5b506103ea611156565b005b6104066004803603810190610401919061384f565b611294565b005b34801561041457600080fd5b5061042f600480360381019061042a91906136f9565b6113f7565b005b34801561043d57600080fd5b50610458600480360381019061045391906138d0565b611417565b6040516104659190614012565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613abd565b6117d4565b6040516104a2919061434f565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906139fc565b611845565b005b3480156104e057600080fd5b506104fb60048036038101906104f69190613abd565b6118db565b6040516105089190614012565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613a45565b6118fb565b005b34801561054657600080fd5b50610561600480360381019061055c9190613aea565b6119a9565b60405161056e9190614012565b60405180910390f35b34801561058357600080fd5b5061058c611b4c565b604051610599919061434f565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613abd565b611b52565b6040516105d69190613fab565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061365f565b611c04565b604051610613919061434f565b60405180910390f35b34801561062857600080fd5b50610631611cbc565b60405161063e919061434f565b60405180910390f35b34801561065357600080fd5b5061065c611cc2565b005b34801561066a57600080fd5b50610673611d4a565b6040516106809190613fab565b60405180910390f35b34801561069557600080fd5b5061069e611d74565b6040516106ab919061402d565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906137cf565b611e06565b005b3480156106e957600080fd5b5061070460048036038101906106ff919061374c565b611e1c565b005b34801561071257600080fd5b5061072d60048036038101906107289190613abd565b611e7e565b60405161073a919061402d565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613abd565b611edd565b6040516107779190614012565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906136b9565b611f07565b6040516107b49190614012565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061365f565b611f9b565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613abd565b612093565b005b34801561081b57600080fd5b506108366004803603810190610831919061365f565b612119565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ab57506108aa82612204565b5b9050919050565b6060601180546108c1906145a0565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906145a0565b801561093a5780601f1061090f5761010080835404028352916020019161093a565b820191906000526020600020905b81548152906001019060200180831161091d57829003601f168201915b5050505050905090565b600061094f826122e6565b61098e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109859061424f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d482611b52565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906142cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a64612352565b73ffffffffffffffffffffffffffffffffffffffff161480610a935750610a9281610a8d612352565b611f07565b5b610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac9906141cf565b60405180910390fd5b610adc838361235a565b505050565b600c60009054906101000a900460ff1615610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b28906142af565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906141af565b60405180910390fd5b600d54600e5410610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc9061416f565b60405180910390fd5b600c8111158015610c1457506010600082815260200190815260200160002060009054906101000a900460ff16155b610c1d57600080fd5b60008114610c6857610c2e82611417565b610c3757600080fd5b60016010600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610eeb565b60005b8251811015610e2e573273ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858481518110610cdc57610cdb6146d9565b5b60200260200101516040518263ffffffff1660e01b8152600401610d00919061434f565b60206040518083038186803b158015610d1857600080fd5b505afa158015610d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d50919061368c565b73ffffffffffffffffffffffffffffffffffffffff1614610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d906142ef565b60405180910390fd5b60106000848381518110610dbd57610dbc6146d9565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e189061414f565b60405180910390fd5b8080600101915050610c6b565b50610ee182600081518110610e4657610e456146d9565b5b602002602001015183600181518110610e6257610e616146d9565b5b602002602001015184600281518110610e7e57610e7d6146d9565b5b602002602001015185600381518110610e9a57610e996146d9565b5b602002602001015186600481518110610eb657610eb56146d9565b5b602002602001015187600581518110610ed257610ed16146d9565b5b602002602001015160076119a9565b610eea57600080fd5b5b60005b8251811015610f6d576000838281518110610f0c57610f0b6146d9565b5b602002602001015114610f6057600160106000858481518110610f3257610f316146d9565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080600101915050610eee565b506001600e6000828254610f819190614460565b92505081905550610f9433600e54612413565b5050565b610fa0612352565b73ffffffffffffffffffffffffffffffffffffffff16610fbe611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b9061426f565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6000600880549050905090565b61106261105c612352565b82612431565b6110a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110989061430f565b60405180910390fd5b6110ac83838361250f565b505050565b60006110bc83611c04565b82106110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f49061404f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61115e612352565b73ffffffffffffffffffffffffffffffffffffffff1661117c611d4a565b73ffffffffffffffffffffffffffffffffffffffff16146111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c99061426f565b60405180910390fd5b60006111dc611d4a565b9050600047905060008273ffffffffffffffffffffffffffffffffffffffff168260405161120990613f96565b60006040518083038185875af1925050503d8060008114611246576040519150601f19603f3d011682016040523d82523d6000602084013e61124b565b606091505b505090508061128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906140ef565b60405180910390fd5b505050565b61129c612352565b73ffffffffffffffffffffffffffffffffffffffff166112ba611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113079061426f565b60405180910390fd5b60005b848490508110156113f05760005b838383818110611334576113336146d9565b5b905060200201358110156113e257600d54600e5410611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f9061416f565b60405180910390fd5b6001600e600082825461139b9190614460565b925050819055506113d58686848181106113b8576113b76146d9565b5b90506020020160208101906113cd919061365f565b600e54612776565b8080600101915050611321565b508080600101915050611313565b5050505050565b61141283838360405180602001604052806000815250611e1c565b505050565b600080600080600090505b845181101561161e5760008582815181106114405761143f6146d9565b5b6020026020010151146115ff573273ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8784815181106114b5576114b46146d9565b5b60200260200101516040518263ffffffff1660e01b81526004016114d9919061434f565b60206040518083038186803b1580156114f157600080fd5b505afa158015611505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611529919061368c565b73ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611576906142ef565b60405180910390fd5b60106000868381518110611596576115956146d9565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f19061414f565b60405180910390fd5b611611565b809250818061160d90614603565b9250505b8080600101915050611422565b506001811115611633576000925050506117cf565b600181141561170d576116f984600081518110611653576116526146d9565b5b60200260200101518560018151811061166f5761166e6146d9565b5b60200260200101518660028151811061168b5761168a6146d9565b5b6020026020010151876003815181106116a7576116a66146d9565b5b6020026020010151886004815181106116c3576116c26146d9565b5b6020026020010151896005815181106116df576116de6146d9565b5b60200260200101516001896116f49190614460565b6119a9565b61170257600080fd5b6001925050506117cf565b6117bf84600081518110611724576117236146d9565b5b6020026020010151856001815181106117405761173f6146d9565b5b60200260200101518660028151811061175c5761175b6146d9565b5b602002602001015187600381518110611778576117776146d9565b5b602002602001015188600481518110611794576117936146d9565b5b6020026020010151896005815181106117b0576117af6146d9565b5b602002602001015160076119a9565b6117c857600080fd5b6001925050505b919050565b60006117de611044565b821061181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061432f565b60405180910390fd5b60088281548110611833576118326146d9565b5b90600052602060002001549050919050565b61184d612352565b73ffffffffffffffffffffffffffffffffffffffff1661186b611d4a565b73ffffffffffffffffffffffffffffffffffffffff16146118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b89061426f565b60405180910390fd5b80600b90805190602001906118d7929190613314565b5050565b60106020528060005260406000206000915054906101000a900460ff1681565b611903612352565b73ffffffffffffffffffffffffffffffffffffffff16611921611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e9061426f565b60405180910390fd5b816011908051906020019061198d929190613314565b5080601290805190602001906119a4929190613314565b505050565b6000600182146119ea57601c88101580156119c55750601e8811155b806119e057506109c688101580156119df5750610c008811155b5b6119e957600080fd5b5b60028214611a295760198710158015611a045750601b8711155b80611a1f575061078b8710158015611a1e57506109c58711155b5b611a2857600080fd5b5b60038214611a675760108610158015611a43575060128611155b80611a5d575060da8610158015611a5c57506103148611155b5b611a6657600080fd5b5b60048214611aa65760168510158015611a81575060188511155b80611a9c57506105508510158015611a9b575061078a8511155b5b611aa557600080fd5b5b60058214611ae55760138410158015611ac0575060158411155b80611adb57506103158410158015611ada575061054f8411155b5b611ae457600080fd5b5b60068214611b3d57600d8310158015611aff5750600f8311155b80611b185750601f8310158015611b17575060d98311155b5b80611b335750610c018310158015611b325750610d808311155b5b611b3c57600080fd5b5b60019050979650505050505050565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf29061420f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c906141ef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b611cca612352565b73ffffffffffffffffffffffffffffffffffffffff16611ce8611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d359061426f565b60405180910390fd5b611d486000612950565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054611d83906145a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611daf906145a0565b8015611dfc5780601f10611dd157610100808354040283529160200191611dfc565b820191906000526020600020905b815481529060010190602001808311611ddf57829003601f168201915b5050505050905090565b611e18611e11612352565b8383612a16565b5050565b611e2d611e27612352565b83612431565b611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e639061430f565b60405180910390fd5b611e7884848484612b83565b50505050565b6060611e89826122e6565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061428f565b60405180910390fd5b6000611ed2612bdf565b905080915050919050565b60006010600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fa3612352565b73ffffffffffffffffffffffffffffffffffffffff16611fc1611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e9061426f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e9061408f565b60405180910390fd5b61209081612950565b50565b61209b612352565b73ffffffffffffffffffffffffffffffffffffffff166120b9611d4a565b73ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121069061426f565b60405180910390fd5b80600d8190555050565b612121612352565b73ffffffffffffffffffffffffffffffffffffffff1661213f611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c9061426f565b60405180910390fd5b600d54600e54106121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d29061416f565b60405180910390fd5b6001600e60008282546121ee9190614460565b9250508190555061220181600e54612413565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122df57506122de82612c71565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123cd83611b52565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61242d828260405180602001604052806000815250612cdb565b5050565b600061243c826122e6565b61247b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124729061418f565b60405180910390fd5b600061248683611b52565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124c857506124c78185611f07565b5b8061250657508373ffffffffffffffffffffffffffffffffffffffff166124ee84610944565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661252f82611b52565b73ffffffffffffffffffffffffffffffffffffffff1614612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906140af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec9061410f565b60405180910390fd5b612600838383612d36565b61260b60008261235a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265b91906144b6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b29190614460565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612771838383612e4a565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd9061422f565b60405180910390fd5b6127ef816122e6565b1561282f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612826906140cf565b60405180910390fd5b61283b60008383612d36565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461288b9190614460565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461294c60008383612e4a565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c9061412f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b769190614012565b60405180910390a3505050565b612b8e84848461250f565b612b9a84848484612e4f565b612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd09061406f565b60405180910390fd5b50505050565b6060600b8054612bee906145a0565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1a906145a0565b8015612c675780601f10612c3c57610100808354040283529160200191612c67565b820191906000526020600020905b815481529060010190602001808311612c4a57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ce58383612776565b612cf26000848484612e4f565b612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d289061406f565b60405180910390fd5b505050565b612d41838383612fe6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8457612d7f81612feb565b612dc3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dc257612dc18382613034565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0657612e01816131a1565b612e45565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e4457612e438282613272565b5b5b505050565b505050565b6000612e708473ffffffffffffffffffffffffffffffffffffffff166132f1565b15612fd9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e99612352565b8786866040518563ffffffff1660e01b8152600401612ebb9493929190613fc6565b602060405180830381600087803b158015612ed557600080fd5b505af1925050508015612f0657506040513d601f19601f82011682018060405250810190612f0391906139cf565b60015b612f89573d8060008114612f36576040519150601f19603f3d011682016040523d82523d6000602084013e612f3b565b606091505b50600081511415612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f789061406f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fde565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161304184611c04565b61304b91906144b6565b9050600060076000848152602001908152602001600020549050818114613130576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131b591906144b6565b90506000600960008481526020019081526020016000205490506000600883815481106131e5576131e46146d9565b5b906000526020600020015490508060088381548110613207576132066146d9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613256576132556146aa565b5b6001900381819060005260206000200160009055905550505050565b600061327d83611c04565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613320906145a0565b90600052602060002090601f0160209004810192826133425760008555613389565b82601f1061335b57805160ff1916838001178555613389565b82800160010185558215613389579182015b8281111561338857825182559160200191906001019061336d565b5b509050613396919061339a565b5090565b5b808211156133b357600081600090555060010161339b565b5090565b60006133ca6133c58461438f565b61436a565b905080838252602082019050828560208602820111156133ed576133ec614741565b5b60005b8581101561341d5781613403888261364a565b8452602084019350602083019250506001810190506133f0565b5050509392505050565b600061343a613435846143bb565b61436a565b90508281526020810184848401111561345657613455614746565b5b61346184828561455e565b509392505050565b600061347c613477846143ec565b61436a565b90508281526020810184848401111561349857613497614746565b5b6134a384828561455e565b509392505050565b6000813590506134ba81614d55565b92915050565b6000815190506134cf81614d55565b92915050565b60008083601f8401126134eb576134ea61473c565b5b8235905067ffffffffffffffff81111561350857613507614737565b5b60208301915083602082028301111561352457613523614741565b5b9250929050565b60008083601f8401126135415761354061473c565b5b8235905067ffffffffffffffff81111561355e5761355d614737565b5b60208301915083602082028301111561357a57613579614741565b5b9250929050565b600082601f8301126135965761359561473c565b5b81356135a68482602086016133b7565b91505092915050565b6000813590506135be81614d6c565b92915050565b6000813590506135d381614d83565b92915050565b6000815190506135e881614d83565b92915050565b600082601f8301126136035761360261473c565b5b8135613613848260208601613427565b91505092915050565b600082601f8301126136315761363061473c565b5b8135613641848260208601613469565b91505092915050565b60008135905061365981614d9a565b92915050565b60006020828403121561367557613674614750565b5b6000613683848285016134ab565b91505092915050565b6000602082840312156136a2576136a1614750565b5b60006136b0848285016134c0565b91505092915050565b600080604083850312156136d0576136cf614750565b5b60006136de858286016134ab565b92505060206136ef858286016134ab565b9150509250929050565b60008060006060848603121561371257613711614750565b5b6000613720868287016134ab565b9350506020613731868287016134ab565b92505060406137428682870161364a565b9150509250925092565b6000806000806080858703121561376657613765614750565b5b6000613774878288016134ab565b9450506020613785878288016134ab565b93505060406137968782880161364a565b925050606085013567ffffffffffffffff8111156137b7576137b661474b565b5b6137c3878288016135ee565b91505092959194509250565b600080604083850312156137e6576137e5614750565b5b60006137f4858286016134ab565b9250506020613805858286016135af565b9150509250929050565b6000806040838503121561382657613825614750565b5b6000613834858286016134ab565b92505060206138458582860161364a565b9150509250929050565b6000806000806040858703121561386957613868614750565b5b600085013567ffffffffffffffff8111156138875761388661474b565b5b613893878288016134d5565b9450945050602085013567ffffffffffffffff8111156138b6576138b561474b565b5b6138c28782880161352b565b925092505092959194509250565b6000602082840312156138e6576138e5614750565b5b600082013567ffffffffffffffff8111156139045761390361474b565b5b61391084828501613581565b91505092915050565b600080604083850312156139305761392f614750565b5b600083013567ffffffffffffffff81111561394e5761394d61474b565b5b61395a85828601613581565b925050602061396b8582860161364a565b9150509250929050565b60006020828403121561398b5761398a614750565b5b6000613999848285016135af565b91505092915050565b6000602082840312156139b8576139b7614750565b5b60006139c6848285016135c4565b91505092915050565b6000602082840312156139e5576139e4614750565b5b60006139f3848285016135d9565b91505092915050565b600060208284031215613a1257613a11614750565b5b600082013567ffffffffffffffff811115613a3057613a2f61474b565b5b613a3c8482850161361c565b91505092915050565b60008060408385031215613a5c57613a5b614750565b5b600083013567ffffffffffffffff811115613a7a57613a7961474b565b5b613a868582860161361c565b925050602083013567ffffffffffffffff811115613aa757613aa661474b565b5b613ab38582860161361c565b9150509250929050565b600060208284031215613ad357613ad2614750565b5b6000613ae18482850161364a565b91505092915050565b600080600080600080600060e0888a031215613b0957613b08614750565b5b6000613b178a828b0161364a565b9750506020613b288a828b0161364a565b9650506040613b398a828b0161364a565b9550506060613b4a8a828b0161364a565b9450506080613b5b8a828b0161364a565b93505060a0613b6c8a828b0161364a565b92505060c0613b7d8a828b0161364a565b91505092959891949750929550565b613b95816144ea565b82525050565b613ba4816144fc565b82525050565b6000613bb58261441d565b613bbf8185614433565b9350613bcf81856020860161456d565b613bd881614755565b840191505092915050565b6000613bee82614428565b613bf8818561444f565b9350613c0881856020860161456d565b613c1181614755565b840191505092915050565b6000613c29602b8361444f565b9150613c3482614766565b604082019050919050565b6000613c4c60328361444f565b9150613c57826147b5565b604082019050919050565b6000613c6f60268361444f565b9150613c7a82614804565b604082019050919050565b6000613c9260258361444f565b9150613c9d82614853565b604082019050919050565b6000613cb5601c8361444f565b9150613cc0826148a2565b602082019050919050565b6000613cd860148361444f565b9150613ce3826148cb565b602082019050919050565b6000613cfb60248361444f565b9150613d06826148f4565b604082019050919050565b6000613d1e60198361444f565b9150613d2982614943565b602082019050919050565b6000613d4160148361444f565b9150613d4c8261496c565b602082019050919050565b6000613d6460158361444f565b9150613d6f82614995565b602082019050919050565b6000613d87602c8361444f565b9150613d92826149be565b604082019050919050565b6000613daa601e8361444f565b9150613db582614a0d565b602082019050919050565b6000613dcd60388361444f565b9150613dd882614a36565b604082019050919050565b6000613df0602a8361444f565b9150613dfb82614a85565b604082019050919050565b6000613e1360298361444f565b9150613e1e82614ad4565b604082019050919050565b6000613e3660208361444f565b9150613e4182614b23565b602082019050919050565b6000613e59602c8361444f565b9150613e6482614b4c565b604082019050919050565b6000613e7c60208361444f565b9150613e8782614b9b565b602082019050919050565b6000613e9f602f8361444f565b9150613eaa82614bc4565b604082019050919050565b6000613ec260198361444f565b9150613ecd82614c13565b602082019050919050565b6000613ee560218361444f565b9150613ef082614c3c565b604082019050919050565b6000613f0860098361444f565b9150613f1382614c8b565b602082019050919050565b6000613f2b600083614444565b9150613f3682614cb4565b600082019050919050565b6000613f4e60318361444f565b9150613f5982614cb7565b604082019050919050565b6000613f71602c8361444f565b9150613f7c82614d06565b604082019050919050565b613f9081614554565b82525050565b6000613fa182613f1e565b9150819050919050565b6000602082019050613fc06000830184613b8c565b92915050565b6000608082019050613fdb6000830187613b8c565b613fe86020830186613b8c565b613ff56040830185613f87565b81810360608301526140078184613baa565b905095945050505050565b60006020820190506140276000830184613b9b565b92915050565b600060208201905081810360008301526140478184613be3565b905092915050565b6000602082019050818103600083015261406881613c1c565b9050919050565b6000602082019050818103600083015261408881613c3f565b9050919050565b600060208201905081810360008301526140a881613c62565b9050919050565b600060208201905081810360008301526140c881613c85565b9050919050565b600060208201905081810360008301526140e881613ca8565b9050919050565b6000602082019050818103600083015261410881613ccb565b9050919050565b6000602082019050818103600083015261412881613cee565b9050919050565b6000602082019050818103600083015261414881613d11565b9050919050565b6000602082019050818103600083015261416881613d34565b9050919050565b6000602082019050818103600083015261418881613d57565b9050919050565b600060208201905081810360008301526141a881613d7a565b9050919050565b600060208201905081810360008301526141c881613d9d565b9050919050565b600060208201905081810360008301526141e881613dc0565b9050919050565b6000602082019050818103600083015261420881613de3565b9050919050565b6000602082019050818103600083015261422881613e06565b9050919050565b6000602082019050818103600083015261424881613e29565b9050919050565b6000602082019050818103600083015261426881613e4c565b9050919050565b6000602082019050818103600083015261428881613e6f565b9050919050565b600060208201905081810360008301526142a881613e92565b9050919050565b600060208201905081810360008301526142c881613eb5565b9050919050565b600060208201905081810360008301526142e881613ed8565b9050919050565b6000602082019050818103600083015261430881613efb565b9050919050565b6000602082019050818103600083015261432881613f41565b9050919050565b6000602082019050818103600083015261434881613f64565b9050919050565b60006020820190506143646000830184613f87565b92915050565b6000614374614385565b905061438082826145d2565b919050565b6000604051905090565b600067ffffffffffffffff8211156143aa576143a9614708565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d6576143d5614708565b5b6143df82614755565b9050602081019050919050565b600067ffffffffffffffff82111561440757614406614708565b5b61441082614755565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061446b82614554565b915061447683614554565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ab576144aa61464c565b5b828201905092915050565b60006144c182614554565b91506144cc83614554565b9250828210156144df576144de61464c565b5b828203905092915050565b60006144f582614534565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561458b578082015181840152602081019050614570565b8381111561459a576000848401525b50505050565b600060028204905060018216806145b857607f821691505b602082108114156145cc576145cb61467b565b5b50919050565b6145db82614755565b810181811067ffffffffffffffff821117156145fa576145f9614708565b5b80604052505050565b600061460e82614554565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146415761464061464c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f546f6b656e496420616c72656164792075736564000000000000000000000000600082015250565b7f457863656564206d6178696d756d20737570706c790000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f436f6e74726163742063757272656e746c792070617573656400000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614d5e816144ea565b8114614d6957600080fd5b50565b614d75816144fc565b8114614d8057600080fd5b50565b614d8c81614508565b8114614d9757600080fd5b50565b614da381614554565b8114614dae57600080fd5b5056fea26469706673582212203a0c796f03b065ff92b159aa0ab9ea15a06afd9e5dea1d0ad79f8300982da8a064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000019317b3fc2f1add6b7e17a0a03a5a269ed5ce48b000000000000000000000000000000000000000000000000000000000000000e4d6173636f74426f6f737465727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d59455757344d5a654d78624264736d674162754b754d474a4c4d41357a4441756b7a68365137574a454c79660000000000000000000000

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80635a4462151161010d57806395d89b41116100a0578063cfd287641161006f578063cfd2876414610743578063e985e9c514610780578063f2fde38b146107bd578063f7ea7a3d146107e6578063fa695a971461080f57610204565b806395d89b4114610689578063a22cb465146106b4578063b88d4fde146106dd578063c87b56dd1461070657610204565b806370a08231116100dc57806370a08231146105df578063714cff561461061c578063715018a6146106475780638da5cb5b1461065e57610204565b80635a446215146105115780635c59b5821461053a5780635f769621146105775780636352211e146105a257610204565b806323b872dd1161019057806342842e0e1161015f57806342842e0e146104085780634f0b1f96146104315780634f6ccce71461046e57806355f804b3146104ab57806357cb93d9146104d457610204565b806323b872dd1461036f5780632f745c59146103985780633ccfd60b146103d55780634029a3ce146103ec57610204565b80630bd06246116101cc5780630bd06246146102d457806316c38b3c146102f057806316c61ccc1461031957806318160ddd1461034457610204565b806301ffc9a71461020657806306fdde0314610243578063081812fc1461026e578063095ea7b3146102ab57610204565b3661020457005b005b34801561021257600080fd5b5061022d600480360381019061022891906139a2565b610838565b60405161023a9190614012565b60405180910390f35b34801561024f57600080fd5b506102586108b2565b604051610265919061402d565b60405180910390f35b34801561027a57600080fd5b5061029560048036038101906102909190613abd565b610944565b6040516102a29190613fab565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd919061380f565b6109c9565b005b6102ee60048036038101906102e99190613919565b610ae1565b005b3480156102fc57600080fd5b5061031760048036038101906103129190613975565b610f98565b005b34801561032557600080fd5b5061032e611031565b60405161033b9190614012565b60405180910390f35b34801561035057600080fd5b50610359611044565b604051610366919061434f565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906136f9565b611051565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061380f565b6110b1565b6040516103cc919061434f565b60405180910390f35b3480156103e157600080fd5b506103ea611156565b005b6104066004803603810190610401919061384f565b611294565b005b34801561041457600080fd5b5061042f600480360381019061042a91906136f9565b6113f7565b005b34801561043d57600080fd5b50610458600480360381019061045391906138d0565b611417565b6040516104659190614012565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190613abd565b6117d4565b6040516104a2919061434f565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906139fc565b611845565b005b3480156104e057600080fd5b506104fb60048036038101906104f69190613abd565b6118db565b6040516105089190614012565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613a45565b6118fb565b005b34801561054657600080fd5b50610561600480360381019061055c9190613aea565b6119a9565b60405161056e9190614012565b60405180910390f35b34801561058357600080fd5b5061058c611b4c565b604051610599919061434f565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613abd565b611b52565b6040516105d69190613fab565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061365f565b611c04565b604051610613919061434f565b60405180910390f35b34801561062857600080fd5b50610631611cbc565b60405161063e919061434f565b60405180910390f35b34801561065357600080fd5b5061065c611cc2565b005b34801561066a57600080fd5b50610673611d4a565b6040516106809190613fab565b60405180910390f35b34801561069557600080fd5b5061069e611d74565b6040516106ab919061402d565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d691906137cf565b611e06565b005b3480156106e957600080fd5b5061070460048036038101906106ff919061374c565b611e1c565b005b34801561071257600080fd5b5061072d60048036038101906107289190613abd565b611e7e565b60405161073a919061402d565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190613abd565b611edd565b6040516107779190614012565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906136b9565b611f07565b6040516107b49190614012565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df919061365f565b611f9b565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613abd565b612093565b005b34801561081b57600080fd5b506108366004803603810190610831919061365f565b612119565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108ab57506108aa82612204565b5b9050919050565b6060601180546108c1906145a0565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed906145a0565b801561093a5780601f1061090f5761010080835404028352916020019161093a565b820191906000526020600020905b81548152906001019060200180831161091d57829003601f168201915b5050505050905090565b600061094f826122e6565b61098e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109859061424f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109d482611b52565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906142cf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a64612352565b73ffffffffffffffffffffffffffffffffffffffff161480610a935750610a9281610a8d612352565b611f07565b5b610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac9906141cf565b60405180910390fd5b610adc838361235a565b505050565b600c60009054906101000a900460ff1615610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b28906142af565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906141af565b60405180910390fd5b600d54600e5410610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc9061416f565b60405180910390fd5b600c8111158015610c1457506010600082815260200190815260200160002060009054906101000a900460ff16155b610c1d57600080fd5b60008114610c6857610c2e82611417565b610c3757600080fd5b60016010600083815260200190815260200160002060006101000a81548160ff021916908315150217905550610eeb565b60005b8251811015610e2e573273ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e858481518110610cdc57610cdb6146d9565b5b60200260200101516040518263ffffffff1660e01b8152600401610d00919061434f565b60206040518083038186803b158015610d1857600080fd5b505afa158015610d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d50919061368c565b73ffffffffffffffffffffffffffffffffffffffff1614610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d906142ef565b60405180910390fd5b60106000848381518110610dbd57610dbc6146d9565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e189061414f565b60405180910390fd5b8080600101915050610c6b565b50610ee182600081518110610e4657610e456146d9565b5b602002602001015183600181518110610e6257610e616146d9565b5b602002602001015184600281518110610e7e57610e7d6146d9565b5b602002602001015185600381518110610e9a57610e996146d9565b5b602002602001015186600481518110610eb657610eb56146d9565b5b602002602001015187600581518110610ed257610ed16146d9565b5b602002602001015160076119a9565b610eea57600080fd5b5b60005b8251811015610f6d576000838281518110610f0c57610f0b6146d9565b5b602002602001015114610f6057600160106000858481518110610f3257610f316146d9565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080600101915050610eee565b506001600e6000828254610f819190614460565b92505081905550610f9433600e54612413565b5050565b610fa0612352565b73ffffffffffffffffffffffffffffffffffffffff16610fbe611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b9061426f565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b600c60009054906101000a900460ff1681565b6000600880549050905090565b61106261105c612352565b82612431565b6110a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110989061430f565b60405180910390fd5b6110ac83838361250f565b505050565b60006110bc83611c04565b82106110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f49061404f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61115e612352565b73ffffffffffffffffffffffffffffffffffffffff1661117c611d4a565b73ffffffffffffffffffffffffffffffffffffffff16146111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c99061426f565b60405180910390fd5b60006111dc611d4a565b9050600047905060008273ffffffffffffffffffffffffffffffffffffffff168260405161120990613f96565b60006040518083038185875af1925050503d8060008114611246576040519150601f19603f3d011682016040523d82523d6000602084013e61124b565b606091505b505090508061128f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611286906140ef565b60405180910390fd5b505050565b61129c612352565b73ffffffffffffffffffffffffffffffffffffffff166112ba611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113079061426f565b60405180910390fd5b60005b848490508110156113f05760005b838383818110611334576113336146d9565b5b905060200201358110156113e257600d54600e5410611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f9061416f565b60405180910390fd5b6001600e600082825461139b9190614460565b925050819055506113d58686848181106113b8576113b76146d9565b5b90506020020160208101906113cd919061365f565b600e54612776565b8080600101915050611321565b508080600101915050611313565b5050505050565b61141283838360405180602001604052806000815250611e1c565b505050565b600080600080600090505b845181101561161e5760008582815181106114405761143f6146d9565b5b6020026020010151146115ff573273ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8784815181106114b5576114b46146d9565b5b60200260200101516040518263ffffffff1660e01b81526004016114d9919061434f565b60206040518083038186803b1580156114f157600080fd5b505afa158015611505573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611529919061368c565b73ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611576906142ef565b60405180910390fd5b60106000868381518110611596576115956146d9565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f19061414f565b60405180910390fd5b611611565b809250818061160d90614603565b9250505b8080600101915050611422565b506001811115611633576000925050506117cf565b600181141561170d576116f984600081518110611653576116526146d9565b5b60200260200101518560018151811061166f5761166e6146d9565b5b60200260200101518660028151811061168b5761168a6146d9565b5b6020026020010151876003815181106116a7576116a66146d9565b5b6020026020010151886004815181106116c3576116c26146d9565b5b6020026020010151896005815181106116df576116de6146d9565b5b60200260200101516001896116f49190614460565b6119a9565b61170257600080fd5b6001925050506117cf565b6117bf84600081518110611724576117236146d9565b5b6020026020010151856001815181106117405761173f6146d9565b5b60200260200101518660028151811061175c5761175b6146d9565b5b602002602001015187600381518110611778576117776146d9565b5b602002602001015188600481518110611794576117936146d9565b5b6020026020010151896005815181106117b0576117af6146d9565b5b602002602001015160076119a9565b6117c857600080fd5b6001925050505b919050565b60006117de611044565b821061181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061432f565b60405180910390fd5b60088281548110611833576118326146d9565b5b90600052602060002001549050919050565b61184d612352565b73ffffffffffffffffffffffffffffffffffffffff1661186b611d4a565b73ffffffffffffffffffffffffffffffffffffffff16146118c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b89061426f565b60405180910390fd5b80600b90805190602001906118d7929190613314565b5050565b60106020528060005260406000206000915054906101000a900460ff1681565b611903612352565b73ffffffffffffffffffffffffffffffffffffffff16611921611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e9061426f565b60405180910390fd5b816011908051906020019061198d929190613314565b5080601290805190602001906119a4929190613314565b505050565b6000600182146119ea57601c88101580156119c55750601e8811155b806119e057506109c688101580156119df5750610c008811155b5b6119e957600080fd5b5b60028214611a295760198710158015611a045750601b8711155b80611a1f575061078b8710158015611a1e57506109c58711155b5b611a2857600080fd5b5b60038214611a675760108610158015611a43575060128611155b80611a5d575060da8610158015611a5c57506103148611155b5b611a6657600080fd5b5b60048214611aa65760168510158015611a81575060188511155b80611a9c57506105508510158015611a9b575061078a8511155b5b611aa557600080fd5b5b60058214611ae55760138410158015611ac0575060158411155b80611adb57506103158410158015611ada575061054f8411155b5b611ae457600080fd5b5b60068214611b3d57600d8310158015611aff5750600f8311155b80611b185750601f8310158015611b17575060d98311155b5b80611b335750610c018310158015611b325750610d808311155b5b611b3c57600080fd5b5b60019050979650505050505050565b600d5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf29061420f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6c906141ef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b611cca612352565b73ffffffffffffffffffffffffffffffffffffffff16611ce8611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d359061426f565b60405180910390fd5b611d486000612950565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054611d83906145a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611daf906145a0565b8015611dfc5780601f10611dd157610100808354040283529160200191611dfc565b820191906000526020600020905b815481529060010190602001808311611ddf57829003601f168201915b5050505050905090565b611e18611e11612352565b8383612a16565b5050565b611e2d611e27612352565b83612431565b611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e639061430f565b60405180910390fd5b611e7884848484612b83565b50505050565b6060611e89826122e6565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf9061428f565b60405180910390fd5b6000611ed2612bdf565b905080915050919050565b60006010600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fa3612352565b73ffffffffffffffffffffffffffffffffffffffff16611fc1611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e9061426f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207e9061408f565b60405180910390fd5b61209081612950565b50565b61209b612352565b73ffffffffffffffffffffffffffffffffffffffff166120b9611d4a565b73ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121069061426f565b60405180910390fd5b80600d8190555050565b612121612352565b73ffffffffffffffffffffffffffffffffffffffff1661213f611d4a565b73ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c9061426f565b60405180910390fd5b600d54600e54106121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d29061416f565b60405180910390fd5b6001600e60008282546121ee9190614460565b9250508190555061220181600e54612413565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122df57506122de82612c71565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123cd83611b52565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61242d828260405180602001604052806000815250612cdb565b5050565b600061243c826122e6565b61247b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124729061418f565b60405180910390fd5b600061248683611b52565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124c857506124c78185611f07565b5b8061250657508373ffffffffffffffffffffffffffffffffffffffff166124ee84610944565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661252f82611b52565b73ffffffffffffffffffffffffffffffffffffffff1614612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c906140af565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec9061410f565b60405180910390fd5b612600838383612d36565b61260b60008261235a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265b91906144b6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126b29190614460565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612771838383612e4a565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dd9061422f565b60405180910390fd5b6127ef816122e6565b1561282f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612826906140cf565b60405180910390fd5b61283b60008383612d36565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461288b9190614460565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461294c60008383612e4a565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7c9061412f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b769190614012565b60405180910390a3505050565b612b8e84848461250f565b612b9a84848484612e4f565b612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd09061406f565b60405180910390fd5b50505050565b6060600b8054612bee906145a0565b80601f0160208091040260200160405190810160405280929190818152602001828054612c1a906145a0565b8015612c675780601f10612c3c57610100808354040283529160200191612c67565b820191906000526020600020905b815481529060010190602001808311612c4a57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ce58383612776565b612cf26000848484612e4f565b612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d289061406f565b60405180910390fd5b505050565b612d41838383612fe6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8457612d7f81612feb565b612dc3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dc257612dc18382613034565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0657612e01816131a1565b612e45565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e4457612e438282613272565b5b5b505050565b505050565b6000612e708473ffffffffffffffffffffffffffffffffffffffff166132f1565b15612fd9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e99612352565b8786866040518563ffffffff1660e01b8152600401612ebb9493929190613fc6565b602060405180830381600087803b158015612ed557600080fd5b505af1925050508015612f0657506040513d601f19601f82011682018060405250810190612f0391906139cf565b60015b612f89573d8060008114612f36576040519150601f19603f3d011682016040523d82523d6000602084013e612f3b565b606091505b50600081511415612f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f789061406f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fde565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161304184611c04565b61304b91906144b6565b9050600060076000848152602001908152602001600020549050818114613130576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131b591906144b6565b90506000600960008481526020019081526020016000205490506000600883815481106131e5576131e46146d9565b5b906000526020600020015490508060088381548110613207576132066146d9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613256576132556146aa565b5b6001900381819060005260206000200160009055905550505050565b600061327d83611c04565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613320906145a0565b90600052602060002090601f0160209004810192826133425760008555613389565b82601f1061335b57805160ff1916838001178555613389565b82800160010185558215613389579182015b8281111561338857825182559160200191906001019061336d565b5b509050613396919061339a565b5090565b5b808211156133b357600081600090555060010161339b565b5090565b60006133ca6133c58461438f565b61436a565b905080838252602082019050828560208602820111156133ed576133ec614741565b5b60005b8581101561341d5781613403888261364a565b8452602084019350602083019250506001810190506133f0565b5050509392505050565b600061343a613435846143bb565b61436a565b90508281526020810184848401111561345657613455614746565b5b61346184828561455e565b509392505050565b600061347c613477846143ec565b61436a565b90508281526020810184848401111561349857613497614746565b5b6134a384828561455e565b509392505050565b6000813590506134ba81614d55565b92915050565b6000815190506134cf81614d55565b92915050565b60008083601f8401126134eb576134ea61473c565b5b8235905067ffffffffffffffff81111561350857613507614737565b5b60208301915083602082028301111561352457613523614741565b5b9250929050565b60008083601f8401126135415761354061473c565b5b8235905067ffffffffffffffff81111561355e5761355d614737565b5b60208301915083602082028301111561357a57613579614741565b5b9250929050565b600082601f8301126135965761359561473c565b5b81356135a68482602086016133b7565b91505092915050565b6000813590506135be81614d6c565b92915050565b6000813590506135d381614d83565b92915050565b6000815190506135e881614d83565b92915050565b600082601f8301126136035761360261473c565b5b8135613613848260208601613427565b91505092915050565b600082601f8301126136315761363061473c565b5b8135613641848260208601613469565b91505092915050565b60008135905061365981614d9a565b92915050565b60006020828403121561367557613674614750565b5b6000613683848285016134ab565b91505092915050565b6000602082840312156136a2576136a1614750565b5b60006136b0848285016134c0565b91505092915050565b600080604083850312156136d0576136cf614750565b5b60006136de858286016134ab565b92505060206136ef858286016134ab565b9150509250929050565b60008060006060848603121561371257613711614750565b5b6000613720868287016134ab565b9350506020613731868287016134ab565b92505060406137428682870161364a565b9150509250925092565b6000806000806080858703121561376657613765614750565b5b6000613774878288016134ab565b9450506020613785878288016134ab565b93505060406137968782880161364a565b925050606085013567ffffffffffffffff8111156137b7576137b661474b565b5b6137c3878288016135ee565b91505092959194509250565b600080604083850312156137e6576137e5614750565b5b60006137f4858286016134ab565b9250506020613805858286016135af565b9150509250929050565b6000806040838503121561382657613825614750565b5b6000613834858286016134ab565b92505060206138458582860161364a565b9150509250929050565b6000806000806040858703121561386957613868614750565b5b600085013567ffffffffffffffff8111156138875761388661474b565b5b613893878288016134d5565b9450945050602085013567ffffffffffffffff8111156138b6576138b561474b565b5b6138c28782880161352b565b925092505092959194509250565b6000602082840312156138e6576138e5614750565b5b600082013567ffffffffffffffff8111156139045761390361474b565b5b61391084828501613581565b91505092915050565b600080604083850312156139305761392f614750565b5b600083013567ffffffffffffffff81111561394e5761394d61474b565b5b61395a85828601613581565b925050602061396b8582860161364a565b9150509250929050565b60006020828403121561398b5761398a614750565b5b6000613999848285016135af565b91505092915050565b6000602082840312156139b8576139b7614750565b5b60006139c6848285016135c4565b91505092915050565b6000602082840312156139e5576139e4614750565b5b60006139f3848285016135d9565b91505092915050565b600060208284031215613a1257613a11614750565b5b600082013567ffffffffffffffff811115613a3057613a2f61474b565b5b613a3c8482850161361c565b91505092915050565b60008060408385031215613a5c57613a5b614750565b5b600083013567ffffffffffffffff811115613a7a57613a7961474b565b5b613a868582860161361c565b925050602083013567ffffffffffffffff811115613aa757613aa661474b565b5b613ab38582860161361c565b9150509250929050565b600060208284031215613ad357613ad2614750565b5b6000613ae18482850161364a565b91505092915050565b600080600080600080600060e0888a031215613b0957613b08614750565b5b6000613b178a828b0161364a565b9750506020613b288a828b0161364a565b9650506040613b398a828b0161364a565b9550506060613b4a8a828b0161364a565b9450506080613b5b8a828b0161364a565b93505060a0613b6c8a828b0161364a565b92505060c0613b7d8a828b0161364a565b91505092959891949750929550565b613b95816144ea565b82525050565b613ba4816144fc565b82525050565b6000613bb58261441d565b613bbf8185614433565b9350613bcf81856020860161456d565b613bd881614755565b840191505092915050565b6000613bee82614428565b613bf8818561444f565b9350613c0881856020860161456d565b613c1181614755565b840191505092915050565b6000613c29602b8361444f565b9150613c3482614766565b604082019050919050565b6000613c4c60328361444f565b9150613c57826147b5565b604082019050919050565b6000613c6f60268361444f565b9150613c7a82614804565b604082019050919050565b6000613c9260258361444f565b9150613c9d82614853565b604082019050919050565b6000613cb5601c8361444f565b9150613cc0826148a2565b602082019050919050565b6000613cd860148361444f565b9150613ce3826148cb565b602082019050919050565b6000613cfb60248361444f565b9150613d06826148f4565b604082019050919050565b6000613d1e60198361444f565b9150613d2982614943565b602082019050919050565b6000613d4160148361444f565b9150613d4c8261496c565b602082019050919050565b6000613d6460158361444f565b9150613d6f82614995565b602082019050919050565b6000613d87602c8361444f565b9150613d92826149be565b604082019050919050565b6000613daa601e8361444f565b9150613db582614a0d565b602082019050919050565b6000613dcd60388361444f565b9150613dd882614a36565b604082019050919050565b6000613df0602a8361444f565b9150613dfb82614a85565b604082019050919050565b6000613e1360298361444f565b9150613e1e82614ad4565b604082019050919050565b6000613e3660208361444f565b9150613e4182614b23565b602082019050919050565b6000613e59602c8361444f565b9150613e6482614b4c565b604082019050919050565b6000613e7c60208361444f565b9150613e8782614b9b565b602082019050919050565b6000613e9f602f8361444f565b9150613eaa82614bc4565b604082019050919050565b6000613ec260198361444f565b9150613ecd82614c13565b602082019050919050565b6000613ee560218361444f565b9150613ef082614c3c565b604082019050919050565b6000613f0860098361444f565b9150613f1382614c8b565b602082019050919050565b6000613f2b600083614444565b9150613f3682614cb4565b600082019050919050565b6000613f4e60318361444f565b9150613f5982614cb7565b604082019050919050565b6000613f71602c8361444f565b9150613f7c82614d06565b604082019050919050565b613f9081614554565b82525050565b6000613fa182613f1e565b9150819050919050565b6000602082019050613fc06000830184613b8c565b92915050565b6000608082019050613fdb6000830187613b8c565b613fe86020830186613b8c565b613ff56040830185613f87565b81810360608301526140078184613baa565b905095945050505050565b60006020820190506140276000830184613b9b565b92915050565b600060208201905081810360008301526140478184613be3565b905092915050565b6000602082019050818103600083015261406881613c1c565b9050919050565b6000602082019050818103600083015261408881613c3f565b9050919050565b600060208201905081810360008301526140a881613c62565b9050919050565b600060208201905081810360008301526140c881613c85565b9050919050565b600060208201905081810360008301526140e881613ca8565b9050919050565b6000602082019050818103600083015261410881613ccb565b9050919050565b6000602082019050818103600083015261412881613cee565b9050919050565b6000602082019050818103600083015261414881613d11565b9050919050565b6000602082019050818103600083015261416881613d34565b9050919050565b6000602082019050818103600083015261418881613d57565b9050919050565b600060208201905081810360008301526141a881613d7a565b9050919050565b600060208201905081810360008301526141c881613d9d565b9050919050565b600060208201905081810360008301526141e881613dc0565b9050919050565b6000602082019050818103600083015261420881613de3565b9050919050565b6000602082019050818103600083015261422881613e06565b9050919050565b6000602082019050818103600083015261424881613e29565b9050919050565b6000602082019050818103600083015261426881613e4c565b9050919050565b6000602082019050818103600083015261428881613e6f565b9050919050565b600060208201905081810360008301526142a881613e92565b9050919050565b600060208201905081810360008301526142c881613eb5565b9050919050565b600060208201905081810360008301526142e881613ed8565b9050919050565b6000602082019050818103600083015261430881613efb565b9050919050565b6000602082019050818103600083015261432881613f41565b9050919050565b6000602082019050818103600083015261434881613f64565b9050919050565b60006020820190506143646000830184613f87565b92915050565b6000614374614385565b905061438082826145d2565b919050565b6000604051905090565b600067ffffffffffffffff8211156143aa576143a9614708565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d6576143d5614708565b5b6143df82614755565b9050602081019050919050565b600067ffffffffffffffff82111561440757614406614708565b5b61441082614755565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061446b82614554565b915061447683614554565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ab576144aa61464c565b5b828201905092915050565b60006144c182614554565b91506144cc83614554565b9250828210156144df576144de61464c565b5b828203905092915050565b60006144f582614534565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561458b578082015181840152602081019050614570565b8381111561459a576000848401525b50505050565b600060028204905060018216806145b857607f821691505b602082108114156145cc576145cb61467b565b5b50919050565b6145db82614755565b810181811067ffffffffffffffff821117156145fa576145f9614708565b5b80604052505050565b600061460e82614554565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146415761464061464c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f546f6b656e496420616c72656164792075736564000000000000000000000000600082015250565b7f457863656564206d6178696d756d20737570706c790000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f436f6e74726163742063757272656e746c792070617573656400000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614d5e816144ea565b8114614d6957600080fd5b50565b614d75816144fc565b8114614d8057600080fd5b50565b614d8c81614508565b8114614d9757600080fd5b50565b614da381614554565b8114614dae57600080fd5b5056fea26469706673582212203a0c796f03b065ff92b159aa0ab9ea15a06afd9e5dea1d0ad79f8300982da8a064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000019317b3fc2f1add6b7e17a0a03a5a269ed5ce48b000000000000000000000000000000000000000000000000000000000000000e4d6173636f74426f6f737465727300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d59455757344d5a654d78624264736d674162754b754d474a4c4d41357a4441756b7a68365137574a454c79660000000000000000000000

-----Decoded View---------------
Arg [0] : __name (string): MascotBoosters
Arg [1] : __symbol (string): MB
Arg [2] : baseURI (string): ipfs://QmYEWW4MZeMxbBdsmgAbuKuMGJLMA5zDAukzh6Q7WJELyf
Arg [3] : betaMascotsContract (address): 0x19317b3fc2f1add6b7e17a0a03a5a269ed5ce48b

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 00000000000000000000000019317b3fc2f1add6b7e17a0a03a5a269ed5ce48b
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [5] : 4d6173636f74426f6f7374657273000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4d42000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [9] : 697066733a2f2f516d59455757344d5a654d78624264736d674162754b754d47
Arg [10] : 4a4c4d41357a4441756b7a68365137574a454c79660000000000000000000000


Deployed ByteCode Sourcemap

42002:6512:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35852:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47633:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24633:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24156:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43094:1067;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48178:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42144:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36492:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25383:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36160:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47389:236;;;;;;;;;;;;;:::i;:::-;;46895:486;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25793:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44169:913;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36682:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48264:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42300:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47911:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45090:1084;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42170:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22767:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22497:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42209:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2803:103;;;;;;;;;;;;;:::i;:::-;;2152:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47741:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24926:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26049:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46429:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46304:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25152:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3061:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48072:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46694:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35852:224;35954:4;35993:35;35978:50;;;:11;:50;;;;:90;;;;36032:36;36056:11;36032:23;:36::i;:::-;35978:90;35971:97;;35852:224;;;:::o;47633:100::-;47687:13;47720:5;47713:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47633:100;:::o;24633:221::-;24709:7;24737:16;24745:7;24737;:16::i;:::-;24729:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24822:15;:24;24838:7;24822:24;;;;;;;;;;;;;;;;;;;;;24815:31;;24633:221;;;:::o;24156:411::-;24237:13;24253:23;24268:7;24253:14;:23::i;:::-;24237:39;;24301:5;24295:11;;:2;:11;;;;24287:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24395:5;24379:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24404:37;24421:5;24428:12;:10;:12::i;:::-;24404:16;:37::i;:::-;24379:62;24357:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24538:21;24547:2;24551:7;24538:8;:21::i;:::-;24226:341;24156:411;;:::o;43094:1067::-;42504:7;;;;;;;;;;;42503:8;42495:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;42625:10:::1;42612:23;;:9;:23;;;42604:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43229:11:::2;;43218:8;;:22;43210:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43302:2;43285:13;:19;;:51;;;;;43309:12;:27;43322:13;43309:27;;;;;;;;;;;;;;;;;;;;;43308:28;43285:51;43277:60;;;::::0;::::2;;43369:1;43352:13;:18;43348:528;;43395:17;43408:3;43395:12;:17::i;:::-;43387:26;;;::::0;::::2;;43458:4;43428:12;:27;43441:13;43428:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43348:528;;;43500:9;43495:279;43515:3;:10;43511:1;:14;43495:279;;;43586:9;43555:40;;:11;;;;;;;;;;;:19;;;43575:3;43579:1;43575:6;;;;;;;;:::i;:::-;;;;;;;;43555:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;43547:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43637:12;:20;43650:3;43654:1;43650:6;;;;;;;;:::i;:::-;;;;;;;;43637:20;;;;;;;;;;;;;;;;;;;;;43636:21;43628:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;43736:3;;;;;;;43495:279;;;;43798:65;43813:3;43817:1;43813:6;;;;;;;;:::i;:::-;;;;;;;;43821:3;43825:1;43821:6;;;;;;;;:::i;:::-;;;;;;;;43829:3;43833:1;43829:6;;;;;;;;:::i;:::-;;;;;;;;43837:3;43841:1;43837:6;;;;;;;;:::i;:::-;;;;;;;;43845:3;43849:1;43845:6;;;;;;;;:::i;:::-;;;;;;;;43853:3;43857:1;43853:6;;;;;;;;:::i;:::-;;;;;;;;43861:1;43798:14;:65::i;:::-;43790:74;;;::::0;::::2;;43348:528;43891:9;43886:202;43906:3;:10;43902:1;:14;43886:202;;;43948:1;43938:3;43942:1;43938:6;;;;;;;;:::i;:::-;;;;;;;;:11;43934:79;;43993:4;43970:12;:20;43983:3;43987:1;43983:6;;;;;;;;:::i;:::-;;;;;;;;43970:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;43934:79;44058:3;;;;;;;43886:202;;;;44110:1;44098:8;;:13;;;;;;;:::i;:::-;;;;;;;;44122:31;44132:10;44144:8;;44122:9;:31::i;:::-;43094:1067:::0;;:::o;48178:78::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48245:3:::1;48235:7;;:13;;;;;;;;;;;;;;;;;;48178:78:::0;:::o;42144:19::-;;;;;;;;;;;;;:::o;36492:113::-;36553:7;36580:10;:17;;;;36573:24;;36492:113;:::o;25383:339::-;25578:41;25597:12;:10;:12::i;:::-;25611:7;25578:18;:41::i;:::-;25570:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25686:28;25696:4;25702:2;25706:7;25686:9;:28::i;:::-;25383:339;;;:::o;36160:256::-;36257:7;36293:23;36310:5;36293:16;:23::i;:::-;36285:5;:31;36277:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36382:12;:19;36395:5;36382:19;;;;;;;;;;;;;;;:26;36402:5;36382:26;;;;;;;;;;;;36375:33;;36160:256;;;;:::o;47389:236::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47438:14:::1;47455:7;:5;:7::i;:::-;47438:24;;47473:14;47490:21;47473:38;;47523:9;47539:6;:11;;47558:6;47539:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47522:47;;;47588:4;47580:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;47427:198;;;47389:236::o:0;46895:486::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47008:9:::1;47003:371;47023:3;;:10;;47019:1;:14;47003:371;;;47055:9;47050:249;47070:7;;47078:1;47070:10;;;;;;;:::i;:::-;;;;;;;;47066:1;:14;47050:249;;;47117:11;;47106:8;;:22;47098:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47181:1;47169:8;;:13;;;;;;;:::i;:::-;;;;;;;;47197:23;47203:3;;47207:1;47203:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47211:8;;47197:5;:23::i;:::-;47266:3;;;;;;;47050:249;;;;47344:3;;;;;;;47003:371;;;;46895:486:::0;;;;:::o;25793:185::-;25931:39;25948:4;25954:2;25958:7;25931:39;;;;;;;;;;;;:16;:39::i;:::-;25793:185;;;:::o;44169:913::-;44234:4;44251:17;44279;44314:9;44326:1;44314:13;;44309:398;44333:3;:10;44329:1;:14;44309:398;;;44375:1;44365:3;44369:1;44365:6;;;;;;;;:::i;:::-;;;;;;;;:11;44361:271;;44436:9;44405:40;;:11;;;;;;;;;;;:19;;;44425:3;44429:1;44425:6;;;;;;;;:::i;:::-;;;;;;;;44405:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;44397:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44487:12;:20;44500:3;44504:1;44500:6;;;;;;;;:::i;:::-;;;;;;;;44487:20;;;;;;;;;;;;;;;;;;;;;44486:21;44478:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44361:271;;;44585:1;44573:13;;44605:11;;;;;:::i;:::-;;;;44361:271;44677:3;;;;;;;44309:398;;;;44735:1;44723:9;:13;44719:356;;;44760:5;44753:12;;;;;;44719:356;44800:1;44787:9;:14;44783:292;;;44826:77;44841:3;44845:1;44841:6;;;;;;;;:::i;:::-;;;;;;;;44849:3;44853:1;44849:6;;;;;;;;:::i;:::-;;;;;;;;44857:3;44861:1;44857:6;;;;;;;;:::i;:::-;;;;;;;;44865:3;44869:1;44865:6;;;;;;;;:::i;:::-;;;;;;;;44873:3;44877:1;44873:6;;;;;;;;:::i;:::-;;;;;;;;44881:3;44885:1;44881:6;;;;;;;;:::i;:::-;;;;;;;;44901:1;44889:9;:13;;;;:::i;:::-;44826:14;:77::i;:::-;44818:86;;;;;;44926:4;44919:11;;;;;;44783:292;44971:65;44986:3;44990:1;44986:6;;;;;;;;:::i;:::-;;;;;;;;44994:3;44998:1;44994:6;;;;;;;;:::i;:::-;;;;;;;;45002:3;45006:1;45002:6;;;;;;;;:::i;:::-;;;;;;;;45010:3;45014:1;45010:6;;;;;;;;:::i;:::-;;;;;;;;45018:3;45022:1;45018:6;;;;;;;;:::i;:::-;;;;;;;;45026:3;45030:1;45026:6;;;;;;;;:::i;:::-;;;;;;;;45034:1;44971:14;:65::i;:::-;44963:74;;;;;;45059:4;45052:11;;;;44169:913;;;;:::o;36682:233::-;36757:7;36793:30;:28;:30::i;:::-;36785:5;:38;36777:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36890:10;36901:5;36890:17;;;;;;;;:::i;:::-;;;;;;;;;;36883:24;;36682:233;;;:::o;48264:104::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48353:7:::1;48337:13;:23;;;;;;;;;;;;:::i;:::-;;48264:104:::0;:::o;42300:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;47911:153::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48021:6:::1;48013:5;:14;;;;;;;;;;;;:::i;:::-;;48048:8;48038:7;:18;;;;;;;;;;;;:::i;:::-;;47911:153:::0;;:::o;45090:1084::-;45257:4;45298:1;45278:16;:21;45274:132;;45336:2;45326:6;:12;;:28;;;;;45352:2;45342:6;:12;;45326:28;45325:68;;;;45370:4;45360:6;:14;;:32;;;;;45388:4;45378:6;:14;;45360:32;45325:68;45316:78;;;;;;45274:132;45440:1;45420:16;:21;45416:131;;45477:2;45467:6;:12;;:28;;;;;45493:2;45483:6;:12;;45467:28;45466:68;;;;45511:4;45501:6;:14;;:32;;;;;45529:4;45519:6;:14;;45501:32;45466:68;45458:77;;;;;;45416:131;45581:1;45561:16;:21;45557:129;;45618:2;45608:6;:12;;:28;;;;;45634:2;45624:6;:12;;45608:28;45607:66;;;;45652:3;45642:6;:13;;:30;;;;;45669:3;45659:6;:13;;45642:30;45607:66;45599:75;;;;;;45557:129;45720:1;45700:16;:21;45696:131;;45757:2;45747:6;:12;;:28;;;;;45773:2;45763:6;:12;;45747:28;45746:68;;;;45791:4;45781:6;:14;;:32;;;;;45809:4;45799:6;:14;;45781:32;45746:68;45738:77;;;;;;45696:131;45861:1;45841:16;:21;45837:130;;45898:2;45888:6;:12;;:28;;;;;45914:2;45904:6;:12;;45888:28;45887:67;;;;45932:3;45922:6;:13;;:31;;;;;45949:4;45939:6;:14;;45922:31;45887:67;45879:76;;;;;;45837:130;46001:1;45981:16;:21;45977:166;;46038:2;46028:6;:12;;:28;;;;;46054:2;46044:6;:12;;46028:28;46027:65;;;;46072:2;46062:6;:12;;:29;;;;;46088:3;46078:6;:13;;46062:29;46027:65;:103;;;;46107:4;46097:6;:14;;:32;;;;;46125:4;46115:6;:14;;46097:32;46027:103;46019:112;;;;;;45977:166;46162:4;46155:11;;45090:1084;;;;;;;;;:::o;42170:32::-;;;;:::o;22767:239::-;22839:7;22859:13;22875:7;:16;22883:7;22875:16;;;;;;;;;;;;;;;;;;;;;22859:32;;22927:1;22910:19;;:5;:19;;;;22902:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22993:5;22986:12;;;22767:239;;;:::o;22497:208::-;22569:7;22614:1;22597:19;;:5;:19;;;;22589:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22681:9;:16;22691:5;22681:16;;;;;;;;;;;;;;;;22674:23;;22497:208;;;:::o;42209:23::-;;;;:::o;2803:103::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2868:30:::1;2895:1;2868:18;:30::i;:::-;2803:103::o:0;2152:87::-;2198:7;2225:6;;;;;;;;;;;2218:13;;2152:87;:::o;47741:104::-;47797:13;47830:7;47823:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47741:104;:::o;24926:155::-;25021:52;25040:12;:10;:12::i;:::-;25054:8;25064;25021:18;:52::i;:::-;24926:155;;:::o;26049:328::-;26224:41;26243:12;:10;:12::i;:::-;26257:7;26224:18;:41::i;:::-;26216:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26330:39;26344:4;26350:2;26354:7;26363:5;26330:13;:39::i;:::-;26049:328;;;;:::o;46429:257::-;46502:13;46536:16;46544:7;46536;:16::i;:::-;46528:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46617:21;46641:10;:8;:10::i;:::-;46617:34;;46671:7;46664:14;;;46429:257;;;:::o;46304:117::-;46368:4;46392:12;:21;46405:7;46392:21;;;;;;;;;;;;;;;;;;;;;46385:28;;46304:117;;;:::o;25152:164::-;25249:4;25273:18;:25;25292:5;25273:25;;;;;;;;;;;;;;;:35;25299:8;25273:35;;;;;;;;;;;;;;;;;;;;;;;;;25266:42;;25152:164;;;;:::o;3061:201::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3170:1:::1;3150:22;;:8;:22;;;;3142:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3226:28;3245:8;3226:18;:28::i;:::-;3061:201:::0;:::o;48072:98::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48156:6:::1;48142:11;:20;;;;48072:98:::0;:::o;46694:193::-;2383:12;:10;:12::i;:::-;2372:23;;:7;:5;:7::i;:::-;:23;;;2364:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46778:11:::1;;46767:8;;:22;46759:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46838:1;46826:8;;:13;;;;;;;:::i;:::-;;;;;;;;46850:29;46860:8;46870;;46850:9;:29::i;:::-;46694:193:::0;:::o;22128:305::-;22230:4;22282:25;22267:40;;;:11;:40;;;;:105;;;;22339:33;22324:48;;;:11;:48;;;;22267:105;:158;;;;22389:36;22413:11;22389:23;:36::i;:::-;22267:158;22247:178;;22128:305;;;:::o;27887:127::-;27952:4;28004:1;27976:30;;:7;:16;27984:7;27976:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27969:37;;27887:127;;;:::o;1526:98::-;1579:7;1606:10;1599:17;;1526:98;:::o;32033:174::-;32135:2;32108:15;:24;32124:7;32108:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32191:7;32187:2;32153:46;;32162:23;32177:7;32162:14;:23::i;:::-;32153:46;;;;;;;;;;;;32033:174;;:::o;28871:110::-;28947:26;28957:2;28961:7;28947:26;;;;;;;;;;;;:9;:26::i;:::-;28871:110;;:::o;28181:348::-;28274:4;28299:16;28307:7;28299;:16::i;:::-;28291:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28375:13;28391:23;28406:7;28391:14;:23::i;:::-;28375:39;;28444:5;28433:16;;:7;:16;;;:52;;;;28453:32;28470:5;28477:7;28453:16;:32::i;:::-;28433:52;:87;;;;28513:7;28489:31;;:20;28501:7;28489:11;:20::i;:::-;:31;;;28433:87;28425:96;;;28181:348;;;;:::o;31290:625::-;31449:4;31422:31;;:23;31437:7;31422:14;:23::i;:::-;:31;;;31414:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31528:1;31514:16;;:2;:16;;;;31506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31584:39;31605:4;31611:2;31615:7;31584:20;:39::i;:::-;31688:29;31705:1;31709:7;31688:8;:29::i;:::-;31749:1;31730:9;:15;31740:4;31730:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31778:1;31761:9;:13;31771:2;31761:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31809:2;31790:7;:16;31798:7;31790:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31848:7;31844:2;31829:27;;31838:4;31829:27;;;;;;;;;;;;31869:38;31889:4;31895:2;31899:7;31869:19;:38::i;:::-;31290:625;;;:::o;29865:439::-;29959:1;29945:16;;:2;:16;;;;29937:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30018:16;30026:7;30018;:16::i;:::-;30017:17;30009:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30080:45;30109:1;30113:2;30117:7;30080:20;:45::i;:::-;30155:1;30138:9;:13;30148:2;30138:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30186:2;30167:7;:16;30175:7;30167:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30231:7;30227:2;30206:33;;30223:1;30206:33;;;;;;;;;;;;30252:44;30280:1;30284:2;30288:7;30252:19;:44::i;:::-;29865:439;;:::o;3422:191::-;3496:16;3515:6;;;;;;;;;;;3496:25;;3541:8;3532:6;;:17;;;;;;;;;;;;;;;;;;3596:8;3565:40;;3586:8;3565:40;;;;;;;;;;;;3485:128;3422:191;:::o;32349:315::-;32504:8;32495:17;;:5;:17;;;;32487:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32591:8;32553:18;:25;32572:5;32553:25;;;;;;;;;;;;;;;:35;32579:8;32553:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32637:8;32615:41;;32630:5;32615:41;;;32647:8;32615:41;;;;;;:::i;:::-;;;;;;;;32349:315;;;:::o;27259:::-;27416:28;27426:4;27432:2;27436:7;27416:9;:28::i;:::-;27463:48;27486:4;27492:2;27496:7;27505:5;27463:22;:48::i;:::-;27455:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27259:315;;;;:::o;46182:114::-;46242:13;46275;46268:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46182:114;:::o;15140:157::-;15225:4;15264:25;15249:40;;;:11;:40;;;;15242:47;;15140:157;;;:::o;29208:321::-;29338:18;29344:2;29348:7;29338:5;:18::i;:::-;29389:54;29420:1;29424:2;29428:7;29437:5;29389:22;:54::i;:::-;29367:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29208:321;;;:::o;37528:589::-;37672:45;37699:4;37705:2;37709:7;37672:26;:45::i;:::-;37750:1;37734:18;;:4;:18;;;37730:187;;;37769:40;37801:7;37769:31;:40::i;:::-;37730:187;;;37839:2;37831:10;;:4;:10;;;37827:90;;37858:47;37891:4;37897:7;37858:32;:47::i;:::-;37827:90;37730:187;37945:1;37931:16;;:2;:16;;;37927:183;;;37964:45;38001:7;37964:36;:45::i;:::-;37927:183;;;38037:4;38031:10;;:2;:10;;;38027:83;;38058:40;38086:2;38090:7;38058:27;:40::i;:::-;38027:83;37927:183;37528:589;;;:::o;35111:125::-;;;;:::o;33229:799::-;33384:4;33405:15;:2;:13;;;:15::i;:::-;33401:620;;;33457:2;33441:36;;;33478:12;:10;:12::i;:::-;33492:4;33498:7;33507:5;33441:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33437:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33700:1;33683:6;:13;:18;33679:272;;;33726:60;;;;;;;;;;:::i;:::-;;;;;;;;33679:272;33901:6;33895:13;33886:6;33882:2;33878:15;33871:38;33437:529;33574:41;;;33564:51;;;:6;:51;;;;33557:58;;;;;33401:620;34005:4;33998:11;;33229:799;;;;;;;:::o;34600:126::-;;;;:::o;38840:164::-;38944:10;:17;;;;38917:15;:24;38933:7;38917:24;;;;;;;;;;;:44;;;;38972:10;38988:7;38972:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38840:164;:::o;39631:988::-;39897:22;39947:1;39922:22;39939:4;39922:16;:22::i;:::-;:26;;;;:::i;:::-;39897:51;;39959:18;39980:17;:26;39998:7;39980:26;;;;;;;;;;;;39959:47;;40127:14;40113:10;:28;40109:328;;40158:19;40180:12;:18;40193:4;40180:18;;;;;;;;;;;;;;;:34;40199:14;40180:34;;;;;;;;;;;;40158:56;;40264:11;40231:12;:18;40244:4;40231:18;;;;;;;;;;;;;;;:30;40250:10;40231:30;;;;;;;;;;;:44;;;;40381:10;40348:17;:30;40366:11;40348:30;;;;;;;;;;;:43;;;;40143:294;40109:328;40533:17;:26;40551:7;40533:26;;;;;;;;;;;40526:33;;;40577:12;:18;40590:4;40577:18;;;;;;;;;;;;;;;:34;40596:14;40577:34;;;;;;;;;;;40570:41;;;39712:907;;39631:988;;:::o;40914:1079::-;41167:22;41212:1;41192:10;:17;;;;:21;;;;:::i;:::-;41167:46;;41224:18;41245:15;:24;41261:7;41245:24;;;;;;;;;;;;41224:45;;41596:19;41618:10;41629:14;41618:26;;;;;;;;:::i;:::-;;;;;;;;;;41596:48;;41682:11;41657:10;41668;41657:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41793:10;41762:15;:28;41778:11;41762:28;;;;;;;;;;;:41;;;;41934:15;:24;41950:7;41934:24;;;;;;;;;;;41927:31;;;41969:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40985:1008;;;40914:1079;:::o;38418:221::-;38503:14;38520:20;38537:2;38520:16;:20::i;:::-;38503:37;;38578:7;38551:12;:16;38564:2;38551:16;;;;;;;;;;;;;;;:24;38568:6;38551:24;;;;;;;;;;;:34;;;;38625:6;38596:17;:26;38614:7;38596:26;;;;;;;;;;;:35;;;;38492:147;38418:221;;:::o;6582:326::-;6642:4;6899:1;6877:7;:19;;;:23;6870:30;;6582:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:568::-;1970:8;1980:6;2030:3;2023:4;2015:6;2011:17;2007:27;1997:122;;2038:79;;:::i;:::-;1997:122;2151:6;2138:20;2128:30;;2181:18;2173:6;2170:30;2167:117;;;2203:79;;:::i;:::-;2167:117;2317:4;2309:6;2305:17;2293:29;;2371:3;2363:4;2355:6;2351:17;2341:8;2337:32;2334:41;2331:128;;;2378:79;;:::i;:::-;2331:128;1897:568;;;;;:::o;2488:::-;2561:8;2571:6;2621:3;2614:4;2606:6;2602:17;2598:27;2588:122;;2629:79;;:::i;:::-;2588:122;2742:6;2729:20;2719:30;;2772:18;2764:6;2761:30;2758:117;;;2794:79;;:::i;:::-;2758:117;2908:4;2900:6;2896:17;2884:29;;2962:3;2954:4;2946:6;2942:17;2932:8;2928:32;2925:41;2922:128;;;2969:79;;:::i;:::-;2922:128;2488:568;;;;;:::o;3079:370::-;3150:5;3199:3;3192:4;3184:6;3180:17;3176:27;3166:122;;3207:79;;:::i;:::-;3166:122;3324:6;3311:20;3349:94;3439:3;3431:6;3424:4;3416:6;3412:17;3349:94;:::i;:::-;3340:103;;3156:293;3079:370;;;;:::o;3455:133::-;3498:5;3536:6;3523:20;3514:29;;3552:30;3576:5;3552:30;:::i;:::-;3455:133;;;;:::o;3594:137::-;3639:5;3677:6;3664:20;3655:29;;3693:32;3719:5;3693:32;:::i;:::-;3594:137;;;;:::o;3737:141::-;3793:5;3824:6;3818:13;3809:22;;3840:32;3866:5;3840:32;:::i;:::-;3737:141;;;;:::o;3897:338::-;3952:5;4001:3;3994:4;3986:6;3982:17;3978:27;3968:122;;4009:79;;:::i;:::-;3968:122;4126:6;4113:20;4151:78;4225:3;4217:6;4210:4;4202:6;4198:17;4151:78;:::i;:::-;4142:87;;3958:277;3897:338;;;;:::o;4255:340::-;4311:5;4360:3;4353:4;4345:6;4341:17;4337:27;4327:122;;4368:79;;:::i;:::-;4327:122;4485:6;4472:20;4510:79;4585:3;4577:6;4570:4;4562:6;4558:17;4510:79;:::i;:::-;4501:88;;4317:278;4255:340;;;;:::o;4601:139::-;4647:5;4685:6;4672:20;4663:29;;4701:33;4728:5;4701:33;:::i;:::-;4601:139;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:351::-;5151:6;5200:2;5188:9;5179:7;5175:23;5171:32;5168:119;;;5206:79;;:::i;:::-;5168:119;5326:1;5351:64;5407:7;5398:6;5387:9;5383:22;5351:64;:::i;:::-;5341:74;;5297:128;5081:351;;;;:::o;5438:474::-;5506:6;5514;5563:2;5551:9;5542:7;5538:23;5534:32;5531:119;;;5569:79;;:::i;:::-;5531:119;5689:1;5714:53;5759:7;5750:6;5739:9;5735:22;5714:53;:::i;:::-;5704:63;;5660:117;5816:2;5842:53;5887:7;5878:6;5867:9;5863:22;5842:53;:::i;:::-;5832:63;;5787:118;5438:474;;;;;:::o;5918:619::-;5995:6;6003;6011;6060:2;6048:9;6039:7;6035:23;6031:32;6028:119;;;6066:79;;:::i;:::-;6028:119;6186:1;6211:53;6256:7;6247:6;6236:9;6232:22;6211:53;:::i;:::-;6201:63;;6157:117;6313:2;6339:53;6384:7;6375:6;6364:9;6360:22;6339:53;:::i;:::-;6329:63;;6284:118;6441:2;6467:53;6512:7;6503:6;6492:9;6488:22;6467:53;:::i;:::-;6457:63;;6412:118;5918:619;;;;;:::o;6543:943::-;6638:6;6646;6654;6662;6711:3;6699:9;6690:7;6686:23;6682:33;6679:120;;;6718:79;;:::i;:::-;6679:120;6838:1;6863:53;6908:7;6899:6;6888:9;6884:22;6863:53;:::i;:::-;6853:63;;6809:117;6965:2;6991:53;7036:7;7027:6;7016:9;7012:22;6991:53;:::i;:::-;6981:63;;6936:118;7093:2;7119:53;7164:7;7155:6;7144:9;7140:22;7119:53;:::i;:::-;7109:63;;7064:118;7249:2;7238:9;7234:18;7221:32;7280:18;7272:6;7269:30;7266:117;;;7302:79;;:::i;:::-;7266:117;7407:62;7461:7;7452:6;7441:9;7437:22;7407:62;:::i;:::-;7397:72;;7192:287;6543:943;;;;;;;:::o;7492:468::-;7557:6;7565;7614:2;7602:9;7593:7;7589:23;7585:32;7582:119;;;7620:79;;:::i;:::-;7582:119;7740:1;7765:53;7810:7;7801:6;7790:9;7786:22;7765:53;:::i;:::-;7755:63;;7711:117;7867:2;7893:50;7935:7;7926:6;7915:9;7911:22;7893:50;:::i;:::-;7883:60;;7838:115;7492:468;;;;;:::o;7966:474::-;8034:6;8042;8091:2;8079:9;8070:7;8066:23;8062:32;8059:119;;;8097:79;;:::i;:::-;8059:119;8217:1;8242:53;8287:7;8278:6;8267:9;8263:22;8242:53;:::i;:::-;8232:63;;8188:117;8344:2;8370:53;8415:7;8406:6;8395:9;8391:22;8370:53;:::i;:::-;8360:63;;8315:118;7966:474;;;;;:::o;8446:934::-;8568:6;8576;8584;8592;8641:2;8629:9;8620:7;8616:23;8612:32;8609:119;;;8647:79;;:::i;:::-;8609:119;8795:1;8784:9;8780:17;8767:31;8825:18;8817:6;8814:30;8811:117;;;8847:79;;:::i;:::-;8811:117;8960:80;9032:7;9023:6;9012:9;9008:22;8960:80;:::i;:::-;8942:98;;;;8738:312;9117:2;9106:9;9102:18;9089:32;9148:18;9140:6;9137:30;9134:117;;;9170:79;;:::i;:::-;9134:117;9283:80;9355:7;9346:6;9335:9;9331:22;9283:80;:::i;:::-;9265:98;;;;9060:313;8446:934;;;;;;;:::o;9386:539::-;9470:6;9519:2;9507:9;9498:7;9494:23;9490:32;9487:119;;;9525:79;;:::i;:::-;9487:119;9673:1;9662:9;9658:17;9645:31;9703:18;9695:6;9692:30;9689:117;;;9725:79;;:::i;:::-;9689:117;9830:78;9900:7;9891:6;9880:9;9876:22;9830:78;:::i;:::-;9820:88;;9616:302;9386:539;;;;:::o;9931:684::-;10024:6;10032;10081:2;10069:9;10060:7;10056:23;10052:32;10049:119;;;10087:79;;:::i;:::-;10049:119;10235:1;10224:9;10220:17;10207:31;10265:18;10257:6;10254:30;10251:117;;;10287:79;;:::i;:::-;10251:117;10392:78;10462:7;10453:6;10442:9;10438:22;10392:78;:::i;:::-;10382:88;;10178:302;10519:2;10545:53;10590:7;10581:6;10570:9;10566:22;10545:53;:::i;:::-;10535:63;;10490:118;9931:684;;;;;:::o;10621:323::-;10677:6;10726:2;10714:9;10705:7;10701:23;10697:32;10694:119;;;10732:79;;:::i;:::-;10694:119;10852:1;10877:50;10919:7;10910:6;10899:9;10895:22;10877:50;:::i;:::-;10867:60;;10823:114;10621:323;;;;:::o;10950:327::-;11008:6;11057:2;11045:9;11036:7;11032:23;11028:32;11025:119;;;11063:79;;:::i;:::-;11025:119;11183:1;11208:52;11252:7;11243:6;11232:9;11228:22;11208:52;:::i;:::-;11198:62;;11154:116;10950:327;;;;:::o;11283:349::-;11352:6;11401:2;11389:9;11380:7;11376:23;11372:32;11369:119;;;11407:79;;:::i;:::-;11369:119;11527:1;11552:63;11607:7;11598:6;11587:9;11583:22;11552:63;:::i;:::-;11542:73;;11498:127;11283:349;;;;:::o;11638:509::-;11707:6;11756:2;11744:9;11735:7;11731:23;11727:32;11724:119;;;11762:79;;:::i;:::-;11724:119;11910:1;11899:9;11895:17;11882:31;11940:18;11932:6;11929:30;11926:117;;;11962:79;;:::i;:::-;11926:117;12067:63;12122:7;12113:6;12102:9;12098:22;12067:63;:::i;:::-;12057:73;;11853:287;11638:509;;;;:::o;12153:834::-;12241:6;12249;12298:2;12286:9;12277:7;12273:23;12269:32;12266:119;;;12304:79;;:::i;:::-;12266:119;12452:1;12441:9;12437:17;12424:31;12482:18;12474:6;12471:30;12468:117;;;12504:79;;:::i;:::-;12468:117;12609:63;12664:7;12655:6;12644:9;12640:22;12609:63;:::i;:::-;12599:73;;12395:287;12749:2;12738:9;12734:18;12721:32;12780:18;12772:6;12769:30;12766:117;;;12802:79;;:::i;:::-;12766:117;12907:63;12962:7;12953:6;12942:9;12938:22;12907:63;:::i;:::-;12897:73;;12692:288;12153:834;;;;;:::o;12993:329::-;13052:6;13101:2;13089:9;13080:7;13076:23;13072:32;13069:119;;;13107:79;;:::i;:::-;13069:119;13227:1;13252:53;13297:7;13288:6;13277:9;13273:22;13252:53;:::i;:::-;13242:63;;13198:117;12993:329;;;;:::o;13328:1203::-;13441:6;13449;13457;13465;13473;13481;13489;13538:3;13526:9;13517:7;13513:23;13509:33;13506:120;;;13545:79;;:::i;:::-;13506:120;13665:1;13690:53;13735:7;13726:6;13715:9;13711:22;13690:53;:::i;:::-;13680:63;;13636:117;13792:2;13818:53;13863:7;13854:6;13843:9;13839:22;13818:53;:::i;:::-;13808:63;;13763:118;13920:2;13946:53;13991:7;13982:6;13971:9;13967:22;13946:53;:::i;:::-;13936:63;;13891:118;14048:2;14074:53;14119:7;14110:6;14099:9;14095:22;14074:53;:::i;:::-;14064:63;;14019:118;14176:3;14203:53;14248:7;14239:6;14228:9;14224:22;14203:53;:::i;:::-;14193:63;;14147:119;14305:3;14332:53;14377:7;14368:6;14357:9;14353:22;14332:53;:::i;:::-;14322:63;;14276:119;14434:3;14461:53;14506:7;14497:6;14486:9;14482:22;14461:53;:::i;:::-;14451:63;;14405:119;13328:1203;;;;;;;;;;:::o;14537:118::-;14624:24;14642:5;14624:24;:::i;:::-;14619:3;14612:37;14537:118;;:::o;14661:109::-;14742:21;14757:5;14742:21;:::i;:::-;14737:3;14730:34;14661:109;;:::o;14776:360::-;14862:3;14890:38;14922:5;14890:38;:::i;:::-;14944:70;15007:6;15002:3;14944:70;:::i;:::-;14937:77;;15023:52;15068:6;15063:3;15056:4;15049:5;15045:16;15023:52;:::i;:::-;15100:29;15122:6;15100:29;:::i;:::-;15095:3;15091:39;15084:46;;14866:270;14776:360;;;;:::o;15142:364::-;15230:3;15258:39;15291:5;15258:39;:::i;:::-;15313:71;15377:6;15372:3;15313:71;:::i;:::-;15306:78;;15393:52;15438:6;15433:3;15426:4;15419:5;15415:16;15393:52;:::i;:::-;15470:29;15492:6;15470:29;:::i;:::-;15465:3;15461:39;15454:46;;15234:272;15142:364;;;;:::o;15512:366::-;15654:3;15675:67;15739:2;15734:3;15675:67;:::i;:::-;15668:74;;15751:93;15840:3;15751:93;:::i;:::-;15869:2;15864:3;15860:12;15853:19;;15512:366;;;:::o;15884:::-;16026:3;16047:67;16111:2;16106:3;16047:67;:::i;:::-;16040:74;;16123:93;16212:3;16123:93;:::i;:::-;16241:2;16236:3;16232:12;16225:19;;15884:366;;;:::o;16256:::-;16398:3;16419:67;16483:2;16478:3;16419:67;:::i;:::-;16412:74;;16495:93;16584:3;16495:93;:::i;:::-;16613:2;16608:3;16604:12;16597:19;;16256:366;;;:::o;16628:::-;16770:3;16791:67;16855:2;16850:3;16791:67;:::i;:::-;16784:74;;16867:93;16956:3;16867:93;:::i;:::-;16985:2;16980:3;16976:12;16969:19;;16628:366;;;:::o;17000:::-;17142:3;17163:67;17227:2;17222:3;17163:67;:::i;:::-;17156:74;;17239:93;17328:3;17239:93;:::i;:::-;17357:2;17352:3;17348:12;17341:19;;17000:366;;;:::o;17372:::-;17514:3;17535:67;17599:2;17594:3;17535:67;:::i;:::-;17528:74;;17611:93;17700:3;17611:93;:::i;:::-;17729:2;17724:3;17720:12;17713:19;;17372:366;;;:::o;17744:::-;17886:3;17907:67;17971:2;17966:3;17907:67;:::i;:::-;17900:74;;17983:93;18072:3;17983:93;:::i;:::-;18101:2;18096:3;18092:12;18085:19;;17744:366;;;:::o;18116:::-;18258:3;18279:67;18343:2;18338:3;18279:67;:::i;:::-;18272:74;;18355:93;18444:3;18355:93;:::i;:::-;18473:2;18468:3;18464:12;18457:19;;18116:366;;;:::o;18488:::-;18630:3;18651:67;18715:2;18710:3;18651:67;:::i;:::-;18644:74;;18727:93;18816:3;18727:93;:::i;:::-;18845:2;18840:3;18836:12;18829:19;;18488:366;;;:::o;18860:::-;19002:3;19023:67;19087:2;19082:3;19023:67;:::i;:::-;19016:74;;19099:93;19188:3;19099:93;:::i;:::-;19217:2;19212:3;19208:12;19201:19;;18860:366;;;:::o;19232:::-;19374:3;19395:67;19459:2;19454:3;19395:67;:::i;:::-;19388:74;;19471:93;19560:3;19471:93;:::i;:::-;19589:2;19584:3;19580:12;19573:19;;19232:366;;;:::o;19604:::-;19746:3;19767:67;19831:2;19826:3;19767:67;:::i;:::-;19760:74;;19843:93;19932:3;19843:93;:::i;:::-;19961:2;19956:3;19952:12;19945:19;;19604:366;;;:::o;19976:::-;20118:3;20139:67;20203:2;20198:3;20139:67;:::i;:::-;20132:74;;20215:93;20304:3;20215:93;:::i;:::-;20333:2;20328:3;20324:12;20317:19;;19976:366;;;:::o;20348:::-;20490:3;20511:67;20575:2;20570:3;20511:67;:::i;:::-;20504:74;;20587:93;20676:3;20587:93;:::i;:::-;20705:2;20700:3;20696:12;20689:19;;20348:366;;;:::o;20720:::-;20862:3;20883:67;20947:2;20942:3;20883:67;:::i;:::-;20876:74;;20959:93;21048:3;20959:93;:::i;:::-;21077:2;21072:3;21068:12;21061:19;;20720:366;;;:::o;21092:::-;21234:3;21255:67;21319:2;21314:3;21255:67;:::i;:::-;21248:74;;21331:93;21420:3;21331:93;:::i;:::-;21449:2;21444:3;21440:12;21433:19;;21092:366;;;:::o;21464:::-;21606:3;21627:67;21691:2;21686:3;21627:67;:::i;:::-;21620:74;;21703:93;21792:3;21703:93;:::i;:::-;21821:2;21816:3;21812:12;21805:19;;21464:366;;;:::o;21836:::-;21978:3;21999:67;22063:2;22058:3;21999:67;:::i;:::-;21992:74;;22075:93;22164:3;22075:93;:::i;:::-;22193:2;22188:3;22184:12;22177:19;;21836:366;;;:::o;22208:::-;22350:3;22371:67;22435:2;22430:3;22371:67;:::i;:::-;22364:74;;22447:93;22536:3;22447:93;:::i;:::-;22565:2;22560:3;22556:12;22549:19;;22208:366;;;:::o;22580:::-;22722:3;22743:67;22807:2;22802:3;22743:67;:::i;:::-;22736:74;;22819:93;22908:3;22819:93;:::i;:::-;22937:2;22932:3;22928:12;22921:19;;22580:366;;;:::o;22952:::-;23094:3;23115:67;23179:2;23174:3;23115:67;:::i;:::-;23108:74;;23191:93;23280:3;23191:93;:::i;:::-;23309:2;23304:3;23300:12;23293:19;;22952:366;;;:::o;23324:365::-;23466:3;23487:66;23551:1;23546:3;23487:66;:::i;:::-;23480:73;;23562:93;23651:3;23562:93;:::i;:::-;23680:2;23675:3;23671:12;23664:19;;23324:365;;;:::o;23695:398::-;23854:3;23875:83;23956:1;23951:3;23875:83;:::i;:::-;23868:90;;23967:93;24056:3;23967:93;:::i;:::-;24085:1;24080:3;24076:11;24069:18;;23695:398;;;:::o;24099:366::-;24241:3;24262:67;24326:2;24321:3;24262:67;:::i;:::-;24255:74;;24338:93;24427:3;24338:93;:::i;:::-;24456:2;24451:3;24447:12;24440:19;;24099:366;;;:::o;24471:::-;24613:3;24634:67;24698:2;24693:3;24634:67;:::i;:::-;24627:74;;24710:93;24799:3;24710:93;:::i;:::-;24828:2;24823:3;24819:12;24812:19;;24471:366;;;:::o;24843:118::-;24930:24;24948:5;24930:24;:::i;:::-;24925:3;24918:37;24843:118;;:::o;24967:379::-;25151:3;25173:147;25316:3;25173:147;:::i;:::-;25166:154;;25337:3;25330:10;;24967:379;;;:::o;25352:222::-;25445:4;25483:2;25472:9;25468:18;25460:26;;25496:71;25564:1;25553:9;25549:17;25540:6;25496:71;:::i;:::-;25352:222;;;;:::o;25580:640::-;25775:4;25813:3;25802:9;25798:19;25790:27;;25827:71;25895:1;25884:9;25880:17;25871:6;25827:71;:::i;:::-;25908:72;25976:2;25965:9;25961:18;25952:6;25908:72;:::i;:::-;25990;26058:2;26047:9;26043:18;26034:6;25990:72;:::i;:::-;26109:9;26103:4;26099:20;26094:2;26083:9;26079:18;26072:48;26137:76;26208:4;26199:6;26137:76;:::i;:::-;26129:84;;25580:640;;;;;;;:::o;26226:210::-;26313:4;26351:2;26340:9;26336:18;26328:26;;26364:65;26426:1;26415:9;26411:17;26402:6;26364:65;:::i;:::-;26226:210;;;;:::o;26442:313::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:78;26743:4;26734:6;26670:78;:::i;:::-;26662:86;;26442:313;;;;:::o;26761:419::-;26927:4;26965:2;26954:9;26950:18;26942:26;;27014:9;27008:4;27004:20;27000:1;26989:9;26985:17;26978:47;27042:131;27168:4;27042:131;:::i;:::-;27034:139;;26761:419;;;:::o;27186:::-;27352:4;27390:2;27379:9;27375:18;27367:26;;27439:9;27433:4;27429:20;27425:1;27414:9;27410:17;27403:47;27467:131;27593:4;27467:131;:::i;:::-;27459:139;;27186:419;;;:::o;27611:::-;27777:4;27815:2;27804:9;27800:18;27792:26;;27864:9;27858:4;27854:20;27850:1;27839:9;27835:17;27828:47;27892:131;28018:4;27892:131;:::i;:::-;27884:139;;27611:419;;;:::o;28036:::-;28202:4;28240:2;28229:9;28225:18;28217:26;;28289:9;28283:4;28279:20;28275:1;28264:9;28260:17;28253:47;28317:131;28443:4;28317:131;:::i;:::-;28309:139;;28036:419;;;:::o;28461:::-;28627:4;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28461:419;;;:::o;28886:::-;29052:4;29090:2;29079:9;29075:18;29067:26;;29139:9;29133:4;29129:20;29125:1;29114:9;29110:17;29103:47;29167:131;29293:4;29167:131;:::i;:::-;29159:139;;28886:419;;;:::o;29311:::-;29477:4;29515:2;29504:9;29500:18;29492:26;;29564:9;29558:4;29554:20;29550:1;29539:9;29535:17;29528:47;29592:131;29718:4;29592:131;:::i;:::-;29584:139;;29311:419;;;:::o;29736:::-;29902:4;29940:2;29929:9;29925:18;29917:26;;29989:9;29983:4;29979:20;29975:1;29964:9;29960:17;29953:47;30017:131;30143:4;30017:131;:::i;:::-;30009:139;;29736:419;;;:::o;30161:::-;30327:4;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30161:419;;;:::o;30586:::-;30752:4;30790:2;30779:9;30775:18;30767:26;;30839:9;30833:4;30829:20;30825:1;30814:9;30810:17;30803:47;30867:131;30993:4;30867:131;:::i;:::-;30859:139;;30586:419;;;:::o;31011:::-;31177:4;31215:2;31204:9;31200:18;31192:26;;31264:9;31258:4;31254:20;31250:1;31239:9;31235:17;31228:47;31292:131;31418:4;31292:131;:::i;:::-;31284:139;;31011:419;;;:::o;31436:::-;31602:4;31640:2;31629:9;31625:18;31617:26;;31689:9;31683:4;31679:20;31675:1;31664:9;31660:17;31653:47;31717:131;31843:4;31717:131;:::i;:::-;31709:139;;31436:419;;;:::o;31861:::-;32027:4;32065:2;32054:9;32050:18;32042:26;;32114:9;32108:4;32104:20;32100:1;32089:9;32085:17;32078:47;32142:131;32268:4;32142:131;:::i;:::-;32134:139;;31861:419;;;:::o;32286:::-;32452:4;32490:2;32479:9;32475:18;32467:26;;32539:9;32533:4;32529:20;32525:1;32514:9;32510:17;32503:47;32567:131;32693:4;32567:131;:::i;:::-;32559:139;;32286:419;;;:::o;32711:::-;32877:4;32915:2;32904:9;32900:18;32892:26;;32964:9;32958:4;32954:20;32950:1;32939:9;32935:17;32928:47;32992:131;33118:4;32992:131;:::i;:::-;32984:139;;32711:419;;;:::o;33136:::-;33302:4;33340:2;33329:9;33325:18;33317:26;;33389:9;33383:4;33379:20;33375:1;33364:9;33360:17;33353:47;33417:131;33543:4;33417:131;:::i;:::-;33409:139;;33136:419;;;:::o;33561:::-;33727:4;33765:2;33754:9;33750:18;33742:26;;33814:9;33808:4;33804:20;33800:1;33789:9;33785:17;33778:47;33842:131;33968:4;33842:131;:::i;:::-;33834:139;;33561:419;;;:::o;33986:::-;34152:4;34190:2;34179:9;34175:18;34167:26;;34239:9;34233:4;34229:20;34225:1;34214:9;34210:17;34203:47;34267:131;34393:4;34267:131;:::i;:::-;34259:139;;33986:419;;;:::o;34411:::-;34577:4;34615:2;34604:9;34600:18;34592:26;;34664:9;34658:4;34654:20;34650:1;34639:9;34635:17;34628:47;34692:131;34818:4;34692:131;:::i;:::-;34684:139;;34411:419;;;:::o;34836:::-;35002:4;35040:2;35029:9;35025:18;35017:26;;35089:9;35083:4;35079:20;35075:1;35064:9;35060:17;35053:47;35117:131;35243:4;35117:131;:::i;:::-;35109:139;;34836:419;;;:::o;35261:::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:::-;35852:4;35890:2;35879:9;35875:18;35867:26;;35939:9;35933:4;35929:20;35925:1;35914:9;35910:17;35903:47;35967:131;36093:4;35967:131;:::i;:::-;35959:139;;35686:419;;;:::o;36111:::-;36277:4;36315:2;36304:9;36300:18;36292:26;;36364:9;36358:4;36354:20;36350:1;36339:9;36335:17;36328:47;36392:131;36518:4;36392:131;:::i;:::-;36384:139;;36111:419;;;:::o;36536:::-;36702:4;36740:2;36729:9;36725:18;36717:26;;36789:9;36783:4;36779:20;36775:1;36764:9;36760:17;36753:47;36817:131;36943:4;36817:131;:::i;:::-;36809:139;;36536:419;;;:::o;36961:222::-;37054:4;37092:2;37081:9;37077:18;37069:26;;37105:71;37173:1;37162:9;37158:17;37149:6;37105:71;:::i;:::-;36961:222;;;;:::o;37189:129::-;37223:6;37250:20;;:::i;:::-;37240:30;;37279:33;37307:4;37299:6;37279:33;:::i;:::-;37189:129;;;:::o;37324:75::-;37357:6;37390:2;37384:9;37374:19;;37324:75;:::o;37405:311::-;37482:4;37572:18;37564:6;37561:30;37558:56;;;37594:18;;:::i;:::-;37558:56;37644:4;37636:6;37632:17;37624:25;;37704:4;37698;37694:15;37686:23;;37405:311;;;:::o;37722:307::-;37783:4;37873:18;37865:6;37862:30;37859:56;;;37895:18;;:::i;:::-;37859:56;37933:29;37955:6;37933:29;:::i;:::-;37925:37;;38017:4;38011;38007:15;37999:23;;37722:307;;;:::o;38035:308::-;38097:4;38187:18;38179:6;38176:30;38173:56;;;38209:18;;:::i;:::-;38173:56;38247:29;38269:6;38247:29;:::i;:::-;38239:37;;38331:4;38325;38321:15;38313:23;;38035:308;;;:::o;38349:98::-;38400:6;38434:5;38428:12;38418:22;;38349:98;;;:::o;38453:99::-;38505:6;38539:5;38533:12;38523:22;;38453:99;;;:::o;38558:168::-;38641:11;38675:6;38670:3;38663:19;38715:4;38710:3;38706:14;38691:29;;38558:168;;;;:::o;38732:147::-;38833:11;38870:3;38855:18;;38732:147;;;;:::o;38885:169::-;38969:11;39003:6;38998:3;38991:19;39043:4;39038:3;39034:14;39019:29;;38885:169;;;;:::o;39060:305::-;39100:3;39119:20;39137:1;39119:20;:::i;:::-;39114:25;;39153:20;39171:1;39153:20;:::i;:::-;39148:25;;39307:1;39239:66;39235:74;39232:1;39229:81;39226:107;;;39313:18;;:::i;:::-;39226:107;39357:1;39354;39350:9;39343:16;;39060:305;;;;:::o;39371:191::-;39411:4;39431:20;39449:1;39431:20;:::i;:::-;39426:25;;39465:20;39483:1;39465:20;:::i;:::-;39460:25;;39504:1;39501;39498:8;39495:34;;;39509:18;;:::i;:::-;39495:34;39554:1;39551;39547:9;39539:17;;39371:191;;;;:::o;39568:96::-;39605:7;39634:24;39652:5;39634:24;:::i;:::-;39623:35;;39568:96;;;:::o;39670:90::-;39704:7;39747:5;39740:13;39733:21;39722:32;;39670:90;;;:::o;39766:149::-;39802:7;39842:66;39835:5;39831:78;39820:89;;39766:149;;;:::o;39921:126::-;39958:7;39998:42;39991:5;39987:54;39976:65;;39921:126;;;:::o;40053:77::-;40090:7;40119:5;40108:16;;40053:77;;;:::o;40136:154::-;40220:6;40215:3;40210;40197:30;40282:1;40273:6;40268:3;40264:16;40257:27;40136:154;;;:::o;40296:307::-;40364:1;40374:113;40388:6;40385:1;40382:13;40374:113;;;40473:1;40468:3;40464:11;40458:18;40454:1;40449:3;40445:11;40438:39;40410:2;40407:1;40403:10;40398:15;;40374:113;;;40505:6;40502:1;40499:13;40496:101;;;40585:1;40576:6;40571:3;40567:16;40560:27;40496:101;40345:258;40296:307;;;:::o;40609:320::-;40653:6;40690:1;40684:4;40680:12;40670:22;;40737:1;40731:4;40727:12;40758:18;40748:81;;40814:4;40806:6;40802:17;40792:27;;40748:81;40876:2;40868:6;40865:14;40845:18;40842:38;40839:84;;;40895:18;;:::i;:::-;40839:84;40660:269;40609:320;;;:::o;40935:281::-;41018:27;41040:4;41018:27;:::i;:::-;41010:6;41006:40;41148:6;41136:10;41133:22;41112:18;41100:10;41097:34;41094:62;41091:88;;;41159:18;;:::i;:::-;41091:88;41199:10;41195:2;41188:22;40978:238;40935:281;;:::o;41222:233::-;41261:3;41284:24;41302:5;41284:24;:::i;:::-;41275:33;;41330:66;41323:5;41320:77;41317:103;;;41400:18;;:::i;:::-;41317:103;41447:1;41440:5;41436:13;41429:20;;41222:233;;;:::o;41461:180::-;41509:77;41506:1;41499:88;41606:4;41603:1;41596:15;41630:4;41627:1;41620:15;41647:180;41695:77;41692:1;41685:88;41792:4;41789:1;41782:15;41816:4;41813:1;41806:15;41833:180;41881:77;41878:1;41871:88;41978:4;41975:1;41968:15;42002:4;41999:1;41992:15;42019:180;42067:77;42064:1;42057:88;42164:4;42161:1;42154:15;42188:4;42185:1;42178:15;42205:180;42253:77;42250:1;42243:88;42350:4;42347:1;42340:15;42374:4;42371:1;42364:15;42391:117;42500:1;42497;42490:12;42514:117;42623:1;42620;42613:12;42637:117;42746:1;42743;42736:12;42760:117;42869:1;42866;42859:12;42883:117;42992:1;42989;42982:12;43006:117;43115:1;43112;43105:12;43129:102;43170:6;43221:2;43217:7;43212:2;43205:5;43201:14;43197:28;43187:38;;43129:102;;;:::o;43237:230::-;43377:34;43373:1;43365:6;43361:14;43354:58;43446:13;43441:2;43433:6;43429:15;43422:38;43237:230;:::o;43473:237::-;43613:34;43609:1;43601:6;43597:14;43590:58;43682:20;43677:2;43669:6;43665:15;43658:45;43473:237;:::o;43716:225::-;43856:34;43852:1;43844:6;43840:14;43833:58;43925:8;43920:2;43912:6;43908:15;43901:33;43716:225;:::o;43947:224::-;44087:34;44083:1;44075:6;44071:14;44064:58;44156:7;44151:2;44143:6;44139:15;44132:32;43947:224;:::o;44177:178::-;44317:30;44313:1;44305:6;44301:14;44294:54;44177:178;:::o;44361:170::-;44501:22;44497:1;44489:6;44485:14;44478:46;44361:170;:::o;44537:223::-;44677:34;44673:1;44665:6;44661:14;44654:58;44746:6;44741:2;44733:6;44729:15;44722:31;44537:223;:::o;44766:175::-;44906:27;44902:1;44894:6;44890:14;44883:51;44766:175;:::o;44947:170::-;45087:22;45083:1;45075:6;45071:14;45064:46;44947:170;:::o;45123:171::-;45263:23;45259:1;45251:6;45247:14;45240:47;45123:171;:::o;45300:231::-;45440:34;45436:1;45428:6;45424:14;45417:58;45509:14;45504:2;45496:6;45492:15;45485:39;45300:231;:::o;45537:180::-;45677:32;45673:1;45665:6;45661:14;45654:56;45537:180;:::o;45723:243::-;45863:34;45859:1;45851:6;45847:14;45840:58;45932:26;45927:2;45919:6;45915:15;45908:51;45723:243;:::o;45972:229::-;46112:34;46108:1;46100:6;46096:14;46089:58;46181:12;46176:2;46168:6;46164:15;46157:37;45972:229;:::o;46207:228::-;46347:34;46343:1;46335:6;46331:14;46324:58;46416:11;46411:2;46403:6;46399:15;46392:36;46207:228;:::o;46441:182::-;46581:34;46577:1;46569:6;46565:14;46558:58;46441:182;:::o;46629:231::-;46769:34;46765:1;46757:6;46753:14;46746:58;46838:14;46833:2;46825:6;46821:15;46814:39;46629:231;:::o;46866:182::-;47006:34;47002:1;46994:6;46990:14;46983:58;46866:182;:::o;47054:234::-;47194:34;47190:1;47182:6;47178:14;47171:58;47263:17;47258:2;47250:6;47246:15;47239:42;47054:234;:::o;47294:175::-;47434:27;47430:1;47422:6;47418:14;47411:51;47294:175;:::o;47475:220::-;47615:34;47611:1;47603:6;47599:14;47592:58;47684:3;47679:2;47671:6;47667:15;47660:28;47475:220;:::o;47701:159::-;47841:11;47837:1;47829:6;47825:14;47818:35;47701:159;:::o;47866:114::-;;:::o;47986:236::-;48126:34;48122:1;48114:6;48110:14;48103:58;48195:19;48190:2;48182:6;48178:15;48171:44;47986:236;:::o;48228:231::-;48368:34;48364:1;48356:6;48352:14;48345:58;48437:14;48432:2;48424:6;48420:15;48413:39;48228:231;:::o;48465:122::-;48538:24;48556:5;48538:24;:::i;:::-;48531:5;48528:35;48518:63;;48577:1;48574;48567:12;48518:63;48465:122;:::o;48593:116::-;48663:21;48678:5;48663:21;:::i;:::-;48656:5;48653:32;48643:60;;48699:1;48696;48689:12;48643:60;48593:116;:::o;48715:120::-;48787:23;48804:5;48787:23;:::i;:::-;48780:5;48777:34;48767:62;;48825:1;48822;48815:12;48767:62;48715:120;:::o;48841:122::-;48914:24;48932:5;48914:24;:::i;:::-;48907:5;48904:35;48894:63;;48953:1;48950;48943:12;48894:63;48841:122;:::o

Swarm Source

ipfs://3a0c796f03b065ff92b159aa0ab9ea15a06afd9e5dea1d0ad79f8300982da8a0
Loading