Token ReefPetsNFT
Overview CRC721
Total Supply:
1,500 RPNFT
Holders:
134 addresses
Contract:
Balance
0 RPNFT
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ReefPetsNFT
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-05-29 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [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); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _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 {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/ReefPetsNFT.sol pragma solidity 0.8.13; interface CRKStakingInterface { function userInfo(address _address) external view returns(uint256, uint256, uint256); } contract ReefPetsNFT is ERC721Enumerable, Ownable { string public baseURI; uint256 public baseCost = 550 ether; uint256 public presaleDiscount = 25; uint256 public maxSupply = 1500; uint256 public maxMintAmount = 5; uint256 public remainingSupplyForGiveaway = 50; uint256 public timePresale = 9999999999; uint256 public timePublicSale = 9999999999; uint256 public minimumCRKForPresale = 100_000_000_000; address public devAddress = 0x957D65d06D15Ce60939dCC7d43A97203751A1e13; address public teamAddress = 0x0234aF50921a856e6927f96A1383aC17cD16996B; address public crkTokenAddress = 0x065DE42E28E42d90c2052a1B49e7f83806Af0e1F; address public crkStakingAddress = 0x94fd8b5daaA09372972a0a567b8723A683421793; mapping(address => uint256) public totalMintedByAddress; constructor(string memory _name, string memory _symbol, string memory _initialBaseURI, uint256 _presaleStartTime, uint256 _presaleDurationSeconds) ERC721(_name, _symbol){ require(_presaleStartTime > 0, "Presale Start Time"); require(_presaleDurationSeconds > 0, "Presale Duration must be set"); timePresale = _presaleStartTime; timePublicSale = _presaleStartTime + _presaleDurationSeconds; baseURI = _initialBaseURI; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 _tokenId) public view virtual override returns(string memory) { require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token"); return baseURI; } function mint(uint256 _mintAmount) public payable { require(totalSupply() + _mintAmount <= maxSupply, "Purchase exceeds maximum supply"); require(totalMintedByAddress[msg.sender] + _mintAmount <= maxMintAmount, "Purchase exceeds the limit of NFT's you can mint"); require(block.timestamp >= timePresale, "Sale is not yet open"); require(msg.value >= cost() * _mintAmount, "Please enter the correct price"); if (block.timestamp >= timePresale && block.timestamp < timePublicSale) { require(_walletValidForPresale(msg.sender), "Wallet is not eligible for presale"); } for(uint256 i = 1; i <= _mintAmount; i++) { totalMintedByAddress[msg.sender] = totalMintedByAddress[msg.sender] + 1; _safeMint(msg.sender, totalSupply() + 1); } } function mintGiveAwayTokens(uint256 _mintAmount) public onlyOwner { require(remainingSupplyForGiveaway > 0, "All giveaway tokens are minted"); require(_mintAmount <= remainingSupplyForGiveaway, "All giveaway tokens already minted"); for(uint256 i = 1; i <= _mintAmount; i++) { remainingSupplyForGiveaway = remainingSupplyForGiveaway - 1; _safeMint(teamAddress, totalSupply() + 1); } } function _walletValidForPresale(address _wallet) public view returns (bool) { uint256 crkTokenDecimals = IERC20Metadata(crkTokenAddress).decimals(); uint256 walletBalance = IERC20Metadata(crkTokenAddress).balanceOf(_wallet); (uint256 stakingAmount,, ) = CRKStakingInterface(crkStakingAddress).userInfo(_wallet); if (walletBalance + stakingAmount >= minimumCRKForPresale * 10 ** crkTokenDecimals) { return true; } return false; } function cost() public view returns (uint256) { if (block.timestamp >= timePublicSale) { return baseCost; } return baseCost - baseCost * presaleDiscount / 100; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setMaxMintAmount(uint256 _maxMintAmount) public onlyOwner { maxMintAmount = _maxMintAmount; } function setCost(uint256 _newCost) public onlyOwner { baseCost = _newCost; } function setPresaleStart(uint256 _newTimePresale) public onlyOwner { timePresale = _newTimePresale; } function setPublicSaleStart(uint256 _newTimePublicSale) public onlyOwner { timePublicSale = _newTimePublicSale; } function setMinimumCRKForPresale(uint256 _newMinimumCRKForPresale) public onlyOwner { minimumCRKForPresale = _newMinimumCRKForPresale; } function withdraw() public payable onlyOwner { (bool devPaid, ) = payable(devAddress).call{value: address(this).balance * 2 / 100}(""); require(devPaid); (bool teamPaid, ) = payable(teamAddress).call{value: address(this).balance}(""); require(teamPaid); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initialBaseURI","type":"string"},{"internalType":"uint256","name":"_presaleStartTime","type":"uint256"},{"internalType":"uint256","name":"_presaleDurationSeconds","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"_walletValidForPresale","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":[],"name":"baseCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crkStakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crkTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumCRKForPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintGiveAwayTokens","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":"presaleDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingSupplyForGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMinimumCRKForPresale","type":"uint256"}],"name":"setMinimumCRKForPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTimePresale","type":"uint256"}],"name":"setPresaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTimePublicSale","type":"uint256"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timePresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timePublicSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalMintedByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052681dd0c885f9a0d80000600c556019600d556105dc600e556005600f5560326010556402540be3ff6011556402540be3ff60125564174876e80060135573957d65d06d15ce60939dcc7d43a97203751a1e13601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730234af50921a856e6927f96a1383ac17cd16996b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073065de42e28e42d90c2052a1b49e7f83806af0e1f601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507394fd8b5daaa09372972a0a567b8723a683421793601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001a257600080fd5b506040516200552f3803806200552f8339818101604052810190620001c891906200063f565b84848160009080519060200190620001e2929190620003b7565b508060019080519060200190620001fb929190620003b7565b5050506200021e62000212620002e960201b60201c565b620002f160201b60201c565b6000821162000264576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025b9062000785565b60405180910390fd5b60008111620002aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a190620007f7565b60405180910390fd5b816011819055508082620002bf919062000848565b60128190555082600b9080519060200190620002dd929190620003b7565b50505050505062000909565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003c590620008d4565b90600052602060002090601f016020900481019282620003e9576000855562000435565b82601f106200040457805160ff191683800117855562000435565b8280016001018555821562000435579182015b828111156200043457825182559160200191906001019062000417565b5b50905062000444919062000448565b5090565b5b808211156200046357600081600090555060010162000449565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004d08262000485565b810181811067ffffffffffffffff82111715620004f257620004f162000496565b5b80604052505050565b60006200050762000467565b9050620005158282620004c5565b919050565b600067ffffffffffffffff82111562000538576200053762000496565b5b620005438262000485565b9050602081019050919050565b60005b838110156200057057808201518184015260208101905062000553565b8381111562000580576000848401525b50505050565b60006200059d62000597846200051a565b620004fb565b905082815260208101848484011115620005bc57620005bb62000480565b5b620005c984828562000550565b509392505050565b600082601f830112620005e957620005e86200047b565b5b8151620005fb84826020860162000586565b91505092915050565b6000819050919050565b620006198162000604565b81146200062557600080fd5b50565b60008151905062000639816200060e565b92915050565b600080600080600060a086880312156200065e576200065d62000471565b5b600086015167ffffffffffffffff8111156200067f576200067e62000476565b5b6200068d88828901620005d1565b955050602086015167ffffffffffffffff811115620006b157620006b062000476565b5b620006bf88828901620005d1565b945050604086015167ffffffffffffffff811115620006e357620006e262000476565b5b620006f188828901620005d1565b9350506060620007048882890162000628565b9250506080620007178882890162000628565b9150509295509295909350565b600082825260208201905092915050565b7f50726573616c652053746172742054696d650000000000000000000000000000600082015250565b60006200076d60128362000724565b91506200077a8262000735565b602082019050919050565b60006020820190508181036000830152620007a0816200075e565b9050919050565b7f50726573616c65204475726174696f6e206d7573742062652073657400000000600082015250565b6000620007df601c8362000724565b9150620007ec82620007a7565b602082019050919050565b600060208201905081810360008301526200081281620007d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008558262000604565b9150620008628362000604565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200089a576200089962000819565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008ed57607f821691505b602082108103620009035762000902620008a5565b5b50919050565b614c1680620009196000396000f3fe6080604052600436106102675760003560e01c80636352211e1161014457806395d89b41116100b6578063b88d4fde1161007a578063b88d4fde14610904578063c87b56dd1461092d578063d5abeb011461096a578063e985e9c514610995578063f2fde38b146109d2578063f793aa6c146109fb57610267565b806395d89b411461082c57806397cf84fc14610857578063a0712d6814610894578063a22cb465146108b0578063a99aa366146108d957610267565b806370a082311161010857806370a082311461072e578063715018a61461076b57806378152bbe146107825780637e58f4cc146107ab5780638da5cb5b146107d6578063938225571461080157610267565b80636352211e1461064557806365c0cfa41461068257806368e7c8ac146106ad5780636c0360eb146106d85780636c8e47551461070357610267565b80631c75f085116101dd5780633ad10ef6116101a15780633ad10ef6146105585780633ccfd60b1461058357806342842e0e1461058d57806344a0d68a146105b65780634f6ccce7146105df57806355f804b31461061c57610267565b80631c75f085146104735780632098cc851461049e578063239c70ae146104c757806323b872dd146104f25780632f745c591461051b57610267565b8063095ea7b31161022f578063095ea7b3146103775780630b3ba988146103a05780630ca282f7146103c957806313faede6146103f257806318160ddd1461041d57806318ecc5e01461044857610267565b80630152de7c1461026c57806301ffc9a7146102a957806306fdde03146102e6578063081812fc14610311578063088a4ed01461034e575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613278565b610a26565b6040516102a091906132c0565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613333565b610c45565b6040516102dd91906132c0565b60405180910390f35b3480156102f257600080fd5b506102fb610cbf565b60405161030891906133f9565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613451565b610d51565b604051610345919061348d565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613451565b610dd6565b005b34801561038357600080fd5b5061039e600480360381019061039991906134a8565b610e5c565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613451565b610f73565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190613451565b6110f2565b005b3480156103fe57600080fd5b50610407611178565b60405161041491906134f7565b60405180910390f35b34801561042957600080fd5b506104326111bc565b60405161043f91906134f7565b60405180910390f35b34801561045457600080fd5b5061045d6111c9565b60405161046a91906134f7565b60405180910390f35b34801561047f57600080fd5b506104886111cf565b604051610495919061348d565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613451565b6111f5565b005b3480156104d357600080fd5b506104dc61127b565b6040516104e991906134f7565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613512565b611281565b005b34801561052757600080fd5b50610542600480360381019061053d91906134a8565b6112e1565b60405161054f91906134f7565b60405180910390f35b34801561056457600080fd5b5061056d611386565b60405161057a919061348d565b60405180910390f35b61058b6113ac565b005b34801561059957600080fd5b506105b460048036038101906105af9190613512565b611574565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613451565b611594565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613451565b61161a565b60405161061391906134f7565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e919061369a565b61168b565b005b34801561065157600080fd5b5061066c60048036038101906106679190613451565b611721565b604051610679919061348d565b60405180910390f35b34801561068e57600080fd5b506106976117d2565b6040516106a491906134f7565b60405180910390f35b3480156106b957600080fd5b506106c26117d8565b6040516106cf91906134f7565b60405180910390f35b3480156106e457600080fd5b506106ed6117de565b6040516106fa91906133f9565b60405180910390f35b34801561070f57600080fd5b5061071861186c565b604051610725919061348d565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613278565b611892565b60405161076291906134f7565b60405180910390f35b34801561077757600080fd5b50610780611949565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613451565b6119d1565b005b3480156107b757600080fd5b506107c0611a57565b6040516107cd919061348d565b60405180910390f35b3480156107e257600080fd5b506107eb611a7d565b6040516107f8919061348d565b60405180910390f35b34801561080d57600080fd5b50610816611aa7565b60405161082391906134f7565b60405180910390f35b34801561083857600080fd5b50610841611aad565b60405161084e91906133f9565b60405180910390f35b34801561086357600080fd5b5061087e60048036038101906108799190613278565b611b3f565b60405161088b91906134f7565b60405180910390f35b6108ae60048036038101906108a99190613451565b611b57565b005b3480156108bc57600080fd5b506108d760048036038101906108d2919061370f565b611e09565b005b3480156108e557600080fd5b506108ee611e1f565b6040516108fb91906134f7565b60405180910390f35b34801561091057600080fd5b5061092b600480360381019061092691906137f0565b611e25565b005b34801561093957600080fd5b50610954600480360381019061094f9190613451565b611e87565b60405161096191906133f9565b60405180910390f35b34801561097657600080fd5b5061097f611f63565b60405161098c91906134f7565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b79190613873565b611f69565b6040516109c991906132c0565b60405180910390f35b3480156109de57600080fd5b506109f960048036038101906109f49190613278565b611ffd565b005b348015610a0757600080fd5b50610a106120f4565b604051610a1d91906134f7565b60405180910390f35b600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba91906138ec565b60ff1690506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610b1c919061348d565b602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d919061392e565b90506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631959a002866040518263ffffffff1660e01b8152600401610bbc919061348d565b606060405180830381865afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd919061395b565b5050905082600a610c0e9190613b10565b601354610c1b9190613b5b565b8183610c279190613bb5565b10610c385760019350505050610c40565b600093505050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cb85750610cb7826120fa565b5b9050919050565b606060008054610cce90613c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90613c3a565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b5050505050905090565b6000610d5c826121dc565b610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613cdd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610dde612248565b73ffffffffffffffffffffffffffffffffffffffff16610dfc611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613d49565b60405180910390fd5b80600f8190555050565b6000610e6782611721565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613ddb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ef6612248565b73ffffffffffffffffffffffffffffffffffffffff161480610f255750610f2481610f1f612248565b611f69565b5b610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90613e6d565b60405180910390fd5b610f6e8383612250565b505050565b610f7b612248565b73ffffffffffffffffffffffffffffffffffffffff16610f99611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690613d49565b60405180910390fd5b600060105411611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613ed9565b60405180910390fd5b601054811115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613f6b565b60405180910390fd5b6000600190505b8181116110ee5760016010546110969190613f8b565b6010819055506110db601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016110cc6111bc565b6110d69190613bb5565b612309565b80806110e690613fbf565b915050611080565b5050565b6110fa612248565b73ffffffffffffffffffffffffffffffffffffffff16611118611a7d565b73ffffffffffffffffffffffffffffffffffffffff161461116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590613d49565b60405180910390fd5b8060128190555050565b6000601254421061118d57600c5490506111b9565b6064600d54600c5461119f9190613b5b565b6111a99190614036565b600c546111b69190613f8b565b90505b90565b6000600880549050905090565b60105481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111fd612248565b73ffffffffffffffffffffffffffffffffffffffff1661121b611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613d49565b60405180910390fd5b8060138190555050565b600f5481565b61129261128c612248565b82612327565b6112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c8906140d9565b60405180910390fd5b6112dc838383612405565b505050565b60006112ec83611892565b821061132d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113249061416b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113b4612248565b73ffffffffffffffffffffffffffffffffffffffff166113d2611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90613d49565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646002476114729190613b5b565b61147c9190614036565b604051611488906141bc565b60006040518083038185875af1925050503d80600081146114c5576040519150601f19603f3d011682016040523d82523d6000602084013e6114ca565b606091505b50509050806114d857600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611520906141bc565b60006040518083038185875af1925050503d806000811461155d576040519150601f19603f3d011682016040523d82523d6000602084013e611562565b606091505b505090508061157057600080fd5b5050565b61158f83838360405180602001604052806000815250611e25565b505050565b61159c612248565b73ffffffffffffffffffffffffffffffffffffffff166115ba611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790613d49565b60405180910390fd5b80600c8190555050565b60006116246111bc565b8210611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90614243565b60405180910390fd5b6008828154811061167957611678614263565b5b90600052602060002001549050919050565b611693612248565b73ffffffffffffffffffffffffffffffffffffffff166116b1611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613d49565b60405180910390fd5b80600b908051906020019061171d929190613163565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614304565b60405180910390fd5b80915050919050565b60125481565b60115481565b600b80546117eb90613c3a565b80601f016020809104026020016040519081016040528092919081815260200182805461181790613c3a565b80156118645780601f1061183957610100808354040283529160200191611864565b820191906000526020600020905b81548152906001019060200180831161184757829003601f168201915b505050505081565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614396565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611951612248565b73ffffffffffffffffffffffffffffffffffffffff1661196f611a7d565b73ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90613d49565b60405180910390fd5b6119cf600061266b565b565b6119d9612248565b73ffffffffffffffffffffffffffffffffffffffff166119f7611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490613d49565b60405180910390fd5b8060118190555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b606060018054611abc90613c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae890613c3a565b8015611b355780601f10611b0a57610100808354040283529160200191611b35565b820191906000526020600020905b815481529060010190602001808311611b1857829003601f168201915b5050505050905090565b60186020528060005260406000206000915090505481565b600e5481611b636111bc565b611b6d9190613bb5565b1115611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614402565b60405180910390fd5b600f5481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfc9190613bb5565b1115611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490614494565b60405180910390fd5b601154421015611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990614500565b60405180910390fd5b80611c8b611178565b611c959190613b5b565b341015611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce9061456c565b60405180910390fd5b6011544210158015611cea575060125442105b15611d3857611cf833610a26565b611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e906145fe565b60405180910390fd5b5b6000600190505b818111611e05576001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d929190613bb5565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611df2336001611de36111bc565b611ded9190613bb5565b612309565b8080611dfd90613fbf565b915050611d3f565b5050565b611e1b611e14612248565b8383612731565b5050565b600d5481565b611e36611e30612248565b83612327565b611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140d9565b60405180910390fd5b611e818484848461289d565b50505050565b6060611e92826121dc565b611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614690565b60405180910390fd5b600b8054611ede90613c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0a90613c3a565b8015611f575780601f10611f2c57610100808354040283529160200191611f57565b820191906000526020600020905b815481529060010190602001808311611f3a57829003601f168201915b50505050509050919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612005612248565b73ffffffffffffffffffffffffffffffffffffffff16612023611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614612079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207090613d49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90614722565b60405180910390fd5b6120f18161266b565b50565b60135481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121c557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121d557506121d4826128f9565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c383611721565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612323828260405180602001604052806000815250612963565b5050565b6000612332826121dc565b612371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612368906147b4565b60405180910390fd5b600061237c83611721565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123eb57508373ffffffffffffffffffffffffffffffffffffffff166123d384610d51565b73ffffffffffffffffffffffffffffffffffffffff16145b806123fc57506123fb8185611f69565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661242582611721565b73ffffffffffffffffffffffffffffffffffffffff161461247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614846565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e1906148d8565b60405180910390fd5b6124f58383836129be565b612500600082612250565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125509190613f8b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a79190613bb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612666838383612ad0565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614944565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161289091906132c0565b60405180910390a3505050565b6128a8848484612405565b6128b484848484612ad5565b6128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea906149d6565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61296d8383612c5c565b61297a6000848484612ad5565b6129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b0906149d6565b60405180910390fd5b505050565b6129c9838383612e35565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a0b57612a0681612e3a565b612a4a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a4957612a488382612e83565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8c57612a8781612ff0565b612acb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aca57612ac982826130c1565b5b5b505050565b505050565b6000612af68473ffffffffffffffffffffffffffffffffffffffff16613140565b15612c4f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b1f612248565b8786866040518563ffffffff1660e01b8152600401612b419493929190614a4b565b6020604051808303816000875af1925050508015612b7d57506040513d601f19601f82011682018060405250810190612b7a9190614aac565b60015b612bff573d8060008114612bad576040519150601f19603f3d011682016040523d82523d6000602084013e612bb2565b606091505b506000815103612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee906149d6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c54565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc290614b25565b60405180910390fd5b612cd4816121dc565b15612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90614b91565b60405180910390fd5b612d20600083836129be565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d709190613bb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e3160008383612ad0565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e9084611892565b612e9a9190613f8b565b9050600060076000848152602001908152602001600020549050818114612f7f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130049190613f8b565b905060006009600084815260200190815260200160002054905060006008838154811061303457613033614263565b5b90600052602060002001549050806008838154811061305657613055614263565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130a5576130a4614bb1565b5b6001900381819060005260206000200160009055905550505050565b60006130cc83611892565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461316f90613c3a565b90600052602060002090601f01602090048101928261319157600085556131d8565b82601f106131aa57805160ff19168380011785556131d8565b828001600101855582156131d8579182015b828111156131d75782518255916020019190600101906131bc565b5b5090506131e591906131e9565b5090565b5b808211156132025760008160009055506001016131ea565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132458261321a565b9050919050565b6132558161323a565b811461326057600080fd5b50565b6000813590506132728161324c565b92915050565b60006020828403121561328e5761328d613210565b5b600061329c84828501613263565b91505092915050565b60008115159050919050565b6132ba816132a5565b82525050565b60006020820190506132d560008301846132b1565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613310816132db565b811461331b57600080fd5b50565b60008135905061332d81613307565b92915050565b60006020828403121561334957613348613210565b5b60006133578482850161331e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561339a57808201518184015260208101905061337f565b838111156133a9576000848401525b50505050565b6000601f19601f8301169050919050565b60006133cb82613360565b6133d5818561336b565b93506133e581856020860161337c565b6133ee816133af565b840191505092915050565b6000602082019050818103600083015261341381846133c0565b905092915050565b6000819050919050565b61342e8161341b565b811461343957600080fd5b50565b60008135905061344b81613425565b92915050565b60006020828403121561346757613466613210565b5b60006134758482850161343c565b91505092915050565b6134878161323a565b82525050565b60006020820190506134a2600083018461347e565b92915050565b600080604083850312156134bf576134be613210565b5b60006134cd85828601613263565b92505060206134de8582860161343c565b9150509250929050565b6134f18161341b565b82525050565b600060208201905061350c60008301846134e8565b92915050565b60008060006060848603121561352b5761352a613210565b5b600061353986828701613263565b935050602061354a86828701613263565b925050604061355b8682870161343c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135a7826133af565b810181811067ffffffffffffffff821117156135c6576135c561356f565b5b80604052505050565b60006135d9613206565b90506135e5828261359e565b919050565b600067ffffffffffffffff8211156136055761360461356f565b5b61360e826133af565b9050602081019050919050565b82818337600083830152505050565b600061363d613638846135ea565b6135cf565b9050828152602081018484840111156136595761365861356a565b5b61366484828561361b565b509392505050565b600082601f83011261368157613680613565565b5b813561369184826020860161362a565b91505092915050565b6000602082840312156136b0576136af613210565b5b600082013567ffffffffffffffff8111156136ce576136cd613215565b5b6136da8482850161366c565b91505092915050565b6136ec816132a5565b81146136f757600080fd5b50565b600081359050613709816136e3565b92915050565b6000806040838503121561372657613725613210565b5b600061373485828601613263565b9250506020613745858286016136fa565b9150509250929050565b600067ffffffffffffffff82111561376a5761376961356f565b5b613773826133af565b9050602081019050919050565b600061379361378e8461374f565b6135cf565b9050828152602081018484840111156137af576137ae61356a565b5b6137ba84828561361b565b509392505050565b600082601f8301126137d7576137d6613565565b5b81356137e7848260208601613780565b91505092915050565b6000806000806080858703121561380a57613809613210565b5b600061381887828801613263565b945050602061382987828801613263565b935050604061383a8782880161343c565b925050606085013567ffffffffffffffff81111561385b5761385a613215565b5b613867878288016137c2565b91505092959194509250565b6000806040838503121561388a57613889613210565b5b600061389885828601613263565b92505060206138a985828601613263565b9150509250929050565b600060ff82169050919050565b6138c9816138b3565b81146138d457600080fd5b50565b6000815190506138e6816138c0565b92915050565b60006020828403121561390257613901613210565b5b6000613910848285016138d7565b91505092915050565b60008151905061392881613425565b92915050565b60006020828403121561394457613943613210565b5b600061395284828501613919565b91505092915050565b60008060006060848603121561397457613973613210565b5b600061398286828701613919565b935050602061399386828701613919565b92505060406139a486828701613919565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a3457808604811115613a1057613a0f6139ae565b5b6001851615613a1f5780820291505b8081029050613a2d856139dd565b94506139f4565b94509492505050565b600082613a4d5760019050613b09565b81613a5b5760009050613b09565b8160018114613a715760028114613a7b57613aaa565b6001915050613b09565b60ff841115613a8d57613a8c6139ae565b5b8360020a915084821115613aa457613aa36139ae565b5b50613b09565b5060208310610133831016604e8410600b8410161715613adf5782820a905083811115613ada57613ad96139ae565b5b613b09565b613aec84848460016139ea565b92509050818404811115613b0357613b026139ae565b5b81810290505b9392505050565b6000613b1b8261341b565b9150613b268361341b565b9250613b537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a3d565b905092915050565b6000613b668261341b565b9150613b718361341b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613baa57613ba96139ae565b5b828202905092915050565b6000613bc08261341b565b9150613bcb8361341b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0057613bff6139ae565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c5257607f821691505b602082108103613c6557613c64613c0b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613cc7602c8361336b565b9150613cd282613c6b565b604082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d3360208361336b565b9150613d3e82613cfd565b602082019050919050565b60006020820190508181036000830152613d6281613d26565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dc560218361336b565b9150613dd082613d69565b604082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e5760388361336b565b9150613e6282613dfb565b604082019050919050565b60006020820190508181036000830152613e8681613e4a565b9050919050565b7f416c6c20676976656177617920746f6b656e7320617265206d696e7465640000600082015250565b6000613ec3601e8361336b565b9150613ece82613e8d565b602082019050919050565b60006020820190508181036000830152613ef281613eb6565b9050919050565b7f416c6c20676976656177617920746f6b656e7320616c7265616479206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f5560228361336b565b9150613f6082613ef9565b604082019050919050565b60006020820190508181036000830152613f8481613f48565b9050919050565b6000613f968261341b565b9150613fa18361341b565b925082821015613fb457613fb36139ae565b5b828203905092915050565b6000613fca8261341b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ffc57613ffb6139ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140418261341b565b915061404c8361341b565b92508261405c5761405b614007565b5b828204905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006140c360318361336b565b91506140ce82614067565b604082019050919050565b600060208201905081810360008301526140f2816140b6565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614155602b8361336b565b9150614160826140f9565b604082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b600081905092915050565b50565b60006141a660008361418b565b91506141b182614196565b600082019050919050565b60006141c782614199565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061422d602c8361336b565b9150614238826141d1565b604082019050919050565b6000602082019050818103600083015261425c81614220565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006142ee60298361336b565b91506142f982614292565b604082019050919050565b6000602082019050818103600083015261431d816142e1565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614380602a8361336b565b915061438b82614324565b604082019050919050565b600060208201905081810360008301526143af81614373565b9050919050565b7f50757263686173652065786365656473206d6178696d756d20737570706c7900600082015250565b60006143ec601f8361336b565b91506143f7826143b6565b602082019050919050565b6000602082019050818103600083015261441b816143df565b9050919050565b7f5075726368617365206578636565647320746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7400000000000000000000000000000000602082015250565b600061447e60308361336b565b915061448982614422565b604082019050919050565b600060208201905081810360008301526144ad81614471565b9050919050565b7f53616c65206973206e6f7420796574206f70656e000000000000000000000000600082015250565b60006144ea60148361336b565b91506144f5826144b4565b602082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f506c6561736520656e7465722074686520636f72726563742070726963650000600082015250565b6000614556601e8361336b565b915061456182614520565b602082019050919050565b6000602082019050818103600083015261458581614549565b9050919050565b7f57616c6c6574206973206e6f7420656c696769626c6520666f7220707265736160008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b60006145e860228361336b565b91506145f38261458c565b604082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061467a602f8361336b565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061470c60268361336b565b9150614717826146b0565b604082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061479e602c8361336b565b91506147a982614742565b604082019050919050565b600060208201905081810360008301526147cd81614791565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061483060258361336b565b915061483b826147d4565b604082019050919050565b6000602082019050818103600083015261485f81614823565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148c260248361336b565b91506148cd82614866565b604082019050919050565b600060208201905081810360008301526148f1816148b5565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061492e60198361336b565b9150614939826148f8565b602082019050919050565b6000602082019050818103600083015261495d81614921565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149c060328361336b565b91506149cb82614964565b604082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614a1d826149f6565b614a278185614a01565b9350614a3781856020860161337c565b614a40816133af565b840191505092915050565b6000608082019050614a60600083018761347e565b614a6d602083018661347e565b614a7a60408301856134e8565b8181036060830152614a8c8184614a12565b905095945050505050565b600081519050614aa681613307565b92915050565b600060208284031215614ac257614ac1613210565b5b6000614ad084828501614a97565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b0f60208361336b565b9150614b1a82614ad9565b602082019050919050565b60006020820190508181036000830152614b3e81614b02565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b7b601c8361336b565b9150614b8682614b45565b602082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220be99e6588b1018a412d559b3eda4d0c83cdb06f17b7e32e8e9014c69840f33ec64736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000006293b4a00000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000b52656566506574734e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000552504e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d61694c537a71554d67786a765365766b5834744c4d64676e566f7755716e57434735613175723579646967470000000000000000000000
Deployed Bytecode
0x6080604052600436106102675760003560e01c80636352211e1161014457806395d89b41116100b6578063b88d4fde1161007a578063b88d4fde14610904578063c87b56dd1461092d578063d5abeb011461096a578063e985e9c514610995578063f2fde38b146109d2578063f793aa6c146109fb57610267565b806395d89b411461082c57806397cf84fc14610857578063a0712d6814610894578063a22cb465146108b0578063a99aa366146108d957610267565b806370a082311161010857806370a082311461072e578063715018a61461076b57806378152bbe146107825780637e58f4cc146107ab5780638da5cb5b146107d6578063938225571461080157610267565b80636352211e1461064557806365c0cfa41461068257806368e7c8ac146106ad5780636c0360eb146106d85780636c8e47551461070357610267565b80631c75f085116101dd5780633ad10ef6116101a15780633ad10ef6146105585780633ccfd60b1461058357806342842e0e1461058d57806344a0d68a146105b65780634f6ccce7146105df57806355f804b31461061c57610267565b80631c75f085146104735780632098cc851461049e578063239c70ae146104c757806323b872dd146104f25780632f745c591461051b57610267565b8063095ea7b31161022f578063095ea7b3146103775780630b3ba988146103a05780630ca282f7146103c957806313faede6146103f257806318160ddd1461041d57806318ecc5e01461044857610267565b80630152de7c1461026c57806301ffc9a7146102a957806306fdde03146102e6578063081812fc14610311578063088a4ed01461034e575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613278565b610a26565b6040516102a091906132c0565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613333565b610c45565b6040516102dd91906132c0565b60405180910390f35b3480156102f257600080fd5b506102fb610cbf565b60405161030891906133f9565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613451565b610d51565b604051610345919061348d565b60405180910390f35b34801561035a57600080fd5b5061037560048036038101906103709190613451565b610dd6565b005b34801561038357600080fd5b5061039e600480360381019061039991906134a8565b610e5c565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190613451565b610f73565b005b3480156103d557600080fd5b506103f060048036038101906103eb9190613451565b6110f2565b005b3480156103fe57600080fd5b50610407611178565b60405161041491906134f7565b60405180910390f35b34801561042957600080fd5b506104326111bc565b60405161043f91906134f7565b60405180910390f35b34801561045457600080fd5b5061045d6111c9565b60405161046a91906134f7565b60405180910390f35b34801561047f57600080fd5b506104886111cf565b604051610495919061348d565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613451565b6111f5565b005b3480156104d357600080fd5b506104dc61127b565b6040516104e991906134f7565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613512565b611281565b005b34801561052757600080fd5b50610542600480360381019061053d91906134a8565b6112e1565b60405161054f91906134f7565b60405180910390f35b34801561056457600080fd5b5061056d611386565b60405161057a919061348d565b60405180910390f35b61058b6113ac565b005b34801561059957600080fd5b506105b460048036038101906105af9190613512565b611574565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613451565b611594565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613451565b61161a565b60405161061391906134f7565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e919061369a565b61168b565b005b34801561065157600080fd5b5061066c60048036038101906106679190613451565b611721565b604051610679919061348d565b60405180910390f35b34801561068e57600080fd5b506106976117d2565b6040516106a491906134f7565b60405180910390f35b3480156106b957600080fd5b506106c26117d8565b6040516106cf91906134f7565b60405180910390f35b3480156106e457600080fd5b506106ed6117de565b6040516106fa91906133f9565b60405180910390f35b34801561070f57600080fd5b5061071861186c565b604051610725919061348d565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190613278565b611892565b60405161076291906134f7565b60405180910390f35b34801561077757600080fd5b50610780611949565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613451565b6119d1565b005b3480156107b757600080fd5b506107c0611a57565b6040516107cd919061348d565b60405180910390f35b3480156107e257600080fd5b506107eb611a7d565b6040516107f8919061348d565b60405180910390f35b34801561080d57600080fd5b50610816611aa7565b60405161082391906134f7565b60405180910390f35b34801561083857600080fd5b50610841611aad565b60405161084e91906133f9565b60405180910390f35b34801561086357600080fd5b5061087e60048036038101906108799190613278565b611b3f565b60405161088b91906134f7565b60405180910390f35b6108ae60048036038101906108a99190613451565b611b57565b005b3480156108bc57600080fd5b506108d760048036038101906108d2919061370f565b611e09565b005b3480156108e557600080fd5b506108ee611e1f565b6040516108fb91906134f7565b60405180910390f35b34801561091057600080fd5b5061092b600480360381019061092691906137f0565b611e25565b005b34801561093957600080fd5b50610954600480360381019061094f9190613451565b611e87565b60405161096191906133f9565b60405180910390f35b34801561097657600080fd5b5061097f611f63565b60405161098c91906134f7565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b79190613873565b611f69565b6040516109c991906132c0565b60405180910390f35b3480156109de57600080fd5b506109f960048036038101906109f49190613278565b611ffd565b005b348015610a0757600080fd5b50610a106120f4565b604051610a1d91906134f7565b60405180910390f35b600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba91906138ec565b60ff1690506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610b1c919061348d565b602060405180830381865afa158015610b39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5d919061392e565b90506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631959a002866040518263ffffffff1660e01b8152600401610bbc919061348d565b606060405180830381865afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd919061395b565b5050905082600a610c0e9190613b10565b601354610c1b9190613b5b565b8183610c279190613bb5565b10610c385760019350505050610c40565b600093505050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cb85750610cb7826120fa565b5b9050919050565b606060008054610cce90613c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90613c3a565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b5050505050905090565b6000610d5c826121dc565b610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290613cdd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610dde612248565b73ffffffffffffffffffffffffffffffffffffffff16610dfc611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990613d49565b60405180910390fd5b80600f8190555050565b6000610e6782611721565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90613ddb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ef6612248565b73ffffffffffffffffffffffffffffffffffffffff161480610f255750610f2481610f1f612248565b611f69565b5b610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90613e6d565b60405180910390fd5b610f6e8383612250565b505050565b610f7b612248565b73ffffffffffffffffffffffffffffffffffffffff16610f99611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690613d49565b60405180910390fd5b600060105411611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613ed9565b60405180910390fd5b601054811115611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090613f6b565b60405180910390fd5b6000600190505b8181116110ee5760016010546110969190613f8b565b6010819055506110db601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016110cc6111bc565b6110d69190613bb5565b612309565b80806110e690613fbf565b915050611080565b5050565b6110fa612248565b73ffffffffffffffffffffffffffffffffffffffff16611118611a7d565b73ffffffffffffffffffffffffffffffffffffffff161461116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590613d49565b60405180910390fd5b8060128190555050565b6000601254421061118d57600c5490506111b9565b6064600d54600c5461119f9190613b5b565b6111a99190614036565b600c546111b69190613f8b565b90505b90565b6000600880549050905090565b60105481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111fd612248565b73ffffffffffffffffffffffffffffffffffffffff1661121b611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613d49565b60405180910390fd5b8060138190555050565b600f5481565b61129261128c612248565b82612327565b6112d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c8906140d9565b60405180910390fd5b6112dc838383612405565b505050565b60006112ec83611892565b821061132d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113249061416b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113b4612248565b73ffffffffffffffffffffffffffffffffffffffff166113d2611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90613d49565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660646002476114729190613b5b565b61147c9190614036565b604051611488906141bc565b60006040518083038185875af1925050503d80600081146114c5576040519150601f19603f3d011682016040523d82523d6000602084013e6114ca565b606091505b50509050806114d857600080fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611520906141bc565b60006040518083038185875af1925050503d806000811461155d576040519150601f19603f3d011682016040523d82523d6000602084013e611562565b606091505b505090508061157057600080fd5b5050565b61158f83838360405180602001604052806000815250611e25565b505050565b61159c612248565b73ffffffffffffffffffffffffffffffffffffffff166115ba611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790613d49565b60405180910390fd5b80600c8190555050565b60006116246111bc565b8210611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165c90614243565b60405180910390fd5b6008828154811061167957611678614263565b5b90600052602060002001549050919050565b611693612248565b73ffffffffffffffffffffffffffffffffffffffff166116b1611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90613d49565b60405180910390fd5b80600b908051906020019061171d929190613163565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090614304565b60405180910390fd5b80915050919050565b60125481565b60115481565b600b80546117eb90613c3a565b80601f016020809104026020016040519081016040528092919081815260200182805461181790613c3a565b80156118645780601f1061183957610100808354040283529160200191611864565b820191906000526020600020905b81548152906001019060200180831161184757829003601f168201915b505050505081565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614396565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611951612248565b73ffffffffffffffffffffffffffffffffffffffff1661196f611a7d565b73ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90613d49565b60405180910390fd5b6119cf600061266b565b565b6119d9612248565b73ffffffffffffffffffffffffffffffffffffffff166119f7611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490613d49565b60405180910390fd5b8060118190555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b606060018054611abc90613c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae890613c3a565b8015611b355780601f10611b0a57610100808354040283529160200191611b35565b820191906000526020600020905b815481529060010190602001808311611b1857829003601f168201915b5050505050905090565b60186020528060005260406000206000915090505481565b600e5481611b636111bc565b611b6d9190613bb5565b1115611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590614402565b60405180910390fd5b600f5481601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bfc9190613bb5565b1115611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490614494565b60405180910390fd5b601154421015611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990614500565b60405180910390fd5b80611c8b611178565b611c959190613b5b565b341015611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce9061456c565b60405180910390fd5b6011544210158015611cea575060125442105b15611d3857611cf833610a26565b611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e906145fe565b60405180910390fd5b5b6000600190505b818111611e05576001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d929190613bb5565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611df2336001611de36111bc565b611ded9190613bb5565b612309565b8080611dfd90613fbf565b915050611d3f565b5050565b611e1b611e14612248565b8383612731565b5050565b600d5481565b611e36611e30612248565b83612327565b611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140d9565b60405180910390fd5b611e818484848461289d565b50505050565b6060611e92826121dc565b611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614690565b60405180910390fd5b600b8054611ede90613c3a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0a90613c3a565b8015611f575780601f10611f2c57610100808354040283529160200191611f57565b820191906000526020600020905b815481529060010190602001808311611f3a57829003601f168201915b50505050509050919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612005612248565b73ffffffffffffffffffffffffffffffffffffffff16612023611a7d565b73ffffffffffffffffffffffffffffffffffffffff1614612079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207090613d49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90614722565b60405180910390fd5b6120f18161266b565b50565b60135481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121c557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121d557506121d4826128f9565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122c383611721565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612323828260405180602001604052806000815250612963565b5050565b6000612332826121dc565b612371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612368906147b4565b60405180910390fd5b600061237c83611721565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123eb57508373ffffffffffffffffffffffffffffffffffffffff166123d384610d51565b73ffffffffffffffffffffffffffffffffffffffff16145b806123fc57506123fb8185611f69565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661242582611721565b73ffffffffffffffffffffffffffffffffffffffff161461247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614846565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e1906148d8565b60405180910390fd5b6124f58383836129be565b612500600082612250565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125509190613f8b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a79190613bb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612666838383612ad0565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279690614944565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161289091906132c0565b60405180910390a3505050565b6128a8848484612405565b6128b484848484612ad5565b6128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea906149d6565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61296d8383612c5c565b61297a6000848484612ad5565b6129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b0906149d6565b60405180910390fd5b505050565b6129c9838383612e35565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a0b57612a0681612e3a565b612a4a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a4957612a488382612e83565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8c57612a8781612ff0565b612acb565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612aca57612ac982826130c1565b5b5b505050565b505050565b6000612af68473ffffffffffffffffffffffffffffffffffffffff16613140565b15612c4f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b1f612248565b8786866040518563ffffffff1660e01b8152600401612b419493929190614a4b565b6020604051808303816000875af1925050508015612b7d57506040513d601f19601f82011682018060405250810190612b7a9190614aac565b60015b612bff573d8060008114612bad576040519150601f19603f3d011682016040523d82523d6000602084013e612bb2565b606091505b506000815103612bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bee906149d6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c54565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc290614b25565b60405180910390fd5b612cd4816121dc565b15612d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0b90614b91565b60405180910390fd5b612d20600083836129be565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d709190613bb5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e3160008383612ad0565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e9084611892565b612e9a9190613f8b565b9050600060076000848152602001908152602001600020549050818114612f7f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130049190613f8b565b905060006009600084815260200190815260200160002054905060006008838154811061303457613033614263565b5b90600052602060002001549050806008838154811061305657613055614263565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130a5576130a4614bb1565b5b6001900381819060005260206000200160009055905550505050565b60006130cc83611892565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461316f90613c3a565b90600052602060002090601f01602090048101928261319157600085556131d8565b82601f106131aa57805160ff19168380011785556131d8565b828001600101855582156131d8579182015b828111156131d75782518255916020019190600101906131bc565b5b5090506131e591906131e9565b5090565b5b808211156132025760008160009055506001016131ea565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132458261321a565b9050919050565b6132558161323a565b811461326057600080fd5b50565b6000813590506132728161324c565b92915050565b60006020828403121561328e5761328d613210565b5b600061329c84828501613263565b91505092915050565b60008115159050919050565b6132ba816132a5565b82525050565b60006020820190506132d560008301846132b1565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613310816132db565b811461331b57600080fd5b50565b60008135905061332d81613307565b92915050565b60006020828403121561334957613348613210565b5b60006133578482850161331e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561339a57808201518184015260208101905061337f565b838111156133a9576000848401525b50505050565b6000601f19601f8301169050919050565b60006133cb82613360565b6133d5818561336b565b93506133e581856020860161337c565b6133ee816133af565b840191505092915050565b6000602082019050818103600083015261341381846133c0565b905092915050565b6000819050919050565b61342e8161341b565b811461343957600080fd5b50565b60008135905061344b81613425565b92915050565b60006020828403121561346757613466613210565b5b60006134758482850161343c565b91505092915050565b6134878161323a565b82525050565b60006020820190506134a2600083018461347e565b92915050565b600080604083850312156134bf576134be613210565b5b60006134cd85828601613263565b92505060206134de8582860161343c565b9150509250929050565b6134f18161341b565b82525050565b600060208201905061350c60008301846134e8565b92915050565b60008060006060848603121561352b5761352a613210565b5b600061353986828701613263565b935050602061354a86828701613263565b925050604061355b8682870161343c565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6135a7826133af565b810181811067ffffffffffffffff821117156135c6576135c561356f565b5b80604052505050565b60006135d9613206565b90506135e5828261359e565b919050565b600067ffffffffffffffff8211156136055761360461356f565b5b61360e826133af565b9050602081019050919050565b82818337600083830152505050565b600061363d613638846135ea565b6135cf565b9050828152602081018484840111156136595761365861356a565b5b61366484828561361b565b509392505050565b600082601f83011261368157613680613565565b5b813561369184826020860161362a565b91505092915050565b6000602082840312156136b0576136af613210565b5b600082013567ffffffffffffffff8111156136ce576136cd613215565b5b6136da8482850161366c565b91505092915050565b6136ec816132a5565b81146136f757600080fd5b50565b600081359050613709816136e3565b92915050565b6000806040838503121561372657613725613210565b5b600061373485828601613263565b9250506020613745858286016136fa565b9150509250929050565b600067ffffffffffffffff82111561376a5761376961356f565b5b613773826133af565b9050602081019050919050565b600061379361378e8461374f565b6135cf565b9050828152602081018484840111156137af576137ae61356a565b5b6137ba84828561361b565b509392505050565b600082601f8301126137d7576137d6613565565b5b81356137e7848260208601613780565b91505092915050565b6000806000806080858703121561380a57613809613210565b5b600061381887828801613263565b945050602061382987828801613263565b935050604061383a8782880161343c565b925050606085013567ffffffffffffffff81111561385b5761385a613215565b5b613867878288016137c2565b91505092959194509250565b6000806040838503121561388a57613889613210565b5b600061389885828601613263565b92505060206138a985828601613263565b9150509250929050565b600060ff82169050919050565b6138c9816138b3565b81146138d457600080fd5b50565b6000815190506138e6816138c0565b92915050565b60006020828403121561390257613901613210565b5b6000613910848285016138d7565b91505092915050565b60008151905061392881613425565b92915050565b60006020828403121561394457613943613210565b5b600061395284828501613919565b91505092915050565b60008060006060848603121561397457613973613210565b5b600061398286828701613919565b935050602061399386828701613919565b92505060406139a486828701613919565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613a3457808604811115613a1057613a0f6139ae565b5b6001851615613a1f5780820291505b8081029050613a2d856139dd565b94506139f4565b94509492505050565b600082613a4d5760019050613b09565b81613a5b5760009050613b09565b8160018114613a715760028114613a7b57613aaa565b6001915050613b09565b60ff841115613a8d57613a8c6139ae565b5b8360020a915084821115613aa457613aa36139ae565b5b50613b09565b5060208310610133831016604e8410600b8410161715613adf5782820a905083811115613ada57613ad96139ae565b5b613b09565b613aec84848460016139ea565b92509050818404811115613b0357613b026139ae565b5b81810290505b9392505050565b6000613b1b8261341b565b9150613b268361341b565b9250613b537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a3d565b905092915050565b6000613b668261341b565b9150613b718361341b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613baa57613ba96139ae565b5b828202905092915050565b6000613bc08261341b565b9150613bcb8361341b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0057613bff6139ae565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c5257607f821691505b602082108103613c6557613c64613c0b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613cc7602c8361336b565b9150613cd282613c6b565b604082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d3360208361336b565b9150613d3e82613cfd565b602082019050919050565b60006020820190508181036000830152613d6281613d26565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613dc560218361336b565b9150613dd082613d69565b604082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e5760388361336b565b9150613e6282613dfb565b604082019050919050565b60006020820190508181036000830152613e8681613e4a565b9050919050565b7f416c6c20676976656177617920746f6b656e7320617265206d696e7465640000600082015250565b6000613ec3601e8361336b565b9150613ece82613e8d565b602082019050919050565b60006020820190508181036000830152613ef281613eb6565b9050919050565b7f416c6c20676976656177617920746f6b656e7320616c7265616479206d696e7460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f5560228361336b565b9150613f6082613ef9565b604082019050919050565b60006020820190508181036000830152613f8481613f48565b9050919050565b6000613f968261341b565b9150613fa18361341b565b925082821015613fb457613fb36139ae565b5b828203905092915050565b6000613fca8261341b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ffc57613ffb6139ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140418261341b565b915061404c8361341b565b92508261405c5761405b614007565b5b828204905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006140c360318361336b565b91506140ce82614067565b604082019050919050565b600060208201905081810360008301526140f2816140b6565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000614155602b8361336b565b9150614160826140f9565b604082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b600081905092915050565b50565b60006141a660008361418b565b91506141b182614196565b600082019050919050565b60006141c782614199565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061422d602c8361336b565b9150614238826141d1565b604082019050919050565b6000602082019050818103600083015261425c81614220565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006142ee60298361336b565b91506142f982614292565b604082019050919050565b6000602082019050818103600083015261431d816142e1565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614380602a8361336b565b915061438b82614324565b604082019050919050565b600060208201905081810360008301526143af81614373565b9050919050565b7f50757263686173652065786365656473206d6178696d756d20737570706c7900600082015250565b60006143ec601f8361336b565b91506143f7826143b6565b602082019050919050565b6000602082019050818103600083015261441b816143df565b9050919050565b7f5075726368617365206578636565647320746865206c696d6974206f66204e4660008201527f54277320796f752063616e206d696e7400000000000000000000000000000000602082015250565b600061447e60308361336b565b915061448982614422565b604082019050919050565b600060208201905081810360008301526144ad81614471565b9050919050565b7f53616c65206973206e6f7420796574206f70656e000000000000000000000000600082015250565b60006144ea60148361336b565b91506144f5826144b4565b602082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f506c6561736520656e7465722074686520636f72726563742070726963650000600082015250565b6000614556601e8361336b565b915061456182614520565b602082019050919050565b6000602082019050818103600083015261458581614549565b9050919050565b7f57616c6c6574206973206e6f7420656c696769626c6520666f7220707265736160008201527f6c65000000000000000000000000000000000000000000000000000000000000602082015250565b60006145e860228361336b565b91506145f38261458c565b604082019050919050565b60006020820190508181036000830152614617816145db565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061467a602f8361336b565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061470c60268361336b565b9150614717826146b0565b604082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061479e602c8361336b565b91506147a982614742565b604082019050919050565b600060208201905081810360008301526147cd81614791565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061483060258361336b565b915061483b826147d4565b604082019050919050565b6000602082019050818103600083015261485f81614823565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148c260248361336b565b91506148cd82614866565b604082019050919050565b600060208201905081810360008301526148f1816148b5565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061492e60198361336b565b9150614939826148f8565b602082019050919050565b6000602082019050818103600083015261495d81614921565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149c060328361336b565b91506149cb82614964565b604082019050919050565b600060208201905081810360008301526149ef816149b3565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614a1d826149f6565b614a278185614a01565b9350614a3781856020860161337c565b614a40816133af565b840191505092915050565b6000608082019050614a60600083018761347e565b614a6d602083018661347e565b614a7a60408301856134e8565b8181036060830152614a8c8184614a12565b905095945050505050565b600081519050614aa681613307565b92915050565b600060208284031215614ac257614ac1613210565b5b6000614ad084828501614a97565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614b0f60208361336b565b9150614b1a82614ad9565b602082019050919050565b60006020820190508181036000830152614b3e81614b02565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b7b601c8361336b565b9150614b8682614b45565b602082019050919050565b60006020820190508181036000830152614baa81614b6e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220be99e6588b1018a412d559b3eda4d0c83cdb06f17b7e32e8e9014c69840f33ec64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000006293b4a00000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000b52656566506574734e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000552504e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d61694c537a71554d67786a765365766b5834744c4d64676e566f7755716e57434735613175723579646967470000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): ReefPetsNFT
Arg [1] : _symbol (string): RPNFT
Arg [2] : _initialBaseURI (string): ipfs://QmaiLSzqUMgxjvSevkX4tLMdgnVowUqnWCG5a1ur5ydigG
Arg [3] : _presaleStartTime (uint256): 1653847200
Arg [4] : _presaleDurationSeconds (uint256): 86400
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 000000000000000000000000000000000000000000000000000000006293b4a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [6] : 52656566506574734e4654000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 52504e4654000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [10] : 697066733a2f2f516d61694c537a71554d67786a765365766b5834744c4d6467
Arg [11] : 6e566f7755716e57434735613175723579646967470000000000000000000000
Deployed ByteCode Sourcemap
49310:4773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52289:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42961:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29781:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31340:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53143:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30863:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51828:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53488:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52807:216;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43601:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49564:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49851:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53623:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49525:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32090:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43269:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49774:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53781:299;;;:::i;:::-;;32500:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53267:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43791:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53031:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29475:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49663:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49617:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49369:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50011:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29205:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8377:103;;;;;;;;;;;;;:::i;:::-;;53365:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49929:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7726:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49403:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29950:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50097:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50972:848;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31633:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49445:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32756:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50755:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49487:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31859:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8635:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49712:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52289:510;52359:4;52376:24;52418:15;;;;;;;;;;;52403:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52376:69;;;;52456:21;52495:15;;;;;;;;;;;52480:41;;;52522:7;52480:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52456:74;;52542:21;52590:17;;;;;;;;;;;52570:47;;;52618:7;52570:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52541:85;;;;52713:16;52707:2;:22;;;;:::i;:::-;52684:20;;:45;;;;:::i;:::-;52667:13;52651;:29;;;;:::i;:::-;:78;52647:122;;52753:4;52746:11;;;;;;;52647:122;52786:5;52779:12;;;;;52289:510;;;;:::o;42961:224::-;43063:4;43102:35;43087:50;;;:11;:50;;;;:90;;;;43141:36;43165:11;43141:23;:36::i;:::-;43087:90;43080:97;;42961:224;;;:::o;29781:100::-;29835:13;29868:5;29861:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29781:100;:::o;31340:221::-;31416:7;31444:16;31452:7;31444;:16::i;:::-;31436:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31529:15;:24;31545:7;31529:24;;;;;;;;;;;;;;;;;;;;;31522:31;;31340:221;;;:::o;53143:116::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53237:14:::1;53221:13;:30;;;;53143:116:::0;:::o;30863:411::-;30944:13;30960:23;30975:7;30960:14;:23::i;:::-;30944:39;;31008:5;31002:11;;:2;:11;;;30994:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31102:5;31086:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31111:37;31128:5;31135:12;:10;:12::i;:::-;31111:16;:37::i;:::-;31086:62;31064:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31245:21;31254:2;31258:7;31245:8;:21::i;:::-;30933:341;30863:411;;:::o;51828:453::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51942:1:::1;51913:26;;:30;51905:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52012:26;;51997:11;:41;;51989:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;52094:9;52106:1;52094:13;;52090:184;52114:11;52109:1;:16;52090:184;;52205:1;52176:26;;:30;;;;:::i;:::-;52147:26;:59;;;;52221:41;52231:11;;;;;;;;;;;52260:1;52244:13;:11;:13::i;:::-;:17;;;;:::i;:::-;52221:9;:41::i;:::-;52127:3;;;;;:::i;:::-;;;;52090:184;;;;51828:453:::0;:::o;53488:127::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53589:18:::1;53572:14;:35;;;;53488:127:::0;:::o;52807:216::-;52844:7;52887:14;;52868:15;:33;52864:81;;52925:8;;52918:15;;;;52864:81;53012:3;52994:15;;52983:8;;:26;;;;:::i;:::-;:32;;;;:::i;:::-;52972:8;;:43;;;;:::i;:::-;52965:50;;52807:216;;:::o;43601:113::-;43662:7;43689:10;:17;;;;43682:24;;43601:113;:::o;49564:46::-;;;;:::o;49851:71::-;;;;;;;;;;;;;:::o;53623:150::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53741:24:::1;53718:20;:47;;;;53623:150:::0;:::o;49525:32::-;;;;:::o;32090:339::-;32285:41;32304:12;:10;:12::i;:::-;32318:7;32285:18;:41::i;:::-;32277:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32393:28;32403:4;32409:2;32413:7;32393:9;:28::i;:::-;32090:339;;;:::o;43269:256::-;43366:7;43402:23;43419:5;43402:16;:23::i;:::-;43394:5;:31;43386:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43491:12;:19;43504:5;43491:19;;;;;;;;;;;;;;;:26;43511:5;43491:26;;;;;;;;;;;;43484:33;;43269:256;;;;:::o;49774:70::-;;;;;;;;;;;;;:::o;53781:299::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53838:12:::1;53864:10;;;;;;;;;;;53856:24;;53916:3;53912:1;53888:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;53856:68;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53837:87;;;53943:7;53935:16;;;::::0;::::1;;53965:13;53992:11;;;;;;;;;;;53984:25;;54017:21;53984:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53964:79;;;54062:8;54054:17;;;::::0;::::1;;53826:254;;53781:299::o:0;32500:185::-;32638:39;32655:4;32661:2;32665:7;32638:39;;;;;;;;;;;;:16;:39::i;:::-;32500:185;;;:::o;53267:90::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53341:8:::1;53330;:19;;;;53267:90:::0;:::o;43791:233::-;43866:7;43902:30;:28;:30::i;:::-;43894:5;:38;43886:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43999:10;44010:5;43999:17;;;;;;;;:::i;:::-;;;;;;;;;;43992:24;;43791:233;;;:::o;53031:104::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53116:11:::1;53106:7;:21;;;;;;;;;;;;:::i;:::-;;53031:104:::0;:::o;29475:239::-;29547:7;29567:13;29583:7;:16;29591:7;29583:16;;;;;;;;;;;;;;;;;;;;;29567:32;;29635:1;29618:19;;:5;:19;;;29610:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29701:5;29694:12;;;29475:239;;;:::o;49663:42::-;;;;:::o;49617:39::-;;;;:::o;49369:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50011:77::-;;;;;;;;;;;;;:::o;29205:208::-;29277:7;29322:1;29305:19;;:5;:19;;;29297:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29389:9;:16;29399:5;29389:16;;;;;;;;;;;;;;;;29382:23;;29205:208;;;:::o;8377:103::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8442:30:::1;8469:1;8442:18;:30::i;:::-;8377:103::o:0;53365:115::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53457:15:::1;53443:11;:29;;;;53365:115:::0;:::o;49929:75::-;;;;;;;;;;;;;:::o;7726:87::-;7772:7;7799:6;;;;;;;;;;;7792:13;;7726:87;:::o;49403:35::-;;;;:::o;29950:104::-;30006:13;30039:7;30032:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29950:104;:::o;50097:55::-;;;;;;;;;;;;;;;;;:::o;50972:848::-;51072:9;;51057:11;51041:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;51033:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;51186:13;;51171:11;51136:20;:32;51157:10;51136:32;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;:63;;51128:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;51290:11;;51271:15;:30;;51263:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51367:11;51358:6;:4;:6::i;:::-;:20;;;;:::i;:::-;51345:9;:33;;51337:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51449:11;;51430:15;:30;;:66;;;;;51482:14;;51464:15;:32;51430:66;51426:180;;;51521:34;51544:10;51521:22;:34::i;:::-;51513:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;51426:180;51622:9;51634:1;51622:13;;51618:195;51642:11;51637:1;:16;51618:195;;51745:1;51710:20;:32;51731:10;51710:32;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;51675:20;:32;51696:10;51675:32;;;;;;;;;;;;;;;:71;;;;51761:40;51771:10;51799:1;51783:13;:11;:13::i;:::-;:17;;;;:::i;:::-;51761:9;:40::i;:::-;51655:3;;;;;:::i;:::-;;;;51618:195;;;;50972:848;:::o;31633:155::-;31728:52;31747:12;:10;:12::i;:::-;31761:8;31771;31728:18;:52::i;:::-;31633:155;;:::o;49445:35::-;;;;:::o;32756:328::-;32931:41;32950:12;:10;:12::i;:::-;32964:7;32931:18;:41::i;:::-;32923:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33037:39;33051:4;33057:2;33061:7;33070:5;33037:13;:39::i;:::-;32756:328;;;;:::o;50755:209::-;50828:13;50862:17;50870:8;50862:7;:17::i;:::-;50854:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50949:7;50942:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50755:209;;;:::o;49487:31::-;;;;:::o;31859:164::-;31956:4;31980:18;:25;31999:5;31980:25;;;;;;;;;;;;;;;:35;32006:8;31980:35;;;;;;;;;;;;;;;;;;;;;;;;;31973:42;;31859:164;;;;:::o;8635:201::-;7957:12;:10;:12::i;:::-;7946:23;;:7;:5;:7::i;:::-;:23;;;7938:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8744:1:::1;8724:22;;:8;:22;;::::0;8716:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8800:28;8819:8;8800:18;:28::i;:::-;8635:201:::0;:::o;49712:53::-;;;;:::o;28836:305::-;28938:4;28990:25;28975:40;;;:11;:40;;;;:105;;;;29047:33;29032:48;;;:11;:48;;;;28975:105;:158;;;;29097:36;29121:11;29097:23;:36::i;:::-;28975:158;28955:178;;28836:305;;;:::o;34594:127::-;34659:4;34711:1;34683:30;;:7;:16;34691:7;34683:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34676:37;;34594:127;;;:::o;6450:98::-;6503:7;6530:10;6523:17;;6450:98;:::o;38740:174::-;38842:2;38815:15;:24;38831:7;38815:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38898:7;38894:2;38860:46;;38869:23;38884:7;38869:14;:23::i;:::-;38860:46;;;;;;;;;;;;38740:174;;:::o;35578:110::-;35654:26;35664:2;35668:7;35654:26;;;;;;;;;;;;:9;:26::i;:::-;35578:110;;:::o;34888:348::-;34981:4;35006:16;35014:7;35006;:16::i;:::-;34998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35082:13;35098:23;35113:7;35098:14;:23::i;:::-;35082:39;;35151:5;35140:16;;:7;:16;;;:51;;;;35184:7;35160:31;;:20;35172:7;35160:11;:20::i;:::-;:31;;;35140:51;:87;;;;35195:32;35212:5;35219:7;35195:16;:32::i;:::-;35140:87;35132:96;;;34888:348;;;;:::o;37997:625::-;38156:4;38129:31;;:23;38144:7;38129:14;:23::i;:::-;:31;;;38121:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38235:1;38221:16;;:2;:16;;;38213:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38291:39;38312:4;38318:2;38322:7;38291:20;:39::i;:::-;38395:29;38412:1;38416:7;38395:8;:29::i;:::-;38456:1;38437:9;:15;38447:4;38437:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38485:1;38468:9;:13;38478:2;38468:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38516:2;38497:7;:16;38505:7;38497:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38555:7;38551:2;38536:27;;38545:4;38536:27;;;;;;;;;;;;38576:38;38596:4;38602:2;38606:7;38576:19;:38::i;:::-;37997:625;;;:::o;8996:191::-;9070:16;9089:6;;;;;;;;;;;9070:25;;9115:8;9106:6;;:17;;;;;;;;;;;;;;;;;;9170:8;9139:40;;9160:8;9139:40;;;;;;;;;;;;9059:128;8996:191;:::o;39056:315::-;39211:8;39202:17;;:5;:17;;;39194:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39298:8;39260:18;:25;39279:5;39260:25;;;;;;;;;;;;;;;:35;39286:8;39260:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39344:8;39322:41;;39337:5;39322:41;;;39354:8;39322:41;;;;;;:::i;:::-;;;;;;;;39056:315;;;:::o;33966:::-;34123:28;34133:4;34139:2;34143:7;34123:9;:28::i;:::-;34170:48;34193:4;34199:2;34203:7;34212:5;34170:22;:48::i;:::-;34162:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33966:315;;;;:::o;20510:157::-;20595:4;20634:25;20619:40;;;:11;:40;;;;20612:47;;20510:157;;;:::o;35915:321::-;36045:18;36051:2;36055:7;36045:5;:18::i;:::-;36096:54;36127:1;36131:2;36135:7;36144:5;36096:22;:54::i;:::-;36074:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35915:321;;;:::o;44637:589::-;44781:45;44808:4;44814:2;44818:7;44781:26;:45::i;:::-;44859:1;44843:18;;:4;:18;;;44839:187;;44878:40;44910:7;44878:31;:40::i;:::-;44839:187;;;44948:2;44940:10;;:4;:10;;;44936:90;;44967:47;45000:4;45006:7;44967:32;:47::i;:::-;44936:90;44839:187;45054:1;45040:16;;:2;:16;;;45036:183;;45073:45;45110:7;45073:36;:45::i;:::-;45036:183;;;45146:4;45140:10;;:2;:10;;;45136:83;;45167:40;45195:2;45199:7;45167:27;:40::i;:::-;45136:83;45036:183;44637:589;;;:::o;41818:125::-;;;;:::o;39936:799::-;40091:4;40112:15;:2;:13;;;:15::i;:::-;40108:620;;;40164:2;40148:36;;;40185:12;:10;:12::i;:::-;40199:4;40205:7;40214:5;40148:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40144:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40407:1;40390:6;:13;:18;40386:272;;40433:60;;;;;;;;;;:::i;:::-;;;;;;;;40386:272;40608:6;40602:13;40593:6;40589:2;40585:15;40578:38;40144:529;40281:41;;;40271:51;;;:6;:51;;;;40264:58;;;;;40108:620;40712:4;40705:11;;39936:799;;;;;;;:::o;36572:439::-;36666:1;36652:16;;:2;:16;;;36644:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36725:16;36733:7;36725;:16::i;:::-;36724:17;36716:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36787:45;36816:1;36820:2;36824:7;36787:20;:45::i;:::-;36862:1;36845:9;:13;36855:2;36845:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36893:2;36874:7;:16;36882:7;36874:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36938:7;36934:2;36913:33;;36930:1;36913:33;;;;;;;;;;;;36959:44;36987:1;36991:2;36995:7;36959:19;:44::i;:::-;36572:439;;:::o;41307:126::-;;;;:::o;45949:164::-;46053:10;:17;;;;46026:15;:24;46042:7;46026:24;;;;;;;;;;;:44;;;;46081:10;46097:7;46081:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45949:164;:::o;46740:988::-;47006:22;47056:1;47031:22;47048:4;47031:16;:22::i;:::-;:26;;;;:::i;:::-;47006:51;;47068:18;47089:17;:26;47107:7;47089:26;;;;;;;;;;;;47068:47;;47236:14;47222:10;:28;47218:328;;47267:19;47289:12;:18;47302:4;47289:18;;;;;;;;;;;;;;;:34;47308:14;47289:34;;;;;;;;;;;;47267:56;;47373:11;47340:12;:18;47353:4;47340:18;;;;;;;;;;;;;;;:30;47359:10;47340:30;;;;;;;;;;;:44;;;;47490:10;47457:17;:30;47475:11;47457:30;;;;;;;;;;;:43;;;;47252:294;47218:328;47642:17;:26;47660:7;47642:26;;;;;;;;;;;47635:33;;;47686:12;:18;47699:4;47686:18;;;;;;;;;;;;;;;:34;47705:14;47686:34;;;;;;;;;;;47679:41;;;46821:907;;46740:988;;:::o;48023:1079::-;48276:22;48321:1;48301:10;:17;;;;:21;;;;:::i;:::-;48276:46;;48333:18;48354:15;:24;48370:7;48354:24;;;;;;;;;;;;48333:45;;48705:19;48727:10;48738:14;48727:26;;;;;;;;:::i;:::-;;;;;;;;;;48705:48;;48791:11;48766:10;48777;48766:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48902:10;48871:15;:28;48887:11;48871:28;;;;;;;;;;;:41;;;;49043:15;:24;49059:7;49043:24;;;;;;;;;;;49036:31;;;49078:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48094:1008;;;48023:1079;:::o;45527:221::-;45612:14;45629:20;45646:2;45629:16;:20::i;:::-;45612:37;;45687:7;45660:12;:16;45673:2;45660:16;;;;;;;;;;;;;;;:24;45677:6;45660:24;;;;;;;;;;;:34;;;;45734:6;45705:17;:26;45723:7;45705:26;;;;;;;;;;;:35;;;;45601:147;45527:221;;:::o;10427:326::-;10487:4;10744:1;10722:7;:19;;;:23;10715:30;;10427:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:149::-;1639:7;1679:66;1672:5;1668:78;1657:89;;1603:149;;;:::o;1758:120::-;1830:23;1847:5;1830:23;:::i;:::-;1823:5;1820:34;1810:62;;1868:1;1865;1858:12;1810:62;1758:120;:::o;1884:137::-;1929:5;1967:6;1954:20;1945:29;;1983:32;2009:5;1983:32;:::i;:::-;1884:137;;;;:::o;2027:327::-;2085:6;2134:2;2122:9;2113:7;2109:23;2105:32;2102:119;;;2140:79;;:::i;:::-;2102:119;2260:1;2285:52;2329:7;2320:6;2309:9;2305:22;2285:52;:::i;:::-;2275:62;;2231:116;2027:327;;;;:::o;2360:99::-;2412:6;2446:5;2440:12;2430:22;;2360:99;;;:::o;2465:169::-;2549:11;2583:6;2578:3;2571:19;2623:4;2618:3;2614:14;2599:29;;2465:169;;;;:::o;2640:307::-;2708:1;2718:113;2732:6;2729:1;2726:13;2718:113;;;2817:1;2812:3;2808:11;2802:18;2798:1;2793:3;2789:11;2782:39;2754:2;2751:1;2747:10;2742:15;;2718:113;;;2849:6;2846:1;2843:13;2840:101;;;2929:1;2920:6;2915:3;2911:16;2904:27;2840:101;2689:258;2640:307;;;:::o;2953:102::-;2994:6;3045:2;3041:7;3036:2;3029:5;3025:14;3021:28;3011:38;;2953:102;;;:::o;3061:364::-;3149:3;3177:39;3210:5;3177:39;:::i;:::-;3232:71;3296:6;3291:3;3232:71;:::i;:::-;3225:78;;3312:52;3357:6;3352:3;3345:4;3338:5;3334:16;3312:52;:::i;:::-;3389:29;3411:6;3389:29;:::i;:::-;3384:3;3380:39;3373:46;;3153:272;3061:364;;;;:::o;3431:313::-;3544:4;3582:2;3571:9;3567:18;3559:26;;3631:9;3625:4;3621:20;3617:1;3606:9;3602:17;3595:47;3659:78;3732:4;3723:6;3659:78;:::i;:::-;3651:86;;3431:313;;;;:::o;3750:77::-;3787:7;3816:5;3805:16;;3750:77;;;:::o;3833:122::-;3906:24;3924:5;3906:24;:::i;:::-;3899:5;3896:35;3886:63;;3945:1;3942;3935:12;3886:63;3833:122;:::o;3961:139::-;4007:5;4045:6;4032:20;4023:29;;4061:33;4088:5;4061:33;:::i;:::-;3961:139;;;;:::o;4106:329::-;4165:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:119;;;4220:79;;:::i;:::-;4182:119;4340:1;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;:::i;:::-;4355:63;;4311:117;4106:329;;;;:::o;4441:118::-;4528:24;4546:5;4528:24;:::i;:::-;4523:3;4516:37;4441:118;;:::o;4565:222::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:71;4777:1;4766:9;4762:17;4753:6;4709:71;:::i;:::-;4565:222;;;;:::o;4793:474::-;4861:6;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4793:474;;;;;:::o;5273:118::-;5360:24;5378:5;5360:24;:::i;:::-;5355:3;5348:37;5273:118;;:::o;5397:222::-;5490:4;5528:2;5517:9;5513:18;5505:26;;5541:71;5609:1;5598:9;5594:17;5585:6;5541:71;:::i;:::-;5397:222;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:86::-;12156:7;12196:4;12189:5;12185:16;12174:27;;12121:86;;;:::o;12213:118::-;12284:22;12300:5;12284:22;:::i;:::-;12277:5;12274:33;12264:61;;12321:1;12318;12311:12;12264:61;12213:118;:::o;12337:139::-;12392:5;12423:6;12417:13;12408:22;;12439:31;12464:5;12439:31;:::i;:::-;12337:139;;;;:::o;12482:347::-;12550:6;12599:2;12587:9;12578:7;12574:23;12570:32;12567:119;;;12605:79;;:::i;:::-;12567:119;12725:1;12750:62;12804:7;12795:6;12784:9;12780:22;12750:62;:::i;:::-;12740:72;;12696:126;12482:347;;;;:::o;12835:143::-;12892:5;12923:6;12917:13;12908:22;;12939:33;12966:5;12939:33;:::i;:::-;12835:143;;;;:::o;12984:351::-;13054:6;13103:2;13091:9;13082:7;13078:23;13074:32;13071:119;;;13109:79;;:::i;:::-;13071:119;13229:1;13254:64;13310:7;13301:6;13290:9;13286:22;13254:64;:::i;:::-;13244:74;;13200:128;12984:351;;;;:::o;13341:663::-;13429:6;13437;13445;13494:2;13482:9;13473:7;13469:23;13465:32;13462:119;;;13500:79;;:::i;:::-;13462:119;13620:1;13645:64;13701:7;13692:6;13681:9;13677:22;13645:64;:::i;:::-;13635:74;;13591:128;13758:2;13784:64;13840:7;13831:6;13820:9;13816:22;13784:64;:::i;:::-;13774:74;;13729:129;13897:2;13923:64;13979:7;13970:6;13959:9;13955:22;13923:64;:::i;:::-;13913:74;;13868:129;13341:663;;;;;:::o;14010:180::-;14058:77;14055:1;14048:88;14155:4;14152:1;14145:15;14179:4;14176:1;14169:15;14196:102;14238:8;14285:5;14282:1;14278:13;14257:34;;14196:102;;;:::o;14304:848::-;14365:5;14372:4;14396:6;14387:15;;14420:5;14411:14;;14434:712;14455:1;14445:8;14442:15;14434:712;;;14550:4;14545:3;14541:14;14535:4;14532:24;14529:50;;;14559:18;;:::i;:::-;14529:50;14609:1;14599:8;14595:16;14592:451;;;15024:4;15017:5;15013:16;15004:25;;14592:451;15074:4;15068;15064:15;15056:23;;15104:32;15127:8;15104:32;:::i;:::-;15092:44;;14434:712;;;14304:848;;;;;;;:::o;15158:1073::-;15212:5;15403:8;15393:40;;15424:1;15415:10;;15426:5;;15393:40;15452:4;15442:36;;15469:1;15460:10;;15471:5;;15442:36;15538:4;15586:1;15581:27;;;;15622:1;15617:191;;;;15531:277;;15581:27;15599:1;15590:10;;15601:5;;;15617:191;15662:3;15652:8;15649:17;15646:43;;;15669:18;;:::i;:::-;15646:43;15718:8;15715:1;15711:16;15702:25;;15753:3;15746:5;15743:14;15740:40;;;15760:18;;:::i;:::-;15740:40;15793:5;;;15531:277;;15917:2;15907:8;15904:16;15898:3;15892:4;15889:13;15885:36;15867:2;15857:8;15854:16;15849:2;15843:4;15840:12;15836:35;15820:111;15817:246;;;15973:8;15967:4;15963:19;15954:28;;16008:3;16001:5;15998:14;15995:40;;;16015:18;;:::i;:::-;15995:40;16048:5;;15817:246;16088:42;16126:3;16116:8;16110:4;16107:1;16088:42;:::i;:::-;16073:57;;;;16162:4;16157:3;16153:14;16146:5;16143:25;16140:51;;;16171:18;;:::i;:::-;16140:51;16220:4;16213:5;16209:16;16200:25;;15158:1073;;;;;;:::o;16237:285::-;16297:5;16321:23;16339:4;16321:23;:::i;:::-;16313:31;;16365:27;16383:8;16365:27;:::i;:::-;16353:39;;16411:104;16448:66;16438:8;16432:4;16411:104;:::i;:::-;16402:113;;16237:285;;;;:::o;16528:348::-;16568:7;16591:20;16609:1;16591:20;:::i;:::-;16586:25;;16625:20;16643:1;16625:20;:::i;:::-;16620:25;;16813:1;16745:66;16741:74;16738:1;16735:81;16730:1;16723:9;16716:17;16712:105;16709:131;;;16820:18;;:::i;:::-;16709:131;16868:1;16865;16861:9;16850:20;;16528:348;;;;:::o;16882:305::-;16922:3;16941:20;16959:1;16941:20;:::i;:::-;16936:25;;16975:20;16993:1;16975:20;:::i;:::-;16970:25;;17129:1;17061:66;17057:74;17054:1;17051:81;17048:107;;;17135:18;;:::i;:::-;17048:107;17179:1;17176;17172:9;17165:16;;16882:305;;;;:::o;17193:180::-;17241:77;17238:1;17231:88;17338:4;17335:1;17328:15;17362:4;17359:1;17352:15;17379:320;17423:6;17460:1;17454:4;17450:12;17440:22;;17507:1;17501:4;17497:12;17528:18;17518:81;;17584:4;17576:6;17572:17;17562:27;;17518:81;17646:2;17638:6;17635:14;17615:18;17612:38;17609:84;;17665:18;;:::i;:::-;17609:84;17430:269;17379:320;;;:::o;17705:231::-;17845:34;17841:1;17833:6;17829:14;17822:58;17914:14;17909:2;17901:6;17897:15;17890:39;17705:231;:::o;17942:366::-;18084:3;18105:67;18169:2;18164:3;18105:67;:::i;:::-;18098:74;;18181:93;18270:3;18181:93;:::i;:::-;18299:2;18294:3;18290:12;18283:19;;17942:366;;;:::o;18314:419::-;18480:4;18518:2;18507:9;18503:18;18495:26;;18567:9;18561:4;18557:20;18553:1;18542:9;18538:17;18531:47;18595:131;18721:4;18595:131;:::i;:::-;18587:139;;18314:419;;;:::o;18739:182::-;18879:34;18875:1;18867:6;18863:14;18856:58;18739:182;:::o;18927:366::-;19069:3;19090:67;19154:2;19149:3;19090:67;:::i;:::-;19083:74;;19166:93;19255:3;19166:93;:::i;:::-;19284:2;19279:3;19275:12;19268:19;;18927:366;;;:::o;19299:419::-;19465:4;19503:2;19492:9;19488:18;19480:26;;19552:9;19546:4;19542:20;19538:1;19527:9;19523:17;19516:47;19580:131;19706:4;19580:131;:::i;:::-;19572:139;;19299:419;;;:::o;19724:220::-;19864:34;19860:1;19852:6;19848:14;19841:58;19933:3;19928:2;19920:6;19916:15;19909:28;19724:220;:::o;19950:366::-;20092:3;20113:67;20177:2;20172:3;20113:67;:::i;:::-;20106:74;;20189:93;20278:3;20189:93;:::i;:::-;20307:2;20302:3;20298:12;20291:19;;19950:366;;;:::o;20322:419::-;20488:4;20526:2;20515:9;20511:18;20503:26;;20575:9;20569:4;20565:20;20561:1;20550:9;20546:17;20539:47;20603:131;20729:4;20603:131;:::i;:::-;20595:139;;20322:419;;;:::o;20747:243::-;20887:34;20883:1;20875:6;20871:14;20864:58;20956:26;20951:2;20943:6;20939:15;20932:51;20747:243;:::o;20996:366::-;21138:3;21159:67;21223:2;21218:3;21159:67;:::i;:::-;21152:74;;21235:93;21324:3;21235:93;:::i;:::-;21353:2;21348:3;21344:12;21337:19;;20996:366;;;:::o;21368:419::-;21534:4;21572:2;21561:9;21557:18;21549:26;;21621:9;21615:4;21611:20;21607:1;21596:9;21592:17;21585:47;21649:131;21775:4;21649:131;:::i;:::-;21641:139;;21368:419;;;:::o;21793:180::-;21933:32;21929:1;21921:6;21917:14;21910:56;21793:180;:::o;21979:366::-;22121:3;22142:67;22206:2;22201:3;22142:67;:::i;:::-;22135:74;;22218:93;22307:3;22218:93;:::i;:::-;22336:2;22331:3;22327:12;22320:19;;21979:366;;;:::o;22351:419::-;22517:4;22555:2;22544:9;22540:18;22532:26;;22604:9;22598:4;22594:20;22590:1;22579:9;22575:17;22568:47;22632:131;22758:4;22632:131;:::i;:::-;22624:139;;22351:419;;;:::o;22776:221::-;22916:34;22912:1;22904:6;22900:14;22893:58;22985:4;22980:2;22972:6;22968:15;22961:29;22776:221;:::o;23003:366::-;23145:3;23166:67;23230:2;23225:3;23166:67;:::i;:::-;23159:74;;23242:93;23331:3;23242:93;:::i;:::-;23360:2;23355:3;23351:12;23344:19;;23003:366;;;:::o;23375:419::-;23541:4;23579:2;23568:9;23564:18;23556:26;;23628:9;23622:4;23618:20;23614:1;23603:9;23599:17;23592:47;23656:131;23782:4;23656:131;:::i;:::-;23648:139;;23375:419;;;:::o;23800:191::-;23840:4;23860:20;23878:1;23860:20;:::i;:::-;23855:25;;23894:20;23912:1;23894:20;:::i;:::-;23889:25;;23933:1;23930;23927:8;23924:34;;;23938:18;;:::i;:::-;23924:34;23983:1;23980;23976:9;23968:17;;23800:191;;;;:::o;23997:233::-;24036:3;24059:24;24077:5;24059:24;:::i;:::-;24050:33;;24105:66;24098:5;24095:77;24092:103;;24175:18;;:::i;:::-;24092:103;24222:1;24215:5;24211:13;24204:20;;23997:233;;;:::o;24236:180::-;24284:77;24281:1;24274:88;24381:4;24378:1;24371:15;24405:4;24402:1;24395:15;24422:185;24462:1;24479:20;24497:1;24479:20;:::i;:::-;24474:25;;24513:20;24531:1;24513:20;:::i;:::-;24508:25;;24552:1;24542:35;;24557:18;;:::i;:::-;24542:35;24599:1;24596;24592:9;24587:14;;24422:185;;;;:::o;24613:236::-;24753:34;24749:1;24741:6;24737:14;24730:58;24822:19;24817:2;24809:6;24805:15;24798:44;24613:236;:::o;24855:366::-;24997:3;25018:67;25082:2;25077:3;25018:67;:::i;:::-;25011:74;;25094:93;25183:3;25094:93;:::i;:::-;25212:2;25207:3;25203:12;25196:19;;24855:366;;;:::o;25227:419::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:230::-;25792:34;25788:1;25780:6;25776:14;25769:58;25861:13;25856:2;25848:6;25844:15;25837:38;25652:230;:::o;25888:366::-;26030:3;26051:67;26115:2;26110:3;26051:67;:::i;:::-;26044:74;;26127:93;26216:3;26127:93;:::i;:::-;26245:2;26240:3;26236:12;26229:19;;25888:366;;;:::o;26260:419::-;26426:4;26464:2;26453:9;26449:18;26441:26;;26513:9;26507:4;26503:20;26499:1;26488:9;26484:17;26477:47;26541:131;26667:4;26541:131;:::i;:::-;26533:139;;26260:419;;;:::o;26685:147::-;26786:11;26823:3;26808:18;;26685:147;;;;:::o;26838:114::-;;:::o;26958:398::-;27117:3;27138:83;27219:1;27214:3;27138:83;:::i;:::-;27131:90;;27230:93;27319:3;27230:93;:::i;:::-;27348:1;27343:3;27339:11;27332:18;;26958:398;;;:::o;27362:379::-;27546:3;27568:147;27711:3;27568:147;:::i;:::-;27561:154;;27732:3;27725:10;;27362:379;;;:::o;27747:231::-;27887:34;27883:1;27875:6;27871:14;27864:58;27956:14;27951:2;27943:6;27939:15;27932:39;27747:231;:::o;27984:366::-;28126:3;28147:67;28211:2;28206:3;28147:67;:::i;:::-;28140:74;;28223:93;28312:3;28223:93;:::i;:::-;28341:2;28336:3;28332:12;28325:19;;27984:366;;;:::o;28356:419::-;28522:4;28560:2;28549:9;28545:18;28537:26;;28609:9;28603:4;28599:20;28595:1;28584:9;28580:17;28573:47;28637:131;28763:4;28637:131;:::i;:::-;28629:139;;28356:419;;;:::o;28781:180::-;28829:77;28826:1;28819:88;28926:4;28923:1;28916:15;28950:4;28947:1;28940:15;28967:228;29107:34;29103:1;29095:6;29091:14;29084:58;29176:11;29171:2;29163:6;29159:15;29152:36;28967:228;:::o;29201:366::-;29343:3;29364:67;29428:2;29423:3;29364:67;:::i;:::-;29357:74;;29440:93;29529:3;29440:93;:::i;:::-;29558:2;29553:3;29549:12;29542:19;;29201:366;;;:::o;29573:419::-;29739:4;29777:2;29766:9;29762:18;29754:26;;29826:9;29820:4;29816:20;29812:1;29801:9;29797:17;29790:47;29854:131;29980:4;29854:131;:::i;:::-;29846:139;;29573:419;;;:::o;29998:229::-;30138:34;30134:1;30126:6;30122:14;30115:58;30207:12;30202:2;30194:6;30190:15;30183:37;29998:229;:::o;30233:366::-;30375:3;30396:67;30460:2;30455:3;30396:67;:::i;:::-;30389:74;;30472:93;30561:3;30472:93;:::i;:::-;30590:2;30585:3;30581:12;30574:19;;30233:366;;;:::o;30605:419::-;30771:4;30809:2;30798:9;30794:18;30786:26;;30858:9;30852:4;30848:20;30844:1;30833:9;30829:17;30822:47;30886:131;31012:4;30886:131;:::i;:::-;30878:139;;30605:419;;;:::o;31030:181::-;31170:33;31166:1;31158:6;31154:14;31147:57;31030:181;:::o;31217:366::-;31359:3;31380:67;31444:2;31439:3;31380:67;:::i;:::-;31373:74;;31456:93;31545:3;31456:93;:::i;:::-;31574:2;31569:3;31565:12;31558:19;;31217:366;;;:::o;31589:419::-;31755:4;31793:2;31782:9;31778:18;31770:26;;31842:9;31836:4;31832:20;31828:1;31817:9;31813:17;31806:47;31870:131;31996:4;31870:131;:::i;:::-;31862:139;;31589:419;;;:::o;32014:235::-;32154:34;32150:1;32142:6;32138:14;32131:58;32223:18;32218:2;32210:6;32206:15;32199:43;32014:235;:::o;32255:366::-;32397:3;32418:67;32482:2;32477:3;32418:67;:::i;:::-;32411:74;;32494:93;32583:3;32494:93;:::i;:::-;32612:2;32607:3;32603:12;32596:19;;32255:366;;;:::o;32627:419::-;32793:4;32831:2;32820:9;32816:18;32808:26;;32880:9;32874:4;32870:20;32866:1;32855:9;32851:17;32844:47;32908:131;33034:4;32908:131;:::i;:::-;32900:139;;32627:419;;;:::o;33052:170::-;33192:22;33188:1;33180:6;33176:14;33169:46;33052:170;:::o;33228:366::-;33370:3;33391:67;33455:2;33450:3;33391:67;:::i;:::-;33384:74;;33467:93;33556:3;33467:93;:::i;:::-;33585:2;33580:3;33576:12;33569:19;;33228:366;;;:::o;33600:419::-;33766:4;33804:2;33793:9;33789:18;33781:26;;33853:9;33847:4;33843:20;33839:1;33828:9;33824:17;33817:47;33881:131;34007:4;33881:131;:::i;:::-;33873:139;;33600:419;;;:::o;34025:180::-;34165:32;34161:1;34153:6;34149:14;34142:56;34025:180;:::o;34211:366::-;34353:3;34374:67;34438:2;34433:3;34374:67;:::i;:::-;34367:74;;34450:93;34539:3;34450:93;:::i;:::-;34568:2;34563:3;34559:12;34552:19;;34211:366;;;:::o;34583:419::-;34749:4;34787:2;34776:9;34772:18;34764:26;;34836:9;34830:4;34826:20;34822:1;34811:9;34807:17;34800:47;34864:131;34990:4;34864:131;:::i;:::-;34856:139;;34583:419;;;:::o;35008:221::-;35148:34;35144:1;35136:6;35132:14;35125:58;35217:4;35212:2;35204:6;35200:15;35193:29;35008:221;:::o;35235:366::-;35377:3;35398:67;35462:2;35457:3;35398:67;:::i;:::-;35391:74;;35474:93;35563:3;35474:93;:::i;:::-;35592:2;35587:3;35583:12;35576:19;;35235:366;;;:::o;35607:419::-;35773:4;35811:2;35800:9;35796:18;35788:26;;35860:9;35854:4;35850:20;35846:1;35835:9;35831:17;35824:47;35888:131;36014:4;35888:131;:::i;:::-;35880:139;;35607:419;;;:::o;36032:234::-;36172:34;36168:1;36160:6;36156:14;36149:58;36241:17;36236:2;36228:6;36224:15;36217:42;36032:234;:::o;36272:366::-;36414:3;36435:67;36499:2;36494:3;36435:67;:::i;:::-;36428:74;;36511:93;36600:3;36511:93;:::i;:::-;36629:2;36624:3;36620:12;36613:19;;36272:366;;;:::o;36644:419::-;36810:4;36848:2;36837:9;36833:18;36825:26;;36897:9;36891:4;36887:20;36883:1;36872:9;36868:17;36861:47;36925:131;37051:4;36925:131;:::i;:::-;36917:139;;36644:419;;;:::o;37069:225::-;37209:34;37205:1;37197:6;37193:14;37186:58;37278:8;37273:2;37265:6;37261:15;37254:33;37069:225;:::o;37300:366::-;37442:3;37463:67;37527:2;37522:3;37463:67;:::i;:::-;37456:74;;37539:93;37628:3;37539:93;:::i;:::-;37657:2;37652:3;37648:12;37641:19;;37300:366;;;:::o;37672:419::-;37838:4;37876:2;37865:9;37861:18;37853:26;;37925:9;37919:4;37915:20;37911:1;37900:9;37896:17;37889:47;37953:131;38079:4;37953:131;:::i;:::-;37945:139;;37672:419;;;:::o;38097:231::-;38237:34;38233:1;38225:6;38221:14;38214:58;38306:14;38301:2;38293:6;38289:15;38282:39;38097:231;:::o;38334:366::-;38476:3;38497:67;38561:2;38556:3;38497:67;:::i;:::-;38490:74;;38573:93;38662:3;38573:93;:::i;:::-;38691:2;38686:3;38682:12;38675:19;;38334:366;;;:::o;38706:419::-;38872:4;38910:2;38899:9;38895:18;38887:26;;38959:9;38953:4;38949:20;38945:1;38934:9;38930:17;38923:47;38987:131;39113:4;38987:131;:::i;:::-;38979:139;;38706:419;;;:::o;39131:224::-;39271:34;39267:1;39259:6;39255:14;39248:58;39340:7;39335:2;39327:6;39323:15;39316:32;39131:224;:::o;39361:366::-;39503:3;39524:67;39588:2;39583:3;39524:67;:::i;:::-;39517:74;;39600:93;39689:3;39600:93;:::i;:::-;39718:2;39713:3;39709:12;39702:19;;39361:366;;;:::o;39733:419::-;39899:4;39937:2;39926:9;39922:18;39914:26;;39986:9;39980:4;39976:20;39972:1;39961:9;39957:17;39950:47;40014:131;40140:4;40014:131;:::i;:::-;40006:139;;39733:419;;;:::o;40158:223::-;40298:34;40294:1;40286:6;40282:14;40275:58;40367:6;40362:2;40354:6;40350:15;40343:31;40158:223;:::o;40387:366::-;40529:3;40550:67;40614:2;40609:3;40550:67;:::i;:::-;40543:74;;40626:93;40715:3;40626:93;:::i;:::-;40744:2;40739:3;40735:12;40728:19;;40387:366;;;:::o;40759:419::-;40925:4;40963:2;40952:9;40948:18;40940:26;;41012:9;41006:4;41002:20;40998:1;40987:9;40983:17;40976:47;41040:131;41166:4;41040:131;:::i;:::-;41032:139;;40759:419;;;:::o;41184:175::-;41324:27;41320:1;41312:6;41308:14;41301:51;41184:175;:::o;41365:366::-;41507:3;41528:67;41592:2;41587:3;41528:67;:::i;:::-;41521:74;;41604:93;41693:3;41604:93;:::i;:::-;41722:2;41717:3;41713:12;41706:19;;41365:366;;;:::o;41737:419::-;41903:4;41941:2;41930:9;41926:18;41918:26;;41990:9;41984:4;41980:20;41976:1;41965:9;41961:17;41954:47;42018:131;42144:4;42018:131;:::i;:::-;42010:139;;41737:419;;;:::o;42162:237::-;42302:34;42298:1;42290:6;42286:14;42279:58;42371:20;42366:2;42358:6;42354:15;42347:45;42162:237;:::o;42405:366::-;42547:3;42568:67;42632:2;42627:3;42568:67;:::i;:::-;42561:74;;42644:93;42733:3;42644:93;:::i;:::-;42762:2;42757:3;42753:12;42746:19;;42405:366;;;:::o;42777:419::-;42943:4;42981:2;42970:9;42966:18;42958:26;;43030:9;43024:4;43020:20;43016:1;43005:9;43001:17;42994:47;43058:131;43184:4;43058:131;:::i;:::-;43050:139;;42777:419;;;:::o;43202:98::-;43253:6;43287:5;43281:12;43271:22;;43202:98;;;:::o;43306:168::-;43389:11;43423:6;43418:3;43411:19;43463:4;43458:3;43454:14;43439:29;;43306:168;;;;:::o;43480:360::-;43566:3;43594:38;43626:5;43594:38;:::i;:::-;43648:70;43711:6;43706:3;43648:70;:::i;:::-;43641:77;;43727:52;43772:6;43767:3;43760:4;43753:5;43749:16;43727:52;:::i;:::-;43804:29;43826:6;43804:29;:::i;:::-;43799:3;43795:39;43788:46;;43570:270;43480:360;;;;:::o;43846:640::-;44041:4;44079:3;44068:9;44064:19;44056:27;;44093:71;44161:1;44150:9;44146:17;44137:6;44093:71;:::i;:::-;44174:72;44242:2;44231:9;44227:18;44218:6;44174:72;:::i;:::-;44256;44324:2;44313:9;44309:18;44300:6;44256:72;:::i;:::-;44375:9;44369:4;44365:20;44360:2;44349:9;44345:18;44338:48;44403:76;44474:4;44465:6;44403:76;:::i;:::-;44395:84;;43846:640;;;;;;;:::o;44492:141::-;44548:5;44579:6;44573:13;44564:22;;44595:32;44621:5;44595:32;:::i;:::-;44492:141;;;;:::o;44639:349::-;44708:6;44757:2;44745:9;44736:7;44732:23;44728:32;44725:119;;;44763:79;;:::i;:::-;44725:119;44883:1;44908:63;44963:7;44954:6;44943:9;44939:22;44908:63;:::i;:::-;44898:73;;44854:127;44639:349;;;;:::o;44994:182::-;45134:34;45130:1;45122:6;45118:14;45111:58;44994:182;:::o;45182:366::-;45324:3;45345:67;45409:2;45404:3;45345:67;:::i;:::-;45338:74;;45421:93;45510:3;45421:93;:::i;:::-;45539:2;45534:3;45530:12;45523:19;;45182:366;;;:::o;45554:419::-;45720:4;45758:2;45747:9;45743:18;45735:26;;45807:9;45801:4;45797:20;45793:1;45782:9;45778:17;45771:47;45835:131;45961:4;45835:131;:::i;:::-;45827:139;;45554:419;;;:::o;45979:178::-;46119:30;46115:1;46107:6;46103:14;46096:54;45979:178;:::o;46163:366::-;46305:3;46326:67;46390:2;46385:3;46326:67;:::i;:::-;46319:74;;46402:93;46491:3;46402:93;:::i;:::-;46520:2;46515:3;46511:12;46504:19;;46163:366;;;:::o;46535:419::-;46701:4;46739:2;46728:9;46724:18;46716:26;;46788:9;46782:4;46778:20;46774:1;46763:9;46759:17;46752:47;46816:131;46942:4;46816:131;:::i;:::-;46808:139;;46535:419;;;:::o;46960:180::-;47008:77;47005:1;46998:88;47105:4;47102:1;47095:15;47129:4;47126:1;47119:15
Swarm Source
ipfs://be99e6588b1018a412d559b3eda4d0c83cdb06f17b7e32e8e9014c69840f33ec